Bene, sembra che ne abbia fatto un hash. Vorrei provare a spiegarlo di nuovo, in un modo diverso e vedremo se potrebbe aiutare a chiarire le cose.
Il modo tradizionale di spiegare il test di McNemar rispetto al test chi-quadrato è quello di chiedere se i dati sono "accoppiati" e di consigliare il test McNemar se i dati sono accoppiati e il test chi-quadrato se i dati sono "non accoppiati". Ho scoperto che questo crea molta confusione (questo thread è un esempio!). Al posto di questo, ho scoperto che è molto utile concentrarsi sulla domanda che si sta tentando di porre e utilizzare il test corrispondente alla propria domanda. Per rendere questo più concreto, diamo un'occhiata a uno scenario inventato:
Cammini in una conferenza statistica e per ogni statista che incontri, registri se provengono dagli Stati Uniti o dal Regno Unito. Registri anche se hanno la pressione alta o normale.
Ecco i dati:
mat = as.table(rbind(c(195, 5),
c( 5, 195) ))
colnames(mat) = c("US", "UK")
rownames(mat) = c("Hi", "Normal")
names(dimnames(mat)) = c("BP", "Nationality")
mat
# Nationality
# BP US UK
# Hi 195 5
# Normal 5 195
A questo punto, è importante capire quale domanda vogliamo porre ai nostri dati. Ci sono tre diverse domande che potremmo porre qui:
- Potremmo voler sapere se le variabili categoriali
BP
e Nationality
sono associate o indipendenti;
- Potremmo chiederci se la pressione alta è più comune tra i statistici statunitensi che tra i statistici del Regno Unito;
Infine, potremmo chiederci se la percentuale di statistici con ipertensione arteriosa è uguale alla percentuale di statistici statunitensi con cui abbiamo parlato. Questo si riferisce alle proporzioni marginali della tabella. Questi non sono stampati per impostazione predefinita in R, ma possiamo ottenerli in questo modo (notare che, in questo caso, sono esattamente gli stessi):
margin.table(mat, 1)/sum(mat)
# BP
# Hi Normal
# 0.5 0.5
margin.table(mat, 2)/sum(mat)
# Nationality
# US UK
# 0.5 0.5
Come ho detto, l'approccio tradizionale, discusso in molti libri di testo, è di determinare quale test usare in base al fatto che i dati siano "accoppiati" o meno. Ma questo è molto confuso, questa tabella di contingenza è "accoppiata"? Se confrontiamo la proporzione con l'ipertensione arteriosa tra statistici statunitensi e britannici, stai confrontando due proporzioni (sebbene della stessa variabile) misurate su diversi gruppi di persone. D'altra parte, se si desidera confrontare la proporzione con l'ipertensione arteriosa con la proporzione degli Stati Uniti, si stanno confrontando due proporzioni (sebbene con variabili diverse) misurate sullo stesso gruppo di persone. Questi dati sono entrambi"accoppiato" e "non accoppiato" allo stesso tempo (anche se in relazione a diversi aspetti dei dati). Questo porta alla confusione. Per cercare di evitare questa confusione, sostengo che dovresti pensare in termini di quale domanda stai ponendo. In particolare, se vuoi sapere:
- Se le variabili sono indipendenti: utilizzare il test chi-quadrato.
- Se la proporzione con ipertensione arteriosa differisce in base alla nazionalità: utilizzare il test z per la differenza di proporzioni.
- Se le proporzioni marginali sono le stesse: usa il test di McNemar.
Qualcuno potrebbe non essere d'accordo con me qui, sostenendo che poiché la tabella di contingenza non è "accoppiata", il test di McNemar non può essere usato per testare l'uguaglianza delle proporzioni marginali e che invece dovrebbe essere usato il test chi-quadrato. Poiché questo è il punto controverso, proviamo entrambi a vedere se i risultati hanno senso:
chisq.test(mat)
# Pearson's Chi-squared test with Yates' continuity correction
#
# data: mat
# X-squared = 357.21, df = 1, p-value < 2.2e-16
mcnemar.test(mat)
# McNemar's Chi-squared test
#
# data: mat
# McNemar's chi-squared = 0, df = 1, p-value = 1
50 % = 50 %
Proviamo un altro esempio:
mat2 = as.table(rbind(c(195, 195),
c( 5, 5) ))
colnames(mat2) = c("US", "UK")
rownames(mat2) = c("Hi", "Normal")
names(dimnames(mat2)) = c("BP", "Nationality")
mat2
# Nationality
# BP US UK
# Hi 195 195
# Normal 5 5
margin.table(mat2, 1)/sum(mat2)
# BP
# Hi Normal
# 0.975 0.025
margin.table(mat2, 2)/sum(mat2)
# Nationality
# US UK
# 0.5 0.5
97,5 % ≫ 50 %
chisq.test(mat2)
# Pearson's Chi-squared test
#
# data: mat2
# X-squared = 0, df = 1, p-value = 1
mcnemar.test(mat2)
# McNemar's Chi-squared test with continuity correction
#
# data: mat2
# McNemar's chi-squared = 178.605, df = 1, p-value < 2.2e-16
Questa volta, il test chi-quadrato dà un valore p di 1, il che significa che le proporzioni marginali sono uguali come possono essere. Ma abbiamo visto che le proporzioni marginali non sono ovviamente uguali, quindi questo risultato non ha alcun senso alla luce dei nostri dati. D'altra parte, il test di McNemar produce un valore p di circa 0. In altre parole, è estremamente improbabile ottenere dati con proporzioni marginali lontane dall'uguaglianza come queste, se sono veramente uguali nella popolazione. Poiché le nostre proporzioni marginali osservate sono tutt'altro che uguali, questo risultato ha senso.
Il fatto che il test chi-quadrato produca risultati insensati, dati i nostri dati, suggerisce che c'è qualcosa di sbagliato nell'utilizzare il test chi-quadrato qui. Naturalmente, il fatto che il test di McNemar abbia fornito risultati sensati non dimostra che sia valido, potrebbe essere stato solo una coincidenza, ma il test chi-quadro è chiaramente sbagliato.
Vediamo se riusciamo a risolvere l'argomento del perché il test di McNemar potrebbe essere quello giusto. Userò un terzo set di dati:
mat3 = as.table(rbind(c(190, 15),
c( 60, 135) ))
colnames(mat3) = c("US", "UK")
rownames(mat3) = c("Hi", "Normal")
names(dimnames(mat3)) = c("BP", "Nationality")
mat3
# Nationality
# BP US UK
# Hi 190 15
# Normal 60 135
margin.table(mat3, 1)/sum(mat3)
# BP
# Hi Normal
# 0.5125 0.4875
margin.table(mat3, 2)/sum(mat3)
# Nationality
# US UK
# 0.625 0.375
51,25 %62,5 %
prop.test(x=c(205, 250), n=c(400, 400))
# 2-sample test for equality of proportions with continuity correction
#
# data: c(205, 250) out of c(400, 400)
# X-squared = 9.8665, df = 1, p-value = 0.001683
# alternative hypothesis: two.sided
# 95 percent confidence interval:
# -0.18319286 -0.04180714
# sample estimates:
# prop 1 prop 2
# 0.5125 0.6250
(Per utilizzare prop.test()
per testare le proporzioni marginali, ho dovuto inserire manualmente il numero di "successi" e il numero totale di "prove", ma dall'ultima riga dell'output è possibile vedere che le proporzioni sono corrette.) Ciò suggerisce che è improbabile ottenere proporzioni marginali così lontane dall'uguaglianza se fossero effettivamente uguali, data la quantità di dati che abbiamo.
Questo test è valido? Ci sono due problemi qui: il test ritiene che abbiamo 800 dati, quando in realtà ne abbiamo solo 400. Questo test non tiene conto del fatto che queste due proporzioni non sono indipendenti, nel senso che sono state misurate sulle stesse persone.
% BP alta: 190 + 15400% USA: 190 + 60400
1904001560π= .5sotto il null. Questa era l'intuizione di McNemar. In effetti, il test di McNemar è essenzialmente solo un test binomiale per stabilire se le osservazioni possano ugualmente cadere in quelle due cellule:
binom.test(x=15, n=(15+60))
# Exact binomial test
#
# data: 15 and (15 + 60)
# number of successes = 15, number of trials = 75, p-value = 1.588e-07
# alternative hypothesis: true probability of success is not equal to 0.5
# 95 percent confidence interval:
# 0.1164821 0.3083261
# sample estimates:
# probability of success
# 0.2
In questa versione, vengono utilizzate solo le osservazioni informative e non vengono conteggiate due volte. Il valore p qui è molto più piccolo, 0,0000001588, come spesso accade quando si tiene conto della dipendenza nei dati. Cioè, questo test è più potente del test z della differenza di proporzioni. Possiamo inoltre vedere che la versione precedente è essenzialmente la stessa del test di McNemar:
mcnemar.test(mat3, correct=FALSE)
# McNemar's Chi-squared test
#
# data: mat3
# McNemar's chi-squared = 27, df = 1, p-value = 2.035e-07
Se la non identicità è confusa, il test di McNemar in genere, e in R, quadra il risultato e lo confronta con la distribuzione chi-quadrata, che non è un test esatto come il binomio sopra:
(15-60)^2/(15+60)
# [1] 27
1-pchisq(27, df=1)
# [1] 2.034555e-07
Pertanto, quando si desidera verificare che le proporzioni marginali di una tabella di contingenza siano uguali, il test di McNemar (o l'esatto test binomiale calcolato manualmente) è corretto. Utilizza solo le informazioni pertinenti senza utilizzare illegalmente due dati. Non capita solo di "produrre" risultati che abbiano un senso per i dati.
Continuo a credere che cercare di capire se una tabella di contingenza è "accoppiata" non è utile. Suggerisco di utilizzare il test che corrisponde alla domanda che stai ponendo dei dati.