Wygląda na to, że zrobiłem z tego skrót. Pozwól, że spróbuję wyjaśnić to jeszcze raz, w inny sposób, a my przekonamy się, czy to może pomóc wyjaśnić sytuację.
Tradycyjnym sposobem wyjaśnienia testu McNemara w porównaniu do testu chi-kwadrat jest zapytanie, czy dane są „sparowane” i zalecenie testu McNemar, jeśli dane są sparowane, oraz testu chi-kwadrat, jeśli dane są „niesparowane”. Odkryłem, że prowadzi to do wielu nieporozumień (ten wątek jest przykładem!). Zamiast tego stwierdziłem, że najbardziej pomocne jest skupienie się na pytaniu, które próbujesz zadać , i skorzystanie z testu, który pasuje do twojego pytania. Aby uczynić to bardziej konkretnym, spójrzmy na gotowy scenariusz:
Spacerujesz po konferencji statystycznej i dla każdego statystyka, którego spotykasz, rejestrujesz, czy pochodzą one ze Stanów Zjednoczonych czy Wielkiej Brytanii. Zapisujesz również, czy mają wysokie ciśnienie krwi, czy normalne ciśnienie krwi.
Oto dane:
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
W tym momencie ważne jest, aby dowiedzieć się, jakie pytanie chcemy zadać na temat naszych danych. Możemy tu zadać trzy różne pytania:
- Może chcemy wiedzieć, czy zmienne kategoryczne
BP
i Nationality
są związane lub niezależny;
- Możemy się zastanawiać, czy wysokie ciśnienie krwi jest bardziej powszechne wśród amerykańskich statystyk niż wśród brytyjskich;
Na koniec możemy się zastanawiać, czy odsetek statystyk z wysokim ciśnieniem krwi jest równy odsetkowi statystów z USA, z którymi rozmawialiśmy. Odnosi się to do marginalnych proporcji tabeli. Nie są one drukowane domyślnie w R, ale możemy je w ten sposób uzyskać (zauważ, że w tym przypadku są dokładnie takie same):
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
Jak powiedziałem, tradycyjne podejście omówione w wielu podręcznikach polega na określeniu, który test zastosować, na podstawie tego, czy dane są „sparowane”, czy nie. Ale to bardzo mylące, czy ta tabela awaryjna jest „sparowana”? Jeśli porównamy proporcję z wysokim ciśnieniem krwi między statystami z USA i Wielkiej Brytanii, porównamy dwie proporcje (aczkolwiek tej samej zmiennej) zmierzone dla różnych grup ludzi. Z drugiej strony, jeśli chcesz porównać proporcję z wysokim ciśnieniem krwi do proporcji w USA, porównujesz dwie proporcje (aczkolwiek różnych zmiennych) mierzone dla tego samego zestawu osób. Te dane są oba„sparowane” i „niesparowane” jednocześnie (choć w odniesieniu do różnych aspektów danych). To prowadzi do zamieszania. Aby uniknąć tego zamieszania, uważam, że powinieneś przemyśleć, jakie pytanie zadajesz. W szczególności, jeśli chcesz wiedzieć:
- Jeśli zmienne są niezależne: użyj testu chi-kwadrat.
- Jeśli proporcja z wysokim ciśnieniem krwi różni się w zależności od narodowości: użyj testu Z dla różnicy proporcji.
- Jeśli proporcje krańcowe są takie same: użyj testu McNemara.
Ktoś może się ze mną nie zgodzić, argumentując, że ponieważ tabela kontyngencji nie jest „sparowana”, test McNemara nie może być użyty do przetestowania równości marginalnych proporcji i że zamiast tego należy zastosować test chi-kwadrat. Ponieważ jest to punkt sporny, spróbujmy oba sprawdzić, czy wyniki mają sens:
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 %
Spróbujmy innego przykładu:
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
Tym razem test chi-kwadrat daje wartość p wynoszącą 1, co oznacza, że proporcje brzeżne są tak równe, jak mogą być. Widzieliśmy jednak, że marginesowe proporcje nie są oczywiście równe, więc wynik ten nie ma sensu w świetle naszych danych. Z drugiej strony test McNemara daje wartość p wynoszącą około 0. Innymi słowy, jest bardzo mało prawdopodobne, aby uzyskać dane o marginalnych proporcjach tak dalekie od równości, jak te, jeśli naprawdę są one równe w populacji. Ponieważ nasze obserwowane proporcje krańcowe są dalekie od równości, ten wynik ma sens.
Fakt, że test chi-kwadrat daje wyniki, które nie mają sensu, biorąc pod uwagę nasze dane, sugeruje, że jest coś złego w stosowaniu testu chi-kwadrat tutaj. Oczywiście fakt, że test McNemara dostarczył sensownych wyników, nie dowodzi, że jest on prawidłowy, mógł być po prostu zbiegiem okoliczności, ale test chi-kwadrat jest wyraźnie błędny.
Zobaczmy, czy możemy przeanalizować argument, dlaczego test McNemara może być właściwy. Użyję trzeciego zestawu danych:
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
(Aby użyć prop.test()
do przetestowania proporcji marginalnych, musiałem ręcznie wprowadzić liczby „sukcesów” i całkowitą liczbę „prób”, ale z ostatniego wiersza wyniku widać, że proporcje są poprawne.) Sugeruje to, że biorąc pod uwagę ilość danych, jest mało prawdopodobne, aby proporcje krańcowe były tak dalekie od równości, gdyby faktycznie były równe.
Czy ten test jest ważny? Występują tutaj dwa problemy: test zakłada, że mamy 800 danych, podczas gdy w rzeczywistości mamy tylko 400. Ten test również nie bierze pod uwagę, że te dwie proporcje nie są niezależne, w tym sensie, że zostały zmierzone na tych samych ludziach.
% wysoki BP: 190 + 15400% USA: 190 + 60400
1904001560π= .5poniżej zera. Taki był wgląd McNemara. W rzeczywistości test McNemara jest zasadniczo tylko dwumianowym testem tego, czy obserwacje mogą równie dobrze wpaść do tych dwóch komórek:
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
W tej wersji wykorzystywane są tylko obserwacje informacyjne i nie są one liczone dwukrotnie. Wartość p jest tutaj znacznie mniejsza, 0,0000001588, co często ma miejsce, gdy bierze się pod uwagę zależność danych. Oznacza to, że ten test jest silniejszy niż test Z różnicy proporcji. Widzimy ponadto, że powyższa wersja jest zasadniczo taka sama jak test McNemara:
mcnemar.test(mat3, correct=FALSE)
# McNemar's Chi-squared test
#
# data: mat3
# McNemar's chi-squared = 27, df = 1, p-value = 2.035e-07
Jeśli nieokreślalność jest myląca, test McNemara zazwyczaj, a w R, podnosi wynik do kwadratu i porównuje go z rozkładem chi-kwadrat, który nie jest dokładnym testem jak dwumian powyżej:
(15-60)^2/(15+60)
# [1] 27
1-pchisq(27, df=1)
# [1] 2.034555e-07
Tak więc, jeśli chcesz sprawdzić, czy marginesowe proporcje tabeli zdarzeń są równe, test McNemara (lub dokładny test dwumianowy obliczony ręcznie) jest poprawny. Wykorzystuje tylko istotne informacje bez nielegalnego wykorzystywania jakichkolwiek danych dwukrotnie. Nie tylko „dzieje się”, aby uzyskać wyniki, które mają sens z danymi.
Nadal uważam, że próba ustalenia, czy tabela awaryjna jest „sparowana”, nie jest pomocna. Sugeruję użycie testu, który odpowiada pytaniu o dane.