数据可视化——R语⾔为ggplot图形添加P值和显著性⽔平数据可视化——R语⾔为ggplot图形添加P值和显著性⽔平
本⽂对⼀篇英⽂博客进⾏翻译,博客原⽂链接:
概述:本⽂介绍如何轻松地为ggplot图形添加P值和显著性⽔平:
⽐较两组或多组的均值
⾃动地将P值和显著性⽔平添加到ggplot图形中,如箱形图,点图,条形图和折线图等
使⽤⼯具: R语⾔中的ggplot2包和ggpubr包
准备
安装和加载R包
本⽂使⽤包,要求版本⾼于0.1.3。ggpubr是⼀个基于ggplot2的计算⼯具包。
直接输⼊以下命令从中下载安装
install.packages("ggpubr")
也可以从中下载安装最新版本
if(!require(devtools)) install.packages("devtools")
devtools::install_github("kassambara/ggpubr")
加载ggpubr包
library(ggpubr)
⽰例数据
⽰例数据集:ToothGrowth
data("ToothGrowth")
head(ToothGrowth)
⽰例数据如下:
## len supp do
## 1 4.2 VC 0.5
三本专业## 2 11.5 VC 0.5
## 3 7.3 VC 0.5
## 4 5.8 VC 0.5
## 5 6.4 VC 0.5
## 6 10.0 VC 0.5
均值⽐较的⽅法
R中⽤于两组或多组间均值⽐较的标准统计⽅法在之前的⽂章也有描述:
均值⽐较的常见⽅法:
⽅法R实现函数描述
形容时间的诗句
st()⽐较两组(参数检验) Wilcoxon st()⽐较两组(⾮参数检验) ANOVA aov()或anova()⽐较多组(参数检验) st()⽐较多组(⾮参数检验)以下链接提供了各种⽅法的详细介绍:
单样本均值与已知均值的⽐较
独⽴双样本均值⽐较
配对双样本均值⽐较
两组以上的均值⽐较
⽅差分析(ANOVA, 参数检验)
⽤于添加P值的R函数
介绍两个ggpubr包中的函数
compare_means():⽤于执⾏均值⽐较
stat_compare_means():⽤于在ggplot图形中⾃动添加P值和显著性⽔平
compare_means()
动力工程专业该函数⽤于执⾏均值⽐较。该函数与标准的R函数相⽐,灵活性更强。
简化形式如下:
compare_means(formula, data, method ="st", paired =FALSE,
group.by =NULL, up =NULL,...)
formula:指定⼀个公式,公式形式为 x ~ group,其中,x 表⽰⼀个数值型变量,group 表⽰⼀个因⼦型变量,包含⼀个或多个⽔平。例如,⼀个⽰例公式为 formula = TP53 ~ cancer_group,表⽰在 cancer_group 对应的各⽔平间⽐较TP53的表达⽔平;也可以同时指定多个响应变量,如 formula = c(TP53, PTEN) ~ cancer_group。
data:指定⼀个数据框(data.frame),数据框需包含formula中的变量。
method:指定统计检验的⽅法。默认为“st”,即Wilcoxon检验(⾮参数检验);也可指定其他统计⽅法:“t.test”,即T检验(参数检验)。“t.test”和“st”⽤于两组样本间的⽐较。当超过两组时,将会执⾏两两⽐较
(pairwi comparison)。
“anova”(参数检验)或 “st”(⾮参数检验),⽤于执⾏多组间的单因素⽅差分析。
paired:指定⼀个逻辑变量,表⽰是否需要执⾏配对检验,仅适⽤于t.test 和st。
group.by:指定⼀个分组变量的字符名,⽤于在统计检验之前对数据进⾏分组。当存在group.by指定的变量时,均值⽐较将在不同⽔平的各个⼦集数据中执⾏。
stat_compare_means()
该函数是对ggplot2的扩展,可将均值⽐较后的P值添加到ggplot图形中,如箱形图、点图、条形图和折线图等。
简化形式如下:
stat_compare_means(mapping =NULL, comparisons =NULL hide.ns =FALSE,
label =NULL, label.x =NULL, label.y =NULL,...)
mapping:通过 aes() 设置绘图时的aesthetic
comparisons:指定⼀个列表(list),每个列表元素需为长度等于2的向量。向量的内容可以为X轴的两个组别名(字符型),也可以是两个感兴趣组的组别索引(整数值),表⽰采⽤指定的两个组别进⾏⽐较。
hide.ns:逻辑变量,如果设为TRUE,显⽰显著性⽔平时将隐藏 ns 字样,即组间差异不显著时不显⽰ ns 字样。
label:指定⼀个字符串,表⽰标签类型。可为:“p.signif”(显⽰显著性⽔平),“p.format”(显⽰格式化的P值)。
label.x, label.y:指定⼀个数值,表⽰显⽰标签的绝对坐标位置。
…:传递给函数compare_means()的参数,如method、paired、up。
独⽴双样本组间⽐较
执⾏统计检验
compare_means(len ~ supp, data = ToothGrowth)
⽰例结果如下:
## # A tibble: 1 x 8
## .y. group1 group2 p p.adj p.format p.signif method
##
## 1 len OJ VC 0.0645 0.0645 0.064 ns Wilcoxon
method默认为“st”(⾮参数检验),可指定method = “t.test”,表⽰T检验(参数检验)
返回值为具有以下列的数据框:
.y.:⽤于统计检验的数值变量
p:P值
p.adj:调整后的P值,调整P值的默认⽅法为hod = “holm”
电脑文件夹打不开
p.format: 格式化的P值
p.signif:显著性⽔平,即⽤不同数量的 * 表⽰显著性⽔平
method:⽤于组间⽐较的统计⽅法
创建添加P值的箱形图
p <-ggboxplot(ToothGrowth, x ="supp", y ="len",
color ="supp", palette ="jco",
add ="jitter")
# Add p-value
p +stat_compare_means()
# Change method
p +stat_compare_means(method ="t.test")
注意:显⽰P值的标签位置可以通过如下参数来调整:label.x, label.y, hjust 和vjust。
显⽰P值的标签默认为 compare_means() 返回值中的 method 和 p 的组合。也可以通过 aes() 函数指定为其他显⽰形式。例如:
aes(label = ..p.format..)或aes(label = paste0(“p =”, ..p.format..))
表⽰只显⽰格式化的P值,⽽不显⽰method
aes(label = ..p.signif..)
表⽰仅显⽰显著性⽔平
aes(label = paste0(..method.., “\n”, “p =”, ..p.format..))
表⽰在method名和P值之间添加换⾏符(“\n”)
⽰例如下:
p +stat_compare_means(aes(label =..p.signif..),
label.x =1.5, label.y =40)
另外,也可以将参数label指定为字符向量:
p +stat_compare_means( label ="p.signif", label.x =1.5, label.y =40)
配对双样本组间⽐较
执⾏统计检验
compare_means(len ~ supp, data = ToothGrowth, paired =TRUE)
⽰例结果如下:
## # A tibble: 1 x 8
## .y. group1 group2 p p.adj p.format p.signif method
##西洋参有什么功效
## 1 len OJ VC 0.00431 0.00431 0.0043 ** Wilcoxon
使⽤函数 ggpaired() 可视化配对数据
ggpaired(ToothGrowth, x ="supp", y ="len",
熙五行属什么color ="supp", lor ="gray", line.size =0.4,
palette ="jco")+
stat_compare_means(paired =TRUE)
多组样本的组间⽐较
全局检验(所有组的均值⽐较)
# Global test
compare_means(len ~ do, data = ToothGrowth, method ="anova")
⽰例结果如下:
## # A tibble: 1 x 6
## .y. p p.adj p.format p.signif method
##
## 1 len 9.53e-16 9.53e-16 9.5e-16 **** Anova
添加全局检验的P值(所有组⽐较总的P值)
# Default method ="st"for multiple groups
ggboxplot(ToothGrowth, x ="do", y ="len",
color ="do", palette ="jco")+
stat_compare_means()
# Change method to anova
ggboxplot(ToothGrowth, x ="do", y ="len",属于自己的天空
color ="do", palette ="jco")+
stat_compare_means(method ="anova")
两两⽐较(Pairwi comparisons)
如果分组变量包含两个以上的⽔平,两两⽐较的检验(pairwi test)将⾃动执⾏。默认⽅法为“st”,也可设置为“t.test”。
# Perorm pairwi comparisons
compare_means(len ~ do, data = ToothGrowth)
⽰例结果如下:
## # A tibble: 3 x 8
## .y. group1 group2 p p.adj p.format p.signif method2008年奥运会吉祥物
##
## 1 len 0.5 1 7.02e-06 1.40e-05 7.0e-06 **** Wilcoxon
## 2 len 0.5 2 8.41e-08 2.52e-07 8.4e-08 **** Wilcoxon
## 3 len 1 2 1.77e-04 1.77e-04 0.00018 *** Wilcoxon
# Visualize: Specify the comparisons you want
my_comparisons <-list(c("0.5","1"),c("1","2"),c("0.5","2"))
ggboxplot(ToothGrowth, x ="do", y ="len",
color ="do", palette ="jco")+
stat_compare_means(comparisons = my_comparisons)+ # Add pairwi comparisons p-value
stat_compare_means(label.y =50) # Add global p-value
如果需要指定标签显⽰的Y轴位置,可使⽤参数label.y