下面的代码绘制了混合效应模型的随机效应:

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() 等。

最佳答案

我建议为随机效应制作新的数据框。为此,我使用函数 ldply() 和您为计算每个级别的随机效应所做的函数。此外,在这个新数据框中添加了列 wtcylwt 将包含每个级别重复的 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)

关于r - 使用 ggplot2 绘制混合效应模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17153853/

10-12 20:33