library(ggpubr)
ggdensity(ToothGrowth, x = "len", fill = "lightgray",
xlab = "Tooth length")
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.
22 juin 2026
17 juillet 2026
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).shapiro_test() de rstatix (une variable, groupée ou plusieurs à la fois) ou base R shapiro.test().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).
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.
Un graphique de densité montre la forme de la distribution — vous cherchez une courbe en cloche symétrique :
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) :
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().)
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
)
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.
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 :
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 :
# 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.
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().
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)…
# 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 :
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.
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 →
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.
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-Wilk — data %>% 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.
mtcars$mpg suit une distribution normale (Q-Q plot + test de Shapiro). Est-ce normal au seuil de 0.05 ?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.
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.
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.
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.
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
✓ Vous êtes Pro — continuez. The runtime is the judge.
Prêt à passer à la vitesse supérieure ?
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.
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.
@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}
}