Cours
Avez-vous déjà effectué un test t, obtenu une p-value propre, pour ensuite réaliser que vous n'aviez jamais vérifié si vos données suivaient une distribution normale ?
Les tests statistiques ne vous préviennent pas lorsque leurs hypothèses sont violées. Ils se contentent de renvoyer une valeur. Le problème est que des tests comme le test t et l'ANOVA supposent que vos données suivent une distribution normale. Si ce n'est pas le cas, vous fondez vos conclusions sur des bases fragiles.
Les tests de normalité vous permettent de vérifier cette hypothèse. Il existe des méthodes visuelles et statistiques pour y parvenir, et savoir lesquelles utiliser - et comment interpréter les résultats - est ce qui vous permet de justifier vos conclusions en toute confiance.
Dans cet article, je vous présenterai les méthodes visuelles et statistiques les plus courantes pour vérifier la normalité, je vous montrerai comment les exécuter en Python et en R, et j'expliquerai quoi faire lorsque vos données ne passent pas le test.
Qu'est-ce qu'une distribution normale en pratique
Vous avez probablement déjà vu la courbe en cloche, mais voici ce qu'elle signifie réellement pour vos données.
Une distribution normale est un modèle où la plupart des valeurs se regroupent autour du centre, et où moins de valeurs apparaissent à mesure que l'on s'éloigne dans l'une ou l'autre direction. Si vous la tracez, vous obtenez une courbe symétrique en forme de cloche. Le côté gauche est le miroir du côté droit.

Graphique de distribution normale
Ce qui rend la distribution normale unique, c'est que la moyenne, la médiane et le mode se situent tous au même point : le centre de la cloche. Il n'y a pas d'asymétrie vers la gauche ou la droite. En d'autres termes, les données sont équilibrées.
Cela apparaît constamment dans les données de mesure du monde réel. La taille humaine, les relevés de tension artérielle, les tolérances de fabrication, les résultats aux tests : tout cela a tendance à suivre une distribution normale lorsque vous collectez suffisamment d'échantillons. La variation naturelle dans les systèmes biologiques et physiques tend à produire cette forme.
Cela dit, toutes les données ne se comportent pas ainsi. Les données sur les revenus sont asymétriques vers la droite. Les temps de réponse des sites web ont de longues traînes.
Dans le monde réel, les choses peuvent très mal tourner si vous supposez la normalité sans vérifier.
Pourquoi tester la normalité est important
Le problème de ne pas vérifier la normalité est que la plupart des tests statistiques courants - tests t, ANOVA - sont des tests paramétriques.
Cela signifie qu'ils reposent sur des hypothèses concernant la distribution de vos données. La normalité en fait partie. Lorsque cette hypothèse est rompue, les mathématiques du test le sont aussi. Vous obtiendrez toujours le résultat du test, mais cela pourrait vous conduire à des conclusions erronées.
Les tests paramétriques fonctionnent en faisant des hypothèses mathématiques sur la population dont provient votre échantillon. Lorsque ces hypothèses sont vérifiées, ces tests sont utiles et précis. Lorsqu'elles ne le sont pas, vos p-values deviennent peu fiables et vous ne pouvez pas tirer de conclusions précises.
C'est là que les tests non paramétriques entrent en jeu.
Des tests comme le test U de Mann-Whitney ou le test de Kruskal-Wallis ne supposent pas la normalité - ils travaillent avec des rangs plutôt qu'avec des valeurs brutes. Ils sont plus flexibles, mais ils ont aussi tendance à être moins utiles lorsque vos données sont normales. Passer à ces tests inutilement n'est donc pas la solution.
Le vrai problème que font tant de débutants en science des données est d'ignorer complètement la vérification.
Le test de normalité ne prend que quelques lignes de code. Ne pas tester signifie que vous faites confiance à vos données - ou que vous n'y réfléchissez pas du tout.
Méthodes visuelles pour vérifier la normalité
Avant d'exécuter un test formel, tracez vos données. Les visuels vous en diront long sur ce avec quoi vous travaillez.
Histogramme
Un histogramme vous montre la forme de votre distribution.

