ggpubr

作者:taoyan
鏈接:http://www.reibang.com/p/b7274afff14f
來(lái)源:簡(jiǎn)書
僅用來(lái)備份學(xué)習(xí)查找穗酥,讓刪隨時(shí)刪!!!

#先加載包
library(ggpubr)
#加載數(shù)據(jù)集ToothGrowth
data("ToothGrowth")
head(ToothGrowth)

##    len  supp  dose
## 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函數(shù) 描述
T-test t.test() 比較兩組(參數(shù))
Wilcoxon test wilcox.test() 比較兩組(非參數(shù))
ANOVA aov()或anova() 比較多組(參數(shù))
Kruskal-Wallis kruskal.test() 比較多組(非參數(shù))

各種比較方法后續(xù)有時(shí)間一一講解。

添加p-value

主要利用ggpubr包中的兩個(gè)函數(shù):

  • compare_means():可以進(jìn)行一組或多組間的比較
  • stat_compare_mean():自動(dòng)添加p-value媒咳、顯著性標(biāo)記到ggplot圖中

compare_means()函數(shù)

該函數(shù)主要用用法如下:

compare_means(formula, data, method = "wilcox.test", paired = FALSE,
  group.by = NULL, ref.group = NULL, ...)

注釋:

  • formula:形如x~group,其中x是數(shù)值型變量,group是因子草丧,可以是一個(gè)或者多個(gè)
  • data:數(shù)據(jù)集
  • method:比較的方法,默認(rèn)為"wilcox.test", 其他可選方法為:"t.test"莹桅、"anova"昌执、"kruskal.test"
  • paired:是否要進(jìn)行paired test(TRUE or FALSE)
  • group_by: 比較時(shí)是否要進(jìn)行分組
  • ref.group: 是否需要指定參考組

stat_compare_means()函數(shù)

主要用法:

stat_compare_means(mapping = NULL, comparisons = NULL hide.ns = FALSE,
                   label = NULL,  label.x = NULL, label.y = NULL,  ...)

注釋:

  • mapping:由aes()創(chuàng)建的一套美學(xué)映射
  • comparisons:指定需要進(jìn)行比較以及添加p-value、顯著性標(biāo)記的組
  • hide.ns:是否要顯示顯著性標(biāo)記ns
  • label:顯著性標(biāo)記的類型诈泼,可選項(xiàng)為:p.signif(顯著性標(biāo)記)懂拾、p.format(顯示p-value)
  • label.xlabel.y:顯著性標(biāo)簽調(diào)整
  • ...:其他參數(shù)

比較獨(dú)立的兩組

compare_means(len~supp, data=ToothGrowth)

image

結(jié)果解釋:

  • .y:測(cè)試中使用的y變量
  • p:p-value
  • p.adj:調(diào)整后的p-value铐达。默認(rèn)為p.adjust.method="holm"
  • p.format:四舍五入后的p-value
  • p.signif:顯著性水平
  • method:用于統(tǒng)計(jì)檢驗(yàn)的方法

繪制箱線圖

p <- ggboxplot(ToothGrowth, x="supp", y="len", color = "supp", 
palette = "jco", add = "jitter")#添加p-valuep+stat_compare_means()

image
#使用其他統(tǒng)計(jì)檢驗(yàn)方法
p+stat_compare_means(method = "t.test")

image

上述顯著性標(biāo)記可以通過(guò)label.x岖赋、label.yhjustvjust來(lái)調(diào)整
顯著性標(biāo)記可以通過(guò)aes()映射來(lái)更改:

  • aes(label=..p.format..)aes(lebel=paste0("p=",..p.format..)):只顯示p-value瓮孙,不顯示統(tǒng)計(jì)檢驗(yàn)方法
  • aes(label=..p.signif..):僅顯示顯著性水平
  • aes(label=paste0(..method..,"\n", "p=",..p.format..)):p-value與顯著性水平分行顯示

舉個(gè)栗子:

p+stat_compare_means(aes(label=..p.signif..), label.x = 1.5, label.y = 40)

image

