Test de Wilcoxon dans R : comparaison non paramétrique

L’alternative non paramétrique au t-test — à un échantillon, somme des rangs (Mann-Whitney) et rangs signés appariés — avec tailles d’effet et p-value sur le graphique

Apprenez à réaliser le test de Wilcoxon dans R avec rstatix — l’alternative non paramétrique au t-test lorsque les données ne suivent pas une loi normale. Couvre les trois formes : le test des rangs signés à un échantillon, le test de la somme des rangs de Wilcoxon (Mann-Whitney) pour deux groupes indépendants, et le test des rangs signés apparié — avec la vérification de l’hypothèse de symétrie, la taille d’effet r et la p-value sur le graphique.

Date de publication

23 juin 2026

Modifié

17 juillet 2026

AstucePoints clés
  • Le test de Wilcoxon est l’alternative non paramétrique au t-test : il compare les groupes par les rangs, il ne suppose donc pas des données normalement distribuées.
  • Il existe sous trois formes calquées sur le t-test : les rangs signés à un échantillon (par rapport à une valeur de référence), le test de la somme des rangs / Mann-Whitney (deux groupes indépendants), et le test des rangs signés apparié.
  • Réalisez-les tous avec rstatix wilcox_test()weight ~ 1, mu = 25 (un échantillon), weight ~ group (indépendant), ou ajoutez paired = TRUE (apparié).
  • Il suppose que les données (ou les différences appariées) sont symétriques autour de la médiane — vérifiez avec un histogramme ; sinon, utilisez plutôt le test des signes.
  • Rapportez la taille d’effet r (wilcox_effsize()) : 0.1 faible, 0.3 modérée, ≥ 0.5 grande.
Obtenez le livre — Comparing Groups: Numerical Variables (PDF)

Introduction

Le test de Wilcoxon compare les groupes à l’aide des rangs plutôt que des moyennes, ce qui en fait l’alternative non paramétrique de référence au t-test lorsque les données ne suivent pas une loi normale, que l’échantillon est petit, ou que la variable est ordinale. Comme le t-test, il existe sous trois formes :

  • Rangs signés à un échantillon — la médiane diffère-t-elle d’une valeur de référence ?
  • Somme des rangs (alias Mann-Whitney U) — deux groupes indépendants diffèrent-ils ?
  • Rangs signés apparié — deux mesures liées diffèrent-elles ?

Cette leçon réalise les trois avec rstatix, en utilisant les mêmes jeux de données de démonstration que la leçon sur le t-test, pour que vous puissiez comparer directement les deux approches.

Note

Taille d’échantillon. Le test de Wilcoxon a besoin d’au moins 6 observations (ou paires) pour pouvoir atteindre la significativité — en deçà, la distribution des rangs est trop grossière.

Test des rangs signés de Wilcoxon à un échantillon

Le test à un échantillon demande si la médiane d’un échantillon diffère d’une valeur connue — l’équivalent non paramétrique du t-test à un échantillon. Nous utilisons le jeu de données mice (poids de 10 souris) et testons par rapport à une référence de 25 g :

library(rstatix)

data("mice", package = "datarium")
mice %>% get_summary_stats(weight, type = "median_iqr")
# A tibble: 1 × 4
  variable     n median   iqr
  <fct>    <dbl>  <dbl> <dbl>
1 weight      10   19.8   1.8

Hypothèse — symétrie. Le test des rangs signés suppose que les données sont à peu près symétriques autour de la médiane. Vérifiez avec un histogramme (peu de classes pour un petit échantillon) :

library(ggpubr)

data("mice", package = "datarium")
gghistogram(mice, x = "weight", y = "density", fill = "#3a86d4", bins = 4, add_density = TRUE)

A histogram with density curve of the 10 mouse weights using four bins; the distribution is roughly symmetric, supporting the Wilcoxon signed-rank test.

Les poids sont approximativement symétriques, le test des rangs signés est donc approprié. Réalisez-le avec weight ~ 1, mu = 25 :

library(rstatix)

