使用样条(边际关系)在 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)
与效果大小的边际关系:
我试图用 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)
与效果大小的边际关系: