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