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
:
import numpy as np, scipy.stats as st
st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))
Mas usar StatsModels tconfint_mean
é indiscutivelmente ainda melhor:
import statsmodels.stats.api as sms
sms.DescrStatsW(a).tconfint_mean()
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, onde st.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:
In [9]: a = range(10,14)
In [10]: mean_confidence_interval(a)
Out[10]: (11.5, 9.4457397432391215, 13.554260256760879)
In [11]: st.t.interval(0.95, len(a)-1, loc=np.mean(a), scale=st.sem(a))
Out[11]: (9.4457397432391215, 13.554260256760879)
In [12]: sms.DescrStatsW(a).tconfint_mean()
Out[12]: (9.4457397432391197, 13.55426025676088)
E, finalmente, o resultado incorreto usando st.norm.interval()
:
In [13]: st.norm.interval(0.95, loc=np.mean(a), scale=st.sem(a))
Out[13]: (10.23484868811834, 12.76515131188166)