也可以將標(biāo)簽指定為字符向量贾节,不要映射,只需將p.signif兩端的..去掉即可

p+stat_compare_means(label = "p.signif", label.x = 1.5, label.y = 40)

image

比較兩個(gè)paired sample

compare_means(len~supp, data=ToothGrowth, paired = TRUE)

image

利用ggpaired()進(jìn)行可視化

ggpaired(ToothGrowth, x="supp", y="len", color = "supp", line.color = "gray", 
line.size = 0.4, palette = "jco")+ stat_compare_means(paired = TRUE)

image

多組比較

Global test

compare_means(len~dose, data=ToothGrowth, method = "anova")

image

可視化

ggboxplot(ToothGrowth, x="dose", y="len", color = "dose", palette = "jco")+
stat_compare_means()

image
#使用其他的方法
ggboxplot(ToothGrowth, x="dose", y="len", color = "dose", palette = "jco")+ 
stat_compare_means(method = "anova")

image

Pairwise comparisons:如果分組變量中包含兩個(gè)以上的水平衷畦,那么會(huì)自動(dòng)進(jìn)行pairwise test,默認(rèn)方法為"wilcox.test"

compare_means(len~dose, data=ToothGrowth)

image
#可以指定比較哪些組
my_comparisons <- list(c("0.5", "1"), c("1", "2"), c("0.5", "2"))
ggboxplot(ToothGrowth, x="dose", y="len", color = "dose",palette = "jco")+
stat_compare_means(comparisons=my_comparisons)+ # Add pairwise 
comparisons p-value stat_compare_means(label.y = 50) # Add global p-value

image

可以通過(guò)修改參數(shù)label.y來(lái)更改標(biāo)簽的位置

ggboxplot(ToothGrowth, x="dose", y="len", color = "dose",palette = "jco")+
stat_compare_means(comparisons=my_comparisons, label.y = c(29, 35, 40))+ # Add pairwise comparisons p-value 
stat_compare_means(label.y = 45) # Add global p-value

image

至于通過(guò)添加線條來(lái)連接比較的兩組栗涂,這一功能已由包ggsignif實(shí)現(xiàn)

##設(shè)定參考組
compare_means(len~dose, data=ToothGrowth, ref.group = "0.5",  #以dose=0.5組為參考組 
method = "t.test" )

image
#可視化
ggboxplot(ToothGrowth, x="dose", y="len", color = "dose", palette = "jco")+ 
stat_compare_means(method = "anova", label.y = 40)+ # Add global p-value
stat_compare_means(label = "p.signif", method = "t.test", ref.group = "0.5") # Pairwise comparison against reference

image

參考組也可以設(shè)置為.all.即所有的平均值

compare_means(len~dose, data=ToothGrowth, ref.group = ".all.", method = "t.test")

image
#可視化
ggboxplot(ToothGrowth, x="dose", y="len", color = "dose", palette = "jco")+
stat_compare_means(method = "anova", label.y = 40)+# Add global p-value
stat_compare_means(label = "p.signif", method = "t.test", 
ref.group = ".all.")#Pairwise comparison against all

image

接下來(lái)利用survminer包中的數(shù)據(jù)集myeloma來(lái)講解一下為什么有時(shí)候我們需要將ref.group設(shè)置為.all.

library(survminer)#沒(méi)安裝的先安裝再加載
data("myeloma")
head(myeloma)

image

我們將根據(jù)患者的分組來(lái)繪制DEPDC1基因的表達(dá)譜,看不同組之間是否存在顯著性的差異祈争,我們可以在7組之間進(jìn)行比較斤程,但是這樣的話組間比較的組合就太多了,因此我們可以將7組中每一組與全部平均值進(jìn)行比較,看看DEPDC1基因在不同的組中是否過(guò)表達(dá)還是低表達(dá)忿墅。

compare_means(DEPDC1~molecular_group, data = myeloma, ref.group = ".all.", method = "t.test")

