繁体   English   中英

R 数据可视化:有没有办法使用 ggplot 基于 emmeans 进行绘图?

[英]R data visualization: Is there a way to plot based on emmeans using ggplot?

我试图将我的数据分别可视化为条形图和由线连接的点图。

实验设计包括 2 个处理,每个处理 3 个水平,2 个饮食作为自变量,体重测量作为因变量。 每个样本(例如治疗“a”级“1”饮食“l”重复。下面是一个样本数据框(简化了响应变量值):

df <- data.frame(treatment=c('a','a','a','b','b','b','a','a','a','b','b','b',
                             'a','a','a','b','b','b','a','a','a','b','b','b',
                             'a','a','a','b','b','b','a','a','a','b','b','b',
                             'a','a','a','b','b','b','a','a','a','b','b','b'),
                    level=c(1,2,3,1,2,3,1,2,3,1,2,3,
                            1,2,3,1,2,3,1,2,3,1,2,3,
                            1,2,3,1,2,3,1,2,3,1,2,3,
                            1,2,3,1,2,3,1,2,3,1,2,3,
                            1,2,3,1,2,3,1,2,3,1,2,3,
                            1,2,3,1,2,3,1,2,3,1,2,3,
                            1,2,3,1,2,3,1,2,3,1,2,3,
                            1,2,3,1,2,3,1,2,3,1,2,3),
                    diet=c('l','l','l','l','l','l','h','h','h','h','h','h',
                           'l','l','l','l','l','l','h','h','h','h','h','h',
                           'l','l','l','l','l','l','h','h','h','h','h','h',
                           'l','l','l','l','l','l','h','h','h','h','h','h'),
                    rep=c(1,1,1,1,1,1,1,1,1,1,1,1,
                          2,2,2,2,2,2,2,2,2,2,2,2,
                          1,1,1,1,1,1,1,1,1,1,1,1,
                          2,2,2,2,2,2,2,2,2,2,2,2),
                    weight=c(100,75,50,50,25,12.5,100,75,50,50,25,12.5,
                             100,75,50,50,25,12.5,100,75,50,50,25,12.5,
                             200,150,100,100,50,25,200,150,100,100,50,25,
                             200,150,100,100,50,25,200,150,100,100,50,25))

使用线性混合模型,我看到治疗和水平效应是单独显着的。

fit_df <- lmer(weight ~ treatment*level*diet + (1|rep), data=df)

我还运行 emmeans 来查看每种治疗和水平组合之间的成对对比。

(emm_wt <- emmeans(fit_df, specs=pairwise~treatment*level))

然后,我想以条形图和由一条线连接的点图可视化下面显示的结果。 对于条形图,y 轴是 emmean,x 轴是治疗*水平,误差线显示 emmean±SE。

$emmeans
 treatment level emmean   SE   df lower.CL upper.CL
 a         1      150.0 7.98 27.7   133.64    166.4
 b         1       75.0 7.98 27.7    58.64     91.4
 a         2      112.5 7.98 27.7    96.14    128.9
 b         2       37.5 7.98 27.7    21.14     53.9
 a         3       75.0 7.98 27.7    58.64     91.4
 b         3       18.8 7.98 27.7     2.39     35.1

Results are averaged over the levels of: diet 
Degrees-of-freedom method: kenward-roger 
Confidence level used: 0.95 

下面的代码产生类似于我正在寻找的东西,但我不确定如何通过处理添加一条连接点的线(a1 到 a3 和 b1 到 b3)......通过分配颜色也很好处理(例如红色代表 a,蓝色代表 b)。

plot(emm_wt[[1]],
     CIs=TRUE,
     PIs=TRUE,
     comparisons=TRUE,
     colors=c("black","dark grey","grey","red"),
     alpha=0.05,
     adjust="tukey") +
  theme_bw() +
  coord_flip()

上述代码的情节

如果有人对我如何可视化这一点有任何见解,请告诉我。 先感谢您!

你可以做这样的事情,使用ggplot2

library(ggplot2)

ggplot(df,aes(reorder(trt,level),emmean, group=treatment, color=treatment)) + 
  geom_line(size=2) + 
  scale_color_manual(values=c("a" = "red", "b"="blue")) +
  geom_linerange(aes(ymin=lower.CL, ymax=upper.CL), size=2,show.legend = F) + 
  geom_point(color="black", size=8) +
  ylim(0,200) + labs(x="Treatment/Level", color="Treatment") + 
  theme(legend.position="bottom")

输出: emmeansplot

输入:

df = structure(list(treatment = c("a", "b", "a", "b", "a", "b"), level = c(1L, 
1L, 2L, 2L, 3L, 3L), emmean = c(150, 75, 112.5, 37.5, 75, 18.8
), SE = c(7.98, 7.98, 7.98, 7.98, 7.98, 7.98), df = c(27.7, 27.7, 
27.7, 27.7, 27.7, 27.7), lower.CL = c(133.64, 58.64, 96.14, 21.14, 
58.64, 2.39), upper.CL = c(166.4, 91.4, 128.9, 53.9, 91.4, 35.1
), trt = structure(c(1L, 4L, 2L, 5L, 3L, 6L), .Label = c("a1", 
"a2", "a3", "b1", "b2", "b3"), class = c("ordered", "factor"))), row.names = c(NA, 
-6L), class = "data.frame")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM