2012-06-04 77 views
38

No puedo averiguar cómo hacer una prueba de KS de dos muestras en Scipy.Prueba de Kolmogorov-Smirnov de dos muestras en Python Scipy

Después de leer la documentación scipy kstest

puedo ver cómo probar que una distribución es idéntica a la distribución normal estándar

from scipy.stats import kstest 
import numpy as np 

x = np.random.normal(0,1,1000) 
test_stat = kstest(x, 'norm') 
#>>> test_stat 
#(0.021080234718821145, 0.76584491300591395) 

lo que significa que en el valor de p de 0,76 no se puede rechazar la hipótesis nula hipótesis de que las dos distribuciones son idénticas.

Sin embargo, quiero comparar dos distribuciones y ver si puedo rechazar la hipótesis nula de que son idénticos, algo así como:

from scipy.stats import kstest 
import numpy as np 

x = np.random.normal(0,1,1000) 
z = np.random.normal(1.1,0.9, 1000) 

y probar si X y Z son idénticos

Probé los ingenuos:

test_stat = kstest(x, z) 

y obtuvo el siguiente error:

TypeError: 'numpy.ndarray' object is not callable 

¿Hay alguna manera de hacer una prueba KS de dos muestras en Python? Si es así, ¿cómo debería hacerlo?

gracias de antemano

+0

¿Podría publicar la línea y el rastreo? – cval

Respuesta

61

Estás usando la prueba de KS de una sola muestra. Es posible que desee ks_2samp:

>>> from scipy.stats import ks_2samp 
>>> import numpy as np 
>>> 
>>> np.random.seed(12345678) 
>>> x = np.random.normal(0, 1, 1000) 
>>> y = np.random.normal(0, 1, 1000) 
>>> z = np.random.normal(1.1, 0.9, 1000) 
>>> 
>>> ks_2samp(x, y) 
Ks_2sampResult(statistic=0.022999999999999909, pvalue=0.95189016804849647) 
>>> ks_2samp(x, z) 
Ks_2sampResult(statistic=0.41800000000000004, pvalue=3.7081494119242173e-77) 
+1

Eso es exactamente lo que estaba buscando. ¡Muchas gracias! – Akavall

+1

¿Cómo interpretas estos resultados? ¿Puedes decir que las muestras provienen de la misma distribución con solo mirar 'statistic' y' p-value'? – FaCoffee

+1

@FaCoffee Esto es lo que dicen los scipy: "_Si la estadística KS es pequeña o el valor p es alto, entonces no podemos rechazar la hipótesis de que las distribuciones de las dos muestras son las mismas._" – user2738815

0

Esto es lo que dicen los documentos SciPy:

If the K-S statistic is small or the p-value is high, then we cannot reject the hypothesis that the distributions of the two samples are the same.

no puede rechazar, no significa que confirmamos.

+0

podría explicar su responder con más detalle? ¡gracias por adelantado! –

+0

@KingReload Significa que cuando el valor * p * es muy pequeño, eso indica que la probabilidad de que estas dos muestras * No * procedentes de la misma distribución sea muy baja. En otras palabras, la probabilidad de que estas dos muestras provengan de la misma distribución es muy alta. Pero no puede estar 100% seguro de eso, por lo tanto, los valores * p * nunca son cero. (A veces se muestran como 0, pero en realidad, nunca es cero). Es por eso que se dice que * No hemos podido rechazar la hipótesis nula * en lugar de * Estamos aceptando la hipótesis nula *. Aceptando la hipótesis nula = * las distribuciones de las dos muestras son las mismas * –

+0

p-value alto muy probablemente provengan de la misma distribución, el valor p es poco probable que no lo sean. @MDAbidHasan lo tiene al revés. De hecho, el ejemplo en la documentación dan un ejemplo: '' 'Para una distribución idéntica, no podemos rechazar la hipótesis nula ya que el valor p es alto, 41%: >>> >>> rvs4 = stats.norm.rvs (size = n2, loc = 0.0, scale = 1.0) >>> stats.ks_2samp (rvs1, rvs4) (0.07999999999999996, 0.41126949729859719) '' ' – superhero

Cuestiones relacionadas