解释和绘制分段 lme 回归 (sjPlot)

Interpreting and plotting piecewise lme regression (sjPlot)

我是 运行 R 中的 LME(线性混合效应回归),其中节点由诊断时间 (t=0) 确定。所以模型现在是:

lme(function ~ age+sex+timepre*marker+timepost*marker, random=~time|ID, data=data)

因此:timepre 是从 t=0 开始的所有内容都是 0,之前是 0-time,而 timepost 是诊断之前的所有内容都是 0,之后是 0+time。 时间是timepre和timepost的组合。

我现在想使用 sjPlot 库绘制这些效果,因为它很好地给出了预测值(针对协变量进行了校正),并将其作为可以在 t=0 处看到结的图。

plot_model(model, type="int")

相反,它绘制了两个不同的图,每个图对应一个交互。有没有办法把这些地块结合起来,让前后的斜率走到一起(截距现在也不同了)?或者我应该怎么做?

更新:

在谷歌搜索更多之后,我发现了使用样条曲线而不是两个单独的时间框架的建议。 所以,我现在尝试的是:

lme(function ~ age+sex+bs(time, knots=0, degree=1)*marker, random=~time|ID, data=data)

我可以用 visreg 库绘制它,而且我似乎确实在零处打结了:

这是正确的吗? 我对系数的解释是否正确:

bs(time, knots = 0, degree = 1)1:marker  12.055090  p= 0.0004
bs(time, knots = 0, degree = 1)2:marker  13.750058  p= 0.0133

第一个系数(12.055,p 值为 0.0004)表示第一个斜率(结点之前)随标记水平的变化? 第二个系数(13.75,p 值为 0.013)表示作为标记函数的第一个和第二个斜率之间的差异? 那么如何知道第二个斜率的变化是否作为标记的函数显着?

您不需要为您的时间变量使用样条曲线,特别是如果您只有两个时间点,则无法在这两点之间拟合任何曲线。因此,您的模型将是:

lme(function ~ age + sex + time * marker, random=~time|ID, data=data)

然后您可以使用plot_model(model, type = "int")查看两个时间点之间的相互作用和差异。或者你可以使用 ggeffects 包,它更加灵活。

如果 time 变量有两个以上的时间点,使用 poly() 或样条曲线可能有意义。对于 ggeffects,有一个包含多项式项的实际示例 here (and a general introduction here)。

对于你上面的例子:

library(ggeffects)
m <- lme(function ~ age+sex+bs(time, knots=0, degree=1)*marker, random=~time|ID, data=data)
pred <- ggpredict(m, c("time", "marker"))
plot(pred)