什么是McNemar检验?适用条件、计算方法及SPSS操作详解

McNemar检验是什么?本文详细介绍McNemar检验的原理、适用条件、计算公式,并比较McNemar与卡方、Fisher、Kappa检验的区别,同时介绍SPSS、R和Python操作方法及论文报告方式。

更新于2026年8月18日

什么是McNemar检验?适用条件、计算方法及SPSS操作详解

在医学和生命科学研究中,我们经常需要对同一组受试者进行两次测量,或者使用两种方法对同一批样本进行检测。例如,研究者可能需要比较患者治疗前后的疾病状态,比较两种诊断方法对同一批患者的检测结果,或者比较同一批受试者在干预前后是否发生某种二分类事件。

如果研究结局只有两个类别,例如“阳性/阴性”“有效/无效”“患病/未患病”,这些数据看起来与普通的2×2列联表非常相似。

但这里有一个非常关键的问题:

这些数据是独立的,还是配对的?

如果两组数据来自不同的受试者,可以考虑 Pearson 卡方检验Fisher 精确检验或 Barnard 精确检验;如果两次测量来自同一个受试者,数据之间存在配对关系,就不能简单地把它们当作独立样本处理。

这时,McNemar 检验(McNemar’s test)就是一种非常经典的方法。

McNemar 检验主要用于分析配对二分类数据,通过比较配对数据中两个“不一致单元格”的数量,判断两种条件下的二分类结果是否存在系统性差异。

例如:

一种新诊断方法与传统诊断方法相比,阳性率是否存在显著差异?

如果两种方法都对同一批患者进行检测,就属于典型的 McNemar 检验应用场景。

本文AJE将系统介绍 McNemar 检验的原理、适用条件、计算方法、与卡方检验及 Fisher 精确检验的区别,并介绍如何使用 SPSS、R 和 Python 完成 McNemar 检验,以及如何在 SCI 论文中规范报告结果。

什么是McNemar检验?

McNemar 检验是一种用于配对二分类数据的统计检验,最常见的数据结构是一个2×2配对列联表。

假设同一批受试者分别接受两种处理、两次测量或者两种检测方法,结果均只有两个类别。

数据可以整理成:

McNemar检验示例

其中:

  • a:两次结果均为阳性;
  • d:两次结果均为阴性;
  • b:A阳性、B阴性;
  • c:A阴性、B阳性。

McNemar 检验最核心的地方就在于:

它主要关注 b 和 c,而不是 a 和 d。

为什么?

因为 a 和 d 表示两次测量结果一致,而 McNemar 检验真正需要判断的是:

两种条件下发生改变的方向是否对称?

如果:

[
b=c
]

说明从 A 到 B 的改变方向大致对称。

如果:

[
b\neq c
]

则说明两种条件之间可能存在系统性差异。

因此,McNemar 检验实际上是在检验:

[
H_0:p_b=p_c
]

也就是两个不一致方向的概率相等。

McNemar检验的历史

McNemar 检验由美国统计学家 Quinn McNemar 提出。1947年,McNemar 在《Psychometrika》发表了经典论文 Note on the Sampling Error of the Difference Between Correlated Proportions or Percentages,系统讨论了相关比例或百分比差异的统计推断问题。

McNemar 的方法后来成为分析配对二分类数据的经典工具,并广泛应用于心理学、医学、流行病学以及诊断试验研究。

McNemar 检验的重要意义在于,它解决了一个普通2×2列联表方法无法直接处理的问题:

当两个分类结果来自同一个个体时,它们并不是相互独立的。

因此,与 Pearson 卡方检验或者针对独立样本的 Fisher 精确检验相比,McNemar 检验考虑了配对数据之间的相关性。

McNemar检验的核心原理

理解 McNemar 检验最简单的方法,是把注意力集中在2×2表中的 b 和 c。

假设:

McNemar检验示例

其中:

