scRNA分析|自定义你的箱线图-统计检验,添加p值,分组比较p值

简介: scRNA分析|自定义你的箱线图-统计检验,添加p值,分组比较p值


在前面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的基础知识。

相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
相关文章
|
6月前
|
XML 存储 数据处理
python绘制热力图-数据处理-VOC数据类别标签分布及数量统计(附代码)
python绘制热力图-数据处理-VOC数据类别标签分布及数量统计(附代码)
|
6月前
|
机器学习/深度学习 运维 算法
R语言用ARIMA模型滑动时间窗口识别网络流量时间序列异常值
R语言用ARIMA模型滑动时间窗口识别网络流量时间序列异常值
|
6月前
R语言自定义两种统计量度:平均值和中位数,何时去使用?
R语言自定义两种统计量度:平均值和中位数,何时去使用?
|
6月前
|
数据可视化
R语言离群值处理分析
R语言离群值处理分析
|
6月前
GEE——土地利用分类种两个矢量集合中不同列进行相减的方式(利用join进行连接处理)
GEE——土地利用分类种两个矢量集合中不同列进行相减的方式(利用join进行连接处理)
74 2
|
6月前
|
Serverless
统计问题|绘制任意分布的 QQ 图
统计问题|绘制任意分布的 QQ 图
129 1
|
6月前
|
数据挖掘 编译器 定位技术
Python中whitebox实现忽略无效值NoData的长时间序列栅格遥感影像批量逐像元求取像素平均值
Python中whitebox实现忽略无效值NoData的长时间序列栅格遥感影像批量逐像元求取像素平均值
|
6月前
|
数据采集 安全 数据挖掘
【数据挖掘】属性及其类型和数据的统计描述四分位数等详解(图文解释 超详细)
【数据挖掘】属性及其类型和数据的统计描述四分位数等详解(图文解释 超详细)
413 0
跟着 Cell 学作图 | 分组蜂群图+均值线+差异分析(组间+组内)
跟着 Cell 学作图 | 分组蜂群图+均值线+差异分析(组间+组内)
135 0
|
数据挖掘
跟着 Cell 学作图 | 分组抖动散点图+差异分析
跟着 Cell 学作图 | 分组抖动散点图+差异分析
103 0