簡體   English   中英

使用ggplot2繪制混合效果模型

[英]using ggplot2 to plot mixed effects model

下面的代碼繪制了混合效應模型中的隨機效應:

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級應為藍色。 我不想在geom_line()指定color="red"等。

我建議為隨機效果制作新的數據框。 為此,我使用函數ldply()和您制作的用於計算每個級別的隨機效果的函數。 此外,在此新數據框中添加了列wtcyl wt將包含針對每個級別重復的mtcarsSub數據幀中的所有wt值。 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM