主题
3.8 元分析
本节目标
读完本节后,你能判断什么时候适合做元分析,整理“研究—效应量”的数据表,选择固定效应或随机效应模型,读懂合并效应与异质性,并把检索、编码、分析和敏感性检查留成可复核的记录。
你遇到的是什么问题?
心理学文献常会出现这样的情境:五项实验都比较“社会排斥对助人行为的影响”,方向大致相同,但样本、量表和效应大小不同。逐篇引用只能说“多数研究发现……”,不能回答总体效应大约有多大、研究之间为何不同。元分析把每项研究转换为同一尺度的效应量,并按其不确定性加权合并。
它适用于有明确纳入标准、可提取相互独立效应量的研究集合;不适用于只有一篇研究、研究问题和结局完全不可比,或把同一参与者/样本的多个高度相关结果当成独立研究的情形。元分析不是“文献数量越多越客观”,检索遗漏、选择性报告和编码错误都会传递到结果。
最短决策路径
- 先定问题与估计对象。 写清人群、干预/暴露、比较、结局和时间点(PICO/PECO),再决定估计均值差、标准化均值差、相关系数或对数优势比。
- 确认观测单位。 一行通常是一项研究中的一个效应量;同一研究多个时间点、结局或对照组会产生相关行,不能默认独立。
- 检查可比性。 量表方向、效应量正负号、样本重叠、干预剂量和研究设计是否允许合并?不能只因“都叫焦虑”就合并。
- 预先写分析计划。 固定/随机效应、异质性估计量、调节变量、异常值和发表偏倚检查应在看到结果前记录。
从论文到分析表:逐步操作
1. 建立可追溯的检索与筛选记录
记录数据库、检索式、日期、去重规则、排除理由和两名编码者的分歧裁决。PRISMA 2020 流程图能帮助报告筛选过程,但它不替你判断效应量是否可比。
2. 为每个效应量编码
至少保留这些列:
| 列 | 例子 | 为什么需要 |
|---|---|---|
study_id、effect_id | S07、S07_T2 | 区分研究与同一研究的多个结果 |
n_treat、n_ctrl | 80、78 | 检查权重与小样本修正 |
effect、se 或 vi | 0.35、0.14 | 合并所需的效应和不确定性 |
outcome、time | 帮助行为、1 周 | 预先定义的亚组/调节变量 |
direction_rule | 高分=更多助人 | 保证正负号含义一致 |
source_page、table | p. 6、Table 2 | 回到原文核对 |
均值差(MD)保留原量表单位;量表不同但构念相近时可用标准化均值差(SMD,如 Hedges'
3. 处理依赖与缺失
同一研究报告多个结局时,先选一个预先定义的主要结局,或使用多层/多变量元分析;不要挑最大的一个。共享对照组的多个比较也会重复计算样本量。缺少标准误时,回到原文或联系作者;由
固定效应还是随机效应?
固定效应模型假定所有研究共享一个真实效应,差异只来自抽样误差;它回答“在这组研究及其权重下的共同效应”。随机效应模型允许研究间存在真实效应差异,回答“从相似研究集合推广时,平均真实效应在哪里”。随机效应并不自动更保守,也不能修复发表偏倚或极端异质性。
在随机效应模型中,常见权重为
一个可运行的教学示例(模拟数据)
下面四行是模拟的标准化均差及其标准误,不是任何真实论文的结果。研究问题是假设“排斥操纵相对控制条件对助人行为的影响”。代码只用 Node.js 的基础运算复核固定效应、DerSimonian–Laird 的 metafor、Python 的 statsmodels 等成熟实现,并报告软件版本。
javascript
// Node.js 18+;教学示例,四项研究的效应量和 SE 是手工模拟的
const y = [0.20, 0.35, 0.10, 0.50];
const se = [0.10, 0.14, 0.12, 0.16];
const v = se.map(x => x ** 2);
const w = v.map(x => 1 / x);
const sum = a => a.reduce((x, z) => x + z, 0);
const fixed = sum(w.map((z, i) => z * y[i])) / sum(w);
const Q = sum(w.map((z, i) => z * (y[i] - fixed) ** 2));
const df = y.length - 1;
const C = sum(w) - sum(w.map(z => z ** 2)) / sum(w);
const tau2 = Math.max(0, (Q - df) / C); // DL 估计;不是唯一选择
const wr = v.map(x => 1 / (x + tau2));
const random = sum(wr.map((z, i) => z * y[i])) / sum(wr);
const randomSE = Math.sqrt(1 / sum(wr));
const ci = [random - 1.96 * randomSE, random + 1.96 * randomSE];
const I2 = Math.max(0, (Q - df) / Q);
console.log({ fixed, Q, tau2, random, ci, I2 });本段代码实际运行后的四舍五入结果为:固定效应
阅读顺序应是:先看各研究点估计和区间,再看合并效应;随后检查
调节变量、发表偏倚与稳健性
- 亚组/元回归: 例如比较实验室与在线研究、短期与一周后测量。调节变量应有理论依据;元回归系数是研究层面的关联,不等于个体层面的因果交互。
- 影响与敏感性: 逐一删除、改变效应量选择、改变
估计或相关系数假设,检查结论是否改变。不要只删除“让结果不显著”的研究。 - 发表偏倚: 漏斗图不对称可能来自小样本效应、真实异质性或选择性报告;Egger 检验在研究很少时功效不足。剪补法不能把缺失研究“找回来”,应结合注册、灰色文献和结果报告偏倚讨论。
- 多重结果: 预先指定主要结局,或使用稳健方差估计/多层模型处理相关效应。报告每项研究贡献,而不是只给一张漂亮森林图。
常见误用
不要把
结果如何报告与导出
结果段至少交代:检索与纳入数量、效应量定义和方向、模型与 study_id 和原始页码;把分析表、代码、锁定的依赖版本和 PRISMA 流程图一起存档。若使用真实数据,先移除可识别信息并遵守原研究的使用许可。
资源与工具
延伸阅读
- Borenstein, M., Hedges, L. V., Higgins, J. P. T., & Rothstein, H. R. (2021). Introduction to Meta-Analysis (2nd ed.). Wiley.(版本与书目信息请按图书馆记录核对。)
- Higgins, J. P. T., et al. (2023). Cochrane Handbook for Systematic Reviews of Interventions, version 6.4. Cochrane. https://training.cochrane.org/handbook/current
- Page, M. J., et al. (2021). The PRISMA 2020 statement. BMJ, 372, n71. https://doi.org/10.1136/bmj.n71