You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求R语言中双样本McNemar检验的实现包

双样本McNemar检验的R实现方案

目前没有专门的CRAN包直接实现Feuer & Kessler(1989)提出的双样本McNemar检验,但你可以通过以下两种方式解决需求:

1. 手动实现检验统计量

根据论文中的核心公式,你可以编写自定义函数计算检验统计量和对应p值。以下是适配四格表数据的基础实现示例:

# 双样本McNemar检验自定义函数
two_sample_mcnemar <- function(a1, b1, c1, d1, a2, b2, c2, d2) {
  # 参数说明:每组四格表计数,a=一致阳性, b=组1阳/组2阴, c=组1阴/组2阳, d=一致阴性
  n1 <- a1 + b1 + c1 + d1
  n2 <- a2 + b2 + c2 + d2
  
  # 计算每组的配对不一致比例
  p1 <- (b1 + c1)/n1
  p2 <- (b2 + c2)/n2
  
  # 计算方差
  var_p1 <- (b1 + c1)/n1^2 - 4*b1*c1/n1^3
  var_p2 <- (b2 + c2)/n2^2 - 4*b2*c2/n2^3
  
  # 计算Z统计量和双侧p值
  z_stat <- (p1 - p2)/sqrt(var_p1 + var_p2)
  p_val <- 2*pnorm(abs(z_stat), lower.tail = FALSE)
  
  return(list(z_statistic = round(z_stat, 3), p_value = round(p_val, 4)))
}

# 示例调用(替换为你的实际数据)
result <- two_sample_mcnemar(a1=50, b1=10, c1=15, d1=25, a2=40, b2=20, c2=5, d2=35)
print(result)

2. 借助GEE模型间接实现

如果需要处理复杂抽样或非独立配对数据,可以用geepack包的广义估计方程(GEE)模型,通过设定聚类结构来等价检验两组配对比例的差异:

library(geepack)

# 假设数据为长格式:id=配对标识, group=组别(1/2), out1=第一次测量结果, out2=第二次测量结果
data$diff <- as.numeric(data$out1 != data$out2)  # 标记配对不一致的情况

# 拟合GEE模型,以组别为自变量,不一致比例为因变量
model <- geeglm(diff ~ group, data = data, id = id, family = binomial, corstr = "exchangeable")
summary(model)

模型中group变量的系数检验结论,与双样本McNemar检验的推断逻辑一致。

内容的提问来源于stack exchange,提问作者Abel Aussant

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 23:35:21