Reguła Cochrana: co naprawdę mówi
Test chi-kwadrat daje wartość p z przybliżenia rozkładem χ². Przybliżenie słabnie, gdy w tabeli krzyżowej są komórki z małą liczebnością oczekiwaną, czyli liczbą osób, jakiej należałoby się spodziewać przy braku związku. Liczy się więc liczebność oczekiwana, a nie obserwowana.
Klasyczna reguła pochodzi od Cochrana (1954): najwyżej 20% komórek może mieć liczebność oczekiwaną poniżej 5 i żadna nie może mieć poniżej 1 (Kim, 2017). W tabeli 2 × 2 łamie ją już jedna komórka. Reguła jest umowna. Campbell (2007) przypomina, że według samego Cochrana próg 5 wybrano arbitralnie, a Camilli i Hopkins (1978) stwierdzili, że test Pearsona dla tabel 2 × 2 jest bardzo odporny także przy małych liczebnościach oczekiwanych. Jak policzyć liczebności oczekiwane, pokazujemy w poradniku test chi-kwadrat krok po kroku.
Który test wybrać: krótka ściąga
| Sytuacja | Co zastosować | Funkcja w R |
|---|---|---|
| Dowolna tabela, reguła Cochrana spełniona | chi-kwadrat Pearsona | chisq.test(tab, correct = FALSE) |
| Tabela 2 × 2, wszystkie liczebności oczekiwane ≥ 1 | chi-kwadrat „N − 1” albo Pearsona (Campbell, 2007) | χ² × (N − 1)/N z chisq.test() |
| Tabela 2 × 2, któraś liczebność oczekiwana < 1 | test dokładny Fishera | fisher.test(tab) |
| Tabela większa niż 2 × 2, reguła Cochrana złamana | test Fishera–Freemana–Haltona albo chi-kwadrat z symulowanym p | fisher.test(tab) albo chisq.test(tab, simulate.p.value = TRUE) |
Duża tabela i duża próba, fisher.test() liczy zbyt długo | symulowane p (Monte Carlo) | fisher.test(tab, simulate.p.value = TRUE) |
| Rzadka kategoria, która merytorycznie pasuje do sąsiedniej | połączenie kategorii zaplanowane przed analizą | nowa tabela, potem test jak wyżej |
Test Fishera nie jest „zawsze bezpieczniejszy”. Bywa zachowawczy, czyli rzadziej wykrywa prawdziwy związek, dlatego nie używaj go odruchowo przy dużych liczebnościach. Szczegóły i zapis wyniku opisuje hasło o teście Fishera. Szerszy schemat doboru testu znajdziesz w przewodniku po testach statystycznych.
Przykład: tabela 3 × 3 z pilotażu
W badaniu pilotażowym 42 osoby studiujące losowo przydzielono po 14 do treningu uważności, relaksacji i grupy kontrolnej. Po czterech tygodniach oceniono zmianę samopoczucia: poprawa, bez zmian albo pogorszenie (dane symulowane). Poprawę miało 10 z 14 osób po treningu uważności (71.4%), 6 po relaksacji (42.9%) i 3 w grupie kontrolnej (21.4%). Pogorszenie zdarzało się rzadko: 1, 1 i 5 osób.
Liczebność oczekiwana w kolumnie „pogorszenie” wynosi 2.33 w każdym wierszu. Trzy z dziewięciu komórek (33.3%) mają więc wartość poniżej 5. Reguła Cochrana jest złamana, a R ostrzega: Chi-squared approximation may be incorrect. Trzy podejścia dają:
- chi-kwadrat Pearsona (przybliżenie): χ²(4, N = 42) = 10.09, p = .039;
- chi-kwadrat z p z symulacji 10 000 tabel o tych samych sumach brzegowych: p = .040;
- test Fishera–Freemana–Haltona: p = .052.
V Craméra wynosi .35. Dlaczego wyniki się różnią? Oba testy „dokładne” biorą pod uwagę wszystkie tabele o tych samych sumach w wierszach i kolumnach. Symulacja zachowuje jednak statystykę χ² i tylko zastępuje rozkład χ² rozkładem z losowania. Test Fishera–Freemana–Haltona porządkuje tabele według ich prawdopodobieństwa, jak test Fishera dla 2 × 2. To inna statystyka, więc daje inne p. Mehta i Patel (1983) zauważają, że w tabelach z wieloma małymi liczebnościami test Fishera i test χ² Pearsona często prowadzą do sprzecznych wniosków.
Wniosek praktyczny: test wybierz w planie analizy, zanim zobaczysz wyniki. Wybieranie wersji, która daje p < .05, to p-hacking. A wynik w okolicach .04–.05 przy 42 osobach jest niepewny niezależnie od testu. Pilotaż służy zresztą przede wszystkim do sprawdzenia procedury, a nie do rozstrzygania hipotez.
Łączenie kategorii
Gdy rzadka kategoria merytorycznie pasuje do sąsiedniej, możesz ją z nią połączyć. W przykładzie „bez zmian” i „pogorszenie” dają razem „brak poprawy”. Tabela 3 × 2 ma najmniejszą liczebność oczekiwaną 6.33, więc zwykły test chi-kwadrat jest w porządku: χ²(2, N = 42) = 7.11, p = .029, V = .41. Test Fishera dla tej tabeli daje p = .036.
Łączenie ma dwa warunki:
- Reguła łączenia jest zapisana przed analizą, np. „jeśli kategoria »pogorszenie« będzie miała mniej niż 5 osób, połączę ją z »bez zmian«”. Łączenie „aż wyjdzie” to forma p-hackingu.
- Połączona tabela odpowiada na inne pytanie. Test 3 × 2 mówi o odsetku poprawy, a nie o tym, czy warunki różnią się też częstością pogorszenia. Napisz to wprost w pracy.
Dlaczego poprawka Yatesa budzi spory
Poprawka Yatesa dotyczy tylko tabel 2 × 2 i miała zbliżyć wynik χ² do testu Fishera. Spór dotyczy tego, czy to w ogóle dobry cel. Camilli i Hopkins (1978) pokazali, że poprawka obniża trafność wartości p, gdy sumy brzegowe nie są ustalone z góry, a tak jest w prawie każdym badaniu ankietowym. Haviland (1990) podsumowuje, że wyniki z poprawką są nadmiernie zachowawcze, a zwykły test Pearsona dobrze kontroluje błąd I rodzaju, i odradza zarówno poprawkę, jak i test Fishera. Pułapka praktyczna: chisq.test() w R stosuje poprawkę w tabeli 2 × 2 domyślnie. Jeśli jej nie chcesz, dodaj correct = FALSE i napisz w pracy, której wersji użyłeś(-aś).
Jak to opisać w pracy
Napisz, dlaczego wybrałeś(-aś) dany test, i podaj odsetki, wynik testu oraz wielkość efektu. Wzór dla przykładu, przy założeniu, że w planie analizy wskazano test Fishera–Freemana–Haltona:
Chi-kwadrat i test Fishera w R
Kod odtwarza wszystkie liczby z tekstu: tabelę z odsetkami, liczebności oczekiwane i sprawdzenie reguły Cochrana, test chi-kwadrat z przybliżeniem i z symulowanym p, test Fishera–Freemana–Haltona, V Craméra (pakiet effectsize) oraz analizę tabeli po połączeniu kategorii.
Tabela 3 × 3 z małymi liczebnościami oczekiwanymi
R
# B169 – chi-kwadrat czy test Fishera? Tabela 3 × 3 z małymi liczebnościami oczekiwanymi:
# reguła Cochrana, chi-kwadrat asymptotyczny, chi-kwadrat z symulowanym p,
# test Fishera–Freemana–Haltona, V Craméra i tabela po połączeniu kategorii (3 × 2)
# Dane symulowane: pilotaż, 42 osoby studiujące, po 14 w trzech warunkach.
library(effectsize)
set.seed(3599)
warunek <- factor(rep(c("uważność", "relaksacja", "kontrola"), each = 14),
levels = c("uważność", "relaksacja", "kontrola"))
szanse <- list(c(.60, .33, .07), c(.45, .45, .10), c(.20, .58, .22))
zmiana <- unlist(lapply(szanse, function(p)
sample(c("poprawa", "bez zmian", "pogorszenie"), 14, replace = TRUE, prob = p)))
zmiana <- factor(zmiana, levels = c("poprawa", "bez zmian", "pogorszenie"))
tab <- table(warunek, zmiana)
tab
round(100 * prop.table(tab, 1), 1) # odsetki w wierszach
# 1. Reguła Cochrana: liczebności oczekiwane
E <- suppressWarnings(chisq.test(tab))$expected
round(E, 2)
c(komorki_E_ponizej_5 = sum(E < 5), odsetek = round(100 * mean(E < 5), 1), min_E = round(min(E), 2))
# 2. Chi-kwadrat Pearsona (przybliżenie asymptotyczne) – R ostrzega o przybliżeniu
chisq.test(tab)
# 3. Chi-kwadrat z p z symulacji Monte Carlo (10 000 tabel o tych samych sumach brzegowych)
set.seed(169)
chisq.test(tab, simulate.p.value = TRUE, B = 10000)
# 4. Test Fishera–Freemana–Haltona (uogólnienie testu Fishera na tabele r × c)
fisher.test(tab)
# 5. Wielkość efektu: V Craméra z 95% CI (bez korekty obciążenia)
cramers_v(tab, adjust = FALSE)
# 6. Kategorie połączone zgodnie z planem analizy: „bez zmian” + „pogorszenie” = „brak poprawy”
tab2 <- cbind(poprawa = tab[, "poprawa"], brak_poprawy = tab[, "bez zmian"] + tab[, "pogorszenie"])
tab2
round(chisq.test(tab2)$expected, 2)
chisq.test(tab2)
fisher.test(tab2)
cramers_v(tab2, adjust = FALSE)Wynik w R
zmiana
warunek poprawa bez zmian pogorszenie
uważność 10 3 1
relaksacja 6 7 1
kontrola 3 6 5
zmiana
warunek poprawa bez zmian pogorszenie
uważność 71.4 21.4 7.1
relaksacja 42.9 50.0 7.1
kontrola 21.4 42.9 35.7
zmiana
warunek poprawa bez zmian pogorszenie
uważność 6.33 5.33 2.33
relaksacja 6.33 5.33 2.33
kontrola 6.33 5.33 2.33
komorki_E_ponizej_5 odsetek min_E
3.00 33.30 2.33
Pearson's Chi-squared test
data: tab
X-squared = 10.091, df = 4, p-value = 0.03892
Warning message:
In chisq.test(tab) : Chi-squared approximation may be incorrect
Pearson's Chi-squared test with simulated p-value (based on 10000
replicates)
data: tab
X-squared = 10.091, df = NA, p-value = 0.0397
Fisher's Exact Test for Count Data
data: tab
p-value = 0.05215
alternative hypothesis: two.sided
Cramer's V | 95% CI
-------------------------
0.35 | [0.06, 1.00]
- One-sided CIs: upper bound fixed at [1.00]. poprawa brak_poprawy
uważność 10 4
relaksacja 6 8
kontrola 3 11
poprawa brak_poprawy
uważność 6.33 7.67
relaksacja 6.33 7.67
kontrola 6.33 7.67
Pearson's Chi-squared test
data: tab2
X-squared = 7.1121, df = 2, p-value = 0.02855
Fisher's Exact Test for Count Data
data: tab2
p-value = 0.03557
alternative hypothesis: two.sided
Cramer's V | 95% CI
-------------------------
0.41 | [0.10, 1.00]
- One-sided CIs: upper bound fixed at [1.00].Bibliografia oprogramowania
Wyniki na tej stronie pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje chisq.test() i fisher.test() z pakietu stats, cramers_v() z pakietu effectsize). W pracy podaj wersje faktycznie użytych pakietów (sessionInfo()).
- R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
- effectsize (wersja 1.0.2): Ben-Shachar, M. S., Lüdecke, D., & Makowski, D. (2020). effectsize: Estimation of effect size indices and standardized parameters. Journal of Open Source Software, 5(56), 2815. https://doi.org/10.21105/joss.02815
Najczęstsze pytania
Co zrobić, gdy liczebność oczekiwana w tabeli jest mniejsza niż 5?
Sprawdź, ile takich komórek jest. Jeśli najwyżej 20% i żadna nie ma liczebności oczekiwanej poniżej 1, zwykły test chi-kwadrat jest w porządku. Jeśli więcej, użyj testu Fishera (w tabeli większej niż 2 × 2 – Fishera–Freemana–Haltona), chi-kwadrat z symulowanym p albo połącz rzadkie kategorie, jeśli zaplanowałeś(-aś) to przed analizą.
Czym jest chi-kwadrat z symulowaną wartością p?
To zwykła statystyka χ², której wartość p nie pochodzi z rozkładu χ², tylko z losowania wielu tabel o tych samych sumach w wierszach i kolumnach. W R uzyskasz ją przez chisq.test(tab, simulate.p.value = TRUE, B = 10000). Ustaw set.seed(), żeby wynik dało się powtórzyć, i podaj liczbę losowań.
Czy można łączyć kategorie w tabeli krzyżowej, żeby spełnić warunki testu chi-kwadrat?
Tak, jeśli połączenie ma sens merytoryczny i reguła łączenia została ustalona przed analizą. Pamiętaj, że połączona tabela odpowiada na węższe pytanie, i opisz to w pracy. Łączenie kategorii po obejrzeniu wyników, tak by wyszło p < .05, to p-hacking.
Dlaczego test Fishera i chi-kwadrat dają różne wartości p?
Chi-kwadrat korzysta z przybliżenia rozkładem χ², a test Fishera liczy prawdopodobieństwo wszystkich tabel o tych samych sumach brzegowych i porządkuje je według prawdopodobieństwa, a nie według χ². W tabelach z małymi liczebnościami różnice bywają wyraźne, np. p = .039 wobec .052 w przykładzie z tego wpisu. Dlatego test wybiera się w planie analizy.
Powiązane hasła
Przeczytaj też
Test chi-kwadrat krok po kroku
Test zgodności i niezależności na jednym badaniu: odsetki, liczebności oczekiwane, reszty, V Craméra, test Fishera i gotowy opis APA.
Czytaj →PoradnikTesty statystyczne – przewodnik po wyborze
Schemat wyboru testu i osiem etapów od hipotezy do zapisu APA: test t, ANOVA, testy nieparametryczne, chi-kwadrat, korelacje, regresja i poprawki.
Czytaj →PoradnikStatystyka w pracy z pedagogiki
Ankiety wśród nauczycieli i rodziców: skala Likerta, chi-kwadrat i test Fishera, testy rangowe z korektą Holma, procenty w tabelach i uczniowie w klasach.
Czytaj →Masz małą próbę i nie wiesz, który test wybrać?
Sprawdzimy tabelę i liczebności oczekiwane, dobierzemy test do planu analizy i wyjaśnimy wynik tak, żebyś umiał(a) go samodzielnie opisać i obronić.
Oferta dla studentówWyceń analizęBibliografia i dalsza literatura naukowa (APA 7)
- Camilli, G., & Hopkins, K. D. (1978). Applicability of chi-square to 2 × 2 contingency tables with small expected cell frequencies. Psychological Bulletin, 85(1), 163–167. https://doi.org/10.1037/0033-2909.85.1.163
- Campbell, I. (2007). Chi-squared and Fisher–Irwin tests of two-by-two tables with small sample recommendations. Statistics in Medicine, 26(19), 3661–3675. https://doi.org/10.1002/sim.2832
- Cochran, W. G. (1954). Some methods for strengthening the common χ² tests. Biometrics, 10(4), 417–451. https://doi.org/10.2307/3001616
- Haviland, M. G. (1990). Yates's correction for continuity and the analysis of 2 × 2 contingency tables. Statistics in Medicine, 9(4), 363–367. https://doi.org/10.1002/sim.4780090403
- Kim, H.-Y. (2017). Statistical notes for clinical researchers: Chi-squared test and Fisher's exact test. Restorative Dentistry & Endodontics, 42(2), 152–155. https://doi.org/10.5395/rde.2017.42.2.152 ● Otwarty dostęp
- Mehta, C. R., & Patel, N. R. (1983). A network algorithm for performing Fisher’s exact test in r × c contingency tables. Journal of the American Statistical Association, 78(382), 427–434. https://doi.org/10.1080/01621459.1983.10477989
Cytowania BibTeX
@article{camilli1978applicability, author={Camilli, Gregory and Hopkins, Kenneth D.}, title={{Applicability of chi-square to 2 × 2 contingency tables with small expected cell frequencies}}, journal={Psychological Bulletin}, year={1978}, volume={85}, number={1}, pages={163--167}, doi={10.1037/0033-2909.85.1.163}}@article{campbell2007chisquared, author={Campbell, Ian}, title={{Chi-squared and Fisher–Irwin tests of two-by-two tables with small sample recommendations}}, journal={Statistics in Medicine}, year={2007}, volume={26}, number={19}, pages={3661--3675}, doi={10.1002/sim.2832}}@article{cochran1954some, author={Cochran, William G.}, title={{Some methods for strengthening the common χ² tests}}, journal={Biometrics}, year={1954}, volume={10}, number={4}, pages={417--451}, doi={10.2307/3001616}}@article{haviland1990yates, author={Haviland, Mark G.}, title={{Yates's correction for continuity and the analysis of 2 × 2 contingency tables}}, journal={Statistics in Medicine}, year={1990}, volume={9}, number={4}, pages={363--367}, doi={10.1002/sim.4780090403}}@article{kim2017chi, author={Kim, Hae-Young}, title={{Statistical notes for clinical researchers: Chi-squared test and Fisher's exact test}}, journal={Restorative Dentistry \& Endodontics}, year={2017}, volume={42}, number={2}, pages={152--155}, doi={10.5395/rde.2017.42.2.152}}@article{mehta1983network, author={Mehta, Cyrus R. and Patel, Nitin R.}, title={{A network algorithm for performing Fisher’s exact test in r × c contingency tables}}, journal={Journal of the American Statistical Association}, year={1983}, volume={78}, number={382}, pages={427--434}, doi={10.1080/01621459.1983.10477989}}