Aquí una versión abreviada del código de shasan, calculando el intervalo de confianza del 95% de la media de la 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))
Pero usar StatsModels ' tconfint_mean
es posiblemente incluso mejor:
import statsmodels.stats.api as sms
sms.DescrStatsW(a).tconfint_mean()
Las suposiciones subyacentes para ambos son que la muestra (matriz a
) se extrajo independientemente de una distribución normal con una desviación estándar desconocida (consulte MathWorld o Wikipedia ).
Para un tamaño de muestra grande n, la media de la muestra se distribuye normalmente y se puede calcular su intervalo de confianza usando st.norm.interval()
(como se sugiere en el comentario de Jaime). Pero las soluciones anteriores son correctas también para n pequeña, donde st.norm.interval()
da intervalos de confianza que son demasiado estrechos (es decir, "confianza falsa"). Mira mi respuesta a una pregunta similar para obtener más detalles (y uno de los comentarios de Russ aquí).
Aquí un ejemplo donde las opciones correctas dan (esencialmente) intervalos de confianza 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)
Y finalmente, el resultado incorrecto 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)