web-dev-qa-db-fra.com

Test Kolmogorov-Smirnov sur deux échantillons chez Python Scipy

Je n'arrive pas à comprendre comment faire un test sur deux échantillons KS dans Scipy.

Après avoir lu la documentation scipy kstest

Je peux voir comment tester où une distribution est identique à la distribution normale standard

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)

Ce qui signifie qu'à une valeur de 0,76, nous ne pouvons pas rejeter l'hypothèse nulle selon laquelle les deux distributions sont identiques.

Cependant, je veux comparer deux distributions et voir si je peux rejeter l'hypothèse nulle qu'elles sont identiques, quelque chose comme:

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)

et tester si x et z sont identiques

J'ai essayé le naïf:

test_stat = kstest(x, z)

et a obtenu l'erreur suivante:

TypeError: 'numpy.ndarray' object is not callable

Existe-t-il un moyen de faire un test à deux échantillons KS en Python? Si oui, comment devrais-je le faire?

Merci d'avance

53
Akavall

Vous utilisez le test à un échantillon KS. Vous voulez probablement 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)
80
DSM

Voici ce que disent les scipy docs: 

Si la statistique K-S est petite ou la valeur p élevée, nous ne pouvons pas rejeter l'hypothèse selon laquelle les distributions des deux échantillons sont identiques.

Ne pas rejeter ne signifie pas que nous confirmons.

0
jun 小嘴兔