Test de Friedman en R : comparaison non paramétrique appariée

Comparez trois groupes appariés (répétés) ou plus sans l’hypothèse de normalité — le test de Friedman à la manière moderne, avec la taille d’effet Kendall W et les comparaisons par paires de suivi

Apprenez à exécuter le test de Friedman en R avec rstatix — l’alternative non paramétrique à l’ANOVA à mesures répétées à un facteur, pour trois groupes appariés ou plus quand la normalité échoue ou que la sortie est ordinale. Calculez le test, la taille d’effet Kendall W et les comparaisons de Wilcoxon des rangs signés par paires, puis affichez les p-values sur le graphique.

Date de publication

23 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Le test de Friedman est l’alternative non paramétrique à l’ ANOVA à mesures répétées à un facteur : il compare trois groupes appariés ou plus (les mêmes sujets mesurés de façon répétée) sans supposer la normalité.
  • Utilisez-le quand l’hypothèse de normalité de l’ANOVA à mesures répétées échoue, ou que la sortie est ordinale.
  • Exécutez-le avec rstatix friedman_test(score ~ time | id)| id identifie le sujet répété.
  • Rapportez la taille d’effet Kendall W (friedman_effsize()) : 0.1 faible, 0.3 modérée, ≥ 0.5 forte.
  • Faites suivre un résultat significatif de tests de Wilcoxon des rangs signés par paires (corrigés par Bonferroni) pour voir quels points temporels diffèrent.

Introduction

Le test de Friedman évalue si trois groupes appariés ou plus diffèrent — les mêmes participants mesurés sous plusieurs conditions ou au fil du temps. C’est le pendant non paramétrique de l’ ANOVA à mesures répétées à un facteur, et il étend le test des signes de deux groupes appariés à plusieurs. Parce qu’il travaille sur les rangs, il ne fait aucune hypothèse de normalité et gère les sorties ordinales.

Tournez-vous vers lui quand les hypothèses de l’ANOVA à mesures répétées ne tiennent pas — différences non normales, petits échantillons ou données sur échelle de notation. Le scénario ici : l’estime de soi mesurée à trois points temporels sur les mêmes personnes — les scores diffèrent-ils dans le temps ? Cette leçon exécute le flux de travail avec rstatix sur le jeu de données selfesteem.

Note

Hypothèses du test de Friedman. H₀ : les distributions des groupes répétés sont identiques (aucune différence entre les conditions). Hₐ : la distribution d’au moins un groupe diffère. Le test classe les valeurs de chaque sujet entre les conditions et compare les totaux des rangs.

Les données : l’estime de soi sur trois points temporels

Nous utilisons le jeu de données selfesteem de datarium — le score d’estime de soi de 10 personnes à trois instants (t1/t2/t3). Le test de Friedman a besoin du format long, construit avec base R :

library(rstatix)

data("selfesteem", package = "datarium")
n <- nrow(selfesteem)
long <- data.frame(
  id    = factor(rep(selfesteem$id, 3)),
  time  = factor(rep(c("t1", "t2", "t3"), each = n)),
  score = c(selfesteem$t1, selfesteem$t2, selfesteem$t3)
)
head(long, 3)
  id time    score
1  1   t1 4.005027
2  2   t1 2.558124
3  3   t1 3.244241

Résumez le score à chaque point temporel :

library(rstatix)

data("selfesteem", package = "datarium")
n <- nrow(selfesteem)
long <- data.frame(
  id = factor(rep(selfesteem$id, 3)), time = factor(rep(c("t1", "t2", "t3"), each = n)),
  score = c(selfesteem$t1, selfesteem$t2, selfesteem$t3)
)

long %>%
  group_by(time) %>%
  get_summary_stats(score, type = "common")
# A tibble: 3 × 11
  time  variable     n   min   max median   iqr  mean    sd    se    ci
  <fct> <fct>    <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 t1    score       10  2.05  4.00   3.21 0.571  3.14 0.552 0.174 0.395
2 t2    score       10  3.91  6.91   4.60 0.89   4.93 0.863 0.273 0.617
3 t3    score       10  6.31  9.78   7.46 1.74   7.64 1.14  0.361 0.817

Regardez d’abord les données

Une boîte à moustaches avec les points individuels montre la trajectoire de chaque sujet au fil du temps :

library(rstatix)
library(ggpubr)

data("selfesteem", package = "datarium")
n <- nrow(selfesteem)
long <- data.frame(
  id = factor(rep(selfesteem$id, 3)), time = factor(rep(c("t1", "t2", "t3"), each = n)),
  score = c(selfesteem$t1, selfesteem$t2, selfesteem$t3)
)

ggboxplot(long, x = "time", y = "score", add = "jitter", color = "#3a86d4")

A boxplot of self-esteem score at three time points with individual data points jittered on top; the median score rises steadily from t1 to t3.

