R ggpubr:添加平均水平线&按组对比?

时间:2018-05-03 18:10:57

标签: r statistics comparison boxplot

我最近发现了很棒的ggpubr包。当我处理多个组时,我喜欢在facet(facet.by)中分割我的数据。

我的问题由两个与同一图表相关的子问题组成。我想

  1. 为每个组添加唯一的平均水平线
  2. 仅按小组绘制重要比较
  3. 我的目标是显示箱线图以及它们的对比较显着性值。由于组的重要性可能不同,我只能绘制重要的组,或指定重要的比较,并按组分别绘制它们。

    示例数据:

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

    导致

    enter image description here

    我尝试计算每组的均值(#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 个答案:

答案 0 :(得分: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通话中我有一个len参数,我yinterceptaes。这使得ggplot意识到它正确地将aes变量应用于相应的组,无论您如何应用它们。

enter image description here

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