求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
相关产品推荐
相关产品推荐

