好吧,看来我已经对此做了一个哈希。让我尝试以另一种方式再次解释这一点,我们将看看它是否有助于解决问题。
解释McNemar检验与卡方检验的传统方法是询问数据是否“配对”,并建议McNemar检验数据是否配对,而卡方检验则推荐数据是否“未配对”。我发现这引起很多混乱(该线程就是一个例子!)。代替此,我发现将重点放在您要提出的问题上,并使用与您的问题匹配的测试是最有用的。为了使这一点更加具体,让我们看一个组合方案:
您在统计会议上走来走去,对于遇到的每个统计学家,都要记录他们是来自美国还是来自英国。您还记录他们是高血压还是正常血压。
数据如下:
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
在这一点上,弄清楚我们要对数据提出什么问题很重要。我们可以在这里提出三个不同的问题:
- 我们可能想知道分类变量
BP
和Nationality
是相关的还是独立的。
- 我们可能想知道,高血压在美国统计学家中是否比在英国统计学家中更普遍?
最后,我们可能想知道高血压统计学家的比例是否等于我们所讨论的美国统计学家的比例。这是指表格的边际比例。这些不是默认情况下在R中打印的,但是我们可以这样得到它们(请注意,在这种情况下,它们是完全相同的):
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
正如我所说,许多教科书中都讨论了传统方法,即根据数据是否“配对”来确定要使用哪种测试。但这很令人困惑,这个列联表是否“配对”了?如果我们将美国和英国的统计学家之间高血压的比例进行比较,则您正在比较在不同人群上测得的两个比例(尽管变量相同)。另一方面,如果要将高血压比例与US比例进行比较,则需要比较在同一组人身上测得的两个比例(尽管变量不同)。这些数据是都同时“配对”和“未配对”(尽管就数据的不同方面而言)。这导致混乱。为了避免这种混乱,我认为您应该从询问哪个问题的角度考虑。具体来说,如果您想知道:
- 如果变量是独立的:请使用卡方检验。
- 如果高血压比例因国籍而异:请使用z检验对比例差异进行调整。
- 如果边际比例相同:请使用McNemar检验。
这里有人可能会不同意我的说法,因为列联表不是“成对的”,因此不能使用McNemar的检验来检验边际比例的相等性,而应使用卡方检验。既然这是争论的焦点,那么让我们一起尝试看看结果是否有意义:
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%
让我们尝试另一个示例:
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
这次,卡方检验的p值为1,这意味着边际比例尽可能相等。但是我们发现边际比例显然很不相等,因此根据我们的数据,这个结果没有任何意义。另一方面,McNemar的检验得出的p值大约为0。换句话说,如果人口中的边际比例确实相等,则极不可能获得与平等程度相差甚远的数据。由于我们观察到的边际比例远非相等,因此该结果有意义。
根据我们的数据,卡方检验得出的结果毫无意义,这表明在此处使用卡方检验存在错误。当然,麦克尼马尔检验提供了有意义的结果这一事实并不能证明它是有效的,这可能只是一个巧合,但是卡方检验显然是错误的。
让我们看看我们是否可以解决为什么麦克尼玛的测试可能是正确的争论。我将使用第三个数据集:
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
(要prop.test()
测试边际比例,我必须手动输入“成功”的数量和“试验”的总数,但是您可以从输出的最后一行看到比例是正确的。)这表明考虑到我们拥有的数据量,如果它们实际上是相等的,则不可能从平等中获得如此远的边际比例。
这个测试有效吗?这里有两个问题:测试认为我们有800个数据,而实际上我们只有400个数据。此测试也没有考虑到这两个比例不是独立的,因为它们是在同一个人上测量的。
% high BP: 190+15400% US: 190+60400
1904001560π=.5在null下。那是麦克尼马尔的见识。实际上,McNemar的检验本质上只是一个二项式检验,用于确定观察是否同样有可能落入这两个单元中:
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
在此版本中,仅使用信息量大的观测值,并且不会被计算两次。这里的p值要小得多,为0.0000001588,这在考虑数据的相关性时通常是这种情况。也就是说,该检验比比例差异的z检验更强大。我们可以进一步看到上述版本与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
如果非同一性令人困惑,则通常使用McNemar检验,在R中对结果求平方,然后将其与卡方分布进行比较,这与上面的二项式方法并不完全相同:
(15-60)^2/(15+60)
# [1] 27
1-pchisq(27, df=1)
# [1] 2.034555e-07
因此,当您要检查列联表的边际比例是否相等时,McNemar的检验(或手动计算的精确二项式检验)是正确的。它仅使用相关信息,而不会两次非法使用任何数据。产生数据意义的结果不只是“发生”。
我仍然认为,试图找出一个偶合表是否“配对”是没有帮助的。我建议使用与您要查询的数据相匹配的测试。