library(moments)
skewness(iris$Sepal.Length, na.rm = TRUE)[1] 0.3117531
Corrigez des données non normales et asymétriques pour que les tests paramétriques s’appliquent — mesurez l’asymétrie, choisissez la bonne transformation et vérifiez qu’elle a fonctionné
Apprenez à transformer des données asymétriques vers la normalité en R afin que les tests paramétriques (t-test, ANOVA) s’appliquent. Mesurez l’asymétrie avec le package moments, choisissez la bonne transformation (racine carrée, log ou inverse, pour une asymétrie positive ou négative) et vérifiez le résultat avec des graphiques de densité et l’asymétrie avant/après.
23 juin 2026
7 juillet 2026
moments::skewness() : 0 = symétrique, positif = asymétrie à droite, négatif = asymétrie à gauche ; plus la magnitude est grande, plus l’écart est marqué.1/x (sévère) — avec une forme miroir pour une asymétrie négative.Les méthodes paramétriques telles que le t-test et l’ANOVA supposent que le résultat suit une distribution approximativement normale dans chaque groupe. Lorsque la vérification de la normalité échoue parce que les données sont asymétriques, transformer la variable peut la ramener vers la normale afin que le test paramétrique redevienne valide.
Le skewness mesure le défaut de symétrie d’une distribution. Une variable à asymétrie positive (asymétrie à droite) présente une longue queue à droite, où la moyenne dépasse la médiane (Mode < Median < Mean) ; une variable à asymétrie négative (asymétrie à gauche) présente une longue queue à gauche, où la moyenne passe sous la médiane. Le signe et la taille du coefficient de skewness indiquent la direction et la sévérité — et donc quelle transformation choisir. Cette leçon le travaille sur les données intégrées USJudgeRatings.
Le package moments calcule le coefficient de skewness — ici pour iris$Sepal.Length :
Une petite valeur positive (~0.3) indique une légère asymétrie à droite — suffisamment proche de la symétrie.
Choisissez la transformation selon la sévérité de l’asymétrie, et utilisez la forme miroir pour une asymétrie négative (où max(x + 1) - x retourne la queue avant la transformation) :
| Sévérité | Asymétrie positive (droite) | Asymétrie négative (gauche) |
|---|---|---|
| Modérée | sqrt(x) |
sqrt(max(x + 1) - x) |
| Plus forte | log10(x) |
log10(max(x + 1) - x) |
| Sévère | 1 / x |
1 / (max(x + 1) - x) |
Pour une transformation log, chaque valeur doit être positive — ajoutez d’abord une constante si les données contiennent des zéros ou des valeurs négatives.
Nous utilisons USJudgeRatings et deux de ses colonnes : CONT (contacts avocat–juge, asymétrie positive) et PHYS (capacité physique, asymétrie négative).
CONT PHYS
1.085972 -1.558215
CONT a un skewness de +1.09 (asymétrie à droite) et PHYS de −1.56 (asymétrie à gauche) — tous deux bien éloignés de zéro. Tracez leurs densités face à la courbe normale pour le constater :
library(ggpubr)
df <- USJudgeRatings
ggarrange(
ggdensity(df, x = "CONT", fill = "#3a86d4", title = "CONT (right-skewed)") +
stat_overlay_normal_density(color = "red", linetype = "dashed"),
ggdensity(df, x = "PHYS", fill = "#3a86d4", title = "PHYS (left-skewed)") +
stat_overlay_normal_density(color = "red", linetype = "dashed"),
ncol = 2
)
Appliquez une transformation log10 — la forme simple pour CONT (asymétrie à droite), la forme miroir pour PHYS (asymétrie à gauche) :
library(ggpubr)
df <- USJudgeRatings
df$CONT <- log10(df$CONT) # positive skew: plain log
df$PHYS <- log10(max(df$PHYS + 1) - df$PHYS) # negative skew: mirrored log
ggarrange(
ggdensity(df, x = "CONT", fill = "#3a86d4", title = "CONT (log10)") +
stat_overlay_normal_density(color = "red", linetype = "dashed"),
ggdensity(df, x = "PHYS", fill = "#3a86d4", title = "PHYS (mirrored log10)") +
stat_overlay_normal_density(color = "red", linetype = "dashed"),
ncol = 2
)
Vérifiez avec le skewness des variables transformées :
CONT PHYS
0.6555572 0.5824358
Les deux asymétries diminuent en magnitude : l’asymétrie à droite de CONT s’atténue (+1.09 → +0.66), et la forte asymétrie à gauche de PHYS se réduit à une légère asymétrie à droite (−1.56 → +0.58) — bien plus proche de la symétrie, même si le log miroir sur-corrige légèrement PHYS au-delà de zéro. La transformation réduit l’asymétrie mais n’aboutit pas toujours exactement à la normalité, c’est pourquoi on revérifie plutôt que de supposer.
Transformez vous-même une variable asymétrique et observez le skewness diminuer. Le bac à sable démarre au premier Run.
Demandez à Prova « mon résultat est asymétrique et échoue au test de normalité — mesure son skewness et suggère la bonne transformation, puis vérifie si elle a fonctionné » — elle répond avec du code que vous pouvez exécuter sur vos propres données. The runtime is the judge. Demander à Prova →
Vous avez appliqué un log à des données contenant des zéros ou des valeurs négatives. log10(0) vaut -Inf et log10() d’une valeur négative vaut NaN. Ajoutez d’abord une constante pour que toutes les valeurs soient positives (par exemple log10(x + 1)).
Vous avez utilisé la formule d’asymétrie positive sur des données à asymétrie négative. Une asymétrie négative (à gauche) nécessite la forme miroir transform(max(x + 1) - x), qui retourne la longue queue avant la transformation. Vérifiez d’abord le signe de skewness().
La transformation n’a pas aidé — ou vous ne voulez pas interpréter des unités transformées. La transformation n’est pas garantie de fonctionner, et elle complique l’interprétation (une différence en unités log10, pas en unités brutes). Avec des échantillons supérieurs à ~30–40, le théorème central limite permet souvent aux tests paramétriques de tolérer une légère non-normalité, si bien que transformer peut être inutile — exécutez le test dans les deux cas et comparez.
Les tests paramétriques (t-test, ANOVA, régression) supposent un résultat approximativement normal. Lorsque les données sont suffisamment asymétriques pour violer cette hypothèse, une transformation (log, racine carrée, inverse) peut remodeler la distribution vers la normale afin que les p-value du test paramétrique soient fiables — une alternative au passage à un test non paramétrique.
Adaptez-la à la sévérité de l’asymétrie : racine carrée pour une asymétrie modérée, log pour une plus forte, et inverse (1/x) pour une asymétrie sévère. Utilisez la forme simple pour une asymétrie positive (à droite) et la forme miroir (transform(max(x + 1) - x)) pour une asymétrie négative (à gauche). Vérifiez le résultat en recalculant skewness() et en retraçant face à la courbe normale.
Le skewness mesure le défaut de symétrie : 0 est parfaitement symétrique, une valeur positive signifie une longue queue à droite (asymétrie à droite), et une valeur négative signifie une longue queue à gauche (asymétrie à gauche). Plus la magnitude est grande, plus on s’éloigne de la normale — des valeurs au-delà d’environ ±1 indiquent une asymétrie substantielle qu’il vaut la peine de corriger.
Non. La transformation complique l’interprétation et ne réussit pas toujours. Pour la famille des tests t/F, une non-normalité modérée est souvent tolérable, et avec des échantillons supérieurs à ~30–40, le théorème central limite rend généralement les tests paramétriques valides de toute façon. Ne transformez que lorsque la violation est réelle et que le test l’exige — ou envisagez plutôt une alternative non paramétrique.
USJudgeRatings$CONT avant et après une transformation log10. Complétez le blanc. Le skewness s’est-il rapproché de 0 ?Complétez le blanc avec log10. Comparez les deux valeurs de skewness. Pour la question 2, rappelez-vous qu’une asymétrie négative nécessite transform(max(x + 1) - x) pour retourner la longue queue avant la transformation.
La transformation log10 a réduit l’asymétrie. Pour la question 2 : une variable fortement asymétrique à gauche utilise une transformation miroir telle que log10(max(x + 1) - x) — le miroir reflète la longue queue gauche vers la droite afin que le log puisse la compresser, ce qu’un simple log10(x) ne ferait pas.
Vous savez maintenant transformer des données asymétriques vers la normalité en R : mesurez l’asymétrie avec moments::skewness(), adaptez une transformation racine carrée, log ou inverse à sa sévérité (miroir pour une asymétrie négative), et vérifiez avec des graphiques de densité et le skewness recalculé. Utilisez-la pour sauver un test paramétrique lorsque l’hypothèse de normalité échoue — mais souvenez-vous qu’elle complique l’interprétation, et que de grands échantillons la rendent souvent inutile.
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 montré, exécuté au moment du build contre un environnement R figé — modifiez n’importe quel bloc et faites Run pour le reproduire vous-même.
@online{2026,
author = {},
title = {Transformer les données vers la normalité en R : log, racine
carrée et inverse},
date = {2026-06-23},
url = {https://www.datanovia.com/learn/biostatistics/assumptions/data-transformation-in-r},
langid = {fr}
}