您的位置:

McNemar检验详解

一、McNemar怎么读

McNemar的发音为"ma-cnemar"。

二、McNemar检验和卡方检验的区别

McNemar检验也是一种卡方检验,但是它特别适合于配对数据的分析。

三、McNemar检验是什么

McNemar检验是一种用于检验二分类变量是否呈现相关性的统计方法。

举一个例子:某医院想要检验一种新药对头痛症状的治疗效果。他们随机将40名患者分为两组,然后将试验组使用新药,对照组使用老药。在治疗后的一个月内,如果头痛症状减轻,就标注为1,否则为0。最后,我们得到了以下数据:

  
1个月后头痛症状
组别 减轻 没减轻
试验组(使用新药) 27 3
对照组(使用老药) 21 9

在上述数据中,试验组中有27个人头痛症状得到了减轻,而对照组中只有21个人。我们想要检验新药是否真的可以帮助缓解头痛的症状。传统的卡方检验不能解决这个问题,因为它不能区分配对数据。这时候,我们可以使用McNemar检验。它的原假设是:

H0: 新老药物治疗头痛的效果没有差别。

备择假设为:

Ha: 新老药物治疗头痛的效果有明显差别。

McNemar检验的统计量为(使用R语言):

yates_correction <- FALSE
mcnemar.test(matrix(c(27,3,21,9), nrow = 2), correct = yates_correction)

代码结果为:

McNemar's Chi-squared test with continuity correction

data:  matrix(c(27, 3, 21, 9), nrow = 2)
McNemar's chi-squared = 4.4713, df = 1, p-value = 0.03433

从代码结果中,我们可以看出p-value为0.03433<0.05,拒绝了原假设,接受备择假设,新老药的治疗头痛症状效果有明显差别。

四、McNemar检验结果怎么看

McNemar检验的结果包括统计量和p值。

如果p值小于显著性水平(一般为0.05),则我们拒绝原假设;否则我们接受原假设。

需要注意的是,如果样本量太小,那么结果可能会不可靠。通常,建议样本数量应该大于50。

五、McNemar检验知乎

在知乎上可以找到很多关于McNemar检验的问题和答案,例如:

Q: McNemar检验和卡方检验的区别是什么?

A: https://www.zhihu.com/question/47929173

六、McNemar配对

McNemar检验中出现的配对是指每组数据之间的联系。例如,在刚才的例子中,试验组和对照组就是配对的。

这里提供一个R语言的示例:

data(mtcars)
df <- mtcars[,c("am", "gear")]
mMcNemar::SignTest(df$am, df$gear, alt = "twosided", paired = TRUE)

上述语句中,使用mtcars数据集中am和gear列进行配对。结果可以理解为:am是顺变速箱还是手动变速箱,gear是档位数。原假设(H0)是两者的比例是一样的,备择假设(Ha)是两者的比例不一样。SignTest是McNemar检验的一个封装函数。

七、McNemar Test

对于McNemar检验,我们同样可以使用R语言中的stats包进行检验:

yates_correction <- FALSE
mcnemar.test(matrix(c(27,3,21,9), nrow = 2), correct = yates_correction)

结果为:

McNemar's Chi-squared test with continuity correction

data:  matrix(c(27, 3, 21, 9), nrow = 2)
McNemar's chi-squared = 4.4713, df = 1, p-value = 0.03433

八、McNemar卡方检验

McNemar检验属于一种特殊的卡方检验,它主要用于分析配对数据。而McNemar卡方检验则可用于非配对数据。相应的R语言代码为:

yates_correction <- FALSE
mcnemar.test(matrix(c(27,3,42,56), nrow = 2), correct = yates_correction)

这里的数据没有配对,是另一个例子。由于非配对McNemar卡方检验不敏感,所以一般会与卡方检验进行比较,来判断是否存在显著差异。

九、McNemar配对卡方检验

最后提供一个使用R语言stats包进行McNemar配对卡方检验的代码:

data(mtcars)
df <- mtcars[,c("am", "gear")]
result <- stats::mcnemar.test(with(df, table(am,gear)))
print(result)

上述代码中的数据同样来自mtcars数据集。最后的结果为:

 McNemar's Chi-squared test with continuity correction

data:  with(df, table(am, gear))
McNemar's chi-squared = 2.25, df = 1, p-value = 0.1332

从结果中可以看出,p-value没有小于显著性水平,所以我们不能否认原假设。