【问题标题】:How to correct labels for boxplot get the p-values at each pair in in R如何更正箱线图的标签获取 R 中每对的 p 值
【发布时间】:2021-02-06 12:56:23
【问题描述】:

我有一个数据样本如下:

df <- tribble(
    ~capacity1, ~capacity2, ~capacity3, ~capacity4, ~capacity5, ~capacity6, ~capacity7, ~capapcity8,
    75, 88, 85, 71, 98, 76, 71, 57,
    80, 51, 84, 72, 59, 81, 70, 64,
    54, 65, 90, 66, 93, 88, 77, 59,
    59, 87, 94, 75, 74, 53, 56, 87,
    52, 55, 64, 77, 50, 64, 83, 87,
    33,22,66,67,99,87,40,90,)

我想得到下图。

如您所见,容量 1 与容量 2 一起生成一个标签作为容量 1。容量 3,容量 4=容量 2,容量 5 和容量 6=容量 3,容量 7,容量 8=容量 4。接下来,我想获得 p 值。如果我们可以订购每对盒子(例如,容量 1,容量 2=容量 1),那就太好了。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    如果我们需要成对图,我们可以将每对列的数据集拆分为list,然后使用ggpubr中的ggboxplot

    library(dplyr)
    library(tidyr)
    library(purrr)
    library(patchwork)
    library(rstatix)
    library(ggpubr)
    lst1 <- df %>% 
            # // split every 2 columns
            split.default(as.integer(gl(ncol(.), 2, ncol(.)))) %>% 
            # // loop over the list
            map(~ {
              # // reshape to long format
               dat <- pivot_longer(.x, everything())
               # // get the t.test p value
               stat_test <- dat %>%
                             t_test(value ~ name)%>% 
                             adjust_pvalue(method = "bonferroni") %>%      
                             add_significance("p.adj") %>% 
                             add_xy_position(x = "name")
            # // create the boxplot
            ggboxplot(dat, x = 'name', y = 'value')+
                       stat_pvalue_manual(stat_test, 
                            label = "p.adj", tip.length = 0.01)
            })       
    

    现在,我们用来自patchworkwrap_plots 包装地块列表

    wrap_plots(lst1)
    

    -输出

    【讨论】:

      【解决方案2】:

      试试这个方法。您的数据是宽格式的。首先,您必须使用 pivot_longer() 转换为 long。之后,您可以使用ggplot2 使用geom_boxplot() 绘制绘图。为了添加p-values,您需要定义正确的测试并使用stat_compare_means()。这里的代码使用t.test

      library(ggplot2)
      library(dplyr)
      library(tidyr)
      #Code
      df %>% pivot_longer(everything()) %>%
        ggplot(aes(x=name,y=value,fill=name,group=name))+
        geom_boxplot()+
        stat_compare_means(label = "p", method = "t.test",
                           ref.group = ".all.")+
        labs(fill='Variable')
      

      输出:

      分组:

      #Data for groups
      groups <- data.frame(name=c("capacity1", "capacity2", "capacity3", "capacity4", "capacity5", 
                                  "capacity6", "capacity7", "capapcity8"),
                           group=paste0('Group.',c(1,1,2,2,3,3,4,4)),stringsAsFactors = F)
          #Code
          df %>% pivot_longer(everything()) %>%
            left_join(groups) %>%
            ggplot(aes(x=name,y=value,fill=name,group=name))+
            geom_boxplot()+
            facet_wrap(.~group,scales = 'free',nrow = 1,strip.position = 'bottom')+
            labs(fill='Variable')+
            theme(strip.placement = 'outside',strip.background = element_blank(),
                  legend.position = 'none')
      

      输出:

      【讨论】:

      • 谢谢,但是,我可以创建它,但问题标签。请看预期情节
      • 这是base R,你应该在另一个向量中设置标签,然后添加到图中。
      • 我已经看到它使用ggplot2,但我不记得代码
      • @user330 你想要的是对每两个容量进行分组,对吧?然后是箱线图?
      • @user330 我添加了一个更新,如果可行,请告诉我!
      猜你喜欢
      • 1970-01-01
      • 2012-06-23
      • 2014-08-23
      • 2018-10-06
      • 2014-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      相关资源
      最近更新 更多