Test de McNemar en R : comparer des proportions appariées (avant/après)

Testez si une proportion a changé entre deux mesures appariées — le test catégoriel apparié pour les plans avant/après, avec la version exacte pour les petits échantillons

Apprenez à réaliser le test de McNemar en R — le test pour comparer des proportions appariées, l’équivalent catégoriel du t-test apparié pour un plan avant/après ou apparié. Construisez le tableau apparié 2×2 avec R de base, lancez rstatix mcnemar_test(), et utilisez la version binomiale exacte lorsque les effectifs discordants sont petits.

Date de publication

23 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Le test de McNemar compare des proportions appariées — l’équivalent catégoriel du t-test apparié, pour un plan avant/après ou apparié 2×2 où chaque sujet est mesuré deux fois.
  • Il ne regarde que les paires discordantes (les cellules hors diagonale — les sujets qui ont changé) ; les paires concordantes ne portent aucune information sur le changement.
  • Réalisez-le avec rstatix::mcnemar_test() sur le tableau apparié 2×2.
  • Pour un petit nombre de paires discordantes (≲ 20), utilisez la version binomiale exacte (binom_test() sur les effectifs discordants).
  • Pour trois mesures répétées ou plus, utilisez le test Q de Cochran.

Introduction

Le test de McNemar compare deux proportions appariées — les mêmes sujets mesurés deux fois, dans un plan avant/après ou une étude appariée. C’est l’analogue catégoriel du t-test apparié : au lieu de deux groupes indépendants (qui appelleraient un test du khi-deux), les deux mesures proviennent des mêmes personnes.

L’astuce : seuls les sujets qui ont changé (les paires discordantes — oui→non et non→oui) vous indiquent si la proportion a évolué. Le scénario ici : une intervention anti-tabac a-t-elle modifié la proportion de fumeurs, mesurée avant et après ? Cette leçon la réalise avec rstatix sur les données antismoking.

Note

Hypothèses du test de McNemar. En notant B et C les cellules hors diagonale du tableau apparié 2×2 (les deux types de changement), H₀ : B = C (autant de sujets ont changé dans chaque sens → aucun changement net). Hₐ : B ≠ C (la proportion a changé).

Les données : un tableau apparié avant/après

Nous utilisons le jeu de données antismoking de datarium — 62 personnes dont le statut tabagique a été enregistré avant et après une intervention. Croisez-les dans le tableau apparié 2×2 avec R de base :

library(rstatix)

data("antismoking", package = "datarium")
xtab <- xtabs(~ before + after, data = antismoking)
xtab
            after
before       non.smoker smoker
  non.smoker         25      6
  smoker             21     10

La diagonale (25 sont restés non-fumeurs, 10 sont restés fumeurs) correspond aux paires concordantes — aucun changement. Les cellules hors diagonale sont les paires discordantes : 6 sont passés de non-fumeur → fumeur, et 21 de fumeur → non-fumeur. Le test de McNemar demande si ces deux nombres (6 contre 21) diffèrent.

Réaliser le test de McNemar

library(rstatix)

data("antismoking", package = "datarium")
xtab <- xtabs(~ before + after, data = antismoking)

mcnemar_test(xtab)
# A tibble: 1 × 6
      n statistic    df       p p.signif method      
* <int>     <dbl> <dbl>   <dbl> <chr>    <chr>       
1    62      7.26     1 0.00705 **       McNemar test

Il y a eu un changement significatif du statut tabagique, χ²(1) = 7.26, p = 0.007 — bien plus de personnes ont arrêté (21) qu’il n’y en a commencé (6), donc la proportion de non-fumeurs a augmenté après l’intervention.

Petits échantillons : la version binomiale exacte

Le khi-deux de McNemar est une approximation pour grand échantillon. Lorsque le nombre total de paires discordantes (B + C) est petit (≲ 20), utilisez le test binomial exact — sous H₀, chaque paire discordante a la même probabilité de basculer dans un sens ou dans l’autre, donc l’effectif est testé contre p = 0.5 :

library(rstatix)

# B = 6 (non-smoker -> smoker), C = 21 (smoker -> non-smoker)
binom_test(x = 6, n = 6 + 21, p = 0.5)
# A tibble: 1 × 6
      n estimate conf.low conf.high       p p.signif
* <dbl>    <dbl>    <dbl>     <dbl>   <dbl> <chr>   
1    27    0.222   0.0862     0.423 0.00592 **      

Le test exact concorde (p = 0.006). Ici B + C = 27 donc le khi-deux convient, mais pour moins de paires discordantes la version exacte est le choix sûr.

Le représenter

library(rstatix)
library(ggpubr)

data("antismoking", package = "datarium")
n <- nrow(antismoking)
long <- data.frame(
  time   = factor(rep(c("before", "after"), each = n), levels = c("before", "after")),
  status = c(as.character(antismoking$before), as.character(antismoking$after))
)
stat.test <- mcnemar_test(xtabs(~ before + after, data = antismoking))

ggbarplot(as.data.frame(table(long)), x = "time", y = "Freq", fill = "status",
          palette = "jco", ylab = "Count", xlab = NULL) +
  labs(subtitle = get_test_label(stat.test, detailed = TRUE))

A bar chart of smoking status counts before and after the intervention; the number of non-smokers is higher after, reflecting the significant McNemar result.

Rapport

Un test de McNemar a montré un changement statistiquement significatif du statut tabagique avant vs après l’intervention, χ²(1) = 7.26, p = 0.007 : parmi les participants qui ont changé, 21 ont arrêté de fumer tandis que seulement 6 ont commencé.

La statistique de McNemar n’utilise que les effectifs discordants B et C : \(\chi^2 = \dfrac{(B - C)^2}{B + C}\) (avec une correction de continuité, \(\dfrac{(|B - C| - 1)^2}{B + C}\)), comparée à une distribution du khi-deux à 1 degré de liberté. Les cellules concordantes (A et D) s’annulent car elles ne portent aucune information sur le changement. Sous H₀, les \(B + C\) sujets qui changent se répartissent à 50/50, ce qui correspond exactement à la formulation binomiale exacte.

Essayez en direct

Réalisez le test de McNemar sur votre propre tableau apparié 2×2 — par exemple l’approbation avant vs après une campagne. Modifiez les effectifs et relancez ; le bac à sable démarre au premier Run.

🟢 Avec un agent IA

Demandez à Prova « J’ai mesuré les mêmes sujets avant et après — teste si la proportion a changé avec le test de McNemar » — elle répond avec du code rstatix que vous pouvez exécuter sur votre propre tableau apparié. The runtime is the judge. Demander à Prova →

Problèmes courants

Vous avez utilisé un test du khi-deux sur des données appariées. Le test du khi-deux ordinaire suppose que les deux groupes sont indépendants. Pour les mêmes sujets mesurés deux fois (avant/après, appariés), utilisez le test de McNemar — il tient compte de l’appariement en ne regardant que ceux qui ont changé.

Vous avez regardé la diagonale. McNemar ignore les paires concordantes (aucun changement) — seuls les effectifs discordants hors diagonale comptent. Un tableau avec d’énormes diagonales mais B ≈ C ne montre aucun changement significatif.

Peu de paires discordantes. Lorsque B + C est petit (≲ 20), l’approximation du khi-deux est fragile — rapportez plutôt le résultat binomial exact.

Questions fréquentes

Le test de McNemar compare deux proportions appariées — les mêmes sujets mesurés deux fois (avant/après) ou des paires appariées, sur un résultat oui/non. Il teste si la proportion a changé entre les deux mesures, ce qui en fait l’équivalent catégoriel du t-test apparié.

Le test du khi-deux d’indépendance compare deux groupes indépendants ; le test de McNemar compare les mêmes sujets mesurés deux fois (données appariées). McNemar n’utilise que les paires discordantes (ayant changé), ce qui est la façon dont il tient compte de l’appariement — utiliser un test du khi-deux sur des données appariées serait incorrect.

Lorsque le nombre total de paires discordantes (B + C) est petit — environ 20 ou moins. La version du khi-deux est une approximation pour grand échantillon ; en dessous, le test binomial exact (chaque paire discordante testée contre p = 0.5) donne la p-value correcte.

Testez vos connaissances

  1. Réalisez-le. Dans la cellule interactive, lancez le test de McNemar sur le tableau apparié 2×2. Remplissez le blanc. La proportion a-t-elle changé de façon significative ?
  2. Conceptuel. Votre tableau apparié a 200 sur la diagonale (aucun changement) et B = 8, C = 9 hors diagonale. Le test de McNemar sera-t-il significatif ? Pourquoi ?

Remplissez le blanc avec mcnemar_test. Pour la question 2, rappelez-vous que McNemar ignore la diagonale et dépend de l’écart entre B et C.

mcnemar_test(tab)   #> chi-square(1) = 7.26, p = 0.007 — significant change.

Pour la question 2 : non — McNemar n’utilise que les paires discordantes, et B = 8 contre C = 9 sont presque égaux, donc il n’y a aucune preuve de changement net malgré la grande diagonale concordante. Les 200 sujets inchangés sont sans rapport avec le test.

AstuceQuel test, quand ?

Conclusion

Vous pouvez désormais réaliser le test de McNemar en R : croisez les données appariées avant/après dans un tableau 2×2, lancez mcnemar_test(), et lisez les effectifs discordants — il teste si la proportion a changé entre deux mesures appariées. Utilisez la version binomiale exacte lorsque le nombre de sujets ayant changé est petit, et passez à Q de Cochran pour trois mesures répétées ou plus.

Leçons connexes

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

Prouvez que vous savez le faire. Maîtrisez toute la série Analyse catégorielle 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 McNemar en R : comparer des proportions appariées
    (avant/après)},
  date = {2026-06-23},
  url = {https://www.datanovia.com/learn/biostatistics/categorical/mcnemar-test-in-r},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Test de McNemar en R : comparer des proportions appariées (avant/après).” 2026. June 23. https://www.datanovia.com/learn/biostatistics/categorical/mcnemar-test-in-r.