Comment effectuer un test Shapiro-Wilk en Python



Le test de Shapiro-Wilk est un test de normalité. Il est utilisé pour déterminer si un échantillon provient ou non d’unedistribution normale .

Pour effectuer un test Shapiro-Wilk en Python nous pouvons utiliser la fonction scipy.stats.shapiro() , qui reprend la syntaxe suivante :

scipy.stats.shapiro(x)

où:

  • x : un tableau d’exemples de données.

Cette fonction renvoie une statistique de test et une valeur p correspondante.

Si la valeur p est inférieure à un certain niveau de signification, nous disposons alors de preuves suffisantes pour affirmer que les données de l’échantillon ne proviennent pas d’une distribution normale.

Ce didacticiel montre quelques exemples d’utilisation pratique de cette fonction.

Exemple 1 : test de Shapiro-Wilk sur des données normalement distribuées

Supposons que nous disposions des exemples de données suivants :

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

#set seed (e.g. make this example reproducible)
seed(0)

#generate dataset of 100 random values that follow a standard normal distribution
data = randn(100)

Le code suivant montre comment effectuer un test de Shapiro-Wilk sur cet échantillon de 100 valeurs de données pour déterminer si elles proviennent d’une distribution normale :

from scipy.stats import shapiro

#perform Shapiro-Wilk test
shapiro(data)

ShapiroResult(statistic=0.9926937818527222, pvalue=0.8689165711402893)

À partir du résultat, nous pouvons voir que la statistique de test est de 0,9927 et la valeur p correspondante est de 0,8689 .

Puisque la valeur p n’est pas inférieure à 0,05, nous ne parvenons pas à rejeter l’hypothèse nulle. Nous ne disposons pas de preuves suffisantes pour affirmer que les données de l’échantillon ne proviennent pas d’une distribution normale.

Ce résultat ne devrait pas être surprenant puisque nous avons généré les exemples de données à l’aide de la fonction randn() , qui génère des valeurs aléatoires qui suivent une distribution normale standard.

Exemple 2 : test de Shapiro-Wilk sur des données non distribuées normalement

Supposons maintenant 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 Shapiro-Wilk sur cet échantillon de 100 valeurs de données pour déterminer si elles proviennent d’une distribution normale :

from scipy.stats import shapiro

#perform Shapiro-Wilk test
shapiro(data)

ShapiroResult(statistic=0.9581913948059082, pvalue=0.002994443289935589)

À partir du résultat, nous pouvons voir que la statistique de test est de 0,9582 et que la valeur p correspondante est de 0,00299 .

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 .

Ressources additionnelles

Les tutoriels suivants expliquent comment effectuer d’autres tests de normalité dans divers logiciels statistiques :

Comment effectuer un test Shapiro-Wilk dans R
Comment effectuer un test Anderson-Darling en Python
Comment effectuer un test Kolmogorov-Smirnov en Python

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *