如何运行mantelhaen.test()及准备对应数据?附数据格式求助
解决Mantel-Haenszel检验的数据格式问题
首先明确:mantelhaen.test()用于分层的2x2列联表分析,需要包含分层变量(如不同亚组、不同场景),每个分层内有处理/暴露变量和结局变量的交叉分类。你的当前数据仅有group和Survived两个变量加频数,需要分两种情况处理:
情况1:仅需比较A、B组的存活率差异
如果你的目标是对比两组存活情况,这属于单个2x2列联表分析,无需使用Mantel-Haenszel检验,用卡方检验即可。转换格式并执行的代码如下:
# 加载你的数据 df <- structure(list(Freq = c(41L, 31L, 11L, 0L), group = structure(c(1L, 1L, 2L, 2L), .Label = c("A", "B"), class = "factor"), Survived = structure(c(2L, 1L, 2L, 1L), .Label = c("No", "Yes"), class = "factor")), row.names = c(NA, 4L), class = "data.frame") # 生成2x2列联表 tab <- xtabs(Freq ~ Survived + group, data = df) # 执行卡方检验 chisq.test(tab)
情况2:确实需要执行Mantel-Haenszel检验
若你有明确的分层变量(如不同年龄组、不同医院),需要先补充分层变量的数据,再整理为三维列联表格式。
示例:补充分层变量后的处理
假设补充分层变量Layer后的数据如下(仅为示例):
| Freq | group | Survived | Layer |
|---|---|---|---|
| 20 | A | Yes | L1 |
| 15 | A | No | L1 |
| 21 | A | Yes | L2 |
| 16 | A | No | L2 |
| 5 | B | Yes | L1 |
| 0 | B | No | L1 |
| 6 | B | Yes | L2 |
| 0 | B | No | L2 |
执行检验的代码:
# 生成三维列联表(结局~处理~分层) tab_3d <- xtabs(Freq ~ Survived + group + Layer, data = df_with_layer) # 运行Mantel-Haenszel检验 mantelhaen.test(tab_3d)
如果你的数据是原始个体数据(无Freq列),可直接传入三个因子变量:
mantelhaen.test(x = 处理变量, y = Survived, z = 分层变量)
关键说明
你当前的数据集缺少分层变量,不满足Mantel-Haenszel检验的设计要求。若没有分层需求,卡方检验更适合你的分析场景;若需使用该检验,请补充分层变量对应的分组数据。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

