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
scipyno necesariamente importa todos los subpaquetes automáticamente. Es mejor importar el subpaquete de formascipy.statsexplícita.sp.stats.t._ppf. No me siento tan cómodo con eso sin más explicaciones. Es mejor usarlosp.stats.t.ppfdirectamente, 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.semmétodo de marco de datos de pandas incorporado para que no tenga que preocuparseapplyAquí 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_meanes 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 argumentoalphaparece 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 , dondesigmaes la desviación estándar estimada de la media de la muestra, dada porsigma = s / sqrt(n), dondeses la desviación estándar calculada a partir de los datos de la muestra ynes el tamaño de la muestra.fuente
scipy.stats.norm.interval(confidence, loc=mean, scale=sigma)sigma.sigmaen 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 elNormalDistobjeto como parte delstatisticsmódulo:Esta:
Crea un
NormalDistobjeto 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.meanyNormalDist.stdev.Calcule el
Z-scorebasado 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
zvalor.fuente