医学统计模型
分层卡方分析
按分类混杂因素切开四格表,用 Mantel-Haenszel 合并各层关联并检查层间是否同向。
这篇能回答什么
分层卡方(Mantel-Haenszel)回答的是:「把第三个定类混杂因素当成层切开之后,暴露与结局还能不能合成一个公共关联」。每一层先做自己的四格表,再按层样本量加权,得到公共优势比(OR)与合并 χ²。它针对的是混杂,不是把三张表的 p 值平均一下。
适合:吸烟 × 疾病并按年龄段分层、疗法 × 是否有效并按医院分层、以及问卷里「学生性别 × 学校办学性质、就读年级当层」这类定类暴露、定类结局、定类层。只想看格子人数用列联(交叉)分析;没有第三因素、只问两变量是否独立,用卡方检验。
什么时候不该用
层是连续年龄或收入、要同时控制多个协变量时,改二元 Logistic 回归,不要把连续变量任意切成三层再硬做 MH。同一人前后两次阴阳性是配对设计,应走配对卡方检验。结局是有序疗效等级、关心相对位置时看Ridit分析。
如何选择方法
先画一张「有没有必须控制的分类混杂」。没有 → 普通独立性卡方或Fisher精确检验。有一层、且层内基本是 2×2 → 本过程。层间 OR 明显反向 → 先报告交互/齐性,不要强行给一个公共 OR。格子普遍极稀 → 层内改精确方法,或合并过薄的层。
分层卡方分析:暴露、结局、层三个定类角色;合并各层四格,关注公共 OR 与齐性。
卡方检验:只有两个定类变量,不问第三因素。
Fisher精确检验:单张小表、期望过小,不分层合并。
二元 Logistic 回归:混杂是连续的,或一次要控制多个协变量。
输入、输出与限制
输入
统计角色是三列定类:暴露(行)、结局(列)、层(混杂)。工作台把它们放在同一个「分析变量」清单里勾选。教学操作勾选学生性别、就读年级、学校办学性质,其中年级承担层的含义。
分析变量:最少 1 个,界面上限 20 个;分层卡方至少需要 3 个定类列才能形成「暴露 × 结局 | 层」。
层:每个水平内部应能排出四格;过薄的层会让该层 OR 不稳定。
输出
教学结果表按层给出频数与占比,并给出有效样本 N。阅读顺序是:各层 n → 哪一层最重 → 再读公共 OR / 合并 χ²(若表中出现)与齐性。交叉热力图只表示组 × 水平的密度,不能代替层权重。
产品限制
界面不单独标注「层」槽位,需要你自己指定哪一列是混杂因素。
方法卡片提示大约 5 列更易读;把量表连续分勾进来没有分层意义。
编号 / 疑似 ID 列会被隐藏,不能充当层。
层水平过多会把样本切碎,合并前应先合并稀有层。
案例
研究问题。 学生问卷里,性别与办学性质的交叉可能被年级结构带着走:某个年级公立更集中、另一个年级私立更多。分层卡方把就读年级当作混杂层,在层内看性别 × 办学性质,再问合并后的关联是否还在。
教学口径把三个年级层记为类别 A / B / C:A 67 人(32.37%)、B 41 人(19.81%)、C 99 人(47.83%),合计有效 207。层 C 最厚,层 B 最薄。下载学生问卷后勾选同一组定类列可走通操作路径;本页层人数是分层教学口径,不必和全表 500 行对账。
在 StatsX 中操作
步骤 1 · 上传表格
打开工作台,将 Excel / CSV / JSON 拖入上传区。本案例使用学生问卷 xlsx,确认工作表为「有效样本数据」。单文件不超过 20 MB。
步骤 2 · 查看画像与质量
确认学生性别、就读年级、学校办学性质都是定类。年级将作为层,先看三档人数是否会切出过薄的层。
步骤 3 · 选择「分层卡方分析」
在算法目录搜索「分层卡方」或 Mantel-Haenszel,点选分层卡方分析。标记为「可用」仍可运行,适合/可用只是数据画像提示。
步骤 4 · 指定变量并运行
分析变量勾选学生性别、就读年级、学校办学性质。心里明确:性别与办学性质是要合并的关联,年级是层。点击运行分析。
步骤 5 · 阅读结果
先读三个层的 n 与占比,确认层 B 是否过薄;再看公共 OR 方向是否与最厚的层 C 一致;最后看齐性,决定能不能只报一个合并值。




如何阅读输出
把表中的类别 A / B / C 读成三个混杂层(教学上对应就读年级三档),而不是结局的三个等级。层 A 67(32.37%),层 B 41(19.81%),层 C 99(47.83%),有效 N=207。合并卡方的权重跟着各层四格的信息走,层 C 接近一半样本,公共 OR 会更像层 C;层 B 只有 41 人,单独看该层很容易「不显著」,但不妨碍它以较小权重进入 MH。
| 项目 | 类别 | 统计量 | 取值 |
|---|---|---|---|
| 分层卡方分析 | 类别 A | 频数 | 67 |
| 分层卡方分析 | 类别 B | 频数 | 41 |
| 分层卡方分析 | 类别 C | 频数 | 99 |
| 分层卡方分析 | 合计 | 有效样本 N | 207 |
| 分层卡方分析 | 类别 A | 占比(%) | 32.37 |
| 分层卡方分析 | 类别 B | 占比(%) | 19.81 |
| 分层卡方分析 | 类别 C | 占比(%) | 47.83 |
左右滑动可查看完整表格
教学示例表在 StatsX 工作台中的计算结果口径。


【分层 Mantel-Haenszel·年级为层】有效 207 人切成三层。层 C 占 47.83%,是公共 OR 的主引擎;层 B 占 19.81%(41 人),该层单独四格很容易稀疏。热力图里最浅的格子(组 3 × 水平 A = 8)提醒你:合并之前先检查层内期望,而不是只看边缘占比。若三层 OR 同向,报告公共 OR 与 MH p;若反向,先写清「哪一层把关联拧过去了」,不要用一个合并值抹平。
解读顺序:各层 n → 最厚层与最薄层 → 层内关联方向是否一致(齐性)→ 公共 OR / 合并 χ²。普通卡方忽略层,可能把年级结构造成的虚假关联当成「性别与办学性质有关」;MH 就是用来挡住这种混杂。它仍然不是因果识别:没分层的变量还可以继续混淆。
理论与公式
设第 k 层是一张 2×2 表,格子为 a_k(暴露且结局)、b_k、c_k、d_k,层合计 n_k。Mantel-Haenszel 公共优势比为各层 ad/n 与 bc/n 的比:
在「各层 OR=1」的原假设下,暴露且结局的期望与方差按超几何(固定边缘)写出,再对层求和。合并卡方为
c 取 0 或 0.5(连续性校正)。齐性(如 Breslow-Day)检验「各层 OR 是否同一」。本教学口径三层 n 为 67 / 41 / 99:层 B 的 Var(a_B) 往往更小,对分母贡献有限;拒绝齐性时,OR_MH 只是一个被最厚层拉过去的加权平均,不应再解释成「控制年级后的唯一效应」。
注意事项
MH 控制的是已放进层的那个定类因素,不是所有混杂。
层间 OR 反向时,公共 OR 可能靠近 1,看起来「控制后没关联」,其实是正负抵消。
最薄层(本例层 B=41)不要单独拿来下阴性结论,功效不足。
把连续协变量随意切层会引入切点任意性,也损失信息。
热力图九格不是三张四格表的堆叠,写论文引用层 n 与 OR,不要引用图上的 46 或 8 当作 MH 统计量。
工作台智能解读若只复述有效样本,请用层权重与齐性来写结论,不要复制套话。
常见问题
参考文献
Mantel, N., Haenszel, W. Statistical aspects of the analysis of data from retrospective studies of disease. Journal of the National Cancer Institute, 1959, 22(4): 719–748.
Breslow, N. E., Day, N. E. Statistical Methods in Cancer Research. Volume 1. IARC, 1980.
Agresti, A. Categorical Data Analysis. Wiley.
方积乾. 卫生统计学[M]. 人民卫生出版社.