ggpubr 的 compare_means 和 base R 的 pairwise.t.test 给出不同的结果

ggpubr's compare_means and base R's pairwise.t.test give different results

第一次在Whosebug上发帖,希望有人能帮帮我。提前致谢!

我想使用 R 包 ggpubr 创建一个条形图,显示不同治疗组中基因的表达,但我注意到包含的函数 compare_meansstat_compare_means returns 比较所有组的 p 值比 R 基函数 pairwise.t.test 高得多。实际上,有些值要高一些,有些要低一些。 ggpubr 函数是否使用了一些更保守的假设?这是我的数据和代码示例:

   Target.Name Group     CT   dCT   f.change
81        Gen1   300 23.911 1.900 0.26794337
82        Gen1   300 24.990 3.190 0.10957572
83        Gen1   300 24.504 2.646 0.15965172
84        Gen1    30 26.379 4.486 0.04462512
85        Gen1    30 26.576 4.366 0.04852930
86        Gen1    30 27.154 4.912 0.03321549
87        Gen1     3 27.317 4.923 0.03298605
88        Gen1     3 27.119 5.288 0.02559490
89        Gen1     3 27.313 5.691 0.01935701
90        Gen1   0.3 27.388 5.857 0.01725311
91        Gen1   0.3 26.911 5.104 0.02909671
92        Gen1   0.3 26.872 5.816 0.01773816
93        Gen1     0 26.371 5.502 0.02206648
94        Gen1     0 27.283 5.778 0.01822421
95        Gen1     0 27.168 5.618 0.02034757

#-----------------------------------------
compare_means(dat_subset, formula = f.change ~ Group, method = "t.test")
pairwise.t.test(dat_subset$f.change, dat_subset$Group)

输出为

> compare_means(dat_subset, formula = f.change ~ Group, method = "t.test")
# A tibble: 10 x 8
   .y.      group1 group2      p p.adj p.format p.signif method
   <chr>    <chr>  <chr>   <dbl> <dbl> <chr>    <chr>    <chr> 
 1 f.change 0      0.3    0.799   0.9  0.799    ns       T-test
 2 f.change 0      3      0.278   0.83 0.278    ns       T-test
 3 f.change 0      30     0.0351  0.32 0.035    *        T-test
 4 f.change 0      300    0.0767  0.54 0.077    ns       T-test
 5 f.change 0.3    3      0.450   0.9  0.450    ns       T-test
 6 f.change 0.3    30     0.0271  0.27 0.027    *        T-test
 7 f.change 0.3    300    0.0767  0.54 0.077    ns       T-test
 8 f.change 3      30     0.0573  0.46 0.057    ns       T-test
 9 f.change 3      300    0.0809  0.54 0.081    ns       T-test
10 f.change 30     300    0.0980  0.54 0.098    ns       T-test
> pairwise.t.test(dat_subset$f.change, dat_subset$Group)

    Pairwise comparisons using t tests with pooled SD 

data:  dat_subset$f.change and dat_subset$Group 

    0      0.3    3      30    
0.3 1.0000 -      -      -     
3   1.0000 1.0000 -      -     
30  1.0000 1.0000 1.0000 -     
300 0.0034 0.0034 0.0036 0.0071

P value adjustment method: holm 

好吧,他们都声称使用 holm 作为默认值 p.adjust,但他们似乎在是否假设等方差方面有所不同。没有足够的数据来真正检验我的假设,但根据这个基本上取自帮助文件的示例,它们会产生不同的结果...

data("ToothGrowth")
df <- ToothGrowth
ggpubr::compare_means(len ~ supp, df, method = "t.test")
#> # A tibble: 1 x 8
#>   .y.   group1 group2      p p.adj p.format p.signif method
#>   <chr> <chr>  <chr>   <dbl> <dbl> <chr>    <chr>    <chr> 
#> 1 len   OJ     VC     0.0606 0.061 0.061    ns       T-test
ggpubr::compare_means(len ~ supp, df, method = "t.test", var.equal = TRUE)
#> # A tibble: 1 x 8
#>   .y.   group1 group2      p p.adj p.format p.signif method
#>   <chr> <chr>  <chr>   <dbl> <dbl> <chr>    <chr>    <chr> 
#> 1 len   OJ     VC     0.0604  0.06 0.06     ns       T-test
pairwise.t.test(df$len, df$supp)
#> 
#>  Pairwise comparisons using t tests with pooled SD 
#> 
#> data:  df$len and df$supp 
#> 
#>    OJ  
#> VC 0.06
#> 
#> P value adjustment method: holm
pairwise.t.test(df$len, df$supp, pool.sd = FALSE)
#> 
#>  Pairwise comparisons using t tests with non-pooled SD 
#> 
#> data:  df$len and df$supp 
#> 
#>    OJ   
#> VC 0.061
#> 
#> P value adjustment method: holm

reprex package (v0.3.0)

于 2020-05-08 创建

要获得相同的结果,您必须指定不希望合并方差 (pool.sd=FALSE),因为 pairwise.t.test 的默认值为 TRUE,但是compare_means 的默认值为 FALSE。 (反之亦然)

pairwise.t.test(x=dat_subset$f.change, g=dat_subset$Group, pool.sd = FALSE)

data:  dat_subset$f.change and dat_subset$Group 

    0    0.3  3    30  
0.3 0.90 -    -    -   
3   0.83 0.90 -    -   
30  0.32 0.27 0.46 -   
300 0.54 0.54 0.54 0.54

compare_means(dat_subset, formula = f.change ~ Group, method = "t.test")
# A tibble: 10 x 8
   .y.      group1 group2      p p.adj p.format p.signif method
   <chr>    <chr>  <chr>   <dbl> <dbl> <chr>    <chr>    <chr> 
 1 f.change 300    30     0.0980  0.54 0.098    ns       T-test
 2 f.change 300    3      0.0809  0.54 0.081    ns       T-test
 3 f.change 300    0.3    0.0767  0.54 0.077    ns       T-test
 4 f.change 300    0      0.0767  0.54 0.077    ns       T-test
 5 f.change 30     3      0.0573  0.46 0.057    ns       T-test
 6 f.change 30     0.3    0.0271  0.27 0.027    *        T-test
 7 f.change 30     0      0.0351  0.32 0.035    *        T-test
 8 f.change 3      0.3    0.450   0.9  0.450    ns       T-test
 9 f.change 3      0      0.278   0.83 0.278    ns       T-test
10 f.change 0.3    0      0.799   0.9  0.799    ns       T-test