image
#可視化DEPDC1基因表達(dá)譜
ggboxplot(myeloma, x="molecular_group", y="DEPDC1", 
color = "molecular_group", add = "jitter", legend="none")+ 
rotate_x_text(angle = 45)+ 
geom_hline(yintercept = mean(myeloma$DEPDC1), linetype=2)+# Add horizontal line at base mean 
stat_compare_means(method = "anova", label.y = 1600)+ # Add global annova p-value 
stat_compare_means(label = "p.signif", method = "t.test", ref.group = ".all.")# Pairwise comparison against all

image

從圖中可以看出扁藕,DEPDC1基因在Proliferation組中顯著性地過(guò)表達(dá),而在Hyperdiploid和Low bone disease顯著性地低表達(dá)

我們也可以將非顯著性標(biāo)記ns去掉疚脐,只需要將參數(shù)hide.ns=TRUE

ggboxplot(myeloma, x="molecular_group", y="DEPDC1", 
color = "molecular_group", add = "jitter", legend="none")+
rotate_x_text(angle = 45)+ 
geom_hline(yintercept = mean(myeloma$DEPDC1), linetype=2)+# Add horizontal line at base mean 
stat_compare_means(method = "anova", label.y = 1600)+ # Add global annova p-value 
stat_compare_means(label = "p.signif", method = "t.test", ref.group = ".all.", hide.ns = TRUE)# Pairwise comparison against all

image

多個(gè)分組變量

按另一個(gè)變量進(jìn)行分組之后進(jìn)行統(tǒng)計(jì)檢驗(yàn)亿柑,比如按變量dose進(jìn)行分組:

compare_means(len~supp, data=ToothGrowth, group.by = "dose")

image
#可視化
p <- ggboxplot(ToothGrowth, x="supp", y="len", color = "supp", 
palette = "jco", add = "jitter", facet.by = "dose", short.panel.labs = FALSE)#按dose進(jìn)行分面
#label只繪制
p-valuep+stat_compare_means(label = "p.format")

image
#label繪制顯著性水平
p+stat_compare_means(label = "p.signif", label.x = 1.5)

image
#將所有箱線圖繪制在一個(gè)panel中
p <- ggboxplot(ToothGrowth, x="dose", y="len", color = "supp", 
palette = "jco", add = "jitter")
p+stat_compare_means(aes(group=supp))

image
#只顯示p-value
p+stat_compare_means(aes(group=supp), label = "p.format")

image
#顯示顯著性水平
p+stat_compare_means(aes(group=supp), label = "p.signif")

image
進(jìn)行paired sample檢驗(yàn)
compare_means(len~supp, data=ToothGrowth, group.by = "dose", paired = TRUE)

image
#可視化
p <- ggpaired(ToothGrowth, x="supp", y="len", color = "supp", 
palette = "jco", line.color="gray", line.size=0.4, facet.by = "dose", 
short.panel.labs = FALSE)#按dose分面
#只顯示p-value
p+stat_compare_means(label = "p.format", paired = TRUE)

image

其他圖形

條形圖與線圖(一個(gè)分組變量)

#有誤差棒的條形圖,實(shí)際上我以前的文章里有純粹用ggplot2實(shí)現(xiàn)
ggbarplot(ToothGrowth, x="dose", y="len", add = "mean_se")+ 
stat_compare_means()+ 
stat_compare_means(ref.group = "0.5", label = "p.signif", label.y = c(22, 29))

image
#有誤差棒的線圖
ggline(ToothGrowth, x="dose", y="len", add = "mean_se")+
stat_compare_means()+ 
stat_compare_means(ref.group = "0.5", label = "p.signif", label.y = c(22, 29))

image

條形圖與線圖(兩個(gè)分組變量)

ggbarplot(ToothGrowth, x="dose", y="len", add = "mean_se", color = "supp", 
palette = "jco", position = position_dodge(0.8))+ 
stat_compare_means(aes(group=supp), label = "p.signif", label.y = 29)

image
ggline(ToothGrowth, x="dose", y="len", add = "mean_se", color = "supp", 
palette = "jco")+ 
stat_compare_means(aes(group=supp), label = "p.signif", label.y = c(16, 25, 29))

