Comment effectuer un test Kolmogorov-Smirnov en Python
Le test de Kolmogorov-Smirnov est utilisé pour tester si un échantillon provient ou non d’une certaine distribution.
Pour effectuer un test de Kolmogorov-Smirnov en Python, nous pouvons utiliser scipy.stats.kstest() pour un test à un échantillon ou scipy.stats.ks_2samp() pour un test à deux échantillons.
Ce didacticiel montre un exemple de la façon d’utiliser chaque fonction dans la pratique.
Exemple 1 : un échantillon de test de Kolmogorov-Smirnov
Supposons que nous disposions des exemples de données suivants :
from numpy.random import seed from numpy.random import poisson #set seed (e.g. make this example reproducible) seed(0) #generate dataset of 100 values that follow a Poisson distribution with mean=5 data = poisson(5, 100)
Le code suivant montre comment effectuer un test de Kolmogorov-Smirnov sur cet échantillon de 100 valeurs de données pour déterminer si elles proviennent d’une distribution normale :
from scipy.stats import kstest #perform Kolmogorov-Smirnov test kstest(data, 'norm') KstestResult(statistic=0.9072498680518208, pvalue=1.0908062873170218e-103)
À partir du résultat, nous pouvons voir que la statistique de test est de 0,9072 et la valeur p correspondante est de 1,0908e-103 . Puisque la valeur p est inférieure à 0,05, nous rejetons l’hypothèse nulle. Nous disposons de suffisamment de preuves pour affirmer que les données de l’échantillon ne proviennent pas d’une distribution normale.
Ce résultat ne devrait pas non plus être surprenant puisque nous avons généré les exemples de données à l’aide de la fonction poisson() , qui génère des valeurs aléatoires qui suivent une distribution de Poisson .
Exemple 2 : Test de Kolmogorov-Smirnov à deux échantillons
Supposons que nous disposions des deux exemples d’ensembles de données suivants :
from numpy.random import seed from numpy.random import randn from numpy.random import lognormal #set seed (e.g. make this example reproducible) seed(0) #generate two datasets data1 = randn(100) data2 = lognormal(3, 1, 100)
Le code suivant montre comment effectuer un test de Kolmogorov-Smirnov sur ces deux échantillons pour déterminer s’ils proviennent de la même distribution :
from scipy.stats import ks_2samp #perform Kolmogorov-Smirnov test ks_2samp(data1, data2) KstestResult(statistic=0.99, pvalue=4.417521386399011e-57)
À partir du résultat, nous pouvons voir que la statistique de test est de 0,99 et la valeur p correspondante est de 4.4175e-57 . Puisque la valeur p est inférieure à 0,05, nous rejetons l’hypothèse nulle. Nous disposons de suffisamment de preuves pour affirmer que les deux échantillons d’ensembles de données ne proviennent pas de la même distribution.
Ce résultat ne devrait pas non plus être surprenant puisque nous avons généré des valeurs pour le premier échantillon en utilisant la distribution normale standard et des valeurs pour le deuxième échantillon en utilisant la distribution lognormale.
Ressources additionnelles
Comment effectuer un test Shapiro-Wilk en Python
Comment effectuer un test Anderson-Darling en Python