il test di significatività dei
cambiamenti di McNemar
Si tratta di un test adatto a verificare se vi sia stata una variazione tra le osservazioni di n
variabili
aleatorie indipendenti nominali (0 - 1). Dunque i possibili valori da
testare sono le coppie (0,0), (0,1), (1,0) e (1,1). Ad esempio
indichiamo con 0 i Democratici ed 1 i Repubblicani, relativamente ad un
campione di n = 100
intervistati circa il loro atteggiamento di voto prima e dopo un discorso di un candidato:
prima <- c(0,
0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1,
0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0,
0, 0, 0)
dopo <- c(0, 0, 0, 0, 0, 1, 0,
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1,
0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0,
0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0,
0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0)
Si costruisce una tavola di contingenza nel modo seguente:
Determiniano le frequenze marginali:
RP <- sum(prima)
RD <- sum(dopo)
DP <- 100 - RP
DD <- 100 - RD
calcoliamo ora d, il numero dei repubblicani che non hanno cambiato idea, (1,1):
d <- sum(prima*dopo)
e per differenza determiniamo le altre celle:
c <- RP - d
b <- RD - d
a <- DP - b
Il test di McNemar prevede la distinzione nel caso di "grandi campioni" o "piccoli campioni", a seconda se b + c sia maggiore oppure minore o uguale a 20.
"grandi" campioni
Nel caso in cui b + c > 20 (nel nostro esempio b + c = 25) il consuntivo T si definisce nel modo seguente:
T <- ( b - c )^2 / (b + c)
mentre il quantile segue (asintoticamente) la distribuzione del Chi-Quadro a (2-1)(2-1) = 1 gradi di libertà
qchisq(0.95,1)
Nel nostro esempio T = 11.56
> 3.841 = qchisq(0.95,1), quindi rifiutiamo l'ipotesi nulla di
non differenza tra il prima e il dopo, ossia affermiamo che vi è
differenza significativa.
Possiamo anche utilizzare il comando mcnemar.test in sostituzione dell'approccio consuntivo-quantile:
DemRep <- matrix(c(a, c, b, d), nr = 2, dimnames = list("prima" = c("Dem", "Rep"), "dopo" = c("Dem", "Rep")))
DemRep
mcnemar.test(DemRep)
da cui si evince che il p-value è 0.001374
"piccoli campioni"
Nel caso di piccoli campioni, b + c minore o uguale a 20, il consuntivo T si riduca al valore di una cella:
T <- b
mentre il quantile segue la distribuzione binomiale di dimensione b + c con p = 0.5. Determiniamo la regione di accettazione
inf <- qbinom(0.025, b+c, 0.5)
sup <- qbinom(0.975, b+c, 0.5)
e rifiutiamo l'ipotesi nulla se T = b è minore di inf o maggiore di sup.
Con questo foglio MS Excel è possibile modificare i valori di b e c
per provare il test anche su piccoli campioni. Siccome MS Excel non
dispone della funzione esplicita per calcolare il quantile della
distribuzione binomiale, si deve agire su una barra di scorrimento per
determinare il livello alfa di significatività desiderato.
Bibliografia: W. J. Conover, Practical Nonparametric Statistics, John Wiley and Sons, 1999(3).