R ggpubr: добавить среднее сравнение горизонтальной линии и пар по группам? - PullRequest
0 голосов
/ 03 мая 2018

Я недавно обнаружил отличный 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")

Приводит к

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 голосов
/ 03 мая 2018

Вы должны вычислить общее среднее значение для каждой группы и иметь 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 - yintercept в вызове aes. Это позволяет ggplot знать, что он правильно применяет aes переменные к соответствующим группам, независимо от того, как вы их применяете.

enter image description here

Что касается измененных значений значимости, я не думаю, что есть готовый ответ, потому что ggpubr вызывает ggsignif, у которого действительно есть параметр manual, но прежний не реализует его, по крайней мере, насколько я могу посмотрите на скимминге исходного кода. Я думаю, что с такой линией все в порядке, потому что она показывает, что было проведено сравнение, даже если оно несущественно.

...