Exemple d'histogramme
Si vos données sont normalement distribuées, l'histogramme doit ressembler à une courbe en cloche - haute au milieu, s'amincissant symétriquement des deux côtés. Ce que vous recherchez, c'est l'asymétrie : une longue traîne vers la droite signifie une asymétrie positive, une traîne vers la gauche signifie une asymétrie négative. Dans les deux cas, c'est le signe que vos données pourraient ne pas être normales.
Le problème avec les histogrammes est que leur forme dépend de la taille des classes (bins) :
- Trop peu de classes et la distribution semble plate
- Trop de classes et elle semble irrégulière
Essayez toujours plusieurs tailles de classes avant de tirer des conclusions.
Graphique Q-Q
Un graphique Q-Q (quantile-quantile plot) compare les quantiles de vos données aux quantiles d'une distribution normale théorique.

Exemple de graphique Q-Q
Si vos données sont normales, les points tombent le long d'une ligne diagonale droite. Les écarts par rapport à cette ligne vous indiquent où la normalité fait défaut. Des points qui s'incurvent vers le haut aux extrémités suggèrent des queues lourdes. Une courbe en S indique une asymétrie.
Les graphiques Q-Q sont plus précis que les histogrammes pour repérer des écarts subtils par rapport à la normalité - surtout dans les queues, là où les histogrammes ont tendance à manquer des choses.
Boîte à moustaches (Box plot)
Une boîte à moustaches vous montre la médiane, la dispersion et les valeurs aberrantes en une seule vue.