Lancer le test de Friedman

friedman_test() prend une formule score ~ time | id — la sortie selon le facteur répété, avec | id nommant l’identifiant du sujet :

library(rstatix)

data("selfesteem", package = "datarium")
n <- nrow(selfesteem)
long <- data.frame(
  id = factor(rep(selfesteem$id, 3)), time = factor(rep(c("t1", "t2", "t3"), each = n)),
  score = c(selfesteem$t1, selfesteem$t2, selfesteem$t3)
)

res.fried <- long %>% friedman_test(score ~ time | id)
res.fried
# A tibble: 1 × 6
  .y.       n statistic    df        p method       
* <chr> <int>     <dbl> <dbl>    <dbl> <chr>        
1 score    10      18.2     2 0.000112 Friedman test

L’estime de soi diffère significativement entre les trois points temporels, χ²(2) = 18.2, p = 0.0001 — la distribution d’au moins un point temporel est différente.

Taille d’effet : Kendall W

Le coefficient Kendall W mesure l’ampleur de l’effet, de 0 (aucun accord) à 1 (parfait) :

library(rstatix)

data("selfesteem", package = "datarium")
n <- nrow(selfesteem)
long <- data.frame(
  id = factor(rep(selfesteem$id, 3)), time = factor(rep(c("t1", "t2", "t3"), each = n)),
  score = c(selfesteem$t1, selfesteem$t2, selfesteem$t3)
)

long %>% friedman_effsize(score ~ time | id)
# A tibble: 1 × 5
  .y.       n effsize method    magnitude
* <chr> <int>   <dbl> <chr>     <ord>    
1 score    10    0.91 Kendall W large    

W = 0.91 est un effet fort (les repères sont 0.1 faible, 0.3 modérée, ≥ 0.5 forte) — le temps a une forte influence sur l’estime de soi.

Post-hoc : quels points temporels diffèrent ?

Un test de Friedman significatif est suivi de tests de Wilcoxon des rangs signés par paires (la comparaison appariée non paramétrique), corrigés par Bonferroni :

library(rstatix)

data("selfesteem", package = "datarium")
n <- nrow(selfesteem)
long <- data.frame(
  id = factor(rep(selfesteem$id, 3)), time = factor(rep(c("t1", "t2", "t3"), each = n)),
  score = c(selfesteem$t1, selfesteem$t2, selfesteem$t3)
)

pwc <- long %>%
  wilcox_test(score ~ time, paired = TRUE, p.adjust.method = "bonferroni")
pwc
# A tibble: 3 × 9
  .y.   group1 group2    n1    n2 statistic     p p.adj p.adj.signif
* <chr> <chr>  <chr>  <int> <int>     <dbl> <dbl> <dbl> <chr>       
1 score t1     t2        10    10         0 0.002 0.006 **          
2 score t1     t3        10    10         0 0.002 0.006 **          
3 score t2     t3        10    10         1 0.004 0.012 *           

Les trois différences par paires sont toutes significatives : t1–t2 (p.adj = 0.006), t1–t3 (p.adj = 0.006) et t2–t3 (p.adj = 0.012) — l’estime de soi augmente significativement à chaque étape.

Représentez-le avec les p-values

library(rstatix)
library(ggpubr)

data("selfesteem", package = "datarium")
n <- nrow(selfesteem)
long <- data.frame(
  id = factor(rep(selfesteem$id, 3)), time = factor(rep(c("t1", "t2", "t3"), each = n)),
  score = c(selfesteem$t1, selfesteem$t2, selfesteem$t3)
)

res.fried <- long %>% friedman_test(score ~ time | id)
pwc <- long %>%
  wilcox_test(score ~ time, paired = TRUE, p.adjust.method = "bonferroni") %>%
  add_xy_position(x = "time")

ggboxplot(long, x = "time", y = "score", add = "point", color = "#3a86d4") +
  stat_pvalue_manual(pwc, hide.ns = TRUE) +
  labs(
    subtitle = get_test_label(res.fried, detailed = TRUE),
    caption = get_pwc_label(pwc)
  )

A boxplot of self-esteem score across three time points with individual points, the Friedman chi-square(2)=18.2, p=0.0001 in the subtitle and the three significant pairwise brackets drawn above the boxes.

Rapport

Le score d’estime de soi différait significativement entre les trois points temporels, comme l’évalue un test de Friedman, χ²(2) = 18.2, p = 0.0001, avec une forte taille d’effet (Kendall W = 0.91). Les tests de Wilcoxon des rangs signés par paires (corrigés par Bonferroni) ont montré des augmentations significatives entre t1 et t2 (p = 0.006), t1 et t3 (p = 0.006), et t2 et t3 (p = 0.012).

