R語言||rstatix包和ggpubr包復(fù)現(xiàn)標(biāo)注統(tǒng)計(jì)檢驗(yàn)顯著性的各種花樣的圖形

同名公主號:BBio

rstatix包支持管道符吆寨,與tidyverse包設(shè)計(jì)理念相一致伐蒂,用于執(zhí)行基本的統(tǒng)計(jì)檢驗(yàn)遏暴,包括t檢驗(yàn)般卑、Wilcoxon檢驗(yàn)、ANOVA矢门、Kruskal-Wallis和相關(guān)性分析撒桨。

ggpubr包提供了一些易于使用的函數(shù)煤禽,基于ggplot2液样,可繪制用于文章發(fā)表的各種圖形振亮。當(dāng)然,ggpubr也提供了一些統(tǒng)計(jì)函數(shù)鞭莽,但是rstatix在統(tǒng)計(jì)方面更加豐富坊秸。

如何使用兩者繪制出下面好看的圖形呢?以單細(xì)胞數(shù)據(jù)為例澎怒。

//細(xì)胞比例組間差異
  1. 生成測試數(shù)據(jù)
library(Seurat)
library(tidyverse)
library(rstatix)
library(ggpubr)
library(ggplot2)

#生成測試數(shù)據(jù)
pbmc <- pbmc_small
func <- function(x)str_c('S', x%%12+1)
sample <- pbmc[['groups']] %>% add_column(order=1:dim(pbmc)[2]) %>% mutate(remainder=func(order)) %>% pull(remainder)
df <- table(Idents(pbmc), sample) %>% 
    prop.table(2) %>% 
    as.data.frame.array() %>% 
    rownames_to_column("cluster") %>% 
    pivot_longer(unique(sample), names_to="sample", values_to="percent") %>% 
    left_join(data.frame(sample=str_c("S", 1:12), group=rep(c("G1", "G2"), each = 6)))
df
# A tibble: 18 × 4
#   cluster sample percent group
#   <chr>   <chr>    <dbl> <chr>
# 1 0       S2       0.571 G1
# 2 0       S3       0.429 G1
# 3 0       S4       0.385 G2
# 4 0       S5       0.385 G2
# 5 0       S6       0.462 G2
# 6 0       S1       0.462 G1
# 7 1       S2       0.214 G1
# 8 1       S3       0.357 G1
# 9 1       S4       0.385 G2
#10 1       S5       0.385 G2
#11 1       S6       0.231 G2
#12 1       S1       0.308 G1
#13 2       S2       0.214 G1
#14 2       S3       0.214 G1
#15 2       S4       0.231 G2
#16 2       S5       0.231 G2
#17 2       S6       0.308 G2
#18 2       S1       0.231 G1
  1. 細(xì)胞比例組間差異柱狀圖
#只畫cluster 2
data <- df[df$cluster==2, ]
comparisons <- list(c("G1", "G2"))
ggbarplot(data, x = "group", y = "percent", 
          color = "group", 
          palette = c("#00AFBB", "#E7B800"), 
          width = 0.2, 
          x.text.angle = 90, 
          add=c('mean_se')) + 
    labs(x=NULL) + theme(legend.position="none", panel.border=element_rect(color='black', fill=NA, size=0.7, linetype="solid")) + 
    stat_compare_means(comparisons = comparisons, method = 't.test', label = 'p.signif')
image-20220927212134435.png
  1. 細(xì)胞比例組間差異箱線圖
#只畫cluster2
data <- df[df$cluster==2, ]
comparisons <- list(c("G1", "G2"))
p1 <- ggboxplot(data, x = "group", y = "percent", 
          color = "group", 
          palette =c("#00AFBB", "#E7B800"),
          add = "jitter", shape = "group") + 
    labs(x=NULL) + theme(legend.position="none", panel.border=element_rect(color='black', fill=NA, size=0.7, linetype="solid")) + 
    stat_compare_means(comparisons = comparisons, method = 't.test', label = 'p.signif', size=4)

