Test de normalité en R : Shapiro-Wilk & Q-Q plots

Vérifiez si vos données suivent une distribution normale — rstatix pour l’approche tidy, base R pour les classiques — en direct dans votre navigateur

Apprenez à tester la normalité en R. Utilisez le test de Shapiro-Wilk — rstatix shapiro_test() pour une, plusieurs ou des variables groupées, et base R shapiro.test() — avec les contrôles visuels (graphique de densité et Q-Q plot avec ggpubr) que vous devez toujours associer au test. Modifiez et exécutez chaque exemple en direct.

Date de publication

22 juin 2026

Modifié

17 juillet 2026

AstucePoints clés
  • De nombreux tests (t-test, ANOVA, corrélation de Pearson) sont paramétriques — ils supposent que les données suivent une distribution normale. Vérifiez cette hypothèse avant de tester.
  • Utilisez deux outils ensemble : un contrôle visuel (graphique de densité + Q-Q plot) et un test de signification (Shapiro-Wilk). Ni l’un ni l’autre n’est fiable seul.
  • Le test de Shapiro-Wilk : p > 0.05 → pas d’écart significatif à la normale (on suppose la normalité) ; p < 0.05 → les données ne sont pas normales (utilisez un test non paramétrique).
  • Exécutez-le avec shapiro_test() de rstatix (une variable, groupée ou plusieurs à la fois) ou base R shapiro.test().
  • Le test est sensible à la taille d’échantillon : les très petits échantillons « passent » presque toujours ; les très grands échantillons signalent des écarts triviaux — alors appuyez-vous sur le Q-Q plot pour n > 50.

Introduction

De nombreux tests courants — le t-test, l’ANOVA et la corrélation de Pearson — sont paramétriques : ils ne sont valides que si les données suivent une distribution normale (gaussienne) approximative. Donc avant d’en exécuter un, vous vérifiez l’hypothèse. Si elle tient, utilisez le test paramétrique ; sinon, passez à une alternative non paramétrique (Wilcoxon, Kruskal-Wallis, Spearman).

Cette leçon vérifie la normalité de deux manières complémentaires — visuellement (graphiques de densité et Q-Q) et avec un test de signification (Shapiro-Wilk) — à l’aide de rstatix shapiro_test() et base R shapiro.test() sur les données intégrées ToothGrowth (la variable len = longueur des dents).

Grands échantillons : le théorème central limite

D’abord, une mise en garde : avec un grand échantillon (n > 30–40), le théorème central limite affirme que la distribution d’échantillonnage de la moyenne est approximativement normale quelle que soit la forme des données — donc les tests paramétriques conviennent souvent même lorsque les données brutes ne sont pas parfaitement normales. La normalité importe surtout pour les petits échantillons. Quoi qu’il en soit, il est de bonne pratique d’y regarder.

Méthodes visuelles

Graphique de densité

Un graphique de densité montre la forme de la distribution — vous cherchez une courbe en cloche symétrique :

library(ggpubr)

ggdensity(ToothGrowth, x = "len", fill = "lightgray",
          xlab = "Tooth length")

A density plot of tooth length, showing a roughly bell-shaped, slightly irregular distribution.

Q-Q plot

Un Q-Q plot compare les quantiles de vos données à ceux d’une distribution normale. Si les données sont normales, les points s’alignent sur la droite de référence à 45 degrés (à l’intérieur de la bande de confiance) :

library(ggpubr)

ggqqplot(ToothGrowth, x = "len")

A Q-Q plot of tooth length against the normal distribution, with points falling close to the 45-degree reference line inside the shaded confidence band.

Les points épousent la droite, donc la longueur des dents semble approximativement normale. (Base R propose qqnorm() + qqline(), et car::qqPlot() ajoute la bande de confiance comme ggqqplot().)

Aiguisez votre œil : normale vs asymétrique

Avant de vous fier à un graphique, apprenez à quoi ressemblent les deux formes. Une variable normale donne une cloche symétrique et une droite Q-Q rectiligne ; une variable asymétrique donne une densité déséquilibrée et des points qui s’écartent de la droite :

library(ggpubr)

set.seed(123)
normal.data <- rnorm(200)        # symmetric, normal
skewed.data <- rexp(200)         # right-skewed

