Hoe u een kolmogorov-smirnov-test uitvoert in python
De Kolmogorov-Smirnov-test wordt gebruikt om te testen of een steekproef al dan niet uit een bepaalde verdeling komt.
Om een Kolmogorov-Smirnov-test in Python uit te voeren, kunnen we scipy.stats.kstest() gebruiken voor een test met één monster of scipy.stats.ks_2samp() voor een test met twee monsters.
Deze tutorial toont een voorbeeld van hoe u elke functie in de praktijk kunt gebruiken.
Voorbeeld 1: Een Kolmogorov-Smirnov-testmonster
Stel dat we de volgende voorbeeldgegevens hebben:
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)
De volgende code laat zien hoe je een Kolmogorov-Smirnov-test uitvoert op deze steekproef van 100 gegevenswaarden om te bepalen of ze uit een normale verdeling komen:
from scipy.stats import kstest #perform Kolmogorov-Smirnov test kstest(data, ' norm ') KstestResult(statistic=0.9072498680518208, pvalue=1.0908062873170218e-103)
Uit het resultaat kunnen we zien dat de teststatistiek 0,9072 is en de overeenkomstige p-waarde 1,0908e-103 . Omdat de p-waarde kleiner is dan 0,05, verwerpen we de nulhypothese. We hebben voldoende bewijs om te zeggen dat de steekproefgegevens niet uit een normale verdeling komen.
Dit resultaat zou ook niet verrassend moeten zijn, aangezien we de voorbeeldgegevens hebben gegenereerd met behulp van de Poisson()- functie, die willekeurige waarden genereert die een Poisson-verdeling volgen.
Voorbeeld 2: Kolmogorov-Smirnov-test met twee monsters
Laten we zeggen dat we de volgende twee voorbeeldgegevenssets hebben:
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)
De volgende code laat zien hoe u een Kolmogorov-Smirnov-test uitvoert op deze twee steekproeven om te bepalen of ze uit dezelfde distributie komen:
from scipy.stats import ks_2samp #perform Kolmogorov-Smirnov test ks_2samp(data1, data2) KstestResult(statistic=0.99, pvalue=4.417521386399011e-57)
Uit het resultaat kunnen we zien dat de teststatistiek 0,99 is en de overeenkomstige p-waarde 4,4175e-57 . Omdat de p-waarde kleiner is dan 0,05, verwerpen we de nulhypothese. We hebben voldoende bewijs om te zeggen dat de twee voorbeeldgegevenssets niet uit dezelfde distributie komen.
Dit resultaat zou ook niet verrassend moeten zijn, aangezien we waarden voor het eerste monster hebben gegenereerd met behulp van de standaard normale verdeling en waarden voor het tweede monster met behulp van de lognormale verdeling.
Aanvullende bronnen
Hoe u een Shapiro-Wilk-test uitvoert in Python
Hoe u een Anderson-Darling-test uitvoert in Python