目前用于单细胞基因集打分的软件比较多,包括AddModuleScore、AUCell、gsva、ssgsea、zscore、plage、JAS_likelihood、JAS_oddsratio、singscore、VISION、UCell等等,在联川星云平台中的打分软件使用的是AddModuleScore,是Seurat自带的打分函数。
今天来分享一个新发现的新的打分R包Ucell,Ucell是基于Mann-Whitney U统计的单细胞评分R包,使用起来稳定性较好,且与其他的方式相比较,Ucell计算所需的时间和耗费的内存更小。即使在计算能力有限的机器上也可以在几分钟内处理大型数据集。UCell可以应用于任何单细胞数据矩阵,可直接与Seurat对象交互。Ucell在高分SCI文章的应用还是挺多的,我们在自己的分析中也可以视情况选择使用。
那么我们先来看看Ucell和其他打分软件对比有什么优势:
第一,UCell是一款基于单细胞开发的软件,从工具本身设计时候的数据接口就可以看到,它是一个比较对接Seurat接口的软件;
第二,运行速度,是真的很快,他有切分进行并行计算的参数,加速了运行;
第三,可以看到随机的seed和纳入细胞数都没有对他打分有偏倚的影响,这是因为他每个细胞都是相对独立地计算
在了解了Ucell和其他打分软件相比的特点后,我们来看一下Ucell的核心函数中的每个参数的作用及计算方法:
这个工具主要的函数以ScoreSignatures_UCell为主,参数如下:
obj:Seurat对象;
features: 基因集合的list,如果基因名称后面带+或-,是可以区分方向的;
maxRank:每个细胞最大rank阈值,默认是1500;
chunk.size: 设置每组多少个细胞切分矩阵并行运算,提升运算速度,默认是1000;
ncores:并行计算所用cpu线程数;
assay:用的Seurat对象存储表达矩阵的assay名称,默认NULL是Seurat当前默认assay;
slot:用的Seurat对象存储表达矩阵的类型,默认是data
Ucell的计算方法如下:
第一步,先单独将每个细胞的基因按表达量进行排序;
第二步,UCell使用Mann-Whitney U统计量计算单个细胞的基因集富集评分,如下公式计算;
其中n是基因集合中基因的个数,rij其实就是这个基因在这个细胞的排序的位置。然后基于这个公式计算这个基因集合在该细胞的U值。
第三步,由于单细胞数据存在drop-out情况,所以排序的时候存在很多基因都是0值无法排序的情况,导致很多排序尾部都是很长的冗余,如果基因集合中的一些基因在某些细胞中为0了,那么会在这个尾部内,那么他会强制根据下面这个公式折算U值,rmax是一个阈值,默认是1500,当rgc>rmax的时候,这些基因集合落在尾部的,都设置为rmax=rgc-1来矫正。
在了解了Ucell 的核心函数后,我们来看看 Ucell 在 R 上的实操情况:
R
library(UCell)
library(ggplot2)
library(Seurat)
library(reshape2)
load("Plot.rData")
gene <- read.table("geneList.txt",header=T,sep="\t",comment.char = "",check.names = F)
# 需要将基因集整理成列表格式
gene_list <- as.list(gene)
# UCell
pbmc_filt1 <- AddModuleScore_UCell(pbmc_filt,features=gene_list)
# AddModuleScore
pbmc_filt1 <- AddModuleScore(pbmc_filt1,features=gene_list,name = "AddModuleScore")
data <- as.data.frame(pbmc_filt1@meta.data)
# 提前需要的几列信息
data <- data[,c(7,9,10)]
data <- melt(data)
plot_list <- c()
plot_list[[1]] <- ggplot(data, aes(x=reorder(seurat_clusters,GeneList_UCell,FUN=median),y=GeneList_UCell,fill=seurat_clusters)) +
theme_bw()+
theme(panel.grid = element_blank(),
axis.text=element_text(size=10,angle=0,color="black"),
axis.title = element_text(size=12,angle=0,color="black",face="bold"),
legend.position = "none")+
geom_boxplot(position=position_dodge(0.9),
outlier.colour = NA,outlier.fill=NA,outlier.shape=NA)
plot_list[[2]] <- ggplot(data, aes(x=reorder(seurat_clusters,AddModuleScore1,FUN=median),y=AddModuleScore1,fill=seurat_clusters)) +
theme_bw()+
theme(panel.grid = element_blank(),
axis.text=element_text(size=10,angle=0,color="black"),
axis.title = element_text(size=12,angle=0,color="black",face="bold"),
legend.position = "none")+
geom_boxplot(position=position_dodge(0.9),
outlier.colour = NA,outlier.fill=NA,outlier.shape=NA)
p <- patchwork::wrap_plots(plot_list,ncol=1)
ggsave(p,file="test.png",height=7,width=10)
本次测试用的是甲状腺乳头状癌的数据和基因集,本次测试只比较了UCell和AddModuleScore在实际应用上的差别。从结果上看,大致可以根据得分将cluster以红线为界分成两部分,这两部分中包含的cluster一致,但是排序上有显著差异:
结合copyKAT发现,AddModuleScore会更匹配一些,也就是说在生物学意义上更好解释一些。
总结Ucell和AddmoduleScore的表现:
• UCell在运行速度上不如AddModuleScore,使用时可以明显感受到UCell会慢一些
• 由于UCell的算法设计,它最后得到的分值会在0~1之间,更符合常识,但不太适合细胞周期打分
• 虽然在性能方面经过前人测评发现UCell各方面综合起来比较优异,但是缺少实战结果,本次测试只用了甲状腺乳头状癌的数据和基因集,有待实战结果完善
• 虽然根据目前测试结果,AddModuleScore的效果更优一点,但是AddModuleScore也有非常明显的短板。由于涉及随机取样,AddModuleScore的打分结果会受到随机数和纳入细胞数的影响,导致打分结果的不同,这在一定程度上降低了其结果的稳定性和可靠性。
单细胞细胞通讯分析之CellChat v2
空间转录组细胞注释软件之Cell2location |生信开发实战
备战国自然2025:为什么做了Visium/CytAssist,还要做单细胞测序?
单细胞代谢分析之-scFEA
本文系联川生物公众号原创文章,未经授权禁止转载,侵权必究! 扫描下方二维码 点分享
点点赞
点在看