如何在R语言的不平衡嵌套rma.mv元分析模型中使用emmprep?
解决rma.mv嵌套模型秩亏缺导致emmprep报错的问题
核心原因
你的嵌套模型使用默认的**处理对比(contr.treatment)**时,会产生线性相关的参数(冗余项),导致模型自动剔除部分参数,而emmprep()不支持带有冗余项的模型。
简便解决方案:更改因子对比方式
使用**和对比(contr.sum)**替代默认的处理对比,避免嵌套模型中的秩亏缺:
library(metafor) library(emmeans) dat <- dat.bcg dat$ablat <- c("a","b","c","a","b","b","a","b","c","a","b","c","a") dat <- escalc(measure="RR", ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat, slab=paste0(author, ", ", year)) # 设置全局因子对比为和对比,避免秩亏缺 options(contrasts = c("contr.sum", "contr.poly")) # 重新拟合嵌套模型,此时不会有冗余项被剔除 res4_clean <- rma.mv(yi, vi, mods = ~ alloc/ablat, data = dat) # 正常运行emmprep sav <- emmprep(res4_clean) # 查看emmeans结果,例如按alloc和ablat分组 emmeans(sav, ~ alloc * ablat)
其他可选方法
如果不想修改全局对比设置,可以单独为目标因子设置对比:
# 单独为alloc和ablat设置和对比 dat$alloc <- factor(dat$alloc, contrasts = contr.sum) dat$ablat <- factor(dat$ablat, contrasts = contr.sum) # 拟合模型 res4_clean <- rma.mv(yi, vi, mods = ~ alloc/ablat, data = dat) # 运行emmprep sav <- emmprep(res4_clean)
原理说明
处理对比会将因子的第一个水平作为参考,嵌套模型中主效应与嵌套效应的参数会产生线性依赖,导致秩亏缺;而和对比强制每个因子的参数和为0,消除了这种线性依赖,模型不会出现冗余项,因此emmprep()可以正常工作。
内容的提问来源于stack exchange,提问作者corn_bunting
相关产品推荐
相关产品推荐

