Kiedy test McNemara
Test McNemara stosujesz, gdy te same osoby odpowiadają na pytanie z odpowiedzią tak/nie (zmienna dychotomiczna) dwa razy: przed warsztatem i po nim, przed zabiegiem i po nim albo w dwóch warunkach. McNemar (1947) zaproponował go właśnie do różnicy między skorelowanymi, czyli zależnymi, odsetkami. To odpowiednik testu t dla prób zależnych dla odpowiedzi tak/nie.
Dane ułóż w układzie szerokim: jedna osoba to jeden wiersz, a odpowiedź „przed” i „po” to dwie kolumny. Z nich powstaje tabela par 2 × 2. Liczą się w niej tylko pary niezgodne, czyli osoby, które zmieniły odpowiedź: b (tak → nie) i c (nie → tak). Pembury Smith i Ruxton (2020) podkreślają, że o wyniku decydują wyłącznie te dwie komórki. Wzory i wszystkie warianty testu opisuje hasło test McNemara. Tutaj skupiamy się na dwóch praktycznych decyzjach: którą wersję testu wybrać i jak policzyć przedział ufności dla różnicy.
Przykład: warsztat higieny snu
Studentka psychologii pyta 48 uczestników warsztatu higieny snu: „Czy w ostatnim tygodniu miałeś(-aś) problemy z zasypianiem?”. Pyta przed warsztatem i miesiąc po nim (dane symulowane).
| Przed warsztatem | Po: tak | Po: nie | Razem |
|---|---|---|---|
| Tak | a = 19 | b = 11 | 30 (62.5%) |
| Nie | c = 3 | d = 15 | 18 (37.5%) |
| Razem | 22 (45.8%) | 26 (54.2%) | 48 |
Odsetek osób z problemami z zasypianiem spadł z 62.5% do 45.8%. Problemy ustąpiły u 11 osób, pojawiły się u 3, a 34 osoby odpowiedziały tak samo. Różnica odsetków (po − przed) to (c − b) / N = (3 − 11) / 48 = −16.7 punktu procentowego.
Która wersja testu? Przykład, w którym to ma znaczenie
Ten sam test ma kilka wersji, a przy małej liczbie par niezgodnych (tu 14) dają one różne wnioski:
| Wersja testu | Wynik | Ocena w symulacjach |
|---|---|---|
| Asymptotyczna bez poprawki | χ²(1) = 4.57, p = .033 | zalecana; niewielkie przekroczenia α |
| Mid-p | p = .035 | zalecana; trzyma poziom α |
| Dokładna (dwumianowa) | p = .057 | zbyt zachowawcza |
Fagerland i in. (2013) porównali wersje testu w 9595 scenariuszach. Test mid-p ani razu nie przekroczył nominalnego poziomu istotności i miał moc prawie taką jak wersja asymptotyczna. Test dokładny warunkowy i wersja z poprawką na ciągłość nie sprawdziły się w żadnym scenariuszu. W późniejszym przeglądzie 24 metod dla danych sparowanych ci sami autorzy zaliczają test asymptotyczny i mid-p do najlepszych (Fagerland i in., 2014).
Wersję testu zapisz w planie analizy, zanim zobaczysz wynik. Wybór wersji po fakcie, bo „ta daje p < .05”, to ukryta wielokrotność testowania. Pamiętaj też, że funkcja mcnemar.test() w R domyślnie stosuje poprawkę na ciągłość, więc trzeba ją wyłączyć argumentem correct = FALSE.
Przedział ufności dla różnicy odsetków w parach
Sam test mówi tylko, czy zmiana jest istotna. Ile wynosi, mówi różnica odsetków z 95% przedziałem ufności. Przedziału nie licz jak dla dwóch niezależnych grup z wpisu jak porównać odsetki w dwóch grupach: odpowiedzi tej samej osoby są skorelowane i taki przedział byłby zbyt szeroki. Trzy metody dla danych sparowanych dają w przykładzie:
| Metoda | Jak liczy | 95% CI dla −16.7 pp |
|---|---|---|
| Wald | różnica ± 1.96 × SE | [−31.2, −2.1] |
| Agresti–Min | Wald po dodaniu 0.5 do każdej komórki tabeli | [−30.5, −1.5] |
| Newcombe (metoda 10) | łączy przedziały Wilsona obu odsetków z poprawką na korelację par | [−30.0, −2.0] |
Newcombe (1998) pokazał, że przedział Walda dla danych sparowanych ma słabe pokrycie i może wychodzić poza dopuszczalny zakres, a prosta metoda oparta na przedziałach Wilsona (jego metoda 10) działa dobrze. Agresti i Min (2005) zaproponowali jeszcze prostszą poprawkę przedziału Walda: przed obliczeniem dodaj dwie obserwacje do każdego pomiaru, czyli po 0.5 do każdej komórki. W przykładzie różnice są niewielkie, ale rosną przy małych próbach i odsetkach bliskich 0% lub 100%. Podawaj więc przedział Newcombe’a albo Agrestiego–Mina i zawsze nazwij metodę. Gotowej funkcji w bazowym R nie ma, dlatego w kodzie poniżej obie metody są zapisane wprost.
Trzy częste błędy
- Chi-kwadrat dla „dwóch grup”. Zestawienie 30/48 przed i 22/48 po jak dwóch niezależnych grup daje tabelę z 96 „osobami” i χ²(1) = 2.69, p = .101. To błąd, bo każda osoba występuje dwa razy. Test pomija sparowanie i traci moc, a w przykładzie zmienia wniosek.
- Wniosek o skuteczności bez grupy kontrolnej. Spadek mógł wynikać z sesji egzaminacyjnej, pory roku albo z regresji do średniej. Bez grupy kontrolnej opisujesz zmianę, a nie efekt warsztatu (zob. trafność wewnętrzna). Jeśli grupa kontrolna jest, porównaj zmianę między grupami, np. w wielopoziomowej regresji logistycznej z interakcją grupa × czas.
- Wiele pomiarów albo wiele pytań. Przy trzech i więcej pomiarach tej samej odpowiedzi użyj testu Q Cochrana. Przy wielu pytaniach ankiety, każdym testowanym testem McNemara, przemyśl poprawkę na wielokrotne porównania. Pełny przykład z testem wiedzy i korektą Holma pokazuje poradnik badanie wiedzy przed i po szkoleniu.
Pozostałe schematy z pomiarem przed i po, także dla wyników ilościowych, zebraliśmy w przewodniku badania kliniczne i pomiar przed i po.
Jak to opisać w pracy
Podaj odsetki w obu pomiarach, liczby zmian w każdą stronę, wersję testu, wynik oraz różnicę z przedziałem i metodą:
Test McNemara i przedział dla różnicy w R
Kod odtwarza wszystkie liczby z tekstu: tabelę par, odsetki przed i po, trzy wersje testu McNemara (asymptotyczną bez poprawki, dokładną i mid-p), różnicę odsetków z 95% przedziałami Walda, Agrestiego–Mina i Newcombe’a oraz błędny test chi-kwadrat, który traktuje pomiary jak dwie niezależne grupy.
Tabela par, wersje testu i 95% CI dla sparowanej różnicy odsetków
R
# B194 – test McNemara i 95% CI dla różnicy odsetków w pomiarze przed i po
# Dane symulowane: 48 osób przed warsztatem higieny snu i miesiąc po nim odpowiada
# na pytanie „Czy w ostatnim tygodniu miałeś(-aś) problemy z zasypianiem?” (tak/nie).
# Dane w układzie szerokim: jedna osoba = jeden wiersz, dwie kolumny (przed, po).
set.seed(1961)
przed <- rbinom(48, 1, .55)
po <- ifelse(przed == 1, rbinom(48, 1, .65), rbinom(48, 1, .10))
dane <- data.frame(przed = factor(przed, levels = c(1, 0), labels = c("tak", "nie")),
po = factor(po, levels = c(1, 0), labels = c("tak", "nie")))
# 1. Tabela par i odsetki „tak” w obu pomiarach
tab <- table(przed = dane$przed, po = dane$po)
tab
n <- sum(tab); a <- tab["tak", "tak"]; b <- tab["tak", "nie"]
c <- tab["nie", "tak"]; d <- tab["nie", "nie"]
round(100 * c(przed = (a + b) / n, po = (a + c) / n), 1)
# 2. Test McNemara: asymptotyczny bez poprawki, dokładny i mid-p
mcnemar.test(tab, correct = FALSE)
p_dokladny <- binom.test(b, b + c, p = .5)$p.value
p_midp <- min(1, p_dokladny - dbinom(min(b, c), b + c, .5))
round(c(dokladny = p_dokladny, mid_p = p_midp), 3)
# 3. Różnica odsetków (po − przed) z 95% CI trzema metodami
z <- qnorm(.975)
roznica <- (c - b) / n
wald <- function(a, b, c, d) {
n <- a + b + c + d; r <- (c - b) / n
se <- sqrt((b + c) - (c - b)^2 / n) / n
c(r - z * se, r + z * se)
}
wilson <- function(x, n) {
p <- x / n
srodek <- (p + z^2 / (2 * n)) / (1 + z^2 / n)
pol <- z * sqrt(p * (1 - p) / n + z^2 / (4 * n^2)) / (1 + z^2 / n)
c(srodek - pol, srodek + pol)
}
newcombe <- function(a, b, c, d) { # metoda 10 Newcombe'a (1998)
n <- a + b + c + d
p1 <- (a + c) / n; p2 <- (a + b) / n # p1 = po, p2 = przed
w1 <- wilson(a + c, n); w2 <- wilson(a + b, n)
mian <- sqrt((a + b) * (c + d) * (a + c) * (b + d))
phi <- if (mian == 0) 0 else (a * d - b * c) / mian
r <- p1 - p2
c(r - sqrt((p1 - w1[1])^2 - 2 * phi * (p1 - w1[1]) * (w2[2] - p2) + (w2[2] - p2)^2),
r + sqrt((w1[2] - p1)^2 - 2 * phi * (w1[2] - p1) * (p2 - w2[1]) + (p2 - w2[1])^2))
}
przedzialy <- rbind(
Wald = wald(a, b, c, d),
`Agresti–Min` = wald(a + .5, b + .5, c + .5, d + .5), # +0.5 w każdej komórce
`Newcombe (10)` = newcombe(a, b, c, d))
colnames(przedzialy) <- c("dolna", "gorna")
round(100 * roznica, 1)
round(100 * przedzialy, 1)
# 4. Błąd: te same dane potraktowane jak dwie niezależne grupy (96 „osób”)
blad <- rbind(przed = table(dane$przed), po = table(dane$po))
blad
chisq.test(blad, correct = FALSE)Wynik w R
po
przed tak nie
tak 19 11
nie 3 15
przed po
62.5 45.8
McNemar's Chi-squared test
data: tab
McNemar's chi-squared = 4.5714, df = 1, p-value = 0.03251
dokladny mid_p
0.057 0.035
[1] -16.7
dolna gorna
Wald -31.2 -2.1
Agresti–Min -30.5 -1.5
Newcombe (10) -30.0 -2.0
tak nie
przed 30 18
po 22 26
Pearson's Chi-squared test
data: blad
X-squared = 2.6853, df = 1, p-value = 0.1013Bibliografia oprogramowania
Wyniki na tej stronie pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje mcnemar.test(), binom.test() i chisq.test() z pakietu stats; przedziały Agrestiego–Mina i Newcombe’a zapisano wprost według wzorów). W pracy podaj wersję R (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/
Najczęstsze pytania
Jak policzyć przedział ufności dla różnicy odsetków przed i po?
Różnica to (c − b) / N, gdzie b i c to liczby osób, które zmieniły odpowiedź w każdą stronę. Przedział licz metodą dla danych sparowanych: metodą 10 Newcombe’a albo przedziałem Walda po dodaniu 0.5 do każdej komórki tabeli par (Agresti–Min). Przedział dla dwóch niezależnych grup jest tu niewłaściwy, bo pomija sparowanie.
Czy wynik testu McNemara może być istotny w jednej wersji, a nieistotny w innej?
Tak, gdy osób, które zmieniły odpowiedź, jest niewiele. W przykładzie z 14 takimi osobami wersja asymptotyczna dała p = .033, mid-p – p = .035, a test dokładny – p = .057. Dlatego wersję testu ustal w planie analizy i nie zmieniaj jej po zobaczeniu wyniku.
Jak ułożyć dane do testu McNemara?
W układzie szerokim: jedna osoba to jeden wiersz, a odpowiedź przed i po to dwie kolumny z tymi samymi kodami (np. tak/nie). Z tych dwóch kolumn program tworzy tabelę par 2 × 2. Nie układaj danych jak dwóch grup jedna pod drugą, bo zgubisz informację, kto jest kim.
Czy test McNemara wystarczy, gdy w badaniu jest grupa kontrolna?
Nie. Test McNemara w każdej grupie osobno nie odpowiada na pytanie, czy zmiana w grupie eksperymentalnej była większa niż w kontrolnej. Porównaj zmianę między grupami, np. w regresji logistycznej dla pomiarów powtarzanych z interakcją grupa × czas.
Powiązane hasła
Przeczytaj też
Badanie wiedzy przed i po szkoleniu
Test t i Wilcoxona z d_z, McNemar z korektą Holma, znormalizowany przyrost, test Bowkera i pomiar odroczony – z danymi, kodem R i opisem APA.
Czytaj →PoradnikJak porównać odsetki w dwóch grupach?
Tabela 2 × 2, test chi-kwadrat lub Fishera i różnica w punktach procentowych z 95% CI Newcombe’a – z przykładem w R i wzorem opisu.
Czytaj →PoradnikBadania kliniczne i pomiar przed i po – przewodnik
Osiem etapów badania z interwencją: schemat, etyka, błąd pomiaru, liczebność, ITT, ANCOVA, RCI i MCID oraz CONSORT – z linkami do każdego etapu.
Czytaj →Masz odpowiedzi tak/nie przed i po?
Sprawdzimy, czy test McNemara pasuje do Twojego schematu badania, policzymy różnicę z przedziałem ufności i pomożemy opisać wynik w rozdziale wyników.
Oferta dla studentówWyceń analizęBibliografia i dalsza literatura naukowa (APA 7)
- Agresti, A., & Min, Y. (2005). Simple improved confidence intervals for comparing matched proportions. Statistics in Medicine, 24(5), 729–740. https://doi.org/10.1002/sim.1781
- Fagerland, M. W., Lydersen, S., & Laake, P. (2013). The McNemar test for binary matched-pairs data: Mid-p and asymptotic are better than exact conditional. BMC Medical Research Methodology, 13(1), Article 91. https://doi.org/10.1186/1471-2288-13-91 ● Otwarty dostęp
- Fagerland, M. W., Lydersen, S., & Laake, P. (2014). Recommended tests and confidence intervals for paired binomial proportions. Statistics in Medicine, 33(16), 2850–2875. https://doi.org/10.1002/sim.6148
- McNemar, Q. (1947). Note on the sampling error of the difference between correlated proportions or percentages. Psychometrika, 12(2), 153–157. https://doi.org/10.1007/BF02295996
- Newcombe, R. G. (1998). Improved confidence intervals for the difference between binomial proportions based on paired data. Statistics in Medicine, 17(22), 2635–2650. https://doi.org/10.1002/(sici)1097-0258(19981130)17:22<2635::aid-sim954>3.0.co;2-c
- Pembury Smith, M. Q. R., & Ruxton, G. D. (2020). Effective use of the McNemar test. Behavioral Ecology and Sociobiology, 74(11), Article 133. https://doi.org/10.1007/s00265-020-02916-y ● Otwarty dostęp
Cytowania BibTeX
@article{agresti2005simple, author={Agresti, Alan and Min, Yongyi}, title={{Simple improved confidence intervals for comparing matched proportions}}, journal={Statistics in Medicine}, year={2005}, volume={24}, number={5}, pages={729--740}, doi={10.1002/sim.1781}}@article{fagerland2013mcnemar, author={Fagerland, Morten W. and Lydersen, Stian and Laake, Petter}, title={{The McNemar test for binary matched-pairs data: Mid-p and asymptotic are better than exact conditional}}, journal={BMC Medical Research Methodology}, year={2013}, volume={13}, number={1}, eid={91}, doi={10.1186/1471-2288-13-91}}@article{fagerland2014recommended, author={Fagerland, Morten W. and Lydersen, Stian and Laake, Petter}, title={{Recommended tests and confidence intervals for paired binomial proportions}}, journal={Statistics in Medicine}, year={2014}, volume={33}, number={16}, pages={2850--2875}, doi={10.1002/sim.6148}}@article{mcnemar1947note, author={McNemar, Quinn}, title={{Note on the sampling error of the difference between correlated proportions or percentages}}, journal={Psychometrika}, year={1947}, volume={12}, number={2}, pages={153--157}, doi={10.1007/bf02295996}}@article{newcombe1998improved, author={Newcombe, Robert G.}, title={{Improved confidence intervals for the difference between binomial proportions based on paired data}}, journal={Statistics in Medicine}, year={1998}, volume={17}, number={22}, pages={2635--2650}, doi={10.1002/(sici)1097-0258(19981130)17:22<2635::aid-sim954>3.0.co;2-c}}@article{pemburysmith2020effective, author={Pembury Smith, Matilda Q. R. and Ruxton, Graeme D.}, title={{Effective use of the McNemar test}}, journal={Behavioral Ecology and Sociobiology}, year={2020}, volume={74}, number={11}, eid={133}, doi={10.1007/s00265-020-02916-y}}