Test exact de Fisher en R : association dans les petits tableaux de contingence

L’alternative exacte au chi-deux quand les effectifs des cases sont faibles — testez l’association dans les tableaux 2×2 et plus grands, avec l’odds ratio

Apprenez à exécuter le test exact de Fisher en R — l’alternative exacte au test d’indépendance du chi-deux quand les effectifs attendus des cases sont faibles (< 5). Testez l’association dans un tableau 2×2 (avec l’odds ratio et son intervalle de confiance) ou un tableau R×C plus grand, avec fisher.test() de base et fisher_test() de rstatix.

Date de publication

23 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • Le test exact de Fisher vérifie si deux variables catégorielles sont associées — comme le test du chi-deux — mais il est exact, donc correct quand les effectifs des cases sont faibles (effectifs attendus < 5) et que le chi-deux ne l’est pas.
  • Exécutez-le avec fisher.test() de base ou rstatix::fisher_test() sur le tableau de contingence.
  • Pour un tableau 2×2, il renvoie aussi l’odds ratio et son intervalle de confiance — une taille d’effet intégrée.
  • Pour les grands tableaux R×C, il peut être lent ; ajoutez simulate.p.value = TRUE pour une p-value de Monte-Carlo.
  • Utilisez-le dès que l’hypothèse sur les effectifs attendus d’un chi-deux échoue ; sinon les deux donnent la même réponse.

Introduction

Le test exact de Fisher analyse un tableau de contingence pour vérifier si deux variables catégorielles sont associées — la même question que le test d’indépendance du chi-deux. La différence : le chi-deux repose sur une approximation pour grands échantillons qui s’effondre quand les effectifs des cases sont faibles, alors que le test de Fisher calcule la probabilité exacte du tableau observé (et des tableaux plus extrêmes) sous l’hypothèse d’indépendance. C’est donc le test à privilégier avec de faibles effectifs.

Cette leçon l’applique sur un petit tableau 2×2 (où il donne aussi un odds ratio) et un tableau R×C plus grand, avec R de base et rstatix.

Note

Hypothèses du test exact de Fisher. H₀ : les variables en ligne et en colonne sont indépendantes. Hₐ : elles sont associées. Pour un tableau 2×2, cela équivaut à tester si l’odds ratio = 1.

Un tableau 2×2 : association sur petit échantillon + odds ratio

Un petit essai : sur 10 patients sous médicament, 9 ont été guéris ; sur 10 sous placebo, 3 ont été guéris. Avec des effectifs aussi faibles, le chi-deux n’est pas fiable — utilisez Fisher :

tx <- matrix(
  c(9, 1, 3, 7), nrow = 2, byrow = TRUE,
  dimnames = list(treatment = c("Drug", "Placebo"), outcome = c("Cured", "NotCured"))
)
tx
         outcome
treatment Cured NotCured
  Drug        9        1
  Placebo     3        7
fisher.test(tx)

    Fisher's Exact Test for Count Data

data:  tx
p-value = 0.01977
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
    1.387127 1039.290968
sample estimates:
odds ratio 
  17.27587 

L’association est significative, p = 0.02. Pour un tableau 2×2, le test de Fisher rapporte aussi l’odds ratio — ici ≈ 17, ce qui signifie que les cotes de guérison sont environ 17× plus élevées sous le médicament — avec un large IC à 95 % (reflétant le petit échantillon). L’IC exclut 1, en cohérence avec la p-value significative.

Astuce

Tests unilatéraux. Pour une hypothèse directionnelle (par exemple, le médicament est meilleur, pas seulement différent), passez alternative = "greater" (ou "less").

Un tableau R×C plus grand

Le test de Fisher ne se limite pas au 2×2. Voici le tableau classique de satisfaction au travail d’Agresti (revenu × satisfaction, 4×4) avec plusieurs cases à faibles effectifs :

job <- matrix(
  c(1, 2, 1, 0, 3, 3, 6, 1, 10, 10, 14, 9, 6, 7, 12, 11), nrow = 4, byrow = TRUE,
  dimnames = list(
    income = c("< 15k", "15-25k", "25-40k", "> 40k"),
    satisfaction = c("VeryD", "LittleD", "ModerateS", "VeryS")
  )
)
job
        satisfaction
income   VeryD LittleD ModerateS VeryS
  < 15k      1       2         1     0
  15-25k     3       3         6     1
  25-40k    10      10        14     9
  > 40k      6       7        12    11
fisher.test(job)

    Fisher's Exact Test for Count Data

data:  job
p-value = 0.7827
alternative hypothesis: two.sided

La p-value vaut 0.78non significative, donc aucune association n’a pu être établie entre le revenu et la satisfaction au travail. (Pour un grand tableau R×C, le calcul exact peut être lent ou gourmand en mémoire ; ajoutez simulate.p.value = TRUE pour obtenir une p-value de Monte-Carlo rapide à la place.)

Avec rstatix

rstatix::fisher_test() est le wrapper compatible avec le pipe (il renvoie une ligne tidy ; passez un objet table/as.table) :

library(rstatix)

tx <- as.table(matrix(
  c(9, 1, 3, 7), nrow = 2, byrow = TRUE,
  dimnames = list(treatment = c("Drug", "Placebo"), outcome = c("Cured", "NotCured"))
))

fisher_test(tx)
# A tibble: 1 × 3
      n      p p.signif
* <dbl>  <dbl> <chr>   
1    20 0.0198 *       

Visualisez-le

library(rstatix)
library(ggpubr)

tx <- as.table(matrix(
  c(9, 1, 3, 7), nrow = 2, byrow = TRUE,
  dimnames = list(treatment = c("Drug", "Placebo"), outcome = c("Cured", "NotCured"))
))
df <- as.data.frame(tx)
stat.test <- fisher_test(tx)

ggbarplot(df, x = "treatment", y = "Freq", fill = "outcome", palette = "jco",
          ylab = "Count", xlab = "Group") +
  labs(subtitle = get_test_label(stat.test, detailed = TRUE))

A bar chart of cure counts by treatment group with Fisher's exact test p-value in the subtitle; the drug group has far more cures than the placebo group.

Rapport

Le test exact de Fisher a montré une association significative entre le traitement et la guérison (9/10 guéris sous le médicament contre 3/10 sous placebo), p = 0.02, odds ratio ≈ 17 (IC à 95 % de 1.4 à 1039). Le large intervalle reflète le petit échantillon.

Pour un tableau 2×2 à marges fixes, la probabilité de tout tableau particulier suit la loi hypergéométrique : \(P = \dfrac{\binom{a+b}{a}\binom{c+d}{c}}{\binom{n}{a+c}}\). Le test de Fisher somme cette probabilité sur le tableau observé et tous les tableaux au moins aussi extrêmes, donnant une p-value exacte sans aucune approximation pour grands échantillons — c’est pourquoi il reste valide quand l’hypothèse sur les effectifs attendus du chi-deux échoue.

Essayez en direct

Exécutez le test de Fisher sur vos propres effectifs 2×2 et observez l’odds ratio. Modifiez les quatre nombres et relancez ; le bac à sable démarre au premier Run.

🟢 Avec un agent IA

Demandez à Prova « mon tableau de contingence a de faibles effectifs — exécute le test exact de Fisher au lieu du chi-deux et donne-moi l’odds ratio » — elle répond avec du code que vous pouvez exécuter sur votre propre tableau. The runtime is the judge. Demander à Prova →

Problèmes courants

Votre test de Fisher R×C est lent ou plante par manque de mémoire. Le calcul exact sur un grand tableau à gros effectifs est coûteux — ajoutez simulate.p.value = TRUE (et éventuellement B = 10000) pour une p-value de Monte-Carlo.

Vous vouliez l’odds ratio mais avez un tableau plus grand. L’odds ratio de Fisher n’est défini que pour les tableaux 2×2. Pour des tableaux plus grands, rapportez la p-value du test et utilisez le V de Cramér pour la force.

Vous avez quand même utilisé le chi-deux avec de faibles effectifs. Si un effectif attendu est inférieur à 5, la p-value du chi-deux n’est pas fiable — le test exact de Fisher est le bon choix.

Questions fréquentes

Utilisez le test exact de Fisher quand votre tableau de contingence a de faibles effectifs de cases — précisément quand un effectif attendu est inférieur à 5, là où l’approximation du chi-deux n’est pas fiable. Le test de Fisher calcule une p-value exacte, il est donc valide pour les petits échantillons. Pour de grands effectifs, les deux tests concordent.

Oui — fisher.test() gère les tableaux R×C. Mais le calcul exact peut être lent ou gourmand en mémoire pour les grands tableaux à gros effectifs ; ajoutez simulate.p.value = TRUE pour une p-value de Monte-Carlo. L’odds ratio intégré, en revanche, n’est rapporté que pour les tableaux 2×2.

Pour un tableau 2×2, fisher.test() renvoie l’odds ratio du maximum de vraisemblance conditionnel et son intervalle de confiance — une taille d’effet pour l’association. Un odds ratio de 1 signifie aucune association ; l’IC excluant 1 correspond à un test significatif. Pour en savoir plus sur les odds ratios, voir la leçon dédiée sur l’ odds ratio.

Testez vos connaissances

  1. Exécutez-le. Dans la cellule interactive, exécutez le test exact de Fisher sur le tableau 2×2. Remplissez le blanc. L’association est-elle significative, et quel est l’odds ratio ?
  2. Conceptuel. Un relecteur vous demande pourquoi vous avez utilisé le test exact de Fisher plutôt que le chi-deux sur votre tableau 2×2 où un effectif attendu valait 3. Quelle est votre réponse ?

Remplissez le blanc avec fisher.test. Regardez la p-value et l’estimation de l’odds ratio. Pour la question 2, rappelez-vous l’hypothèse du chi-deux qui échoue avec de faibles effectifs attendus.

tab <- matrix(c(9, 1, 3, 7), nrow = 2, byrow = TRUE)
fisher.test(tab)   #> p = 0.02, odds ratio ≈ 17 — significant association.

Pour la question 2 : le chi-deux repose sur une approximation pour grands échantillons qui exige que chaque effectif attendu soit d’au moins ~5. Avec un effectif attendu de 3, cette hypothèse échoue et la p-value du chi-deux serait non fiable, donc le test exact de Fisher — qui calcule la probabilité exacte — est le bon choix.

AstuceQuel test, quand ?

Conclusion

Vous savez maintenant exécuter le test exact de Fisher en R : fisher.test() (ou rstatix::fisher_test()) sur le tableau de contingence donne une p-value exacte pour l’association — correcte quand les effectifs des cases sont trop faibles pour le chi-deux — plus l’odds ratio pour un tableau 2×2. Privilégiez-le dès que l’hypothèse sur les effectifs attendus du chi-deux échoue, et utilisez simulate.p.value = TRUE pour les grands tableaux R×C.

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 exact de Fisher en R : association dans les petits
    tableaux de contingence},
  date = {2026-06-23},
  url = {https://www.datanovia.com/learn/biostatistics/categorical/fisher-exact-test-in-r},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Test exact de Fisher en R : association dans les petits tableaux de contingence.” 2026. June 23. https://www.datanovia.com/learn/biostatistics/categorical/fisher-exact-test-in-r.