R ggpubr:按组添加平均水平线和配对比较?

may*_*cca 4 statistics comparison r boxplot

我最近发现了很棒的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")
Run Code Online (Sandbox Code Playgroud)

导致

在此输入图像描述

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


要指定配对箱线图来显示显着性结果,我可以添加

my_comparisons <- list( c("0.5", "1"), c("1", "2"), c("0.5", "2") )
Run Code Online (Sandbox Code Playgroud)

显着性结果取决于组。然而,我只想展示重要的比较。如何仅指定每组中的重要对?就像是:

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"))
Run Code Online (Sandbox Code Playgroud)

hide.ns = TRUE仅应用hide 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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Rom*_*rik 5

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

> aggregate(len ~ supp, data = df, FUN = mean)
  supp      len
1   OJ 20.66333
2   VC 16.96333
Run Code Online (Sandbox Code Playgroud)

将其包含在 中是微不足道的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")
Run Code Online (Sandbox Code Playgroud)

请注意,有一个data争论,我len在电话yinterceptaes。这表明ggplot它可以正确地将aes变量应用到相应的组,无论您如何应用它们。

在此输入图像描述

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