python numpy statistics

python - Calcule un intervalo de confianza a partir de los datos de muestra



numpy statistics (3)

Tengo datos de muestra para los que me gustaría calcular un intervalo de confianza, suponiendo una distribución normal.

He encontrado e instalado los paquetes numpy y scipy y me he vuelto numpy para devolver una media y una desviación estándar (numpy.mean (data) con los datos como una lista). Cualquier consejo sobre cómo obtener un intervalo de confianza de la muestra sería muy apreciado.


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 usando StatsModels '' tconfint_mean es posiblemente aún más agradable:

import statsmodels.stats.api as sms sms.DescrStatsW(a).tconfint_mean()

Las suposiciones subyacentes para ambos son que la muestra (matriz a ) se dibujó independientemente de una distribución normal con una desviación estándar desconocida (ver MathWorld o Wikipedia ).

Para un tamaño de muestra grande n, la media de la muestra se distribuye normalmente, y uno 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ño, donde st.norm.interval() da intervalos de confianza demasiado estrechos (es decir, "confianza falsa"). Vea mi answer a una pregunta similar para 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)


Comience buscando el z-value para su intervalo de confianza deseado desde una tabla de búsqueda . El intervalo de confianza es entonces la mean +/- z*sigma , donde sigma es la desviación estándar estimada de la media de la muestra, dada por sigma = s / sqrt(n) , donde s es la desviación estándar calculada a partir de los datos de muestra n es su tamaño de muestra


import numpy as np import scipy as sp import scipy.stats def mean_confidence_interval(data, confidence=0.95): a = 1.0*np.array(data) n = len(a) m, se = np.mean(a), scipy.stats.sem(a) h = se * sp.stats.t._ppf((1+confidence)/2., n-1) return m, m-h, m+h

puedes calcular así.