绘制来自lmer纵向分析的预测值

时间:2018-06-07 12:03:09

标签: r plot ggplot2 lme4 longitudinal

我使用lme4包(lmer function)和3 Levels分析一些纵向数据:测量点嵌套在嵌套在家庭中的个体中。我对围绕特定生活事件的线性和非线性变化曲线感兴趣。我的模型具有许多时间预测器(指示事件发生之前和之后的线性变化,并指示事件发生之前和之后的非线性变化(即,平方时间变量))。另外,我有几个不随时间变化的2级预测因子(即个性特征)和一些控制变量(例如年龄,性别)。到目前为止,我没有包括任何随机斜率或跨层次的相互作用。

这是我的型号代码:

model.RI <- lmer(outcome ~ time + female_c + age_c + age_c2 + preLin + preLin.sq + postLin + postLin.sq + per1.c + per2.c + per3.c + per4.c + per5.c + (1 | ID) +  (1 | House))

结果=我的因变量

time = year 1, year 2, year 3 ... (until year 9);此变量表示类似测试效果的内容

female_c = gender centered

age_c = age centered

age_c2 = age squared centered

preLin = time variable表示事件发生的时间(事件发生后该变量为0,为-1,例如事件提前一年,事件提前两年等)。

preLin.sq = squared values of preLin

postLin = time variable表示事件发生后的时间(此变量在事件发生前为0,在事件发生后增加;例如在事件发生后一年为+1)

postLin.sq = squared values of postLin

per1.c until per5.c = personality traits on Level 2 (centered)

ID = indicating the individuum

House = indicating the household

我想知道如何绘制这个lmer模型的预测值(例如,使用ggplot2?)。我使用R中的method=gam绘制了变化曲线。这是一种相当数据驱动的方法,用于检查数据而无需预先定义曲线是线性还是二次或等等。我现在想检查一下我的参数化模型是否与我已经拥有的数据驱动gam-plot相当。你有任何建议怎么做吗?

我很乐意为此获得一些帮助!请随时询问我对我想做什么的解释是否不够准确!

非常感谢!

Follow this link: This is how my gam-plot looks like and I hope to get something similar when plotting the predicted values of my lmer model!

1 个答案:

答案 0 :(得分:0)

您可以使用ggeffects-package中的ggpredict() - 功能。如果您想绘制预测的时间值(preLin),您只需编写:

ggpredict(model.RI, "preLin")

该函数返回一个数据框(参见articles),您可以在ggplot中使用,但您也可以直接绘制结果:

ggpredict(model.RI, "preLin") %>% plot()

p <- ggpredict(model.RI, "preLin")
plot(p)

你也可以使用sjPlot-package,但对于边际效应/预测值,sjPlot::plot_model() - 函数内部只调用ggeffects::ggpredict(),因此结果基本相同。

模型的另一个注意事项:如果您有纵向数据,则还应将时变量包含为随机斜率。我不确定postLin是如何实际引用preLin的,但如果preLin捕获了所有测量结果,那么至少应该像这样编写模型:

model.RI <- lmer(
  outcome ~ time + female_c + age_c + age_c2 + preLin + preLin.sq + 
  postLin + postLin.sq + per1.c + per2.c + per3.c + per4.c + per5.c + 
  (1 + preLin | ID) +  (1 + preLin | House)
)

如果您还假设每个人(ID)的二次趋势,您甚至可以将平方项添加为随机斜率。

如图所示,建议使用样条曲线,您也可以尝试:

library(splines)
model.RI <- lmer(
  outcome ~ time + female_c + age_c + age_c2 + bs(preLin) 
  postLin + postLin.sq + per1.c + per2.c + per3.c + per4.c + per5.c + 
  (1 + preLin | ID) +  (1 + preLin | House)
)
p <- ggpredict(model.RI, "preLin")
plot(p)

样条曲线的例子也在我上面提到的网站上展示过。

修改 另一个注意事项与嵌套有关:您目前正在对完全交叉或交叉分类的模型进行建模。如果它完全嵌套,随机部分将如下所示:

... + (1 + preLin | House / ID)

(另见this small code-example)。