You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用metafor包的escalc和rma函数进行单均值元分析?

单均值元分析从meta包转metafor包的报错解决思路

报错原因

你使用escalc()时指定了measure = "SMD",但SMD(标准化均数差)是两组设计的效应量,必须提供对照组的均值(m2i)、标准差(sd2i)、样本量(n2i)参数。你的数据是单组均值,缺少对照组参数,因此触发报错。

两种解决方案

方案1:直接合并原始均值(与metamean输出完全对应)

meta包的metamean()默认是对原始均值做逆方差合并,无需转换效应量,直接用metafor的rma()函数实现:

library(metafor)
# 计算每个研究的方差(var = 标准差² / 样本量)
data$var <- (data$sd)^2 / data$n
# 执行元分析:yi为原始均值,vi为对应方差
res <- rma(yi = mean, vi = var, slab = study, data = data)
# 查看结果
print(res)

此方法得到的合并均值、异质性统计量(Q值、I²、tau²)与metamean()的输出完全一致。

方案2:转换为单组标准化效应量(如与总体均值比较)

若需要标准化效应量(比如将单组均值与某个总体均值对比),可以给escalc()补充对照组参数。假设你要与总体均值0比较,可设置对照组均值为0,标准差复用单组标准差,样本量设为极大值模拟总体:

library(metafor)
# 计算单组相对于总体均值0的SMD
esc <- escalc(measure = "SMD", 
              m1i = mean, sd1i = sd, n1i = n,
              m2i = 0, sd2i = sd, n2i = 1e6, # 模拟总体对照
              slab = study, data = data)
# 对标准化效应量做元分析
res_smd <- rma(yi = yi, vi = vi, data = esc)
# 查看结果
print(res_smd)

注:若你需要与其他特定总体均值比较,替换m2i为对应数值即可。

内容的提问来源于stack exchange,提问作者CharlesLDN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:22:57