使用样条(边际关系)在 metafor 中为多变量模型生成 regplot

Producing a regplot in metafor for multivariable model with a spline (marginal relation)

我试图用 metafor 包中的 regplot() 生成回归图,通过使用 rms 包将连续预测变量拟合为受限三次样条R,在多变量回归的背景下。

然而,在仔细查看此处列出的所有示例后:https://wviechtb.github.io/metafor/reference/regplot.html,我无法重现所需的图(即,建模为受限三次样条的连续预测变量的回归图)。

这是一个可重现的例子:

library(metafor)
library(rms)
dat <- dat.bcg

#Fitting the meta-analysis
dat <- escalc(measure="RR", ai=tpos, bi=tneg, ci=cpos, di=cneg, data=dat)

#Fit a multivariable meta-regression with ablat as a rcs with 3 knots
res <- rma(yi, vi, mods = ~ rcs(ablat,3)+year+alloc, data=dat)

模型结果报告如下:

Model Results:

                     estimate       se     zval    pval      ci.lb    ci.ub   ​ 
intrcpt              -24.8731  38.8083  -0.6409  0.5216  -100.9361  51.1898    
rcs(ablat, 3)ablat     0.0043   0.0290   0.1497  0.8810    -0.0525   0.0611    
rcs(ablat, 3)ablat'   -0.0504   0.0466  -1.0799  0.2802    -0.1418   0.0410    
year                   0.0125   0.0196   0.6384  0.5232    -0.0259   0.0509    
allocrandom           -0.3525   0.4090  -0.8618  0.3888    -1.1541   0.4491    
allocsystematic       -0.2187   0.4832  -0.4526  0.6508    -1.1659   0.7284  

现在,如果我想生成此模型的正则图(即样条预测变量与效应大小之间的边际关系),我必须使用:

regplot(res, mod="rcs(ablat, 3)ablat")

但在我看来,生成的图(如下所示)似乎只考虑了样条模型变量的第一项:

一致地,如果我将 regplot 的调用更改为 regplot(res, mod="rcs(ablat, 3)ablat'")(即,在多变量回归模型中将 ablat 的非线性项指定为调节变量),我能够生成另一个图。

我尝试通过predict()函数预先指定预测,然后将参数传递给regplot,但我仍然无法生成所需的图。

我在这里发布解决方案,这是我在@Wolfgang 在评论中提供的不可估量的帮助后设法安排的,以防将来其他人需要:

res <- rma(yi, vi, mods = ~ rcs(ablat,3)+year+alloc, data=dat)

knots <- attr(rcs(model.matrix(res)[,2], 3), "parms")
knots
xs <- seq(10,60, length=500)
sav <- predict(res, newmods=cbind(rcspline.eval(xs, knots, inclx=TRUE),colMeans(model.matrix(res))[4],
                                  colMeans(model.matrix(res))[5],colMeans(model.matrix(res))[6]))
tmp <- regplot(res, mod=2, pred=sav, xvals=xs, las=1, digits=1, bty="l",
               psize=.20/sqrt(dat$vi), xlab="Predictor", main="Restricted Cubic Spline Model", transf=exp)
abline(v=knots, lty="dotted")
points(tmp)

这是结果图,表示 rcs(ablat,3) 与效果大小的边际关系: