ggpubr 的 compare_means 和 base R 的 pairwise.t.test 给出不同的结果
Posted
技术标签:
【中文标题】ggpubr 的 compare_means 和 base R 的 pairwise.t.test 给出不同的结果【英文标题】:ggpubr's compare_means and base R's pairwise.t.test give different results 【发布时间】:2020-08-24 03:50:22 【问题描述】:第一次在***上发帖,希望有人能帮助我。提前致谢!
我想使用 R 包 ggpubr 创建一个条形图,显示不同治疗组中基因的表达,但我注意到包含的函数 compare_means
或 stat_compare_means
返回更高的 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
【问题讨论】:
【参考方案1】:要获得相同的结果,您必须指定不希望合并方差 (pool.sd=FALSE
),因为 pairwise.t.test
的默认值为 TRUE,但 compare_means
的默认值为错误的。 (反之亦然)
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
【讨论】:
非常感谢您的出色回答。但是现在我可以选择将汇总方差设置为真并获得更符合我的假设的 p 值,这是危险的领域:D 但我想这超出了问题范围,所以我要阅读有点关于选择什么。非常感谢!【参考方案2】:好吧,他们都声称使用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 年 5 月 8 日创建
【讨论】:
感谢 Chuck 的出色回答。就是这样 哈哈,不过你没有选择我的答案。以上是关于ggpubr 的 compare_means 和 base R 的 pairwise.t.test 给出不同的结果的主要内容,如果未能解决你的问题,请参考以下文章
R语言使用ggpubr包的ggarrange函数组合多张结论图:使用ggpubr包将图像文本表格组合在一起展示
R语言使用ggpubr包的ggarrange函数组合多张结论图:使用ggpubr包将表格嵌套在可视化图像中
R语言使用ggpubr包的ggarrange函数组合多张结论图:使用ggpubr包将多个可视化结论嵌套起来输出(ggarrange组合ggarrange组合后的图像)