使用metafor计算SMD效应量:如何输入组间差异标准差而非各组独立SD?
配对数据SMD计算(仅提供差值标准差场景解决方案)
核心逻辑
配对设计的SMD有两种主流计算口径,仅提供差值标准差时可以选择匹配的口径直接计算,无需两组各自的标准差:
- 基于差值标准差计算的标准化均数差(SMDd,又称Cohen's d for dependent samples),直接使用差值的统计量即可完成计算,适合所有配对设计场景
- 若需统一使用基于两组合并组内标准差的SMD口径,可通过填补配对相关系数反推所需参数
具体实现方案
方案1:直接用metafor内置函数计算
metafor的escalc函数支持单组标准化均值计算,直接传入差值的统计量即可得到校正后的效应量与方差:
library(metafor) # 假设你的数据集dat包含字段: # mdiff:两组差值的均数 # sdiff:两组差值的标准差 # n:配对样本量(配对设计两组样本量一致) dat <- escalc(measure = "SM", m1 = mdiff, sd1 = sdiff, n1 = n, data = dat)
输出的yi列即为校正小样本偏差后的Hedges' g值,vi列为对应方差,可直接传入rma函数做后续meta合并。
方案2:手动计算效应量与方差
如果需要自定义校正规则,也可以手动计算:
# 未校正的Cohen's d dat$d <- dat$mdiff / dat$sdiff # Hedges小样本校正因子 dat$J <- 1 - 3/(4*(dat$n - 1) - 1) # 校正后的Hedges' g dat$g <- dat$d * dat$J # g的抽样方差 dat$var_g <- 1/dat$n + (dat$g^2)/(2*dat$n)
注意事项
SMDd和基于两组独立合并标准差计算的SMD口径不统一,不可直接合并。如果你的纳入研究同时存在两种报告类型,有两种处理方式:
- 将报告了两组SD的研究也转换为SMDd口径:先计算差值均数、差值标准差,再用上述方法计算效应量
- 参考同领域相近研究的配对相关系数r(通常前后测设计r在0.5~0.8区间),通过公式
sd_diff = sqrt(sd1² + sd2² - 2*r*sd1*sd2)反推缺失参数,统一使用常规SMD口径,建议取多个r值做敏感性分析验证结果稳定性。
内容的提问来源于stack exchange,提问作者Sara
相关产品推荐
相关产品推荐

