使用ggemmeans绘制线性混合效应模型交互项的问题咨询
线性混合效应模型交互项绘图问题解决方案
背景代码
构建LMM模型
## create data iris$group = c(rep('A', each = 75), rep('B', each = 75)) iris$id = rep(c(1:10), each = 15) ## assign contrasts iris$group <- factor(iris$group, levels=c('A', 'B')) (contrasts(iris$group) <- matrix(dimnames=list(levels(iris$group), c('.sum.group')), c(-0.5, 0.5), nrow=2)) ## build the model LMM = lmer(Sepal.Length ~ 1 + Sepal.Width + Petal.Length + Petal.Width + group*Petal.Width + (1|id), data = iris, control=lmerControl(optimizer="bobyqa", optCtrl=list(maxfun=2e5)), REML = FALSE)
原绘图代码
ggemmeans(LMM, terms = c("Petal.Width", "group")) %>% plot()+ geom_line(aes(linetype=group))+ aes(linetype = group)+ theme(legend.title = element_text(size=30), legend.position = 'top', legend.key.size = unit('1.5', 'cm'), axis.title.y = element_text(size = rel(2), angle = 90), axis.title.x = element_text(size = rel(2)), axis.text.x = element_text(size=20), axis.text.y = element_text(size=20))+ scale_colour_manual(values = c("orangered", "purple"))
问题解决与修改后的代码
针对三个问题,逐一调整代码:
移除重复线条:原代码中
ggemmeans(...) %>% plot()已经自动绘制了对应group的线条,额外添加geom_line()会导致线条重复(细虚线+粗虚线)。只需去掉重复的geom_line()和冗余的aes(linetype=group),并在plot()中直接指定linetype = "group"。置信区间颜色匹配线条:通过在
plot()中设置colour = "group",让线条和置信区间边框颜色与group绑定,再配合scale_colour_manual指定对应颜色;若需要填充置信区间,可额外设置fill = "group"并添加scale_fill_manual(可选)。确保95%置信区间:在
ggemmeans()中显式设置conf.level = 0.95,强制生成95%置信区间(默认虽为0.95,显式指定更稳妥)。
修改后的完整绘图代码
# 生成边际均值并指定95%置信区间 ggemmeans(LMM, terms = c("Petal.Width", "group"), conf.level = 0.95) %>% # 绘制时绑定颜色、线型到group,避免重复图层 plot(colour = "group", linetype = "group", conf.int = TRUE) + # 自定义线条与置信区间边框颜色 scale_colour_manual(values = c("orangered", "purple")) + # 可选:若需要置信区间填充色匹配,添加以下行 # scale_fill_manual(values = c("orangered2", "purple2")) + # 主题设置 theme(legend.title = element_text(size=30), legend.position = 'top', legend.key.size = unit('1.5', 'cm'), axis.title.y = element_text(size = rel(2), angle = 90), axis.title.x = element_text(size = rel(2)), axis.text.x = element_text(size=20), axis.text.y = element_text(size=20))
补充说明
- 若希望置信区间仅显示边框而非填充,可在
plot()中添加ribbon.args = list(fill = NA),这样只会保留与线条同色的置信区间边框。 ggemmeans()的conf.level参数直接控制置信区间水平,0.95对应95%置信区间。
内容的提问来源于stack exchange,提问作者Alex M
相关产品推荐
相关产品推荐