[
a=40,\quad b=10,\quad c=25,\quad d=25
]

有35名受试者的两次结果发生了变化:

[
b+c=10+25=35
]

McNemar 检验只利用这些不一致配对:

  • 10人从 A阳性 → B阴性;
  • 25人从 A阴性 → B阳性。

如果原假设成立,那么这两种变化方向应该具有相同概率。

因此,在给定不一致配对总数 (b+c) 的条件下:

[
b\sim Binomial(b+c,0.5)
]

这意味着 McNemar 检验实际上与一个**二项检验(binomial test)**存在密切关系。

这也是为什么在样本量较小、不一致配对数量较少时,可以使用精确 McNemar 检验(exact McNemar test)

McNemar检验的统计量

当不一致配对数量足够大时,可以使用 McNemar 的渐近卡方统计量。

最常见的未校正统计量为:

[
\chi^2=
\frac{(b-c)^2}{b+c}
]

在大样本条件下,该统计量近似服从自由度为1的卡方分布:

[
\chi^2\sim\chi^2_1
]

因此可以通过它计算 P 值。

不过,传统 McNemar 检验也经常使用连续性校正(continuity correction),此时统计量为:

[
\chi^2=
\frac{(|b-c|-1)^2}{b+c}
]

这就是很多统计软件中出现不同 McNemar P 值的原因之一。

因此,如果你在不同软件中看到略有差异的结果,并不一定意味着软件计算错误,很可能是因为采用了不同的统计量或是否进行了连续性校正。

什么是精确McNemar检验?

当 (b+c) 很小时,使用卡方分布近似可能不够可靠。

例如:

精确McNemar检验示例

这里:

[
b+c=10
]

不一致配对只有10个。

此时,可以直接利用:

[
B\sim Binomial(10,0.5)
]

计算观察结果及更加极端结果的概率。

这就是精确 McNemar 检验(exact McNemar test)

它与普通 McNemar 检验的区别,可以简单理解为:

普通 McNemar 检验:

利用卡方分布近似。

精确 McNemar 检验:

利用不一致配对服从 (Binomial(b+c,0.5)) 的精确分布。

因此,如果不一致配对数量很少,精确方法通常更加合适。

需要注意的是,不要仅仅根据总样本量判断是否需要 exact test。McNemar 检验真正决定近似可靠性的关键,是不一致配对数量 (b+c),而不是单纯的总样本量。

McNemar检验的适用条件

McNemar 检验虽然计算简单,但它有非常明确的适用条件。

数据必须是配对数据

这是最重要的条件。

例如:

  • 同一患者治疗前 vs 治疗后;
  • 同一患者使用诊断方法A vs 方法B;
  • 同一受试者干预前 vs 干预后;
  • 同一批样本使用两种检测技术。

这些数据都存在明确的配对关系。

如果治疗组和对照组由不同患者组成,那么它们属于独立样本,不能使用 McNemar 检验。

结局变量必须是二分类

McNemar 检验传统上用于二分类结果,例如:

  • 阳性 / 阴性;
  • 有效 / 无效;
  • 是 / 否;
  • 患病 / 未患病;
  • 通过 / 未通过。

如果结局有三个或更多类别,则不能直接使用普通 McNemar 检验,需要考虑扩展方法。

每个配对单位只能贡献一对结果

例如一项诊断研究中,每位患者都需要同时接受方法A和方法B检测。

最终每个患者贡献:

[
(A_i,B_i)
]

这样才能构成配对2×2表。

配对单位之间应当相互独立

虽然同一个患者的两次结果允许相关,但不同患者之间通常应当相互独立。

如果数据存在明显的聚类结构,例如同一患者有多个病灶、同一家医院包含大量患者,或者同一实验动物贡献多个相关观察值,那么简单的 McNemar 检验可能低估标准误,此时需要考虑更适合的相关数据模型。

McNemar检验与Pearson卡方检验有什么区别?

