No sé cómo hacer una prueba de KS de dos muestras en Scipy.
Después de leer la documentación scipy kstest
Puedo ver cómo probar dónde 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 con un valor p de 0,76 no podemos rechazar la hipótesis nula 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énticas, algo 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 prueba si x y z son idénticos
Probé el ingenuo:
test_stat = kstest(x, z)
y obtuve el siguiente error:
TypeError: 'numpy.ndarray' object is not callable
¿Hay alguna forma de hacer una prueba de KS de dos muestras en Python? Si es así, ¿cómo debo hacerlo?
Gracias de antemano
python
numpy
scipy
statistics
distribution
Akavall
fuente
fuente
Respuestas:
Está utilizando la prueba KS de una muestra. Probablemente desee la prueba de dos muestras
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)
Los resultados se pueden interpretar de la siguiente manera:
Puede comparar el
statistic
valor dado por Python con la tabla de valores críticos de la prueba KS de acuerdo con el tamaño de su muestra. Cuando elstatistic
valor es mayor que el valor crítico, las dos distribuciones son diferentes.O puede comparar el
p-value
con un nivel de significancia a , generalmente a = 0.05 o 0.01 (usted decide, cuanto menor sea a, más significativo). Si el valor p es menor que a , entonces es muy probable que las dos distribuciones sean diferentes.fuente
statistic
yp-value
?Esto es lo que dicen los scipy docs:
No poder rechazar no significa que confirmemos.
fuente
For an identical distribution, we cannot reject the null hypothesis since the p-value is high, 41%: >>> >>> rvs4 = stats.norm.rvs(size=n2, loc=0.0, scale=1.0) >>> stats.ks_2samp(rvs1, rvs4) (0.07999999999999996, 0.41126949729859719)