在 R 中绘制与 lme4 或 LmerTest 模型的置信区间的交互
Plotting an interaction with confidence intervals from an lme4 or LmerTest model in R
使用dat
(找到here),我运行以下模型:
library(lmerTest)
model <- lmerTest::lmer(eval ~ post + ess + post*ess + (1|ID), data = dat)
summary(model)
的输出表明交互项很重要:
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: eval ~ post + ess + ess * post + (1 | ID)
Data: dat
REML criterion at convergence: 163.4
Scaled residuals:
Min 1Q Median 3Q Max
-1.95714 -0.48596 0.00623 0.49208 1.82729
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.33344 0.5774
Residual 0.02944 0.1716
Number of obs: 170, groups: ID, 85
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 1.50194 0.09082 90.00645 16.538 < 0.0000000000000002 ***
post -0.24537 0.03658 83.00000 -6.707 0.00000000226 ***
ess 0.15444 0.13076 90.00645 1.181 0.24067
post:ess 0.15620 0.05267 83.00000 2.965 0.00395 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) post ess
post -0.201
ess -0.695 0.140
post:ess 0.140 -0.695 -0.201
但是当我尝试使用 sjPlot
和 95% 置信区间来绘制交互时,生成的区间根本不会使交互看起来很重要...
library(sjPlot)
library(TMB)
plot_model(model, type="int", ci.lvl=0.95)
我的两个问题:
- 为什么估计值和绘制的结果似乎讲述了不同的故事?
- 如何从模型中提取系数的置信区间来创建我自己的图表而不是使用
plot_model()
?我想制作一个条形图来说明相互作用,因为变量 ess
和 post
是二进制的。
注意:我很高兴使用 lme4
- 应该会得到相同的结果,只是在汇总 lme4 对象时哪些系数很重要并不那么明显,我希望问题非常清楚.
我将按相反的顺序回答您的问题:
plot_model()
函数调用 ggeffects
包中的函数。具体来说,ggpredict()
做了很多工作。如果您转到以下 URL,您会发现很多关于如何更改效果图和从拟合模型中获取各种信息的信息。
https://cran.r-project.org/web/packages/ggeffects/vignettes/ggeffects.html
- 我不太同意交互看起来不重要。对于大多数绘图,置信区间不与其他类别均值重叠。然而,这可能无关紧要,因为您目前正在以一种使其看起来连续的方式绘制分类数据。这不会改变模型在引擎盖下的拟合方式,但会改变
sjPlot
的默认行为。我已经用因素拟合了您指定的模型,并按照我认为应该在下面绘制的方式绘制了它。我不认为这对情节有太大影响,但它可能会改变你的解释。此图中显示的差异与模型摘要输出一致,可以这样表述:当 ess
为 0 与 1 时,post
的两个级别之间的差异不相同. 另外,看看当 post
为 0 时,两个 ess
类别的 CI 如何与平均值重叠,但当 post
为 1 时,它们有显着差异。
让我知道是否需要进一步说明。
使用dat
(找到here),我运行以下模型:
library(lmerTest)
model <- lmerTest::lmer(eval ~ post + ess + post*ess + (1|ID), data = dat)
summary(model)
的输出表明交互项很重要:
Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: eval ~ post + ess + ess * post + (1 | ID)
Data: dat
REML criterion at convergence: 163.4
Scaled residuals:
Min 1Q Median 3Q Max
-1.95714 -0.48596 0.00623 0.49208 1.82729
Random effects:
Groups Name Variance Std.Dev.
ID (Intercept) 0.33344 0.5774
Residual 0.02944 0.1716
Number of obs: 170, groups: ID, 85
Fixed effects:
Estimate Std. Error df t value Pr(>|t|)
(Intercept) 1.50194 0.09082 90.00645 16.538 < 0.0000000000000002 ***
post -0.24537 0.03658 83.00000 -6.707 0.00000000226 ***
ess 0.15444 0.13076 90.00645 1.181 0.24067
post:ess 0.15620 0.05267 83.00000 2.965 0.00395 **
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Correlation of Fixed Effects:
(Intr) post ess
post -0.201
ess -0.695 0.140
post:ess 0.140 -0.695 -0.201
但是当我尝试使用 sjPlot
和 95% 置信区间来绘制交互时,生成的区间根本不会使交互看起来很重要...
library(sjPlot)
library(TMB)
plot_model(model, type="int", ci.lvl=0.95)
我的两个问题:
- 为什么估计值和绘制的结果似乎讲述了不同的故事?
- 如何从模型中提取系数的置信区间来创建我自己的图表而不是使用
plot_model()
?我想制作一个条形图来说明相互作用,因为变量ess
和post
是二进制的。
注意:我很高兴使用 lme4
- 应该会得到相同的结果,只是在汇总 lme4 对象时哪些系数很重要并不那么明显,我希望问题非常清楚.
我将按相反的顺序回答您的问题:
plot_model()
函数调用ggeffects
包中的函数。具体来说,ggpredict()
做了很多工作。如果您转到以下 URL,您会发现很多关于如何更改效果图和从拟合模型中获取各种信息的信息。
https://cran.r-project.org/web/packages/ggeffects/vignettes/ggeffects.html
- 我不太同意交互看起来不重要。对于大多数绘图,置信区间不与其他类别均值重叠。然而,这可能无关紧要,因为您目前正在以一种使其看起来连续的方式绘制分类数据。这不会改变模型在引擎盖下的拟合方式,但会改变
sjPlot
的默认行为。我已经用因素拟合了您指定的模型,并按照我认为应该在下面绘制的方式绘制了它。我不认为这对情节有太大影响,但它可能会改变你的解释。此图中显示的差异与模型摘要输出一致,可以这样表述:当ess
为 0 与 1 时,post
的两个级别之间的差异不相同. 另外,看看当post
为 0 时,两个ess
类别的 CI 如何与平均值重叠,但当post
为 1 时,它们有显着差异。
让我知道是否需要进一步说明。