在前面scRNA分析|使用AddModuleScore 和 AUcell进行基因集打分,可视化中,基因集评分使用小提琴图或者箱线图进行展示,那如何进行统计检验以及添加P值呢?本文主要解决以下几个问题
(1)指定统计检验方式(2)指定比较组并添加P值(3)任意比较(4)分组比较 (5)使用星号代替P值 等
一 载入R包 数据
使用本文开始的基因集评分的结果 和 ggpubr 包进行统计检验以及可视化的展示。
library(tidyverse)library(ggpubr)load( "sce.anno.RData")df <- sce2@meta.datahead(df)
二 ggpubr可视化
先绘制基本的箱线图
p1 <- ggboxplot(df, x="celltype", y="AUCell", width = 0.6, color = "black",#轮廓颜色 fill="celltype",#填充 palette = "npg", xlab = F, #不显示x轴的标签 bxp.errorbar=T,#显示误差条 bxp.errorbar.width=0.5, #误差条大小 size=1, #箱型图边线的粗细 outlier.shape=NA, #不显示outlier legend = "right") #图例放右边 + p1
展示为6种细胞类型的基因集评分的箱线图。
1,指定比较的组
ggpubr 中使用stat_compare_means函数进行统计学检验,需要是list形式。
假设感兴趣的是Epi,T 和 Myeloid 与 un之间 ,是否有统计学差异?
###指定组比较 my_comparisons <- list(c("Epi", "un"), c("T", "un"),c("Myeloid", "un")) p1+stat_compare_means(comparisons = my_comparisons, method = "wilcox.test")
根据method函数选择统计方法,多组时候可选anova ,两组时候可根据情况选择t.test 或者 wilcox.test .
2, 指定ref组
比如想把所有的细胞类型都和un进行比较 , 可以通过ref.group 进行设置
p1 + stat_compare_means(method = "wilcox.test", ref.group = "un")
3, 任意两两之间比较
有没有参数可以两两之间分别比较呢? 小编暂时没有发现,希望知道的不吝赐教 。
可以手动输入,但是当类别特别多的情况下耗时且易错。可以先通过combn函数生成两两之间的list ,然后套用stat_compare_means 函数即可。
#生成两两之间的list group=levels(factor(df$celltype)) comp=combn(group,2) comp # [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] #[1,] "Epi" "Epi" "Epi" "Epi" "Epi" "Myeloid" "Myeloid" "Myeloid" "Myeloid" "Fibroblast" "Fibroblast" #[2,] "Myeloid" "Fibroblast" "T" "Endo" "un" "Fibroblast" "T" "Endo" "un" "T" "Endo" # [,12] [,13] [,14] [,15] #[1,] "Fibroblast" "T" "T" "Endo" #[2,] "un" "Endo" "un" "un" my_comparisons=list() for(i in 1:ncol(comp)){ my_comparisons[[i]]<-comp[,i] } p1+stat_compare_means(comparisons = my_comparisons)
那如果想要 非un的细胞类型 两两之间比较呢?可以先去掉un再比较 df2 <- df %>% filter(celltype != "un") 。
4,多组之间比较
多组的话method使用anova
p1 +stat_compare_means(method = "anova")
5,按照group分组然后比较
按照group进行分组,比较原发和转移组之间在不同细胞类型之间是否有差异
p2 <- ggboxplot(df,x="celltype", y="AUCell",color = "group", palette = "npg", xlab = F, #不显示x轴的标签 bxp.errorbar=T,#显示误差条 bxp.errorbar.width=0.5, #误差条大小 size=1, #箱型图边线的粗细 #outlier.shape=NA, #不显示outlier legend = "right") p2 + stat_compare_means(aes(group = group))
三 可视化调整
除上述之外还有一些常见的小调整,比如去掉p值前面的统计方法, 将P值改为星号,调整坐标轴和标签等等。如果想画小提琴的话只需要把ggboxplot 改为 ggviolin 即可。
1,去掉p值前面的Wilcoxon
p1+stat_compare_means(comparisons = my_comparisons, aes(label = paste0("p =", ..p.format..)) )
2,将p值改为星号
p1+stat_compare_means(comparisons = my_comparisons, label = "p.signif")
3,设置字体大小,位置,颜色等
p1 + stat_compare_means( comparisons = my_comparisons, aes(label = paste0("p =", ..p.format..)), # 只显示p值大小,不呈现计算方法 color="grey50", # 字体的颜色 method = "wilcox.test", # size=5, # p值的文字的大小 #label.y = 0.7 # p值展示在什么地方 ) + labs(x="", y="AUCell_score") + #更改坐标轴 theme_classic() #更改主题
这里就可以使用一些ggplot2的参数进行自定义优化了。有需要的可以看一下ggplot2的基础知识。