#畫所有cluster
p2 <- ggboxplot(df, x = "group", y = "percent", 
          color = "group", 
          facet.by = "cluster", 
          palette =c("#00AFBB", "#E7B800"),
          add = "jitter", shape = "group") + 
    labs(x=NULL) + theme(legend.position="none", panel.border=element_rect(color='black', fill=NA, size=0.7, linetype="solid")) + 
    stat_compare_means(comparisons = comparisons, method = 't.test', label = 'p.signif', size=4)
p1 + p2
image-20220927213718138.png
#以上圖形褒搔,很坐標(biāo)都是組別,ggpubr中的stat_compare_means可以直接畫圖喷面。但是如果橫坐標(biāo)是cluster呢站超?
stat.test <- df %>%
  group_by(cluster) %>%
  t_test(percent ~ group) %>%
  adjust_pvalue(method = "bonferroni") %>%
  add_significance("p")

stat.test <- stat.test %>%
  add_xy_position(x = "cluster", dodge = 0.8)
# A tibble: 3 × 16
#  cluster .y.     group1 group2    n1    n2 statistic    df      p  p.adj
#  <chr>   <chr>   <chr>  <chr>  <int> <int>     <dbl> <dbl>  <dbl>  <dbl>
#1 0       percent G1     G2         6     6     2.03   9.72 0.0706 0.212
#2 1       percent G1     G2         6     6    -2.52   9.02 0.0326 0.0978
#3 2       percent G1     G2         6     6     0.210  9.04 0.838  1
#  p.signif y.position groups           x  xmin  xmax
#  <chr>             <dbl> <named list> <dbl> <dbl> <dbl>
#1 ns                0.707 <chr [2]>        1   0.8   1.2
#2 ns                0.540 <chr [2]>        2   1.8   2.2
#3 ns                0.469 <chr [2]>        3   2.8   3.2

p3 <- ggboxplot(df, x = "cluster", y = "percent", 
          color = "group",  
          palette =c("#00AFBB", "#E7B800", "#FC4E07"),
          add = "jitter", shape = "group") + 
    labs(x=NULL) + theme(legend.position="none", panel.border=element_rect(color='black', fill=NA, size=0.7, linetype="solid"))
p4 <- p1 + stat_pvalue_manual(stat.test,  label = "p", tip.length = 0)
p5 <- p1 + stat_pvalue_manual(stat.test,  label = "p.signif", tip.length = 0)
p4 + p5
image-20220927222432462.png
//組間基因表達(dá)差異
  1. 生成測試數(shù)據(jù)
library(Seurat)
library(tidyverse)
library(rstatix)
library(ggpubr)
library(ggplot2)

#生成測試數(shù)據(jù),添加一個(gè)分組
pbmc <- pbmc_small
g3_cells <- sample(colnames(pbmc), 27)
pbmc[['groups']][g3_cells, ] <- "g3"
unique(pbmc$groups)
  1. 組間基因差異表達(dá)小提琴圖
#繪制組間所有細(xì)胞中基因表達(dá)差異
data <- pbmc
Idents(data) <- data$groups
levels(data) <- c('g1', 'g2', 'g3')
comparisons <- list(c("g2", "g3"))
p <- VlnPlot(data, features='LYZ', cols=c("#00AFBB", "#E7B800", "#FC4E07")) + 
    theme(legend.position="none", panel.border=element_rect(color='black', fill=NA, size=0.7, linetype="solid"), axis.text.x=element_text(angle=0, hjust=0.5)) + 
    labs(x=NULL)
p6 <- p + stat_compare_means(comparisons = comparisons, method = 't.test', label = 'p.signif', size=8) + lims(y=c(0, 9))
comparisons <- list(c("g2", "g3"), c('g1', 'g2'), c('g1', 'g3'))
p7 <- p + stat_compare_means(comparisons = comparisons, method = 't.test', label = 'p.signif', size=8) + lims(y=c(0, 11))
p6 + p7
png('test.png', height=200, width=360)
print(p)
dev.off()
image-20220928204123772.png
#如果橫坐標(biāo)是細(xì)胞類型呢乖酬?
data <- pbmc
data$groups <- factor(data$groups, levels=c('g1', 'g2', 'g3'))
comparisons <- list(c("g2", "g3"), c('g1', 'g3'))

