Tenho dados de amostra para os quais gostaria de calcular um intervalo de confiança, assumindo uma distribuição normal.
Eu encontrei e instalei os pacotes numpy e scipy e consegui que o numpy retornasse uma média e um desvio padrão (numpy.mean (dados) com os dados sendo uma lista). Qualquer conselho sobre como obter um intervalo de confiança de amostra seria muito apreciado.
python
numpy
statistics
confidence-interval
Bmayer0122
fonte
fonte
Respostas:
você pode calcular assim.
fonte
scipy
não importa necessariamente todos os subpacotes automaticamente. Melhor importar o subpacotescipy.stats
explicitamente.sp.stats.t._ppf
. Não estou confortável com isso sem maiores explicações. Melhor usarsp.stats.t.ppf
diretamente, a menos que você tenha certeza de que sabe o que está fazendo. Em uma rápida inspeção da fonte , uma boa quantidade de código foi ignorada_ppf
. Possivelmente benigno, mas também possivelmente uma tentativa de otimização insegura?*ss.t._ppf((1+conf)/2.,n-1)
o.sem
método de dataframe integrado do pandas para que você não precise se preocuparapply
Aqui está uma versão abreviada do código de shasan, calculando o intervalo de confiança de 95% da média da matriz
a
:Mas usar StatsModels
tconfint_mean
é indiscutivelmente ainda melhor:As suposições subjacentes para ambos são que a amostra (matriz
a
) foi desenhada independentemente de uma distribuição normal com desvio padrão desconhecido (consulte MathWorld ou Wikipedia ).Para tamanho de amostra grande n, a média da amostra é normalmente distribuída, e pode-se calcular seu intervalo de confiança usando
st.norm.interval()
(como sugerido no comentário de Jaime). Mas as soluções acima também estão corretas para n pequeno, ondest.norm.interval()
fornece intervalos de confiança muito estreitos (ou seja, "confiança falsa"). Veja minha resposta a uma pergunta semelhante para obter mais detalhes (e um dos comentários de Russ aqui).Aqui está um exemplo em que as opções corretas fornecem (essencialmente) intervalos de confiança idênticos:
E, finalmente, o resultado incorreto usando
st.norm.interval()
:fonte
st.t.interval(0.05)
para obter o intervalo de confiança de 95%.st.t.interval(0.95)
está correto para o intervalo de confiança de 95%, consulte a documentação parascipy.stats.t
. Porém, SciPy nomear o argumentoalpha
parece menos do que ideal.Comece procurando o valor z para o intervalo de confiança desejado em uma tabela de consulta . O intervalo de confiança é então
mean +/- z*sigma
, ondesigma
é o desvio padrão estimado da média da amostra, dado porsigma = s / sqrt(n)
, ondes
é o desvio padrão calculado a partir dos dados da amostra en
é o tamanho da amostra.fonte
scipy.stats.norm.interval(confidence, loc=mean, scale=sigma)
sigma
.sigma
em minha resposta deve estar o desvio padrão estimado da média da amostra, não o desvio padrão estimado da distribuição. Eu atualizei a resposta para esclarecer isso. Obrigado por apontar isso.Começando
Python 3.8
, a biblioteca padrão fornece oNormalDist
objeto como parte dostatistics
módulo:Este:
Cria um
NormalDist
objeto a partir da amostra de dados (NormalDist.from_samples(data)
, que nos dá acesso à média e ao desvio padrão da amostra por meio deNormalDist.mean
eNormalDist.stdev
.Calcule com
Z-score
base na distribuição normal padrão (representada porNormalDist()
) para a confiança fornecida usando o inverso da função de distribuição cumulativa (inv_cdf
).Produz o intervalo de confiança com base no desvio padrão e na média da amostra.
Isso assume que o tamanho da amostra é grande o suficiente (digamos mais de ~ 100 pontos) para usar a distribuição normal padrão em vez da distribuição t do aluno para calcular o
z
valor.fonte