image

Sessioninfo

sessionInfo()
## R version 3.4.0 (2017-04-21)
## Platform: x86_64-w64-mingw32/x64 (64-bit)
## Running under: Windows 8.1 x64 (build 9600)
## 
## Matrix products: default
## 
## locale:
## [1] LC_COLLATE=Chinese (Simplified)_China.936 
## [2] LC_CTYPE=Chinese (Simplified)_China.936 
## [3] LC_MONETARY=Chinese (Simplified)_China.936
## [4] LC_NUMERIC=C 
## [5] LC_TIME=Chinese (Simplified)_China.936 
## 
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base 
## 
## other attached packages:
## [1] survminer_0.4.0 ggpubr_0.1.3 magrittr_1.5 ggplot2_2.2.1 
## 
## loaded via a namespace (and not attached):
## [1] Rcpp_0.12.11 compiler_3.4.0 plyr_1.8.4
## [4] tools_3.4.0 digest_0.6.12 evaluate_0.10 
## [7] tibble_1.3.3 gtable_0.2.0 nlme_3.1-131 
## [10] lattice_0.20-35 rlang_0.1.1 Matrix_1.2-10 
## [13] psych_1.7.5 ggsci_2.4 DBI_0.6-1 
## [16] cmprsk_2.2-7 yaml_2.1.14 parallel_3.4.0 
## [19] gridExtra_2.2.1 dplyr_0.5.0 stringr_1.2.0 
## [22] knitr_1.16 survMisc_0.5.4 rprojroot_1.2 
## [25] grid_3.4.0 data.table_1.10.4 KMsurv_0.1-5 
## [28] R6_2.2.1 km.ci_0.5-2 survival_2.41-3 
## [31] foreign_0.8-68 rmarkdown_1.5 reshape2_1.4.2 
## [34] tidyr_0.6.3 purrr_0.2.2.2 splines_3.4.0 
## [37] backports_1.1.0 scales_0.4.1 htmltools_0.3.6 
## [40] assertthat_0.2.0 mnormt_1.5-5 xtable_1.8-2 
## [43] colorspace_1.3-2 ggsignif_0.2.0 labeling_0.3 
## [46] stringi_1.1.5 lazyeval_0.2.0 munsell_0.4.3 
## [49] broom_0.4.2 zoo_1.8-0
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末棍弄,一起剝皮案震驚了整個(gè)濱河市望薄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呼畸,老刑警劉巖痕支,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蛮原,居然都是意外死亡卧须,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門儒陨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)花嘶,“玉大人,你說(shuō)我怎么就攤上這事蹦漠〔毂粒” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵津辩,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我容劳,道長(zhǎng)喘沿,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任竭贩,我火速辦了婚禮蚜印,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘留量。我一直安慰自己窄赋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布楼熄。 她就那樣靜靜地躺著忆绰,像睡著了一般。 火紅的嫁衣襯著肌膚如雪可岂。 梳的紋絲不亂的頭發(fā)上错敢,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音缕粹,去河邊找鬼稚茅。 笑死纸淮,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的亚享。 我是一名探鬼主播咽块,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼欺税!你這毒婦竟也來(lái)了侈沪?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤魄衅,失蹤者是張志新(化名)和其女友劉穎峭竣,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體晃虫,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡皆撩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哲银。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扛吞。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖荆责,靈堂內(nèi)的尸體忽然破棺而出滥比,到底是詐尸還是另有隱情,我是刑警寧澤做院,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布盲泛,位于F島的核電站,受9級(jí)特大地震影響键耕,放射性物質(zhì)發(fā)生泄漏寺滚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一屈雄、第九天 我趴在偏房一處隱蔽的房頂上張望村视。 院中可真熱鬧,春花似錦酒奶、人聲如沸蚁孔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)杠氢。三九已至,卻和暖如春另伍,著一層夾襖步出監(jiān)牢的瞬間修然,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愕宋,地道東北人玻靡。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像中贝,于是被迫代替她去往敵國(guó)和親囤捻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容