Jak wykonać test kołmogorowa-smirnowa w pythonie


Test Kołmogorowa-Smirnowa służy do sprawdzenia, czy próbka pochodzi z określonego rozkładu.

Aby wykonać test Kołmogorowa-Smirnowa w Pythonie, możemy użyć scipy.stats.kstest() w przypadku testu z jedną próbą lub scipy.stats.ks_2samp() w przypadku testu z dwiema próbami.

W tym samouczku przedstawiono przykład wykorzystania każdej funkcji w praktyce.

Przykład 1: Próbka testowa Kołmogorowa-Smirnowa

Załóżmy, że mamy następujące przykładowe dane:

 from numpy.random import seed
from numpy.random import fish

#set seed (eg make this example reproducible)
seed(0)

#generate dataset of 100 values that follows a Poisson distribution with mean=5
data = fish(5, 100)

Poniższy kod pokazuje, jak wykonać test Kołmogorowa-Smirnowa na tej próbie 100 wartości danych w celu ustalenia, czy pochodzą one z rozkładu normalnego:

 from scipy.stats import kstest

#perform Kolmogorov-Smirnov test
kstest(data, ' norm ')

KstestResult(statistic=0.9072498680518208, pvalue=1.0908062873170218e-103)

Z wyniku widzimy, że statystyka testowa wynosi 0,9072 , a odpowiadająca jej wartość p wynosi 1,0908e-103 . Ponieważ wartość p jest mniejsza niż 0,05, odrzucamy hipotezę zerową. Mamy wystarczające dowody, aby stwierdzić, że przykładowe dane nie pochodzą z rozkładu normalnego.

Wynik ten również nie powinien być zaskakujący, ponieważ przykładowe dane wygenerowaliśmy za pomocą funkcji Poisson() , która generuje losowe wartości zgodne z rozkładem Poissona .

Przykład 2: Test Kołmogorowa-Smirnowa dla dwóch próbek

Załóżmy, że mamy następujące dwa przykładowe zestawy danych:

 from numpy.random import seed
from numpy.random import randn
from numpy.random import lognormal

#set seed (eg make this example reproducible)
seed(0)

#generate two datasets
data1 = randn(100)
data2 = lognormal(3, 1, 100)

Poniższy kod pokazuje, jak wykonać test Kołmogorowa-Smirnowa na tych dwóch próbkach, aby określić, czy pochodzą one z tego samego rozkładu:

 from scipy.stats import ks_2samp

#perform Kolmogorov-Smirnov test
ks_2samp(data1, data2)

KstestResult(statistic=0.99, pvalue=4.417521386399011e-57)

Z wyniku widzimy, że statystyka testowa wynosi 0,99 , a odpowiadająca jej wartość p wynosi 4,4175e-57 . Ponieważ wartość p jest mniejsza niż 0,05, odrzucamy hipotezę zerową. Mamy wystarczające dowody, aby stwierdzić, że dwa przykładowe zbiory danych nie pochodzą z tej samej dystrybucji.

Wynik ten również nie powinien być zaskakujący, ponieważ dla pierwszej próbki wygenerowaliśmy wartości przy użyciu standardowego rozkładu normalnego, a wartości dla drugiej próbki przy użyciu rozkładu lognormalnego.

Dodatkowe zasoby

Jak wykonać test Shapiro-Wilka w Pythonie
Jak wykonać test Andersona-Darlinga w Pythonie

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *