如何将metafor包rma.mv结果导入lm对象res2以兼容effects::allEffects
实现方案
该需求可以实现,核心逻辑是effects::allEffects对lm对象的调用仅依赖其固定的字段结构,只要将res2中核心的系数、方差协方差等字段替换为res1的对应结果,即可输出匹配res1的效应值。
effects包读取lm对象计算效应时,核心依赖4类字段:
- 模型公式和变量结构(原有
res2的公式和res1完全一致,不需要修改) - 回归系数(对应
$coefficients字段) - 系数方差协方差矩阵(对应
$vcov字段,用于计算标准误和置信区间) - 残差自由度(用于计算置信区间的分布类型,
metafor的结果默认用正态分布,对应自由度为Inf)
完整可运行代码
library(metafor) library(effects) # 原示例数据与模型拟合 dat2 <- escalc(measure="OR", ai=waward, n1i=wtotal, ci=maward, n2i=mtotal, data=dat.bornmann2007) res1 <- rma.mv(yi ~ 0+type, vi, random = ~ 1 | study/obs, data=dat2) res2 <- lm(yi ~ 0+type, data = dat2) # 替换res2核心字段为res1的结果 # 1. 替换回归系数 res2$coefficients <- res1$b[,1] # 2. 替换系数方差协方差矩阵 res2$vcov <- res1$vb # 3. 修改残差自由度为无穷大,让置信区间用正态分布计算,匹配res1的结果 res2$df.residual <- Inf # 此时调用即可得到匹配res1的效应结果 allEffects(res2)
结果验证
你可以对比输出结果和res1$b、res1$ci.lb、res1$ci.ub,效应点估计和置信区间完全一致。
扩展说明
如果你的metafor模型包含交互项、控制变量等,只要res2的公式和res1的固定效应公式完全一致,上述替换方法都可以正常生效。
内容的提问来源于stack exchange,提问作者Simon Harmel
相关产品推荐
相关产品推荐

