Testul lui McNemar în R | R-bloggeri

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe R pe Statistici și Rși cu amabilitate a contribuit la R-bloggeri). (Puteți raporta problema legată de conținutul acestei pagini aici)


Doriți să vă distribuiți conținutul pe R-bloggeri? dați clic aici dacă aveți un blog, sau aici dacă nu aveți.

Într-un articol anterior, am arătat cum se efectuează testul Chi-pătrat al independenței în R pentru a testa dacă două variabile calitative sunt legate. După cum sa menționat în acel articol (și în cel care arată cum să faci testul Chi-pătrat al independenței manual), acest test necesită ca observațiile să fie independent. Când observațiile sunt dependente, adică atunci când cele două măsurători sunt colectate pe aceleaşi subiecții (eșantioane pereche), ar trebui utilizate în schimb testele Q McNemar sau Cochran.

Acest articol este dedicat primului: the Testul lui McNemar. Este folosit pentru a compara două proporții înrudite (pereche) măsurate pe o variabilă calitativă cu doar două niveluri posibile. În practică, este folosit mai ales atunci când aceiași subiecți sunt măsurați de două ori (de obicei, înainte și după o intervenție), sau atunci când doi evaluatori sau două condiții sunt aplicate acelorași subiecți.

Într-un fel, testul lui McNemar este la două proporții pereche ceea ce este testul t Student pereche la două mijloace pereche: în ambele cazuri profităm de faptul că cele două măsurători aparțin acelorași indivizi, diferența fiind că aici variabila de interes este binară și nu cantitativă.

Rețineți, de asemenea, că testul lui McNemar este limitat la exact două măsurători înrudite. Dacă aveți mai mult de două (de exemplu, aceeași întrebare pusă în trei momente diferite), extensia adecvată este testul Cochran Q, al cărui test McNemar este cazul special pentru două măsurători. Dacă nu sunteți sigur ce test este potrivit pentru propriile date, consultați această prezentare generală a celor mai comune teste statistice.

În restul articolului, prezentăm datele folosite pentru ilustrare, scopul, ipotezele și ipotezele testului și, în final, cum să-l efectuăm în R și cum să-i interpretăm rezultatele.

Un set de date cu o structură binară pereche nu este atât de ușor de găsit printre seturile de date livrate cu R, așa că simulăm propriile noastre date pentru acest articol.

Să presupunem că întrebăm 200 de cetățeni selectați aleatoriu dacă sunt în favoarea unei noi politici în orașul lor (răspunde „Da” sau „Nu”), că apoi îi punem să urmărească o dezbatere publică despre această politică și că le punem din nou exact aceeași întrebare imediat după dezbatere:

# number of respondents
n <- 200

# opinion before the debate
before <- sample(c("Yes", "No"),
  size = n,
  replace = TRUE,
  prob = c(0.4, 0.6)
)

# opinion after the debate (respondents who were in favor
# tend to keep their opinion, while those who were against
# are more likely to change their mind)
after <- ifelse(before == "Yes",
  sample(c("Yes", "No"), size = n, replace = TRUE, prob = c(0.9, 0.1)),
  sample(c("Yes", "No"), size = n, replace = TRUE, prob = c(0.4, 0.6))
)

# dataset
dat <- data.frame(
  respondent = 1:n,
  before = factor(before, levels = c("Yes", "No")),
  after = factor(after, levels = c("Yes", "No"))
)

head(dat)
##   respondent before after
## 1          1    Yes   Yes
## 2          2    Yes   Yes
## 3          3     No   Yes
## 4          4    Yes   Yes
## 5          5    Yes   Yes
## 6          6     No    No

(Rețineți că o sămânță a fost setată în fundal cu set.seed(42)astfel încât datele simulate și toate rezultatele de mai jos sunt reproductibile.)

Fiecare rând corespunde unui respondent și conține două măsurători ale aceleiași variabile binare: opinia înainte și opinia după dezbatere. Cele două eșantioane sunt astfel împerecheate, deoarece cele două răspunsuri de pe un rând dat aparțin aceleiași persoane.

Ca întotdeauna, este o practică bună să începeți cu niște statistici descriptive. Iată, proporția respondenților în favoarea politicii în fiecare dintre cele două momente:

# install.packages("dplyr")
library(dplyr)

dat %>%
  summarise(
    prop_before = mean(before == "Yes"),
    prop_after = mean(after == "Yes")
  )
##   prop_before prop_after
## 1        0.46       0.61

În eșantionul nostru, proporția respondenților în favoarea politicii a trecut de la 46% înainte de dezbatere la 61% după dezbatere.

Aceste două proporții sunt calculate pe aceleași persoane, așa că compararea lor ca și cum ar proveni din două grupuri independente ar ignora împerecherea. Ceea ce contează pentru testul lui McNemar este modul în care fiecare respondent s-a mutat (sau nu s-a mutat) de la un răspuns la altul, iar această informație este conținută în 2 (ori) 2 tabel de contingență al răspunsurilor pereche:

tab <- table(dat$before, dat$after,
  dnn = c("Before", "After")
)

tab
##       After
## Before Yes No
##    Yes  81 11
##    No   41 67

Acest tabel trebuie citit pereche cu pereche, și nu celulă cu celulă, așa cum facem de obicei:

  • cele două celule de pe diagonală sunt cele perechi concordante: 81 de respondenți au răspuns „Da” de două ori și 67 au răspuns „Nu” de două ori, așa că acești 148 de respondenți nu s-au răzgândit,
  • cele două celule din afara diagonalei sunt perechi discordante: 11 respondenți au fost pentru înainte de dezbatere, dar împotrivă după, în timp ce 41 au fost împotrivă înainte, dar după.

Doar perechile discordante poartă informații despre o schimbare de opinie (un respondent care a dat de două ori același răspuns nu ne spune nimic despre efectul dezbaterii), și tocmai pe asta se construiește testul McNemar.

Aceeași informații pot fi vizualizate cu o simplă diagramă cu bare a numărărilor pereche:

# install.packages("ggplot2")
library(ggplot2)

ggplot(dat) +
  aes(x = before, fill = after) +
  geom_bar(position = "dodge") +
  labs(
    x = "Opinion before the debate",
    y = "Number of respondents",
    fill = "Opinion after the debate"
  )

Din tabel și diagramă, vedem că schimbările de opinie nu se echilibrează: mult mai mulți respondenți au trecut de la „Nu” la „Da” decât invers. Întrebarea este acum dacă acest dezechilibru este suficient de mare pentru a fi declarat semnificativ sau dacă ar putea fi explicat în mod rezonabil doar prin întâmplare (adică prin fluctuații de eșantionare).

Scop și ipoteze

Testul lui McNemar este utilizat pentru a compara două proporții înrudite, astfel încât permite să se determine dacă proporția subiecților aparținând unei anumite categorii s-a schimbat între două măsurători dependente.

Ipotezele nule și alternative ale testului lui McNemar sunt:

  • (H_0): cele două proporții înrudite sunt egale (omogenitate marginală, adică nu există o schimbare sistematică între cele două măsurători)
  • (H_1): cele două proporții asociate sunt diferite (există o schimbare semnificativă între cele două măsurători)

Deoarece perechile concordante nu aduc informații despre o schimbare, testul se bazează doar pe cele două celule discordante. Indicând prin (b) numărul de subiecți care au răspuns „Da”, apoi „Nu”, și de (c) numărul de subiecți care au răspuns „Nu”, apoi „Da”, ipotezele pot fi scrise în mod echivalent astfel:

  • (H_0: p_b = p_c)
  • (H_1: p_b ne p_c)

unde (p_b) şi (p_c) sunt probabilitățile celor două tipuri posibile de schimbare. În ipoteza nulă, o schimbare într-o direcție este la fel de probabilă ca o schimbare în cealaltă direcție, deci statistica testului

(chi^2 = frac{(b – c)^2}{b + c})

urmează o distribuție Chi-pătrat cu 1 grad de libertate. În mod implicit, R aplică o corecție de continuitate (vezi mai multe despre aceasta mai jos), care înlocuiește numărătorul cu ((|b – c| – 1)^2).

În contextul exemplului nostru, testul lui McNemar ne ajută să răspundem la următoarea întrebare: „Dezbaterea publică a schimbat semnificativ proporția cetățenilor în favoarea noii politici?”.

Respingerea (H_0) ar însemna că proporția cetățenilor în favoarea politicii este semnificativ diferită înainte și după dezbatere, astfel încât schimbările de opinie observate în eșantionul nostru este puțin probabil să se datoreze doar întâmplării. Dimpotrivă, nu respingerea (H_0) ar însemna că nu avem suficiente dovezi pentru a concluziona că opiniile s-au schimbat: comutatoarele observate în cele două direcții ar fi atunci compatibile cu fluctuații aleatorii.

Rețineți că, ca și pentru multe teste, testul lui McNemar nu indică direcţie a schimbarii. Direcția trebuie citită din tabelul de contingență sau din proporțiile marginale calculate în secțiunea anterioară.

Ipoteze

Pentru ca rezultatele testului McNemar să fie valide, trebuie îndeplinite următoarele ipoteze:

  1. Măsurători perechi pe o variabilă binară. Cele două măsurători trebuie colectate pe aceiași subiecți, sau pe perechi potrivite (gemeni, sau pacienți potriviți pe vârstă și sex de exemplu), iar variabila de interes trebuie să fie calitativă cu exact două niveluri („Da”/“Nu”, succes/eșec, prezent/absent etc.). Dacă cele două eșantioane sunt independente în loc de pereche, utilizați testul Chi-pătrat al independenței.
  2. Datele organizate într-un 2 (ori) 2 tabel de contingență al rezultatelor pereche. Fiecare subiect contribuie la una și o singură celulă a tabelului, astfel încât suma celor patru celule este egală cu numărul de subiecți (200 în cazul nostru), și nu dublul acestui număr.
  3. Perechile sunt independente unele de altele. În cadrul unei perechi, cele două măsurători sunt desigur dependente și tocmai acesta este motivul pentru care folosim acest test. Între perechi, însă, se cere independență: răspunsurile unui subiect nu trebuie să influențeze răspunsurile altui subiect. Ca și în cazul multor teste statistice, această ipoteză este de obicei verificată pe baza designului experimentului, mai degrabă decât printr-un test formal. Un eșantion aleatoriu și reprezentativ al populației de interes este în general suficient. În exemplul nostru, respondenții au fost selectați la întâmplare și au răspuns individual la întrebare, așa că considerăm că această ipoteză este îndeplinită.
  4. Destul de perechi discordante. The (p)-valoare returnată de mcnemar.test() se bazează pe o aproximare Chi-pătrat, care este de încredere numai dacă numărul de perechi discordante este suficient de mare. O regulă generală comună este aceea (b + c) ar trebui să fie de cel puțin 25. În eșantionul nostru, (b + c) = 52, astfel încât aproximarea poate fi utilizată în siguranță.

Când numărul de perechi discordante este mic, este de preferat să folosiți versiunea exactă a testului, care se bazează pe o distribuție binomială în loc de aproximarea Chi-pătrat. Se rezumă la a testa dacă, printre perechile discordante, schimbările într-o direcție sunt la fel de frecvente ca și schimbările în cealaltă direcție, deci poate fi efectuată în baza R cu binom.test() funcţie:

# exact version of the McNemar's test
binom.test(tab(1, 2), tab(1, 2) + tab(2, 1), p = 0.5)
## 
## 	Exact binomial test
## 
## data:  tab(1, 2) and tab(1, 2) + tab(2, 1)
## number of successes = 11, number of trials = 52, p-value = 3.589e-05
## alternative hypothesis: true probability of success is not equal to 0.5
## 95 percent confidence interval:
##  0.1106115 0.3470376
## sample estimates:
## probability of success 
##              0.2115385

Rețineți că {exact2x2} pachetul oferă, de asemenea, un dedicat mcnemar.exact() funcție, care returnează același lucru (p)-valoare împreună cu un interval de încredere pentru raportul de cote.

În R

Testul lui McNemar poate fi efectuat în R cu mcnemar.test() funcție, aplicată pe tabelul de contingență al rezultatelor pereche:

mcnemar.test(tab)
## 
## 	McNemar's Chi-squared test with continuity correction
## 
## data:  tab
## McNemar's chi-squared = 16.173, df = 1, p-value = 5.781e-05

Testul poate fi aplicat și direct asupra celor două variabile, fără a construi mai întâi tabelul de contingență (rezultatele sunt, desigur, identice):

mcnemar.test(dat$before, dat$after)
## 
## 	McNemar's Chi-squared test with continuity correction
## 
## data:  dat$before and dat$after
## McNemar's chi-squared = 16.173, df = 1, p-value = 5.781e-05

Ieșirea arată:

  • titlul testului, împreună cu mențiunea că a fost aplicată o corecție de continuitate,
  • datele care au fost utilizate,
  • statistica testului (McNemar's chi-squared),
  • gradele de libertate (întotdeauna egale cu 1 pentru un 2 (ori) 2 tabel) și
  • cel (p)-valoare.

După cum sa menționat mai sus, R aplică o corecție de continuitate în mod implicit. Această corecție face ca testul să fie puțin mai conservator (adică oferă o valoare mai mare (p)-valoare), și poate fi eliminată datorită correct = FALSE argument:

mcnemar.test(tab, correct = FALSE)
## 
## 	McNemar's Chi-squared test
## 
## data:  tab
## McNemar's chi-squared = 17.308, df = 1, p-value = 3.179e-05

Cu 52 de perechi discordante, ambele versiuni duc la aceeași concluzie. Corecția contează cu adevărat doar atunci când numărul de perechi discordante este mic și, în acest caz, versiunea exactă prezentată în secțiunea anterioară este oricum o opțiune mai bună.

Este (p)-valoare care prezintă interes pentru încheierea testului. Dacă nu sunteți familiarizat cu (p)-valori, va invit sa cititi aceasta sectiune.

Interpretări

Pe baza testului lui McNemar, respingem ipoteza nulă și concluzionăm că proporția cetățenilor în favoarea noii politici este semnificativ diferită înainte și după dezbatere ((p)-valoare < 0,001).

(săgeată la dreapta) În contextul nostru, respingerea ipotezei nule înseamnă că dezbaterea este asociată cu o schimbare semnificativă de opinie. Privind direcția acestei schimbări, proporția cetățenilor în favoarea politicii a crescut de la 46% înainte de dezbatere la 61% după dezbatere.

(De dragul ilustrațieidacă (p)-valoarea fusese mai mare decât nivelul de semnificație (alpha = 0,05): nu am fi putut respinge ipoteza nulă, așa că nu am fi putut concluziona că proporția cetățenilor în favoarea politicii a fost diferită înainte și după dezbatere.)

Spre deosebire de testele care compară trei grupuri sau mai multe, nu este necesar niciun test post-hoc după un test McNemar semnificativ: sunt comparate doar două măsurători înrudite, așa că un rezultat semnificativ ne spune deja care două proporții diferă. Comparațiile post-hoc devin din nou relevante cu mai mult de două măsurători înrudite, caz în care ar trebui să apelați la testul Q al lui Cochran.

În acest articol, am trecut în revistă scopul și ipotezele testului McNemar, care este utilizat pentru a compara două proporții înrudite măsurate pe aceiași subiecți, împreună cu ipotezele sale subiacente (măsurători perechi pe o variabilă binară, independență între perechi și un număr suficient de perechi discordante). Apoi am arătat cum să o executăm în R cu mcnemar.test() funcție, aplicată fie pe 2 (ori) 2 tabelul de contingență al răspunsurilor pereche sau direct pe cele două variabile și modul de interpretare a rezultatelor acestuia prin compararea (p)-valoare cu nivelul de semnificaţie (alfa). Amintiți-vă că este cazul special al testului Cochran Q pentru exact două măsurători înrudite și că, cu mostre independente, testul Chi-pătrat al independenței ar trebui să fie preferat.

Multumesc pentru lectura.

Sper că acest articol v-a ajutat să înțelegeți testul McNemar și cum să îl efectuați în R.

Ca întotdeauna, dacă aveți o întrebare sau o sugestie legată de subiectul abordat în acest articol, vă rugăm să o adăugați ca comentariu pentru ca alți cititori să poată beneficia de discuție.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.