这是科研人员特别容易混淆的问题。

两者都可能涉及2×2表,但关键区别在于:

数据是否独立。

McNemar检验与Pearson卡方检验的区别

例如:

研究A:

100名患者随机分成治疗组和对照组,比较治疗有效率。

这是独立样本,可以考虑 Pearson χ²、Fisher 或 Barnard。

研究B:

100名患者治疗前后分别判断“是否有效”。

这是配对数据,应考虑 McNemar 检验。

两项研究最终都可能形成2×2表,但统计方法完全不同。

McNemar检验与Fisher精确检验有什么区别?

McNemar 和 Fisher 都属于经典的分类数据检验,但它们解决的问题不同。

Fisher 精确检验主要针对独立样本2×2列联表

McNemar 检验则针对配对2×2数据

例如:

独立样本

McNemar检验与Fisher精确检验的区别

治疗组和对照组是不同患者,因此可以考虑 Fisher。

配对样本

McNemar检验与Fisher精确检验的区别

这里每一行和每一列对应的是同一批患者的两次状态,因此应该考虑 McNemar。

简单来说:

Fisher回答的是“两个独立组的比例是否不同”;McNemar回答的是“同一批个体在两个条件下的二分类结果是否发生系统性改变”。

一个实际例子:比较两种诊断方法

假设研究者招募100名患者,同时使用诊断方法A和诊断方法B检测某种疾病。

结果如下:

McNemar检验与Fisher精确检验的区别

因此:

[
a=50
]

[
b=10
]

[
c=25
]

[
d=15
]

两种方法的阳性率分别为:

方法A:

[
(50+10)/100=60%
]

方法B:

[
(50+25)/100=75%
]

表面上看,方法B的阳性率比方法A高15个百分点。

但是,仅仅比较60%和75%还不够。

因为这100名患者接受的是两种方法检测,两个结果之间存在配对关系。

McNemar 检验关注的是:

[
b=10
]

和:

[
c=25
]

也就是:

  • A阳性、B阴性:10人;
  • A阴性、B阳性:25人。

如果两种方法没有系统性差异,那么这两个数字应该大致相等。

未校正 McNemar 统计量为:

[
\chi^2=
\frac{(10-25)^2}{10+25}

6.43
]

对应自由度1的卡方分布,P值约为0.011。

因此,在这个示例中,可以认为两种诊断方法的阳性比例存在统计学上的显著差异。

但还需要强调:

McNemar 检验只能告诉你两种配对二分类结果的边际比例是否存在差异,它并不能直接评价诊断方法的敏感度、特异度或准确率。

如果研究目的是评价诊断方法性能,就需要结合金标准(reference standard)进一步分析。

如何使用SPSS进行McNemar检验?

SPSS 是医学和生命科学研究中非常常见的统计软件。

假设数据中有两个变量:

  • before:治疗前结果;
  • after:治疗后结果。

两个变量都编码为0和1。

在 SPSS 中可以依次选择:

分析 → 非参数检验 → 相关样本

然后选择需要比较的两个配对变量,并选择 McNemar 检验。

在部分 SPSS 版本中,也可以通过:

分析 → 非参数检验 → 旧对话框 → 2个相关样本

选择 McNemar。

运行后,SPSS 会输出 McNemar 检验结果。

研究者需要重点关注:

Exact Sig. 或 Asymp. Sig.

具体显示方式取决于 SPSS 版本和所选择的设置。

如果不一致配对数量较少,建议优先考虑精确 P 值。

如何使用R进行McNemar检验?

R 的基础统计函数 mcnemar.test() 可以直接完成 McNemar 检验。

例如:

data <- matrix(
c(50, 10,
25, 15),
nrow = 2,
byrow = TRUE
)

mcnemar.test(data)

默认情况下,R 使用连续性校正。

如果希望进行未校正的 McNemar 检验,可以设置:

mcnemar.test(data, correct = FALSE)

对于小样本数据,如果需要精确 McNemar 检验,可以利用二项分布直接进行计算。

例如:

binom.test(
x = 10,
n = 10 + 25,
p = 0.5
)

这里:

x = 10

对应其中一个不一致方向的数量,而:

n = b + c

表示全部不一致配对数量。

这正是精确 McNemar 检验背后的统计原理。

如何使用Python进行McNemar检验?

Python 的 statsmodels 提供了 McNemar 检验。

例如:

from statsmodels.stats.contingency_tables import mcnemar

table = [[50, 10],
[25, 15]]

result = mcnemar(table, exact=False, correction=True)

print(result.statistic)
print(result.pvalue)

如果希望进行精确检验,可以设置:

result = mcnemar(table, exact=True)

print(result.statistic)
print(result.pvalue)

其中:

  • exact=False:使用渐近方法;
  • exact=True:使用精确方法;
  • correction=True:进行连续性校正。

正式研究中应该根据研究设计和统计分析方案提前确定具体方法。

McNemar检验结果怎么看?

McNemar 检验最重要的是 P 值。

如果:

[
P<0.05
]

通常可以认为两个配对条件下的二分类比例存在统计学上的显著差异。

如果:

[
P\geq0.05
]

则没有足够证据拒绝“两种条件下边际比例相等”的原假设。

但研究者不能仅仅看 P 值。

仍然应该查看:

[
b
]

和:

[
c
]

的实际数量。

例如:

McNemar检验与Fisher精确检验的区别

虽然:

[
b=5,\quad c=20
]

已经显示出明显的方向差异,但研究者还应该结合具体研究背景解释这种变化意味着什么。

例如,在治疗前后研究中:

  • b:治疗前阳性 → 治疗后阴性;
  • c:治疗前阴性 → 治疗后阳性。

如果 b 明显大于 c,可能意味着总体上更多患者从阳性转为阴性。

因此,McNemar 检验不仅应该报告 P 值,也应该报告配对表中的原始频数。

如何在SCI论文中报告McNemar检验?

Methods 中可以写:

McNemar’s test was used to compare paired binary outcomes before and after the intervention.

如果采用精确检验:

An exact McNemar test was performed because the number of discordant pairs was small.

Results 中可以写:

The proportion of patients with a positive outcome decreased from 60% before the intervention to 45% after the intervention. McNemar’s test showed a statistically significant difference between the paired proportions (P = 0.011).

如果使用连续性校正,则可以明确:

McNemar’s test with continuity correction was used to compare the paired proportions.

如果使用精确方法,则建议写:

An exact McNemar test was used, with a two-sided P value of 0.032.

在正式论文中,最好同时给出两个不一致单元格的数量。例如:

Among the 35 discordant pairs, 10 changed from positive to negative and 25 changed from negative to positive (exact McNemar test, P = 0.011).

这样读者能够直接理解统计检验到底比较了什么。

McNemar检验的优势与局限

McNemar 检验最大的优势,是它专门针对配对二分类数据设计,能够正确利用同一受试者两次测量之间的配对关系。

与把配对数据错误地当作独立样本进行 Pearson 卡方或 Fisher 检验相比,McNemar 检验的统计推断更加符合研究设计。

第二个优势是计算简单、解释直观。对于2×2配对数据,只需要重点关注 b 和 c 两个不一致单元格。

第三个优势是可以自然扩展到精确检验。当不一致配对数量较少时,可以利用二项分布直接获得 exact P value。

但它也有明显局限。

首先,它只能直接处理二分类配对数据。如果结局变量具有多个类别,就不能简单套用普通 McNemar 检验。

其次,它主要检验的是边际比例的差异,并不能直接告诉我们两种方法的一致性程度。比如两个诊断方法即使 McNemar 检验不显著,也不意味着它们具有很高的一致性。

