R ggpubr:如何在分组图中添加均值水平线和两两比较?

4

我最近发现了一个很棒的ggpubr包。由于我的工作涉及到多个组,我喜欢按不同维度(facet.by)拆分数据。

我的问题包含两个子问题,与同一张图表有关。我想要:

  1. 为每个组添加唯一均值水平线,以及
  2. 仅绘制每个组的显著比较

我的目标是将箱线图和其配对比较的显著性值显示在一起。由于显著性可能因组而异,因此我可以仅绘制显著性较高的组,或指定显著性比较,并将它们单独绘制成每个组的图。

示例数据:

library(ggpubr)
library(ggplot2)  

# Create data
# :::::::::::::::::::::::::::::::::::::::::::::::::::
data("ToothGrowth")
df <- ToothGrowth

# Create basic plot
p <- ggboxplot(df, 
               x = "dose", 
               y = "len",
               color = "dose", 
               palette =c("#00AFBB", "#E7B800", "#FC4E07"),
               add = "jitter",
               facet.by = "supp", # define faceting 
               shape = "dose")

# Add horizontal line per each group???
p + geom_hline(yintercept = mean(df$len), #aggregate(len ~ supp, df, mean)$len, # mean(df$len), 
               linetype = 2,
               group = "supp")

导致

在此输入图片描述

我尝试计算每个组的平均值(#aggregate(len ~ supp, df, mean)$len),但它只添加了两条线。


为了指定成对的箱线图以显示显著性结果,我可以添加

my_comparisons <- list( c("0.5", "1"), c("1", "2"), c("0.5", "2") )

显著性结果是与组相关的。然而,我只想显示重要的比较结果。我如何指定每个组中仅有显著的配对结果呢?类似于:

my_comp_OJ <- list( c("0.5", "1"), c("0.5", "2"))
my_comp_VC <- list(  c("0.5", "1"), c("1", "2"), c("0.5", "2"))

应用hide.ns = TRUE仅隐藏ns,但保留成对行的指示。

p +  stat_compare_means(comparisons = my_comparisons,
                        label = "p.signif",
                        hide.ns = TRUE) +   # Add pairwise comparisons p-value 
    stat_compare_means(label.y = 50)        # Add global p-value

enter image description here

1个回答

5
你需要为每个组计算平均值,并创建一个数据框,用于表示每个平均值来自哪个组。
> aggregate(len ~ supp, data = df, FUN = mean)
  supp      len
1   OJ 20.66333
2   VC 16.96333

将其包含在geom_hline中很容易。

grand.means <- aggregate(len ~ supp, data = df, FUN = mean)
ggboxplot(df, 
          x = "dose", 
          y = "len",
          color = "dose", 
          palette = c("#00AFBB", "#E7B800", "#FC4E07"),
          add = "jitter",
          facet.by = "supp", # define faceting 
          shape = "dose") +
  geom_hline(data = grand.means, aes(yintercept = len),
             linetype = 2,
             group = "supp")

请注意,aes 调用中有一个 data 参数和我将 len 转换为 yintercept。这使得 ggplot 知道它正确地将 aes 变量应用于相应的组,无论您如何应用它们。

enter image description here

关于修改后的显著性条形图,我认为没有现成的答案,因为ggpubr调用了ggsignif,后者有一个manual参数,但前者没有实现它,至少在我浏览源代码时没有看到。我认为保留这行是可以的,因为它显示进行了比较,即使不具有显著性。

太棒了,谢谢!我不知道在geom_hline中可以如此轻松地定义数据源,但这绝对是有意义的! - maycca

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接