【问题标题】:R ggpubr: add mean horizontal line & pair comparisons by group?R ggpubr:按组添加平均水平线和配对比较?
【发布时间】:2018-10-14 03:28:57
【问题描述】:

我最近发现了很棒的 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

【问题讨论】:

    标签: r statistics comparison boxplot


    【解决方案1】:

    您必须计算每个组的总平均值,并有一个 data.frame 表示平均值来自哪个组。

    > 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")
    

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

    至于调整后的重要性条,我认为没有现成的答案,因为 ggpubr 调用 ggsignif 确实有一个 manual 参数但前者没有实现它,至少就我而言在浏览源代码时看到。我认为有这条线很好,因为它表明进行了比较,即使它并不重要。

    【讨论】:

    • 太棒了,谢谢!!我不知道在geom_hline中可以这么容易地定义数据源,但这绝对是有道理的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多