Exemple de boîte à moustaches
Un jeu de données normalement distribué produit une boîte à moustaches où la médiane se situe à peu près au centre de la boîte, et les moustaches s'étendent sur des longueurs à peu près égales des deux côtés. Si la médiane est décentrée, ou si une moustache est beaucoup plus longue que l'autre, c'est une asymétrie. Les points en dehors des moustaches sont des valeurs aberrantes.
Le problème général avec les visuels est qu'ils sont subjectifs. Deux personnes peuvent regarder le même histogramme et ne pas être d'accord. Utilisez-les d'abord pour vous faire une idée de vos données, puis confirmez avec un test formel.
Tests de normalité courants en statistiques
Il n'existe pas de test de normalité unique qui fonctionne le mieux dans toutes les situations. Le bon choix dépend de la taille de votre échantillon et de ce que vous essayez de détecter.
Test de Shapiro-Wilk
Le test de Shapiro-Wilk est le choix privilégié pour les petits à moyens échantillons, généralement jusqu'à quelques centaines d'observations.
Il mesure à quel point vos données correspondent à une distribution normale en comparant les valeurs observées à ce à quoi vous vous attendriez si les données étaient normales. Il est largement utilisé, bien compris et disponible dans toutes les principales bibliothèques statistiques. Pour la plupart des analystes, c'est le premier test à utiliser.
Sa principale limite est qu'il devient trop sensible avec de grands échantillons. Il a tendance à signaler des écarts minuscules et pratiquement insignifiants comme étant statistiquement significatifs.
Test de Kolmogorov-Smirnov
Le test de Kolmogorov-Smirnov (KS) compare la distribution cumulative de votre échantillon à une distribution théorique - dans ce cas, la normale.
Il est plus général que Shapiro-Wilk et peut tester n'importe quelle distribution, pas seulement la normale. Le test KS est moins puissant que Shapiro-Wilk pour tester la normalité, ce qui signifie qu'il est moins susceptible de détecter des écarts subtils. Il nécessite également que vous spécifiiez les paramètres de distribution à l'avance, ce qui introduit un biais si vous les estimez à partir des mêmes données.
Utilisez-le lorsque vous avez besoin d'une vérification rapide et générale - pas comme votre test de normalité principal.
Test d'Anderson-Darling
Le test d'Anderson-Darling est une variante du test KS, mais avec une différence clé : il accorde plus de poids aux queues de la distribution.
Cela le rend meilleur pour détecter les écarts qui apparaissent aux extrêmes - queues lourdes, valeurs aberrantes ou comportement non normal que le test KS manquerait. Si votre cas d'utilisation est sensible au comportement des queues, Anderson-Darling est un bon choix.
Test de D'Agostino-Pearson
Le test de D'Agostino-Pearson adopte une approche différente.
Au lieu de comparer directement les distributions, il mesure deux propriétés de vos données : l'asymétrie (skewness) et l'aplatissement (kurtosis - à quel point les queues sont lourdes ou légères).
Il combine les deux en une seule statistique de test. Cela le rend efficace pour identifier pourquoi vos données pourraient ne pas être normales - pas seulement si elles le sont. Il fonctionne mieux avec de grands échantillons, où les estimations de l'asymétrie et de l'aplatissement sont fiables.
Test de Jarque-Bera
Le test de Jarque-Bera utilise également l'asymétrie et l'aplatissement, de manière similaire à D'Agostino-Pearson.
Il est courant en économétrie et en analyse de séries temporelles. Comme D'Agostino-Pearson, il nécessite un échantillon assez grand pour produire des résultats fiables. Avec de petits échantillons, le test n'est pas très fiable. Si vous travaillez dans un contexte financier ou économique, vous le verrez probablement souvent.
Pour conclure, commencez par Shapiro-Wilk pour les petits échantillons et associez-le à un graphique Q-Q. Utilisez Anderson-Darling lorsque le comportement des queues est important, et D'Agostino-Pearson lorsque vous voulez comprendre la nature de l'écart.
Comment interpréter les résultats des tests de normalité
Chaque test de normalité est un test d'hypothèse.
L'hypothèse nulle dans tout test de normalité est que vos données sont normalement distribuées. Le test demande alors : compte tenu de ce que nous voyons dans les données, quelle est la probabilité que cette hypothèse nulle soit vraie ?
La réponse est donnée sous la forme d'une p-value :
- p > 0,05 - vous n'avez pas assez de preuves pour rejeter la normalité. Supposez que les données sont normales et procédez avec des tests paramétriques
- p < 0,05 - les données diffèrent suffisamment de la normalité pour être statistiquement détectables. Rejetez l'hypothèse de normalité
Cela semble simple, mais beaucoup de gens se trompent ici.
Une faible p-value ne vous dit pas à quel point vos données sont non normales - seulement qu'une différence a été détectée. Avec de grands échantillons, les tests de normalité deviennent extrêmement sensibles. Ils signaleront des écarts si petits qu'ils n'ont aucun impact réel sur votre analyse.
Le problème inverse existe aussi. Avec de petits échantillons, même des données visiblement asymétriques peuvent produire p > 0,05 car le test n'a pas assez de puissance pour détecter l'écart.
La signification statistique et la signification pratique ne sont pas la même chose.
Une p-value vous indique si un écart par rapport à la normalité existe. Elle ne vous dit pas si cet écart compte pour votre analyse spécifique. Associez toujours le résultat de votre test à un graphique Q-Q - si les points suivent la ligne de près, vos données sont probablement assez normales, quelle que soit la p-value.
Tests de normalité en Python
Le module scipy.stats de Python a tout ce dont vous avez besoin pour exécuter des tests de normalité en quelques lignes de code.
Pour tous les exemples ci-dessous, j'utiliserai le même jeu de données - 100 échantillons tirés d'une distribution normale - afin que vous puissiez exécuter le code et suivre.
import numpy as np
from scipy import stats
np.random.seed(42)
data = np.random.normal(loc=0, scale=1, size=100)
Test de Shapiro-Wilk
Utilisez shapiro() comme première vérification, surtout avec des jeux de données plus petits.
stat, p_value = stats.shapiro(data)
print(f"Statistic: {stat:.4f}, p-value: {p_value:.4f}")
Voici ce que vous obtenez :

Résultat d'un test de Shapiro-Wilk en Python
La p-value est bien supérieure à 0,05, donc nous ne rejetons pas la normalité. Les données semblent normales - ce qui est logique, puisque nous les avons générées à partir d'une distribution normale.
Test de Kolmogorov-Smirnov
kstest() compare votre échantillon à une distribution nommée. Pour la normalité, passez "norm" avec la moyenne et l'écart-type de l'échantillon.
stat, p_value = stats.kstest(data, 'norm', args=(data.mean(), data.std()))
print(f"Statistic: {stat:.4f}, p-value: {p_value:.4f}")

Résultat d'un test de Kolmogorov-Smirnov en Python
Encore une fois, p > 0,05 - aucune preuve contre la normalité.
Avec ce test en Python, passez toujours la moyenne et l'écart-type explicitement via args. Si vous sautez cette étape, kstest() utilise par défaut une normale standard (moyenne=0, std=1), ce qui vous donnera des résultats peu fiables à moins que vos données ne soient déjà standardisées.
Test de D'Agostino-Pearson
normaltest() teste la normalité en vérifiant l'asymétrie et l'aplatissement combinés. Il fonctionne mieux avec de grands échantillons.
stat, p_value = stats.normaltest(data)
print(f"Statistic: {stat:.4f}, p-value: {p_value:.4f}")

Résultat d'un test de D'Agostino-Pearson en Python
p > 0,05 encore. Les données passent les trois tests ici, mais c'est attendu - je les ai générées pour être normales. En pratique, vous verrez souvent ces tests être en désaccord, surtout près de la limite de 0,05. Quand cela arrive, revenez à votre graphique Q-Q pour trancher.
Tests de normalité en R
R dispose de fonctions intégrées pour les tests de normalité. Aucun paquet supplémentaire n'est nécessaire pour les bases.
Comme pour les exemples Python, j'utiliserai le même jeu de données tout au long : 100 échantillons issus d'une distribution normale.
set.seed(42)
data <- rnorm(100, mean = 0, sd = 1)
Test de Shapiro-Wilk
shapiro.test() est le choix privilégié pour les petits à moyens échantillons. Passez-lui simplement votre vecteur de données :
shapiro.test(data)

Résultat d'un test de Shapiro-Wilk en R
p > 0,05 - aucune preuve contre la normalité. La statistique W varie de 0 à 1, où des valeurs proches de 1 indiquent que les données suivent étroitement une distribution normale.
Test de Kolmogorov-Smirnov
ks.test() compare votre échantillon à une distribution théorique. Pour la normalité, spécifiez "pnorm" et passez la moyenne et l'écart-type de l'échantillon.
ks.test(data, "pnorm", mean(data), sd(data))

Résultat d'un test de Kolmogorov-Smirnov en R
p > 0,05 encore. Ce test en R a la même mise en garde qu'en Python : passez toujours mean(data) et sd(data). L'omettre utiliserait par défaut une normale standard, ce qui fausse le résultat à moins que vos données ne soient déjà standardisées.
Graphique Q-Q
Les fonctions intégrées qqnorm() et qqline() de R vous donnent un graphique Q-Q en deux lignes de code.
qqnorm(data, main = "Q-Q Plot")
qqline(data, col = "steelblue", lwd = 2)

