varianza graficas exponencial estandar estadisticas estadistica distribucion desviacion cuartiles cuadrado con chi python statistics scipy chi-squared

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

PDF CDF


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