ggarrange(
  ggdensity(normal.data, title = "Normal: symmetric bell"),
  ggdensity(skewed.data, title = "Skewed: long right tail"),
  ggqqplot(normal.data,  title = "Normal: points on the line"),
  ggqqplot(skewed.data,  title = "Skewed: points curve off"),
  ncol = 2, nrow = 2
)

Four panels: a symmetric bell-shaped density and a straight Q-Q plot for normally distributed data, beside a right-skewed density and a Q-Q plot whose points curve away from the reference line.

Une fois que vous savez repérer le motif asymétrique, le Q-Q plot devient une première lecture rapide de toute nouvelle variable.

Le test de Shapiro-Wilk

L’inspection visuelle est subjective. Le test de Shapiro-Wilk y met un chiffre. Son hypothèse nulle est « les données suivent une distribution normale », donc :

  • p > 0.05 → on ne rejette pas → on suppose la normalité.
  • p < 0.05 → on rejette → les données sont significativement non normales.

Avec rstatix (recommandé)

shapiro_test() s’intègre bien au pipe et renvoie un résultat tidy — et il s’étend aux variables groupées et multiples, ce que base R ne peut pas faire en un seul appel :

library(rstatix)

ToothGrowth %>% shapiro_test(len)
# A tibble: 1 × 3
  variable statistic     p
  <chr>        <dbl> <dbl>
1 len          0.967 0.109

Ici p > 0.05, on suppose donc que len suit une distribution normale.

Avec base R

shapiro.test(ToothGrowth$len)

    Shapiro-Wilk normality test

data:  ToothGrowth$len
W = 0.96743, p-value = 0.1091

Même statistique, même p-value — shapiro_test() est un habillage tidy autour de shapiro.test().

Variables groupées et multiples

L’avantage de rstatix : tester chaque groupe séparément (essentiel avant un t-test ou une ANOVA, qui supposent la normalité à l’intérieur des groupes)…

library(rstatix)

ToothGrowth %>%
  group_by(dose) %>%
  shapiro_test(len)
# A tibble: 3 × 4
   dose variable statistic     p
  <dbl> <chr>        <dbl> <dbl>
1   0.5 len          0.941 0.247
2   1   len          0.931 0.164
3   2   len          0.978 0.902

…ou plusieurs variables à la fois :

library(rstatix)

iris %>% shapiro_test(Sepal.Length, Petal.Width)
# A tibble: 2 × 3
  variable     statistic            p
  <chr>            <dbl>        <dbl>
1 Petal.Width      0.902 0.0000000168
2 Sepal.Length     0.976 0.0102      

Essayez en direct

Vérifiez la normalité d’une autre variable — essayez iris$Sepal.Width, ou testez mtcars$mpg groupé par cyl. Le bac à sable démarre au premier Run.

🟢 Avec un agent IA

Demandez à Prova « ma variable est-elle assez normale pour un t-test, et que faire si elle ne l’est pas ? » — elle répond avec du code rstatix que vous pouvez exécuter sur vos propres données, puis vous aide à lire le Q-Q plot et le test de Shapiro. The runtime is the judge. Demandez à Prova →

Problèmes courants

Shapiro-Wilk échoue sur un grand échantillon. shapiro.test() exige entre 3 et 5000 observations. Pour les échantillons plus grands, appuyez-vous plutôt sur le Q-Q plot (et le théorème central limite).

Le test indique une non-normalité mais le Q-Q plot a l’air correct. Avec un grand n, Shapiro-Wilk devient hypersensible et signale des écarts triviaux. Pour n > 50, fiez-vous au Q-Q plot plus qu’à la p-value.

Un tout petit échantillon « passe » la normalité. Les petits échantillons manquent de puissance pour détecter la non-normalité, donc un résultat non significatif n’est pas une preuve solide. Associez le test au contrôle visuel — toujours.

Questions fréquentes

Associez un contrôle visuel à un test de signification. Tracez un Q-Q plot (ggpubr::ggqqplot(data, "var")) et exécutez le test de Shapiro-Wilkdata %>% shapiro_test(var) (rstatix) ou shapiro.test(data$var) (base R). Si les points du Q-Q épousent la droite et que la p-value de Shapiro est supérieure à 0.05, vous pouvez supposer la normalité.

