Eh bien, il semble que j'aie fait un hachage de cela. Permettez-moi d'essayer de l'expliquer à nouveau, d'une manière différente et nous verrons si cela pourrait aider à clarifier les choses.
La manière traditionnelle d'expliquer le test de McNemar par rapport au test du chi carré est de demander si les données sont "appariées" et de recommander le test de McNemar si les données sont appariées et le test du chi carré si les données sont "non appariées". J'ai trouvé que cela conduit à beaucoup de confusion (ce fil étant un exemple!). Au lieu de cela, j'ai trouvé qu'il est très utile de se concentrer sur la question que vous essayez de poser et d'utiliser le test qui correspond à votre question. Pour rendre cela plus concret, regardons un scénario composé:
Vous vous promenez dans une conférence de statistiques et pour chaque statisticien que vous rencontrez, vous enregistrez s'il s'agit des États-Unis ou du Royaume-Uni. Vous enregistrez également s'ils ont une pression artérielle élevée ou une pression artérielle normale.
Voici les données:
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
À ce stade, il est important de comprendre quelle question nous voulons poser à nos données. Il y a trois questions différentes que nous pourrions poser ici:
- Nous pourrions vouloir savoir si les variables catégorielles
BP
et Nationality
sont associées ou indépendantes;
- On peut se demander si l'hypertension artérielle est plus courante chez les statisticiens américains que chez les statisticiens britanniques;
Enfin, on peut se demander si la proportion de statisticiens souffrant d'hypertension artérielle est égale à la proportion de statisticiens américains à qui nous avons parlé. Il s'agit des proportions marginales du tableau. Ceux-ci ne sont pas imprimés par défaut dans R, mais nous pouvons les obtenir ainsi (notez que, dans ce cas, ils sont exactement les mêmes):
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
Comme je l'ai dit, l'approche traditionnelle, discutée dans de nombreux manuels, consiste à déterminer le test à utiliser en fonction du «jumelage» ou non des données. Mais c'est très déroutant, ce tableau de contingence est-il «jumelé»? Si nous comparons la proportion d'hypertension artérielle entre les statisticiens américains et britanniques, vous comparez deux proportions (bien que de la même variable) mesurées sur différents groupes de personnes. D'un autre côté, si vous voulez comparer la proportion d'hypertension artérielle à la proportion américaine, vous comparez deux proportions (bien que de variables différentes) mesurées sur le même ensemble de personnes. Ces données sont à la fois"appariés" et "non appariés" en même temps (bien qu'en ce qui concerne les différents aspects des données). Cela crée de la confusion. Pour essayer d'éviter cette confusion, je soutiens que vous devriez réfléchir à la question que vous posez. Plus précisément, si vous voulez savoir:
- Si les variables sont indépendantes: utilisez le test du chi carré.
- Si la proportion d'hypertension artérielle diffère selon la nationalité: utilisez le test z pour la différence de proportions.
- Si les proportions marginales sont les mêmes: utilisez le test de McNemar.
Quelqu'un pourrait être en désaccord avec moi ici, faisant valoir que parce que le tableau de contingence n'est pas "apparié", le test de McNemar ne peut pas être utilisé pour tester l'égalité des proportions marginales et que le test du chi carré devrait être utilisé à la place. Puisque c'est le point de discorde, essayons les deux pour voir si les résultats ont du 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 %
Essayons un autre exemple:
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
Cette fois, le test du chi carré donne une valeur de p de 1, ce qui signifie que les proportions marginales sont aussi égales qu'elles peuvent l'être. Mais nous avons vu que les proportions marginales ne sont évidemment pas égales, ce résultat n'a donc aucun sens à la lumière de nos données. D'un autre côté, le test de McNemar donne une valeur de p d'environ 0. En d'autres termes, il est extrêmement peu probable d'obtenir des données avec des proportions marginales aussi éloignées de l'égalité que celles-ci, si elles sont vraiment égales dans la population. Puisque nos proportions marginales observées sont loin d'être égales, ce résultat est logique.
Le fait que le test du chi carré donne des résultats qui n'ont aucun sens étant donné nos données suggère qu'il y a quelque chose de mal à utiliser le test du chi carré ici. Bien sûr, le fait que le test de McNemar ait fourni des résultats raisonnables ne prouve pas qu'il est valide, il s'agit peut-être simplement d'une coïncidence, mais le test du chi carré est clairement faux.
Voyons si nous pouvons étudier l'argument pour expliquer pourquoi le test de McNemar pourrait être le bon. J'utiliserai un troisième jeu de données:
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
(Pour prop.test()
tester les proportions marginales, j'ai dû saisir manuellement le nombre de `` succès '' et le nombre total de `` tests '', mais vous pouvez voir sur la dernière ligne de la sortie que les proportions sont correctes.) Cela suggère que il est peu probable d'obtenir des proportions marginales aussi loin de l'égalité si elles étaient réellement égales, compte tenu de la quantité de données dont nous disposons.
Ce test est-il valide? Il y a deux problèmes ici: le test estime que nous avons 800 données, alors que nous n'en avons en réalité que 400. Ce test ne prend pas non plus en compte que ces deux proportions ne sont pas indépendantes, en ce sens qu'elles ont été mesurées sur les mêmes personnes.
% BP élevé: 190 + 15400% NOUS: 190 + 60400
1904001560π= 0,5sous le nul. C'était la perspicacité de McNemar. En fait, le test de McNemar n'est essentiellement qu'un test binomial de la probabilité que les observations tombent également dans ces deux cellules:
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
Dans cette version, seules les observations informatives sont utilisées et elles ne sont pas comptées deux fois. La valeur de p est ici beaucoup plus petite, 0,000000001588, ce qui est souvent le cas lorsque la dépendance dans les données est prise en compte. Autrement dit, ce test est plus puissant que le test z de différence de proportions. Nous pouvons en outre voir que la version ci-dessus est essentiellement la même que le test de 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
Si la non-identité est source de confusion, le test de McNemar typiquement et dans R, évalue le résultat au carré et le compare à la distribution du chi carré, qui n'est pas un test exact comme le binôme ci-dessus:
(15-60)^2/(15+60)
# [1] 27
1-pchisq(27, df=1)
# [1] 2.034555e-07
Ainsi, lorsque vous souhaitez vérifier que les proportions marginales d'une table de contingence sont égales, le test de McNemar (ou le test binomial exact calculé manuellement) est correct. Il utilise uniquement les informations pertinentes sans utiliser illégalement deux fois les données. Il ne s'agit pas simplement de produire des résultats qui donnent un sens aux données.
Je continue de croire qu'essayer de déterminer si une table de contingence est «jumelée» est inutile. Je suggère d'utiliser le test qui correspond à la question que vous posez sur les données.