2012-06-04 11 views
38

Nie mogę wymyślić, jak wykonać test SB w dwóch próbach w Scipy.Dwu-próbny test Kołmogorowa-Smirnowa w Pythonie Scipy

Po zapoznaniu się z dokumentacją scipy kstest

widzę jak testować gdzie dystrybucja jest identyczny z rozkładu normalnego

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) 

Co oznacza, że ​​przy wartości p 0,76 nie możemy odrzucić NULL hipoteza, że ​​oba rozkłady są identyczne.

Jednakże chcę porównać dwie dystrybucje i zobaczyć, czy mogę odrzucić hipotezę zerową, że są one identyczne, coś takiego:

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) 

i sprawdzić czy X i Z są identyczne

Próbowałam naiwny:

test_stat = kstest(x, z) 

i mam następujący błąd:

TypeError: 'numpy.ndarray' object is not callable 

Czy istnieje sposób na wykonanie dwupróbkowego testu KS w języku Python? Jeśli tak, jak mam to zrobić?

Z góry dziękuję

+0

Czy możesz opublikować linię i informacje zwrotne? – cval

Odpowiedz

61

Używasz jednoczęściowego testu KS. Prawdopodobnie chcesz 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

Tego właśnie szukałem. Dziękuję Ci bardzo! – Akavall

+1

Jak interpretujesz te wyniki? Czy możesz powiedzieć, że próbki pochodzą z tej samej dystrybucji, po prostu patrząc na "statystyki" i "wartość p"? – FaCoffee

+1

@FaCoffee To jest to, co scipy docs mówią: "Jeśli statystyka KS jest mała lub wartość p jest wysoka, to nie możemy odrzucić hipotezy, że dystrybucje dwóch próbek są takie same." " – user2738815

0

To właśnie scipy docs powiedzieć:

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.

nie można odrzucić, nie oznacza to potwierdzić.

+0

czy mógłbyś wyjaśnić odpowiedź bardziej szczegółowo? z góry dziękuję! –

+0

@KingReload Oznacza to, że wartość * p * jest bardzo mała, co oznacza, że ​​prawdopodobieństwo tych dwóch próbek * Nie * pochodzące z tego samego rozkładu jest bardzo niskie. Innymi słowy, prawdopodobieństwo, że te dwie próbki pochodzą z tego samego rozkładu, jest bardzo wysokie. Ale nie można być w 100% pewni, dlatego wartości * p * nigdy nie są zerowe. (Czasami pokazują się jako 0, ale w rzeczywistości nigdy nie są zerowe). Dlatego mówi się, że * Nie udało się odrzucić hipotezy zerowej * zamiast * Akceptujemy hipotezę zerową *. Przyjmowanie hipotezy zerowej = * rozkłady dwóch próbek są takie same * –

+0

wysoka wartość p bardzo prawdopodobne, że pochodzą one z tego samego rozkładu, wartość p jest mała, prawdopodobnie nie. @MDAbidHasan ma go od tyłu. Rzeczywiście, przykład w dokumentacji podaje przykład: '' 'Dla identycznego rozkładu, nie możemy odrzucić hipotezy zerowej, ponieważ wartość p jest wysoka, 41%: >>> >>> rvs4 = stats.norm.rvs (size = n2, loc = 0.0, scale = 1.0) >>> stats.ks_2samp (rvs1, rvs4) (0.07999999999999996, 0.41126949729859719) '' ' – superhero

Powiązane problemy