L’hypothèse nulle est que les données sont normales. Donc p > 0.05 signifie que vous ne pouvez pas rejeter la normalité — on suppose que les données sont normales. p < 0.05 signifie que les données s’écartent significativement de la normale, donc un test paramétrique peut ne pas être approprié ; envisagez une alternative non paramétrique.

Shapiro-Wilk est généralement préféré pour tester la normalité : il a plus de puissance statistique que le test de Kolmogorov-Smirnov (K-S) à cet effet. Utilisez K-S pour comparer un échantillon à une distribution entièrement spécifiée ; pour la question courante « mes données sont-elles normales ? », utilisez Shapiro-Wilk.

Vous avez trois bonnes options : (1) utiliser un test non paramétrique (Wilcoxon au lieu du t-test, Kruskal-Wallis au lieu de l’ANOVA, Spearman au lieu de Pearson) ; (2) transformer la variable (log, racine carrée, Box-Cox) pour la rendre plus normale ; ou (3) si votre échantillon est grand, vous appuyer sur le théorème central limite et procéder au test paramétrique.

Oui — pour un t-test ou une ANOVA, l’hypothèse de normalité s’applique aux données à l’intérieur de chaque groupe, et non aux données regroupées. Utilisez data %>% group_by(group) %>% shapiro_test(value) pour vérifier chaque groupe d’un coup.

Testez vos connaissances

  1. Exécutez-le. Dans la cellule en direct, testez si mtcars$mpg suit une distribution normale (Q-Q plot + test de Shapiro). Est-ce normal au seuil de 0.05 ?
  2. Conceptuel. Un collègue exécute Shapiro-Wilk sur 8 000 lignes, obtient p = 0.003, et conclut que les données « ne peuvent pas être utilisées » pour un t-test. Pourquoi cette conclusion est-elle probablement fausse ?

Remplissez les deux blancs avec mpg. Lisez la colonne p : au-dessus de 0.05 → on suppose normal. Pour la question 2, réfléchissez à la façon dont le test de Shapiro-Wilk se comporte lorsque la taille d’échantillon devient très grande.

library(rstatix)
mtcars %>% shapiro_test(mpg)
#> p ≈ 0.12  → above 0.05, so mpg is approximately normal.

Pour la question 2 : avec 8 000 observations, le test de Shapiro-Wilk est si puissant qu’il détecte des écarts triviaux et inoffensifs à la normalité — un effet minuscule devient « significatif ». À cette taille d’échantillon, le théorème central limite rend également le t-test robuste à la non-normalité. Le bon réflexe est de regarder le Q-Q plot : si les points suivent grossièrement la droite, le test paramétrique convient malgré la petite p-value.

Conclusion

Vous savez maintenant tester la normalité en R correctement — en combinant un Q-Q plot avec le test de Shapiro-Wilk (shapiro_test() dans rstatix pour une, plusieurs ou des variables groupées, ou base shapiro.test()), et en lisant le résultat en tenant compte de la taille d’échantillon.

C’est l’étape préalable à un test paramétrique. Si la normalité tient, passez au t-test ou au test de corrélation ; sinon, tournez-vous vers une alternative non paramétrique.

Leçons connexes

Cette page vous a-t-elle été utile ?

Prouvez que vous savez le faire. Maîtrisez toute la série Hypothèses statistiques en R — suivez votre parcours, construisez des projets et obtenez un certificat.

Commencer gratuitement →

Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.

dès 15 $/mois facturé annuellement

Passer à Pro →

✓ Vous êtes Pro — continuez. The runtime is the judge.

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN
Note

Chaque résultat de cette page a été produit par le code affiché, exécuté au moment de la construction dans un environnement R figé — modifiez n’importe quel bloc et Run pour le reproduire vous-même.

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Test de normalité en R : Shapiro-Wilk \& Q-Q plots},
  date = {2026-06-22},
  url = {https://www.datanovia.com/learn/biostatistics/assumptions/normality-test-in-r},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Test de normalité en R : Shapiro-Wilk & Q-Q plots.” 2026. June 22. https://www.datanovia.com/learn/biostatistics/assumptions/normality-test-in-r.