Comment effectuer un test Anderson-Darling en Python
Un test d’Anderson-Darling est un test d’ajustement qui mesure dans quelle mesure vos données s’ajustent à une distribution spécifiée.
Ce test est le plus souvent utilisé pour déterminer si vos données suivent ou non une distribution normale .
Ce type de test est utile pour tester la normalité, qui est une hypothèse couramment utilisée dans de nombreux tests statistiques, notamment la régression , l’ANOVA , les tests t et bien d’autres.
Exemple : test d’Anderson-Darling en Python
Pour effectuer un test Anderson-Darling en Python, nous pouvons utiliser la fonction anderson() de la bibliothèque scipy.stats, qui utilise la syntaxe suivante :
Anderson(x, dist=’norme’)
où:
- x : tableau d’exemples de données
- dist : le type de distribution sur lequel tester. La valeur par défaut est « norme », mais vous pouvez également spécifier « expon » ou « logistique ».
Par exemple, voici comment effectuer un test d’Anderson-Darling sur un échantillon de 50 variables aléatoires normalement distribuées :
import numpy as np #create data np.random.seed(0) data = np.random.normal(size=50) #perform Anderson-Darling Test from scipy.stats import anderson anderson(data) AndersonResult(statistic=0.15006999533388665, critical_values=array([0.538, 0.613, 0.736, 0.858, 1.021]), significance_level=array([15. , 10. , 5. , 2.5, 1. ]))
La statistique du test est de 0,150 . Nous pouvons comparer cette valeur à chaque valeur critique qui correspond à chaque niveau de signification pour voir si les résultats des tests sont significatifs. Par exemple:
- La valeur critique pour α = 0,01 est 1,021 . Étant donné que la statistique du test (0,150) n’est pas supérieure à cette valeur critique, les résultats ne sont pas significatifs au niveau de signification de 0,01.
- La valeur critique pour α = 0,025 est 0,858 . Étant donné que la statistique du test (0,150) n’est pas supérieure à cette valeur critique, les résultats ne sont pas significatifs au niveau de signification de 0,025.
Et ainsi de suite.
Nous pouvons voir que les résultats du test ne sont significatifs à aucun niveau de signification, ce qui signifie que nous ne rejetterons pas l’hypothèse nulle du test. Ainsi, nous ne disposons pas de preuves suffisantes pour affirmer que les données échantillonnées ne sont pas normalement distribuées.
Ce résultat ne devrait pas être surprenant étant donné que nous avons utilisé la fonction np.rand.normal() pour générer un échantillon de 50 valeurs normalement distribuées.
Considérons plutôt si nous effectuions le test d’Anderson-Darling sur un échantillon de 50 entiers aléatoires compris entre 0 et 10 :
import numpy as np #create data np.random.seed(0) data = np.random.randint(0, 10, size=50) #perform Anderson-Darling Test from scipy.stats import anderson anderson(data) AndersonResult(statistic=1.1926463985076836, critical_values=array([0.538, 0.613, 0.736, 0.858, 1.021]), significance_level=array([15. , 10. , 5. , 2.5, 1. ]))
La statistique du test est de 1,1926 . Nous pouvons comparer cette valeur à chaque valeur critique qui correspond à chaque niveau de signification pour voir si les résultats des tests sont significatifs. Par exemple:
- La valeur critique pour α = 0,01 est 1,021 . Étant donné que la statistique du test (1,1926) est supérieure à cette valeur critique, les résultats sont significatifs au niveau de signification de 0,01.
- La valeur critique pour α = 0,025 est 0,858 . Étant donné que la statistique du test (1,1926) est supérieure à cette valeur critique, les résultats sont significatifs au niveau de signification de 0,025.
Et ainsi de suite.
Nous pouvons voir que les résultats du test sont significatifs à chaque niveau de signification, ce qui signifie que nous rejetterions l’hypothèse nulle du test, quel que soit le niveau de signification que nous choisissons d’utiliser. Ainsi, nous disposons de suffisamment de preuves pour affirmer que les données échantillonnées ne sont pas normalement distribuées.
Ce résultat ne devrait pas non plus être surprenant étant donné que nous avons utilisé la fonction np.rand.randint() pour générer un échantillon de 50 entiers aléatoires compris entre 0 et 10, ce qui est peu susceptible de suivre une distribution normale.
Vous pouvez trouver plus de didacticiels Python ici .