Test Q de Cochran en R : comparer trois proportions appariées ou plus

Tester si un résultat oui/non diffère entre trois conditions liées ou plus — McNemar étendu aux mesures répétées, avec post-hoc par paires

Apprenez à exécuter le test Q de Cochran en R — l’extension du test de McNemar à trois proportions appariées ou plus, pour un résultat dichotomique mesuré sur les mêmes sujets dans plusieurs conditions ou à plusieurs moments. Exécutez-le avec rstatix cochran_qtest() et poursuivez avec des comparaisons de McNemar par paires.

Date de publication

23 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Le test Q de Cochran étend le test de McNemar à trois proportions appariées ou plus — un résultat oui/non (succès/échec) mesuré sur les mêmes sujets dans plusieurs conditions ou à plusieurs moments.
  • Exécutez-le avec rstatix::cochran_qtest() sur des données au format long : outcome ~ condition | id.
  • Un résultat significatif signifie que la proportion de « succès » diffère entre les conditions.
  • Poursuivez avec des tests de McNemar par paires (pairwise_mcnemar_test()) pour voir quelles conditions diffèrent.
  • Avec exactement deux conditions, le Q de Cochran égale le chi-deux de McNemar (sans correction de continuité).

Introduction

Le test Q de Cochran est l’équivalent catégoriel de l’ANOVA à mesures répétées pour un résultat binaire : il compare une proportion oui/non (succès/échec) entre trois groupes liés ou plus — les mêmes sujets mesurés dans plusieurs conditions, traitements ou moments. Il généralise le test de McNemar (qui en gère deux) à plusieurs.

Le scénario ici : 73 sujets tentent chacun trois tâches, chacune notée succès/échec — les taux de succès diffèrent-ils entre les tâches ? Cette leçon l’exécute avec rstatix sur les données taskachievment.

Note

Hypothèses du Q de Cochran. H₀ : la proportion de succès est la même dans toutes les conditions. Hₐ : la proportion d’au moins une condition diffère.

Les données : trois tâches, succès/échec

Nous utilisons le jeu de données taskachievment de datarium — 73 participants, chacun avec un résultat succès (1) / échec (0) sur Task1, Task2, Task3. Le Q de Cochran a besoin du format long (une ligne par participant × tâche), construit avec R de base :

library(rstatix)

data("taskachievment", package = "datarium")
n <- nrow(taskachievment)
long <- data.frame(
  id      = factor(rep(taskachievment$participant, 3)),
  task    = factor(rep(c("Task1", "Task2", "Task3"), each = n)),
  outcome = c(taskachievment$Task1, taskachievment$Task2, taskachievment$Task3)
)
head(long, 3)
  id  task outcome
1  1 Task1       0
2  2 Task1       0
3  3 Task1       1

Résumez le taux de succès par tâche (la moyenne d’un résultat 0/1 est la proportion de succès) :

library(rstatix)

data("taskachievment", package = "datarium")
n <- nrow(taskachievment)
long <- data.frame(
  id = factor(rep(taskachievment$participant, 3)),
  task = factor(rep(c("Task1", "Task2", "Task3"), each = n)),
  outcome = c(taskachievment$Task1, taskachievment$Task2, taskachievment$Task3)
)

aggregate(outcome ~ task, data = long, FUN = mean)
   task   outcome
1 Task1 0.2602740
2 Task2 0.4383562
3 Task3 0.6164384

Exécuter le test Q de Cochran

cochran_qtest() prend les données au format long avec une formule outcome ~ condition | id :

library(rstatix)

data("taskachievment", package = "datarium")
n <- nrow(taskachievment)
long <- data.frame(
  id = factor(rep(taskachievment$participant, 3)),
  task = factor(rep(c("Task1", "Task2", "Task3"), each = n)),
  outcome = c(taskachievment$Task1, taskachievment$Task2, taskachievment$Task3)
)

long %>% cochran_qtest(outcome ~ task | id)
# A tibble: 1 × 6
  .y.         n statistic    df             p method          
* <chr>   <int>     <dbl> <dbl>         <dbl> <chr>           
1 outcome    73        39     2 0.00000000340 Cochran's Q test

Les proportions de succès diffèrent significativement entre les trois tâches, Q(2) = 39, p < 0.0001.

Post-hoc : quelles tâches diffèrent ?

Poursuivez un Q de Cochran significatif avec des tests de McNemar par paires (chaque paire est un 2×2 apparié), corrigés par Bonferroni :

library(rstatix)

data("taskachievment", package = "datarium")
n <- nrow(taskachievment)
long <- data.frame(
  id = factor(rep(taskachievment$participant, 3)),
  task = factor(rep(c("Task1", "Task2", "Task3"), each = n)),
  outcome = c(taskachievment$Task1, taskachievment$Task2, taskachievment$Task3)
)

long %>% pairwise_mcnemar_test(outcome ~ task | id)
# A tibble: 3 × 6
  group1 group2           p      p.adj p.adj.signif method      
* <chr>  <chr>        <dbl>      <dbl> <chr>        <chr>       
1 Task1  Task2  0.000874    0.00262    **           McNemar test
2 Task1  Task3  0.000000944 0.00000283 ****         McNemar test
3 Task2  Task3  0.000874    0.00262    **           McNemar test

Les comparaisons par paires montrent quelles tâches précises ont des taux de succès différents.

Représenter graphiquement

library(rstatix)
library(ggpubr)

data("taskachievment", package = "datarium")
n <- nrow(taskachievment)
long <- data.frame(
  id = factor(rep(taskachievment$participant, 3)),
  task = factor(rep(c("Task1", "Task2", "Task3"), each = n)),
  outcome = c(taskachievment$Task1, taskachievment$Task2, taskachievment$Task3)
)
prop.df <- aggregate(outcome ~ task, data = long, FUN = mean)
stat.test <- cochran_qtest(long, outcome ~ task | id)

# Post-hoc pairwise McNemar comparisons, placed above the proportion bars
pwc <- pairwise_mcnemar_test(long, outcome ~ task | id)
pwc$y.position <- c(0.78, 0.90, 0.84)

ggbarplot(prop.df, x = "task", y = "outcome", fill = "task", palette = "jco",
          ylab = "Proportion of success", xlab = "Task") +
  stat_pvalue_manual(pwc, label = "p.adj.signif", tip.length = 0.01) +
  labs(subtitle = get_test_label(stat.test, detailed = TRUE),
       caption = get_pwc_label(pwc))

A bar chart of the success proportion for each of the three tasks with the Cochran's Q p-value in the subtitle and pairwise post-hoc significance brackets above the bars; the tasks have visibly different success rates.

Rapport

Un test Q de Cochran a montré que la proportion de succès différait significativement entre les trois tâches, Q(2) = 39, p < 0.001. Des tests de McNemar par paires (corrigés par Bonferroni) ont identifié quelles tâches différaient.

Le Q de Cochran compare les totaux de succès par colonne (condition) à ce que donneraient des proportions égales, en ajustant pour le taux de succès global de chaque sujet : \(Q = \dfrac{k(k-1)\sum_j (C_j - \bar{C})^2}{k\sum_i R_i - \sum_i R_i^2}\), où \(C_j\) est le nombre de succès dans la condition \(j\), \(R_i\) est le total de succès du sujet \(i\), et \(k\) est le nombre de conditions. \(Q\) suit une distribution du chi-deux à \(k - 1\) degrés de liberté. Avec \(k = 2\), il se réduit à la statistique (non corrigée) de McNemar.

Essayez en direct

Exécutez le Q de Cochran sur les données des tâches, puis modifiez l’étape post-hoc. Le bac à sable démarre au premier Run.

🟢 Avec un agent IA

Demandez à Prova : « J’ai un résultat oui/non mesuré sur les mêmes sujets dans plusieurs conditions — teste si le taux de succès diffère avec le Q de Cochran » — 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. cochran_qtest() a besoin du format long — une ligne par sujet × condition, avec un id, le facteur de condition et le résultat 0/1. Restructurez d’abord les colonnes larges.

Votre résultat n’est pas binaire. Le Q de Cochran s’applique à un résultat dichotomique (succès/échec, oui/non). Pour une mesure répétée continue, utilisez l’ANOVA à mesures répétées ou Friedman.

Vous n’avez que deux conditions. Utilisez alors directement le test de McNemar — le Q de Cochran donne la même réponse, mais McNemar est le test à deux groupes nommé.

Questions fréquentes

Le Q de Cochran teste si un résultat dichotomique (oui/non) a la même proportion de « succès » entre trois groupes liés ou plus — les mêmes sujets mesurés dans plusieurs conditions ou à plusieurs moments. C’est l’extension du test de McNemar (deux groupes) à plusieurs, et l’analogue binaire de l’ANOVA à mesures répétées.

Le test de McNemar compare deux proportions appariées ; le Q de Cochran en compare trois ou plus. Avec exactement deux conditions, ils donnent la même statistique (Q égale le chi-deux non corrigé de McNemar). Utilisez McNemar pour deux, le Q de Cochran pour davantage.

Les tests de McNemar par paires (pairwise_mcnemar_test()), avec une correction pour comparaisons multiples telle que Bonferroni — chaque paire de conditions est un tableau 2×2 apparié, donc McNemar est la comparaison par paires naturelle.

Testez vos connaissances

  1. Exécutez-le. Dans la cellule live, exécutez le Q de Cochran sur les trois tâches. Remplissez le blanc. Les taux de succès diffèrent-ils ?
  2. Conceptuel. Le Q de Cochran est significatif. Quel suivi vous indique quelles conditions diffèrent, et pourquoi ce test précis ?

Remplissez le blanc avec task. Pour la question 2, rappelez-vous le test catégoriel apparié à deux groupes.

long |> cochran_qtest(outcome ~ task | id)   #> Q(2) = 39, p < 0.0001 — rates differ.

Pour la question 2 : exécutez des tests de McNemar par paires (pairwise_mcnemar_test(), corrigés par Bonferroni). Chaque paire de tâches est constituée de deux proportions appariées sur les mêmes sujets, donc McNemar est la comparaison par paires correcte — un chi-deux ordinaire ignorerait l’appariement.

AstuceQuel test, quand ?

Conclusion

Vous savez maintenant exécuter le test Q de Cochran en R : restructurez les mesures binaires répétées au format long, exécutez cochran_qtest(outcome ~ condition | id), et poursuivez un résultat significatif avec des tests de McNemar par paires. C’est le test pour comparer un résultat oui/non entre trois conditions liées ou plus — McNemar généralisé aux mesures répétées.

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 Q de Cochran en R : comparer trois proportions appariées
    ou plus},
  date = {2026-06-23},
  url = {https://www.datanovia.com/learn/biostatistics/categorical/cochran-q-test-in-r},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Test Q de Cochran en R : comparer trois proportions appariées ou plus.” 2026. June 23. https://www.datanovia.com/learn/biostatistics/categorical/cochran-q-test-in-r.