我很乐意在metafor
中使用rma.mv()
的复杂模型,为此有emmprep()
函数。然而,我的模型是不平衡和嵌套的,导致冗余的预测因子由于秩不足而从模型中删除。在这种情况下,emmprep()
不工作。根据帮助文件:在这种情况下,在使用此功能之前,应删除原始模型中的所有冗余。
我该怎么做?我是否必须使用虚拟变量来避免秩不足,或者有更简单的解决方案?
下面是一个可重复的例子:
library(metafor)
dat <- dat.bcg #take some example data to modify
#modify to make it work for this example (so now we have two factors)
dat$ablat<-c("a","b","c","a","b","b","a","b","c","a","b","c","a")
#get the yis & vis
dat <- escalc(measure="RR", ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat,
slab=paste0(author, ", ", year))
#run a nested model
res4 <- rma.mv(yi, vi, mods = ~ alloc/ablat, data=dat)
res4
library(emmeans) #load emmeans
sav <- emmprep(res4) #this returns the redundant predictors error
#"Error in emmprep(res4) :
# Cannot use function when some redundant predictors were dropped from the model."
字符串
(PS.我以前问过这个问题,为了避免混淆,我已经删除了那个版本)
1条答案
按热度按时间juzqafwq1#
可能的解决方法
看起来你并不需要
emmprep()
那么多。emmeans中的qdrg()
函数几乎是开箱即用的。唯一的问题是rma
模型将拦截命名为intrcpt
而不是(Intercept)
,我们必须解决这个问题。下面是我为feature request创建的一个数据集的示例,该数据集是我在metafor的GitHub站点上发布的字符串
创建于2023-07-22带有reprex v2.0.2