【问题标题】:Plot predicted values from lmer longitudinal analysis绘制 lmer 纵向分析的预测值
【发布时间】:2018-06-07 12:03:09
【问题描述】:

我正在使用 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,例如事件提前一年,-2 事件提前两年等)

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 绘制了变化曲线。这是一种相当数据驱动的方法来检查数据,而无需预先定义曲线是线性的还是二次的或其他。我现在想检查我的参数 lmer 模型是否与我已经拥有的数据驱动的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!

【问题讨论】:

    标签: r plot ggplot2 lme4 longitudinal


    【解决方案1】:

    您可以使用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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 2018-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-06
      • 2020-06-29
      相关资源
      最近更新 更多