下面的代码绘制了混合效果模型的随机效果:
mtcarsSub <- mtcars[,c("wt", "drat", "cyl")]
library(lme4)
mtcarsME <- lmer(drat ~ (1|cyl) + wt, data=mtcarsSub)
mtcarsSub$fixed.effect <- predict(mtcarsME)
library(plyr)
l_ply(list(4, 6, 8), function(x) mtcarsSub[[ paste0("random.effect.cyl", x) ]] <<- mtcarsSub$fixed.effect + ranef(mtcarsME)$cyl[as.character(x),])
library(ggplot2)
ggplot(mtcarsSub, aes(wt, drat, color=factor(cyl))) +
geom_point() +
geom_line(aes(wt, fixed.effect), color="black", size=2) +
geom_line(aes(wt, random.effect.cyl4), size=2) +
geom_line(aes(wt, random.effect.cyl6), size=2) +
geom_line(aes(wt, random.effect.cyl8), size=2)
如何以编程方式使每个随机效果线与cyl
显示的颜色相同?因此,cyl
的第4级的随机效果行应为红色,cyl
的第6级应为绿色,cyl
的第8级应为蓝色。我不想在color="red"
中指定geom_line()
等。
答案 0 :(得分:2)
我建议为随机效果制作新的数据框。为此,我使用函数ldply()
和您为每个级别计算随机效果的函数。此外,在此新数据框中添加了列wt
和cyl
。 wt
将包含为每个级别重复的wt
数据框中的所有mtcarsSub
值。 cyl
将包含值4,6和8。
mt.rand<-ldply(list(4,6,8), function(x) data.frame(
wt=mtcarsSub$wt,
cyl=x,
rand=mtcarsSub$fixed.effect + ranef(mtcarsME)$cyl[as.character(x),]))
现在,绘图使用一个geom_line()
调用中的新数据帧。由于新数据框也有cyl
列,因此将为点分配颜色。
ggplot(mtcarsSub, aes(wt, drat, color=factor(cyl))) +
geom_point() +
geom_line(aes(wt, fixed.effect), color="black", size=2)+
geom_line(data=mt.rand,aes(wt,rand),size=2)