单细胞评分分析R包Ucell

企业   2024-12-03 17:06   浙江  

    目前用于单细胞基因集打分的软件比较多,包括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 上的实操情况:

Rlibrary(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)# UCellpbmc_filt1 <- AddModuleScore_UCell(pbmc_filt,features=gene_list)# AddModuleScorepbmc_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

本文系联川生物公众号原创文章,未经授权禁止转载,侵权必究!

扫描下方二维码





点分享


点点赞


点在看



联川生物
一个提供科研入门学习资源、经验的平台。 分享前沿测序技术资讯、实用生信绘图技巧及工具。 发布高质量的科研论文精度、精炼科研思路。 我们的目标是持续提供“干货”,滋润您的科研生涯。
 最新文章