data("mice", package = "datarium")
stat.test <- mice %>% wilcox_test(weight ~ 1, mu = 25)
stat.test
# A tibble: 1 × 6
  .y.    group1 group2         n statistic       p
* <chr>  <chr>  <chr>      <int>     <dbl>   <dbl>
1 weight 1      null model    10         0 0.00195

Le poids médian (19.8 g) est significativement inférieur à 25 g, p = 0.002. Rapportez la taille d’effet r :

library(rstatix)

data("mice", package = "datarium")
mice %>% wilcox_effsize(weight ~ 1, mu = 25)
# A tibble: 1 × 6
  .y.    group1 group2     effsize     n magnitude
* <chr>  <chr>  <chr>        <dbl> <int> <ord>    
1 weight 1      null model   0.886    10 large    

Un r de 0.89 correspond à un effet grand (repères : 0.1 faible, 0.3 modéré, ≥ 0.5 grand).

Test de la somme des rangs de Wilcoxon (Mann-Whitney)

Le test de la somme des rangs — aussi appelé test U de Mann-Whitney — compare deux groupes indépendants, l’alternative non paramétrique au t-test pour échantillons indépendants. Nous utilisons genderweight (poids de 20 femmes et 20 hommes) :

library(rstatix)

data("genderweight", package = "datarium")
genderweight %>%
  group_by(group) %>%
  get_summary_stats(weight, type = "median_iqr")
# A tibble: 2 × 5
  group variable     n median   iqr
  <fct> <fct>    <dbl>  <dbl> <dbl>
1 F     weight      20   62.9  2.33
2 M     weight      20   86.3  4.59
library(rstatix)

data("genderweight", package = "datarium")
stat.test <- genderweight %>%
  wilcox_test(weight ~ group) %>%
  add_significance()
stat.test
# A tibble: 1 × 8
  .y.    group1 group2    n1    n2 statistic        p p.signif
  <chr>  <chr>  <chr>  <int> <int>     <dbl>    <dbl> <chr>   
1 weight F      M         20    20         0 1.45e-11 ****    

La médiane des femmes (62.9) et celle des hommes (86.3) diffèrent significativement, p < 0.0001. La taille d’effet :

library(rstatix)

data("genderweight", package = "datarium")
genderweight %>% wilcox_effsize(weight ~ group)
# A tibble: 1 × 7
  .y.    group1 group2 effsize    n1    n2 magnitude
* <chr>  <chr>  <chr>    <dbl> <int> <int> <ord>    
1 weight F      M        0.855    20    20 large    

Un r de 0.86 — un effet grand. Affichez la p-value sur le graphique :

library(rstatix)
library(ggpubr)

data("genderweight", package = "datarium")
stat.test <- genderweight %>%
  wilcox_test(weight ~ group) %>%
  add_xy_position(x = "group")

ggboxplot(genderweight, x = "group", y = "weight", add = "jitter",
          xlab = "Group", ylab = "Weight", color = "group", palette = "jco") +
  stat_pvalue_manual(stat.test, tip.length = 0) +
  labs(subtitle = get_test_label(stat.test, detailed = TRUE))

A boxplot of weight by gender with jittered points; the male weights are clearly higher, and the Wilcoxon rank-sum p-value is printed above the two groups.

Test des rangs signés de Wilcoxon apparié

Le test apparié compare deux mesures liées — le t-test apparié non paramétrique. Nous utilisons mice2 (poids de 10 souris avant et après un traitement), réorganisé au format long avec R de base :

library(rstatix)

data("mice2", package = "datarium")
n <- nrow(mice2)
mice2.long <- data.frame(
  id     = factor(rep(mice2$id, 2)),
  group  = factor(rep(c("before", "after"), each = n), levels = c("before", "after")),
  weight = c(mice2$before, mice2$after)
)

mice2.long %>% group_by(group) %>% get_summary_stats(weight, type = "median_iqr")
# A tibble: 2 × 5
  group  variable     n median   iqr
  <fct>  <fct>    <dbl>  <dbl> <dbl>
1 before weight      10   197.  19.2
2 after  weight      10   405   28.3

