R ggplot и ggpubr, Как рассчитать/отобразить значения p в графиках facet_wrap с разными группами на разных графиках?

#r #ggplot2 #facet-wrap #ggpubr

Вопрос:

Я пытаюсь создать функцию, которая отображала бы мои данные на графике. Данные обобщают значения, измеренные после лечения в нескольких экспериментах в контрольной и обработанной группах. Лечение может быть разным в разных экспериментах. Я хотел бы получить график, сравнивающий вручную различные эксперименты (путем огранки), а также показывающий значения p для попарного сравнения контрольной группы с различными методами лечения.

Вот пример:

 set.seed(1)
    
    library(ggplot2)
    library(ggpubr) ## calculates the statistics for the graph
    library(dplyr)
    
    ##creating dataset
    exp1<-data.frame(exp = "exp1",
                     treatment = rep(c("control", "drug A", "drug B", "drug C"), 10),
           result = runif(40, min =1, max = 10))
    exp2<-data.frame(exp = "exp2",
                     treatment = rep(c("control", "drug A"), 10),
                     result = runif(20, min =1, max = 10))
    exp3<-data.frame(exp = "exp3",
                     treatment = rep(c("control", "drug A", "drug C"), 10),
                     result = runif(30, min =1, max = 10))
    
    data<-bind_rows(exp1, exp2, exp3)
    
    
    ##function for graphing the data
    graph<-function(data, col_Name) {
      treatment<-as.character(unique(data$treatment)) ## in the real dataset the treatment is an ordered factor, so use as.character here
      g<-ggplot(data, aes(x=treatment, y = data[,col_Name], fill = treatment))   
        geom_boxplot(color = "black", alpha = 0.3) 
        geom_dotplot(binaxis = "y", stackdir = "center", dotsize = 2, color = "black")   
        facet_wrap(~exp, nrow = 1)  #facetting the data
        stat_compare_means(method = "t.test", aes(label = ..p.format..),
                           comparisons = mapply(c, "control", treatment[2:length(treatment)], SIMPLIFY =  F) ) ### with mapply I create the list of pairwise comparisons I want to have
      return(g)
    }
    
    graph(data, "result")
 

[![введите описание изображения здесь][1]][1]

Вот что я получаю до сих пор: [1]: https://i.stack.imgur.com/3qJnd.png

Проблема в том, что он показывает статистику только тогда, когда в эксперименте участвуют все 4 группы. Я бы хотел, чтобы функция каким-то образом для любого данного аспекта (то есть для каждого отдельного эксперимента) пропускала группы, в которых отсутствуют данные в этом примере, отображала группы с данными и вычисляла статистику для попарных сравнений с контрольной группой.

Мне интересно, как указать/пропустить группы с отсутствующими данными специально для каждого аспекта, чтобы показать статистику в каждом из них ?

Большое спасибо! Лучше всех!