Transformer les données vers la normalité en R : log, racine carrée et inverse

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.

Date de publication

23 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Les tests paramétriques (le t-test, l’ANOVA) supposent un résultat approximativement normal ; lorsqu’il est asymétrique, une transformation peut le corriger.
  • Mesurez le skewness avec moments::skewness() : 0 = symétrique, positif = asymétrie à droite, négatif = asymétrie à gauche ; plus la magnitude est grande, plus l’écart est marqué.
  • Adaptez la transformation à la sévérité : racine carrée (modérée), log (plus forte), inverse 1/x (sévère) — avec une forme miroir pour une asymétrie négative.
  • Vérifiez que cela a fonctionné : retracez la densité face à la courbe normale et recalculez le skewness.
  • La transformation complique l’interprétation — ne le faites que lorsque c’est nécessaire, et sur de grands échantillons le théorème central limite la rend souvent superflue.

Introduction

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.

Mesurer le skewness

Le package moments calcule le coefficient de skewness — ici pour iris$Sepal.Length :

library(moments)

skewness(iris$Sepal.Length, na.rm = TRUE)
[1] 0.3117531

Une petite valeur positive (~0.3) indique une légère asymétrie à droite — suffisamment proche de la symétrie.

Méthodes de transformation

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)
Avertissement

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.

Exemple pratique : deux variables asymétriques

Nous utilisons USJudgeRatings et deux de ses colonnes : CONT (contacts avocat–juge, asymétrie positive) et PHYS (capacité physique, asymétrie négative).

library(moments)

df <- USJudgeRatings
c(CONT = skewness(df$CONT), PHYS = skewness(df$PHYS))
     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
)

Two density plots: CONT is clearly right-skewed and PHYS is left-skewed, each compared to the overlaid dashed normal curve.

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
)

Density plots of CONT and PHYS after a log10 transformation, each overlaid with the normal curve; both are much closer to normal than before.

Vérifiez avec le skewness des variables transformées :

library(moments)

df <- USJudgeRatings
df$CONT <- log10(df$CONT)
df$PHYS <- log10(max(df$PHYS + 1) - df$PHYS)
c(CONT = skewness(df$CONT), PHYS = skewness(df$PHYS))
     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.

Essayez en direct

Transformez vous-même une variable asymétrique et observez le skewness diminuer. Le bac à sable démarre au premier Run.

🟢 Avec un agent IA

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 →

Problèmes courants

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.

Questions fréquentes

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.

Testez vos connaissances

  1. Exécutez-le. Dans la cellule interactive, calculez le skewness de USJudgeRatings$CONT avant et après une transformation log10. Complétez le blanc. Le skewness s’est-il rapproché de 0 ?
  2. Conceptuel. Une variable a un skewness de −1.8 (fortement asymétrique à gauche). Quelle forme de transformation appliquez-vous, et pourquoi la version miroir ?

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.

x <- USJudgeRatings$CONT
skewness(x)          #> ~1.09 (right-skewed)
skewness(log10(x))   #> ~0.66 — closer to 0

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.

Conclusion

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.

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 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.

Réutilisation

Citation

BibTeX
@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}
}
Veuillez citer ce travail comme suit :
“Transformer les données vers la normalité en R : log, racine carrée et inverse.” 2026. June 23. https://www.datanovia.com/learn/biostatistics/assumptions/data-transformation-in-r.