Graphique Q-Q en R
qqnorm() trace les quantiles de votre échantillon contre les quantiles normaux théoriques. qqline() trace la ligne de référence. Des points suivant cette ligne de près signifient que vos données se comportent normalement. Des écarts aux extrémités signalent des problèmes de queues qui méritent d'être étudiés.
Que faire si les données ne sont pas normales
Si vos données échouent à un test de normalité, vous avez quelques options solides.
Transformer les données
Parfois, la solution consiste à transformer vos données pour qu'elles se comportent normalement, puis à exécuter vos tests originaux sur les valeurs transformées.
La transformation logarithmique est le choix le plus courant. Elle fonctionne bien sur les données asymétriques vers la droite - pensez aux revenus, aux temps de réponse ou aux mesures biologiques qui ont une longue traîne sur le côté droit. La fonction en Python est np.log(data), et l'équivalent en R est log(data).
La transformation par racine carrée est une option plus douce pour une asymétrie modérée, et elle est pratique lorsque vos données contiennent des zéros (puisque vous ne pouvez pas prendre le logarithme de zéro). Utilisez np.sqrt(data) en Python ou sqrt(data) en R.
Après la transformation, relancez votre test de normalité. Si les données transformées passent le test, procédez avec vos tests paramétriques - n'oubliez simplement pas d'interpréter les résultats en fonction de l'échelle transformée.
Utiliser des tests non paramétriques
Si la transformation ne fonctionne pas ou n'a pas de sens pour vos données, passez aux tests non paramétriques. Ceux-ci ne supposent pas la normalité - ils classent les données au lieu de travailler avec des valeurs brutes.
- Le test U de Mann-Whitney est l'alternative non paramétrique au test t pour échantillons indépendants. Utilisez-le lorsque vous comparez deux groupes
- Le test de Kruskal-Wallis est la version non paramétrique de l'ANOVA à un facteur. Utilisez-le lorsque vous comparez trois groupes ou plus
Les deux sont disponibles dans scipy.stats (mannwhitneyu() et kruskal()) et dans le paquet de base de R (wilcox.test() et kruskal.test()).
Compter sur de grands échantillons
Avec des échantillons suffisamment grands, vous pouvez souvent ignorer la question de la normalité.
Le théorème central limite stipule qu'à mesure que la taille de votre échantillon augmente, la distribution d'échantillonnage de la moyenne approche la normale - quelle que soit la façon dont les données originales sont distribuées. En pratique, cela signifie que les tests paramétriques ont tendance à être fiables avec de grands échantillons, même lorsque les données sous-jacentes ne sont pas parfaitement normales.
Erreurs courantes lors du test de normalité
Le test de normalité est facile - vous avez vu qu'il ne prend qu'une ligne de code. Pourtant, il y a quelques façons de se tromper.
Voici quelques erreurs courantes que font souvent les débutants en science des données :
- Se fier uniquement aux p-values : Une p-value vous indique si un écart par rapport à la normalité a été détecté, pas quelle est l'ampleur de cet écart ou s'il importe. Traiter p > 0,05 comme un feu vert et p < 0,05 comme un feu rouge est trop simpliste. Associez toujours le résultat de votre test à un graphique Q-Q
- Ignorer les effets de la taille de l'échantillon : Avec de petits échantillons, les tests de normalité peuvent manquer de vrais écarts et renvoyer p > 0,05 même lorsque vos données sont visiblement asymétriques. Avec de grands échantillons, le test devient si sensible qu'il signale des écarts minuscules et insignifiants comme étant statistiquement significatifs. La taille de l'échantillon peut changer ce que signifie la p-value
- Tester la normalité à l'excès : Toutes les analyses n'ont pas besoin d'un test de normalité formel. Si vous faites un travail exploratoire, un histogramme et un graphique Q-Q suffisent généralement
- Mal interpréter les légers écarts : Les données du monde réel ne sont presque jamais parfaitement normales. Un écart mineur par rapport à la ligne de référence sur un graphique Q-Q, ou une p-value juste en dessous de 0,05, ne signifie pas que vos données sont loin d'être normales. La question est de savoir si elles sont assez normales pour le test que vous effectuez
Donc, pour conclure, le test de normalité n'est qu'une vérification parmi d'autres de vos données. Utilisez-le comme une information parmi d'autres, pas comme le mot final.
Quand pouvez-vous ignorer le test de normalité
Le test de normalité n'est pas toujours nécessaire. Si vous avez une échéance, savoir quand l'ignorer peut vous faire gagner du temps sans affecter les résultats.
Grands jeux de données
Lorsque vous avez un grand échantillon, le théorème central limite garantit que la distribution d'échantillonnage de la moyenne est approximativement normale, quelle que soit la forme de vos données brutes. Les tests paramétriques sont généralement fiables dans cette situation, donc effectuer un test de normalité formel apporte peu de valeur.
Certaines méthodes statistiques sont également robustes à la non-normalité. Des techniques comme la régression linéaire ont tendance à bien tenir la route lorsque les tailles d'échantillon sont raisonnables et que les violations ne sont pas extrêmes. (La régression linéaire suppose toujours la normalité dans les résidus.)
Analyse exploratoire
Lorsque vous scannez des données à la recherche de modèles, que vous construisez une intuition ou que vous décidez quelles variables étudier davantage, un histogramme ou un graphique Q-Q rapide suffit. Les tests formels sont destinés à l'analyse confirmatoire - lorsque vos conclusions doivent être solides.
N'oubliez pas que le test de normalité existe pour vous protéger de tirer des conclusions erronées. Si vous êtes dans un contexte où une conclusion erronée n'a pas de conséquences réelles, ou où votre méthode ne dépend pas de la normalité, le test est facultatif.
Conclusion
Le test de normalité consiste à vérifier si vos hypothèses sont suffisamment solides pour faire confiance à vos résultats.
Aucun jeu de données n'est parfaitement normal. L'objectif est de comprendre comment vos données se comportent et de choisir vos méthodes en conséquence. Un graphique Q-Q vous indique où se trouvent les écarts. Un test formel vous informe s'ils sont statistiquement détectables. Lorsqu'ils sont combinés, ils vous donnent une image plus claire que l'un ou l'autre seul.
Le bon test dépend de votre contexte. Utilisez Shapiro-Wilk pour les petits échantillons, Anderson-Darling lorsque les queues comptent, des alternatives non paramétriques lorsque la normalité ne peut être supposée. Et parfois - avec de grands échantillons ou des méthodes robustes - aucun test du tout.
Trouvez-vous tout le concept des p-values confus ? Lisez notre article Hypothesis Testing Made Easy pour vous assurer que vous les interprétez correctement.
FAQ sur les tests de normalité
Qu'est-ce qu'un test de normalité ?
Un test de normalité est une méthode statistique qui vérifie si vos données suivent une distribution normale (gaussienne). La plupart des tests statistiques courants - comme les tests t, l'ANOVA et la régression linéaire - supposent la normalité, donc vérifier cette hypothèse avant d'exécuter votre analyse vous aide à éviter de tirer des conclusions incorrectes.
Dois-je toujours tester la normalité ?
Pas toujours. Avec de grands échantillons, le théorème central limite rend les tests paramétriques fiables quelle que soit la distribution sous-jacente. Pour une analyse exploratoire, un histogramme ou un graphique Q-Q rapide suffit généralement - les tests de normalité formels sont plus utiles lorsque vous faites une analyse confirmatoire et que vos conclusions doivent être solides.
Que dois-je faire si mes données échouent à un test de normalité ?
Vous avez quelques options. Vous pouvez transformer les données en utilisant une transformation logarithmique ou par racine carrée, puis retester. Si la transformation ne fonctionne pas, passez à des tests non paramétriques comme le test U de Mann-Whitney (pour deux groupes) ou le test de Kruskal-Wallis (pour trois groupes ou plus), qui ne supposent pas la normalité.
Quelle est la différence entre les tests de Shapiro-Wilk et de Kolmogorov-Smirnov ?
Shapiro-Wilk est conçu spécifiquement pour tester la normalité et fonctionne mieux avec des échantillons de petite à moyenne taille. Le test de Kolmogorov-Smirnov est plus général - il peut comparer un échantillon à n'importe quelle distribution théorique, pas seulement la normale - mais il est moins puissant que Shapiro-Wilk pour tester spécifiquement la normalité, ce qui le rend plus susceptible de manquer des écarts subtils.
Comment interpréter un graphique Q-Q pour la normalité ?
Un graphique Q-Q compare les quantiles de vos données aux quantiles d'une distribution normale théorique. Si les points tombent près de la ligne de référence diagonale, vos données se comportent normalement. Les écarts aux extrémités de la ligne signalent des problèmes de queues - une courbe en S indique une asymétrie, tandis que des points s'écartant de la ligne aux deux extrémités suggèrent des queues plus lourdes ou plus légères qu'une distribution normale.