Le test de Friedman classe les valeurs de chaque sujet entre les \(k\) conditions (les rangs vont donc de 1…\(k\) au sein de chaque ligne), somme les rangs par condition et compare ces totaux de rangs à ce que donneraient des distributions égales. La statistique \(\chi^2_F = \frac{12}{N k (k+1)} \sum_j R_j^2 - 3N(k+1)\) (avec \(R_j\) le total des rangs pour la condition \(j\), \(N\) sujets, \(k\) conditions) suit une distribution du chi-carré à \(k-1\) degrés de liberté. Kendall \(W = \chi^2_F / [N(k-1)]\) la remet à l’échelle en une taille d’effet de 0 à 1.

Essayez en direct

Exécutez le flux de travail de Friedman sur une autre question à mesures répétées, ou modifiez l’étape post-hoc. Le bac à sable démarre au premier Run.

🟢 Avec un agent IA

Demandez à Prova « J’ai les mêmes sujets mesurés à trois points temporels ou plus et mes données ne sont pas normales — lance un test de Friedman sur mes données, donne la taille d’effet Kendall W et dis-moi quels points temporels diffèrent » — 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

Vos données sont au format large. friedman_test() a besoin du format long — une ligne par mesure avec id, le facteur répété et le score. Restructurez d’abord les colonnes larges.

Vous avez utilisé un Wilcoxon ordinaire (non apparié) pour le post-hoc. Le suivi doit être le test de Wilcoxon des rangs signés apparié (paired = TRUE) parce que les groupes sont des mesures répétées des mêmes sujets — et les données doivent être ordonnées de façon cohérente par id pour que les paires s’alignent.

Vous avez exécuté une ANOVA à mesures répétées malgré des données non normales. Si les différences intra-sujets sont clairement non normales ou que la sortie est ordinale, le test de Friedman est le bon choix — la statistique F de l’ANOVA n’est pas fiable dans ce cas.

Questions fréquentes

Le test de Friedman compare trois groupes appariés (répétés) ou plus — les mêmes sujets mesurés sous plusieurs conditions ou au fil du temps — pour voir si leurs distributions diffèrent. C’est l’alternative non paramétrique à l’ANOVA à mesures répétées à un facteur, utilisée quand la normalité échoue ou que la sortie est ordinale.

Les deux comparent trois groupes appariés ou plus, mais l’ANOVA à mesures répétées est paramétrique (elle suppose des différences distribuées normalement et teste des moyennes), tandis que le test de Friedman est non paramétrique (il travaille sur les rangs, sans hypothèse de normalité). Utilisez Friedman quand les hypothèses de l’ANOVA sont violées ou que les données sont ordinales.

Des tests de Wilcoxon des rangs signés par paires (la comparaison appariée non paramétrique), avec une correction pour tests multiples telle que Bonferroni. Cela identifie quelles paires de conditions précises diffèrent après que le test global de Friedman s’est révélé significatif.

Kendall W (friedman_effsize()), qui va de 0 (aucun effet) à 1 (parfait), interprété avec les repères de Cohen : 0.1 faible, 0.3 modérée, ≥ 0.5 forte. Rapportez-la aux côtés de la statistique du chi-carré et de la p-value.

Testez vos connaissances

  1. Exécutez-le. Dans la cellule en direct, exécutez le test de Friedman de score selon time avec le sujet id. Complétez le blanc dans la formule. Le résultat est-il significatif, et quel est le Kendall W ?
  2. Conceptuel. Vos données à mesures répétées échouent à l’hypothèse de normalité. Pourquoi le test de Friedman est-il le bon choix, et quel test post-hoc utiliseriez-vous ?

Complétez la formule en score ~ time | idtime est le facteur répété et id le sujet. La sortie donne la statistique du chi-carré et la p-value ; ajoutez friedman_effsize() pour le Kendall W. Pour la question 2, rappelez-vous quelle hypothèse le test de Friedman ne fait pas.

long |> friedman_test(score ~ time | id)
#> chi-square(2) = 18.2, p = 0.0001 — significant.
long |> friedman_effsize(score ~ time | id)
#> Kendall's W = 0.91 (large).

Le test est significatif avec un fort effet. Pour la question 2 : le test de Friedman est non paramétrique, il ne fait donc aucune hypothèse de normalité — le bon choix quand les différences intra-sujets ne sont pas normales. Faites-le suivre de tests de Wilcoxon des rangs signés par paires.

AstuceQuel test, quand ?

Conclusion

Vous savez maintenant exécuter le test de Friedman en R : restructurez au format long, exécutez friedman_test(score ~ time | id), rapportez le Kendall W pour la taille d’effet, et faites suivre un résultat significatif de tests de Wilcoxon des rangs signés par paires pour localiser les différences. C’est le test à privilégier dès que vous avez trois mesures répétées ou plus et que l’hypothèse de normalité de l’ANOVA à mesures répétées ne tient pas.

Leçons connexes

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

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