p <- VlnPlot(data, features='LYZ', cols=c("#00AFBB", "#E7B800", "#FC4E07"), split.by='groups') + 
    theme(legend.position="none", panel.border=element_rect(color='black', fill=NA, size=0.7, linetype="solid"), axis.text.x=element_text(angle=0, hjust=0.5)) + 
    labs(x=NULL)

#執(zhí)行統(tǒng)計(jì)檢驗(yàn)
df <- p$data
head(df)
#                        LYZ ident split
#ATGCCAGAACGACT 4.968834e+00     0    g3
#CATGGCCTGTGCAT 4.776148e+00     0    g3
#GAACCTGATGAACC 4.753098e+00     0    g2
#TGACTGGATTCTCA 6.328626e-06     0    g2
#AGTCAGACTGCACA 4.042683e-06     0    g2
#TCTGATACACGTGT 4.968820e+00     0    g3

stat.test <- df %>%
  group_by(ident) %>%
  t_test(LYZ ~ split, comparisons = comparisons) %>%
  adjust_pvalue(method = "bonferroni") %>%
  add_significance("p")

stat.test <- stat.test %>%
  add_xy_position(x = "ident", dodge = 0.8)
print(stat.test, width=Inf)

p8 <- p + stat_pvalue_manual(stat.test, label = "p.signif", tip.length = 0, step.increase = 0)
p8
#Error in `check_aesthetics()`:
#! Aesthetics must be either length 1 or the same as the data (6): fill
#無解報(bào)錯(cuò),不知所以融求,試著用ggplot2重畫咬像,還是同樣報(bào)錯(cuò),ggpubr中的ggviolin就不會報(bào)錯(cuò)

p <- ggviolin(df, x = "ident", y = "LYZ", fill = "split",
    palette = c("#00AFBB", "#E7B800", "#FC4E07"), 
    trim = TRUE) + 
    labs(x=NULL, fill=NULL)
p8 <- p + stat_pvalue_manual(stat.test, label = "{p} {p.signif}", tip.length = 0, step.increase = 0)
p8
image-20220928221841351.png

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末生宛,一起剝皮案震驚了整個(gè)濱河市县昂,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌陷舅,老刑警劉巖倒彰,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異莱睁,居然都是意外死亡待讳,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進(jìn)店門仰剿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來创淡,“玉大人,你說我怎么就攤上這事南吮×詹剩” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長露乏。 經(jīng)常有香客問我碧浊,道長,這世上最難降的妖魔是什么瘟仿? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任箱锐,我火速辦了婚禮,結(jié)果婚禮上猾骡,老公的妹妹穿的比我還像新娘瑞躺。我一直安慰自己,他們只是感情好兴想,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布幢哨。 她就那樣靜靜地躺著,像睡著了一般嫂便。 火紅的嫁衣襯著肌膚如雪捞镰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天毙替,我揣著相機(jī)與錄音岸售,去河邊找鬼。 笑死厂画,一個(gè)胖子當(dāng)著我的面吹牛凸丸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播袱院,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼屎慢,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了忽洛?” 一聲冷哼從身側(cè)響起腻惠,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎欲虚,沒想到半個(gè)月后集灌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡复哆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年欣喧,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寂恬。...
    茶點(diǎn)故事閱讀 37,989評論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡续誉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出初肉,到底是詐尸還是另有隱情酷鸦,我是刑警寧澤,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站臼隔,受9級特大地震影響嘹裂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜摔握,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一寄狼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氨淌,春花似錦泊愧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至豪筝,卻和暖如春痰滋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背续崖。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工敲街, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人严望。 一個(gè)月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓多艇,卻偏偏與公主長得像,于是被迫代替她去往敵國和親像吻。 傳聞我的和親對象是個(gè)殘疾皇子墩蔓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,700評論 2 345

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