绘制 lmer 纵向分析的预测值
Plot predicted values from lmer longitudinal analysis
我正在使用 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!
您可以使用 ggeffects-package 中的 ggpredict()
函数。如果你想绘制时间的预测值(preLin
),你只需写:
ggpredict(model.RI, "preLin")
函数returns一个数据框(参见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)。
我正在使用 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!
您可以使用 ggeffects-package 中的 ggpredict()
函数。如果你想绘制时间的预测值(preLin
),你只需写:
ggpredict(model.RI, "preLin")
函数returns一个数据框(参见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)。