Hypothèse — symétrie des différences. Le test apparié suppose que les différences avant–après sont symétriques. Vérifiez avec un histogramme des différences :

library(ggpubr)

data("mice2", package = "datarium")
diffs <- data.frame(differences = mice2$after - mice2$before)
gghistogram(diffs, x = "differences", y = "density", fill = "#3a86d4", bins = 5, add_density = TRUE)

A histogram with density curve of the 10 before-minus-after weight differences; roughly symmetric, supporting the paired Wilcoxon test.

Réalisez le test apparié avec paired = TRUE :

library(rstatix)

data("mice2", package = "datarium")
n <- nrow(mice2)
mice2.long <- data.frame(
  id = factor(rep(mice2$id, 2)),
  group = factor(rep(c("before", "after"), each = n), levels = c("before", "after")),
  weight = c(mice2$before, mice2$after)
)

stat.test <- mice2.long %>%
  wilcox_test(weight ~ group, paired = TRUE) %>%
  add_significance()
stat.test
# A tibble: 1 × 8
  .y.    group1 group2    n1    n2 statistic       p p.signif
  <chr>  <chr>  <chr>  <int> <int>     <dbl>   <dbl> <chr>   
1 weight before after     10    10         0 0.00195 **      
mice2.long %>% wilcox_effsize(weight ~ group, paired = TRUE)
# A tibble: 1 × 7
  .y.    group1 group2 effsize    n1    n2 magnitude
* <chr>  <chr>  <chr>    <dbl> <int> <int> <ord>    
1 weight before after    0.886    10    10 large    

Les poids diffèrent significativement avant vs après le traitement, p = 0.002, avec un effet grand (r = 0.89).

Rapport

Un test de la somme des rangs de Wilcoxon a montré que le poids différait significativement entre les femmes (médiane = 62.9) et les hommes (médiane = 86.3), p < 0.0001, avec une grande taille d’effet (r = 0.86). [Pour le plan apparié : la médiane du poids des souris différait significativement avant vs après le traitement, p = 0.002, r = 0.89.]

Les tests de Wilcoxon remplacent les valeurs brutes par des rangs. Le test des rangs signés classe les différences absolues par rapport à la référence (ou les différences appariées), leur attache le signe, et somme les rangs positifs ; le test de la somme des rangs regroupe les deux groupes, classe l’ensemble, et somme les rangs d’un groupe. Sous l’hypothèse nulle, la somme des rangs suit une distribution connue, ce qui donne la p-value. La taille d’effet \(r = Z / \sqrt{N}\) convertit la statistique standardisée du test sur une échelle de 0 à 1 (\(N\) = nombre total d’observations, ou nombre de paires).

Essayez en direct

Réalisez vous-même le test de la somme des rangs et changez le jeu de données ou ajoutez alternative = "less" pour un test unilatéral. Le bac à sable démarre au premier Run.

🟢 Avec un agent IA

Demandez à Prova « mes données ne sont pas normales — réalise le bon test de Wilcoxon sur mes deux groupes (indépendants ou appariés), vérifie l’hypothèse de symétrie, et donne-moi la taille d’effet » — elle répond avec du code rstatix que vous pouvez exécuter sur vos propres données. The runtime is the judge. Demander à Prova →

Problèmes courants

Vous avez utilisé un test pour échantillons indépendants sur des données appariées (ou inversement). Ajoutez paired = TRUE pour des données avant/après ou appariées ; omettez-le pour deux groupes indépendants. Le mauvais choix change entièrement le résultat.

Vos différences ne sont pas symétriques. Le test des rangs signés suppose une distribution symétrique des différences. Si un histogramme montre une asymétrie nette, passez au test des signes, qui ne fait aucune hypothèse de symétrie (au prix d’une certaine puissance).

Vous avez obtenu un avertissement « cannot compute exact p-value with ties ». En présence de valeurs ex æquo, R se rabat sur une approximation normale — c’est attendu et sans conséquence ; la p-value reste valide.

Questions fréquentes

Le t-test compare les moyennes et suppose que les données suivent une loi normale ; le test de Wilcoxon compare les distributions par les rangs et ne fait aucune hypothèse de normalité. Utilisez le test de Wilcoxon lorsque la normalité échoue, que l’échantillon est petit, ou que la variable est ordinale — c’est l’alternative non paramétrique au t-test.

Ce sont deux formes du test de Wilcoxon pour des plans différents. Le U de Mann-Whitney (alias somme des rangs de Wilcoxon) compare deux groupes indépendants ; le test des rangs signés de Wilcoxon compare un échantillon à une valeur de référence (un échantillon) ou deux mesures appariées/liées. Dans rstatix : wilcox_test(y ~ group) vs wilcox_test(y ~ group, paired = TRUE).

Il suppose que les données (un échantillon) ou les différences appariées sont distribuées symétriquement autour de la médiane — vérifiez avec un histogramme. Il ne suppose pas la normalité. Si la distribution est nettement asymétrique, utilisez plutôt le test des signes.

La taille d’effet r issue de wilcox_effsize(), calculée comme Z / √N, interprétée avec les repères de Cohen : 0.1 faible, 0.3 modérée, ≥ 0.5 grande. Rapportez-la aux côtés de la p-value.

Testez vos connaissances

  1. Réalisez-le. Dans la cellule interactive, réalisez un test de la somme des rangs de Wilcoxon de weight par group sur genderweight. Remplissez le blanc. La différence est-elle significative ?
  2. Conceptuel. Vos données avant/après échouent à l’hypothèse de normalité du t-test apparié. Quel test de Wilcoxon utilisez-vous, et que devez-vous vérifier d’abord ?

Remplissez le blanc avec group. Pour deux groupes indépendants, vous n’ajoutez pas paired = TRUE. Pour la question 2, rappelez-vous la forme appariée du test de Wilcoxon et son hypothèse de symétrie.

genderweight %>% wilcox_test(weight ~ group)
#> p < 0.0001 — the two groups differ significantly.

Pour la question 2 : utilisez le test des rangs signés de Wilcoxon apparié (wilcox_test(weight ~ group, paired = TRUE)), et vérifiez d’abord que les différences avant–après sont symétriques (un histogramme). Si elles sont fortement asymétriques, utilisez le test des signes.

AstuceQuel test, quand ?
  • Deux groupes, données normalest-test (un échantillon / indépendant / apparié).
  • Deux groupes, non normalestest de Wilcoxon (cette leçon) — un échantillon, somme des rangs, ou apparié.
  • Deux groupes appariés, différences asymétriquestest des signes.
  • Trois groupes ou plus, non normalesKruskal-Wallis (indépendants) ou Friedman (répétés).

Conclusion

Vous savez désormais réaliser les trois formes du test de Wilcoxon dans R : le test des rangs signés à un échantillon (par rapport à une valeur de référence), le test de la somme des rangs / Mann-Whitney (deux groupes indépendants), et le test des rangs signés apparié — chacun avec wilcox_test(), la vérification de l’hypothèse de symétrie, et la taille d’effet r issue de wilcox_effsize(). C’est l’outil non paramétrique vers lequel se tourner dès que l’hypothèse de normalité du t-test n’est pas satisfaite.

Leçons connexes

Vous préférez un livre ? Comparing Groups: Numerical Variables est disponible en PDF téléchargeable — toutes les leçons de cette série, hors ligne et à vous.

Obtenir le livre (PDF) →Les leçons restent gratuites en ligne.
Cette page vous a-t-elle été utile ?

Prouvez que vous savez le faire. Maîtrisez toute la série Comparaison de deux groupes 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 = {Test de Wilcoxon dans R : comparaison non paramétrique},
  date = {2026-06-23},
  url = {https://www.datanovia.com/learn/biostatistics/two-groups/wilcoxon-test-in-r},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Test de Wilcoxon dans R : comparaison non paramétrique.” 2026. June 23. https://www.datanovia.com/learn/biostatistics/two-groups/wilcoxon-test-in-r.