Test Kolmogorov-Smirnov à deux échantillons en Python Scipy

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

Après avoir lu la documentation scipy kstest

Je peux voir comment tester lorsqu'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'à la valeur p 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 vérifier 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 KS à deux échantillons en Python? Si oui, comment dois je faire?

Merci d'avance

48
demandé sur bmu 2012-06-04 20:25:37

2 réponses

Vous utilisez le test KS à échantillon unique. 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)
75
répondu DSM 2017-02-24 04:33:37

Voici ce que disent les docs scipy:

Si la statistique K-S est petite ou si la valeur p est élevée, alors nous ne pouvons pas rejeter l'hypothèse que les distributions des deux échantillons sont les mêmes.

Ne peut pas rejeter ne signifie pas que nous confirmons.

0
répondu jun 小嘴兔 2017-05-02 09:24:35