graficas - Valor de p de la estadística de prueba Chi cuadrado en Python
graficas estadisticas python (6)
He calculado una estadística de prueba que se distribuye como un chi cuadrado con 1 grado de libertad, y quiero saber qué valor de P corresponde al uso de python.
Soy un novato de python and maths / stats, así que creo que lo que quiero aquí es la función de denegación de probabilidad para la distribución chi2 de SciPy. Sin embargo, cuando uso esto así:
from scipy import stats
stats.chi2.pdf(3.84 , 1)
0.029846
Sin embargo, algunos googlear y hablar con algunos colegas que saben matemáticas pero no python han dicho que debería ser 0.05.
¿Algunas ideas? Saludos, Davy
Actualización rápida aquí:
Función de densidad de probabilidad: piense en ello como un valor puntual; ¿Qué tan densa es la probabilidad en un punto dado?
Función de distribución acumulativa: esta es la masa de probabilidad de la función hasta un punto dado; ¿Qué porcentaje de la distribución se encuentra en un lado de este punto?
En su caso, tomó el PDF, para el cual obtuvo la respuesta correcta. Si lo intentas 1 - CDF:
>>> 1 - stats.chi2.cdf(3.84, 1)
0.050043521248705147
Algunas de las otras soluciones están en desuso. Utilice scipy.stats.chi2
Función de supervivencia. Que es lo mismo que 1 - cdf(chi_statistic, df)
Ejemplo:
from scipy.stats import chi2
p_value = chi2.sf(chi_statistic, df)
Mientras que stats.chisqprob () y 1-stats.chi2.cdf () parecen comparables para valores de chi-cuadrado pequeños, para valores de chi-square grandes es preferible el primero. Este último no puede proporcionar un valor de p más pequeño que el épsilon de la máquina, y dará respuestas muy inexactas cerca del épsilon de la máquina. Como lo muestran otros, los valores comparables resultan para valores de chi cuadrado pequeños con los dos métodos:
>>>from scipy.stats import chisqprob, chi2
>>>chisqprob(3.84,1)
0.050043521248705189
>>>1 - chi2.cdf(3.84,1)
0.050043521248705147
Usar 1-chi2.cdf () se descompone aquí:
>>>1 - chi2.cdf(67,1)
2.2204460492503131e-16
>>>1 - chi2.cdf(68,1)
1.1102230246251565e-16
>>>1 - chi2.cdf(69,1)
1.1102230246251565e-16
>>>1 - chi2.cdf(70,1)
0.0
Mientras que chisqprob () le proporciona resultados precisos para un rango mucho mayor de valores de chi-cuadrado, produciendo valores de p casi tan pequeños como el flotador más pequeño mayor que cero, hasta que también se desborda:
>>>chisqprob(67,1)
2.7150713219425247e-16
>>>chisqprob(68,1)
1.6349553217245471e-16
>>>chisqprob(69,1)
9.8463440314253303e-17
>>>chisqprob(70,1)
5.9304458500824782e-17
>>>chisqprob(500,1)
9.505397766554137e-111
>>>chisqprob(1000,1)
1.7958327848007363e-219
>>>chisqprob(1424,1)
1.2799986253099803e-311
>>>chisqprob(1425,1)
0.0
Actualización: como se indicó, chisqprob () está en desuso para la versión scipy 0.17.0 en adelante. Los valores de chi-cuadrado de alta precisión ahora se pueden obtener a través de scipy.stats.distributions.chi2.sf (), por ejemplo:
>>>from scipy.stats.distributions import chi2
>>>chi2.sf(3.84,1)
0.050043521248705189
>>>chi2.sf(1424,1)
1.2799986253099803e-311
Para calcular la probabilidad de una hipótesis nula dada la suma de Cincquared y los grados de libertad, también puede llamar chisqprob
:
>>> from scipy.stats import chisqprob
>>> chisqprob(3.84, 1)
0.050043521248705189
Darse cuenta:
chisqprob está en desuso! stats.chisqprob está en desuso en scipy 0.17.0; use stats.distributions.chi2.sf en stats.distributions.chi2.sf lugar
Que querias hacer
>>> 1 - stats.chi2.cdf(3.84, 1)
0.050043521248705147
Si desea comprender las matemáticas, el valor p de una muestra, x (fijo), es
P [P (X) <= P (x)] = P [m (X)> = m (x)] = 1 - G (m (x) ^ 2)
dónde,
- P es la probabilidad de una distribución normal (por ejemplo k-variate) w / covarianza conocida (cov) y media,
- X es una variable aleatoria de esa distribución normal,
- m (x) es la distancia mahalanobis = sqrt (<cov ^ {- 1} (x-mean), x-mean>. Tenga en cuenta que en 1-d esto es solo el valor absoluto de la puntuación z.
- G es el CDF de la distribución chi ^ 2 con grados de libertad.
Entonces, si está calculando el valor p de una observación fija, x, entonces calcula m (x) (puntuación z generalizada) y 1-G (m (x) ^ 2).
por ejemplo, es bien sabido que si x se toma una muestra de una distribución normal univariada (k = 1) y tiene una puntuación z = 2 (es 2 desviaciones estándar de la media), entonces el valor p es aproximadamente .046 (vea una tabla de puntuación z)
In [7]: from scipy.stats import chi2
In [8]: k = 1
In [9]: z = 2
In [10]: 1-chi2.cdf(z**2, k)
Out[10]: 0.045500263896358528