Tengo datos de muestra para los que me gustaría calcular un intervalo de confianza, asumiendo una distribución normal.
Encontré e instalé los paquetes numpy y scipy y obtuve numpy para devolver una desviación media y estándar (numpy.mean (datos) con datos como una lista). Cualquier consejo sobre cómo obtener un intervalo de confianza de muestra sería muy apreciado.
python
numpy
statistics
confidence-interval
Bmayer0122
fuente
fuente
Respuestas:
se puede calcular así.
fuente
scipy
no necesariamente importa todos los subpaquetes automáticamente. Es mejor importar el subpaquete de formascipy.stats
explícita.sp.stats.t._ppf
. No me siento tan cómodo con eso sin más explicaciones. Es mejor usarlosp.stats.t.ppf
directamente, a menos que esté seguro de saber lo que está haciendo. En una inspección rápida de la fuente, hay una buena cantidad de código omitido_ppf
. ¿Posiblemente benigno, pero también posiblemente un intento de optimización inseguro?*ss.t._ppf((1+conf)/2.,n-1)
al.sem
método de marco de datos de pandas incorporado para que no tenga que preocuparseapply
Aquí una versión abreviada del código de shasan, calculando el intervalo de confianza del 95% de la media de la matriz
a
:Pero usar StatsModels '
tconfint_mean
es posiblemente incluso mejor: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, dondest.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:
Y finalmente, el resultado incorrecto usando
st.norm.interval()
:fuente
st.t.interval(0.05)
para obtener el intervalo de confianza del 95%.st.t.interval(0.95)
es correcto para el intervalo de confianza del 95%, ver los documentos parascipy.stats.t
. Sin embargo, el nombre de SciPy al argumentoalpha
parece menos que ideal.Comience buscando el valor z para su intervalo de confianza deseado en una tabla de búsqueda . Entonces
mean +/- z*sigma
, el intervalo de confianza es , dondesigma
es la desviación estándar estimada de la media de la muestra, dada porsigma = s / sqrt(n)
, dondes
es la desviación estándar calculada a partir de los datos de la muestra yn
es el tamaño de la muestra.fuente
scipy.stats.norm.interval(confidence, loc=mean, scale=sigma)
sigma
.sigma
en mi respuesta debería ser la desviación estándar estimada de la media muestral, no la desviación estándar estimada de la distribución. Actualicé la respuesta para aclarar eso. Gracias por señalar eso.Comenzando
Python 3.8
, la biblioteca estándar proporciona elNormalDist
objeto como parte delstatistics
módulo:Esta:
Crea un
NormalDist
objeto a partir de la muestra de datos (NormalDist.from_samples(data)
, que nos da acceso a la desviación estándar y media de la muestra medianteNormalDist.mean
yNormalDist.stdev
.Calcule el
Z-score
basado en la distribución normal estándar (representada porNormalDist()
) para la confianza dada usando el inverso de la función de distribución acumulativa (inv_cdf
).Produce el intervalo de confianza basado en la desviación estándar y la media de la muestra.
Esto supone que el tamaño de la muestra es lo suficientemente grande (digamos más de ~ 100 puntos) para usar la distribución normal estándar en lugar de la distribución t de estudiante para calcular el
z
valor.fuente