Nie mogę wymyślić, jak wykonać test KS z dwiema próbami w Scipy.
Po przeczytaniu dokumentacji scipy kstest
Potrafię sprawdzić, gdzie rozkład jest identyczny ze standardowym rozkładem normalnym
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 wynoszącej 0,76 nie możemy odrzucić hipotezy zerowej, że te dwa rozkłady są identyczne.
Chcę jednak porównać dwie dystrybucje i zobaczyć, czy mogę odrzucić hipotezę zerową, że są 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 sprawdź, czy x i z są identyczne
Spróbowałem naiwnego:
test_stat = kstest(x, z)
i otrzymałem następujący błąd:
TypeError: 'numpy.ndarray' object is not callable
Czy istnieje sposób na wykonanie testu KS z dwiema próbami w Pythonie? Jeśli tak, jak mam to zrobić?
Z góry dziękuję
python
numpy
scipy
statistics
distribution
Akavall
źródło
źródło
Odpowiedzi:
Używasz jednopróbkowego testu KS. Prawdopodobnie chcesz wykonać test z dwiema próbami
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)
Wyniki można interpretować w następujący sposób:
Możesz porównać
statistic
wartość podaną przez Pythona z tabelą wartości krytycznych testu KS zgodnie z rozmiarem próbki. Gdystatistic
wartość jest wyższa niż wartość krytyczna, te dwa rozkłady są różne.Lub możesz porównać
p-value
poziom istotności a , zwykle a = 0,05 lub 0,01 (Ty decydujesz, im niższe jest a, tym bardziej istotne). Jeśli wartość p jest niższa niż a , to jest bardzo prawdopodobne, że te dwa rozkłady są różne.źródło
statistic
ip-value
?Oto, co mówią Scipy Docs:
Nie można odrzucić nie oznacza, że potwierdzamy.
źródło
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)