如果研究者希望评价两种分类方法之间的一致程度,还应该考虑 Cohen’s kappa(κ系数) 等一致性分析方法。

再次,如果数据具有重复测量、聚类或多个层级结构,简单 McNemar 检验可能无法充分处理相关性。这时可能需要考虑广义估计方程(GEE)、混合效应 logistic 回归(mixed-effects logistic regression)等更复杂的方法。

McNemar检验与Kappa检验有什么区别?

这是诊断研究中特别值得注意的一点。

McNemar 检验回答:

两种方法的边际阳性率是否不同?

Kappa 检验回答:

两种方法的一致性是否超过随机一致性?

例如,两种诊断方法的结果如下:

McNemar检验与Fisher精确检验的区别

两种方法虽然有20个不一致结果,但它们的总体阳性率可能完全相同。

此时 McNemar 检验可能不显著,但并不能据此得出“两种方法具有良好一致性”的结论。

因此,在诊断研究中,如果研究问题是:

两种方法的阳性率有没有差异?

可以考虑 McNemar。

如果研究问题是:

两种方法的一致程度如何?

可以考虑 Cohen’s kappa。

如果研究问题是:

新方法的敏感度和特异度是多少?

则需要基于金标准进行诊断准确性分析。

这三个问题并不相同,不能使用一个统计检验全部回答。

实际科研中什么时候应该使用McNemar检验?

可以把 McNemar 检验的选择逻辑概括为:

二分类结局 + 同一研究对象接受两次测量/两种方法 + 结果存在明确配对关系 → 考虑 McNemar 检验。

例如:

治疗前 vs 治疗后:

适合 McNemar。

方法A vs 方法B,针对同一患者:

适合 McNemar。

干预前 vs 干预后:

适合 McNemar。

但如果是:

治疗组 vs 对照组:

两组患者不同,属于独立样本,不应该使用 McNemar。

如果是:

三个时间点的二分类重复测量:

普通 McNemar 也不够,需要考虑重复测量数据的扩展方法。

如果是:

同一患者有多个病灶:

还需要考虑病灶之间的相关性,不能简单把每个病灶当成独立观察。

因此,在使用 McNemar 检验之前,最重要的问题不是“样本量有多大”,而是:

数据是否真正具有一一对应的配对结构?

最后

McNemar 检验是一种专门用于配对二分类数据的经典统计方法。它最典型的应用场景包括治疗前后比较、同一患者接受两种诊断方法检测,以及同一研究对象在两种条件下的二分类结果比较。

理解 McNemar 检验的关键,并不是记住公式:

[
\chi^2=\frac{(b-c)^2}{b+c}
]

而是理解为什么它只关注 b 和 c 两个不一致配对

因为在配对数据中,a 和 d 表示两次结果一致,而真正能够反映两种条件之间系统性变化的是:

[
b\quad\text{vs.}\quad c
]

当不一致配对数量较少时,可以进一步使用 exact McNemar test,通过二项分布计算精确 P 值,而不是依赖卡方渐近近似。

科研中还需要特别注意 McNemar 与 Fisher、Barnard 和 Kappa 的区别:

独立二分类数据 → Fisher/Barnard;

配对二分类数据 → McNemar;

配对数据的一致性 → Kappa;

诊断准确性 → 敏感度、特异度等诊断指标。

因此,选择统计检验时,首先应该看研究设计和数据之间的关系,而不是看到2×2表就直接使用卡方检验。对于医学和生命科学研究而言,这一点尤其重要。

撰稿人
标签
统计分析
目录
订阅邮件
订阅我们的邮箱后可提前获得AJE作者资源的文章,享受AJE服务的折扣,以及更多的优惠

查看 "隐私协议"

影响因子排名前100的期刊,有65本推荐AJE论文润色!

我们的编辑团队全部来自美国,他们有科研背景且熟知您所在领域的专业问题和专业用语。