如何使用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
相关产品推荐
相关产品推荐

