singleCellNet(代码开源)|单细胞层面对细胞分类进行评估,褒贬不一,有胜于无

简介: `singleCellNet`是一款用于单细胞数据分析的R包,主要功能是进行细胞分类评估。它支持多物种和多分组分析,并提供了一个名为`CellNet`的类似工具的示例数据集。用户可以通过安装R包并下载测试数据来运行demo。在demo中,首先加载查询和测试数据,然后训练分类器,接着进行评估,包括查看准确率和召回率的曲线图、分类热图和比例堆积图等。此外,`singleCellNet`还支持跨物种评估,将人类基因映射到小鼠直系同源物进行分析。整体而言,`singleCellNet`是一个用于单细胞分类评估的综合工具,适用于相关领域的研究。

[toc]

1.前言

书接上回,上篇分享了作者做的基于bulkRNA的细胞分类评估工具CellNet及其更新版PACNet,现在分享的是单细胞数据的细胞分类评估工具singleCellNet,该工具与CellNet是同时期开发的。

singleCellNet:https://github.com/CahanLab/singleCellNet

2.singleCellNet简介

整个框架及思路与bulk的处理大同小异的,且特色还是多物种多分组,这里作者依旧提供了PBMC的测试数据:

下载R包:

install.packages("devtools")
devtools::install_github("pcahan1/singleCellNet")
library(singleCellNet)

下载数据:

download.file("https://s3.amazonaws.com/cnobjects/singleCellNet/examples/sampTab_Park_MouseKidney_062118.rda", "sampTab_Park_MouseKidney_062118.rda")
download.file("https://s3.amazonaws.com/cnobjects/singleCellNet/examples/expMatrix_Park_MouseKidney_Oct_12_2018.rda", "expMatrix_Park_MouseKidney_Oct_12_2018.rda")
download.file("https://s3.amazonaws.com/cnobjects/singleCellNet/examples/expMatrix_TM_Raw_Oct_12_2018.rda", "expMatrix_TM_Raw_Oct_12_2018.rda")
download.file("https://s3.amazonaws.com/cnobjects/singleCellNet/examples/sampTab_TM_053018.rda", "sampTab_TM_053018.rda")
## For cross-species analyis:
download.file("https://s3.amazonaws.com/cnobjects/singleCellNet/examples/human_mouse_genes_Jul_24_2018.rda", "human_mouse_genes_Jul_24_2018.rda")
download.file("https://s3.amazonaws.com/cnobjects/singleCellNet/examples/6k_beadpurfied_raw.rda", "6k_beadpurfied_raw.rda")
download.file("https://s3.amazonaws.com/cnobjects/singleCellNet/examples/stDat_beads_mar22.rda", "stDat_beads_mar22.rda")
## To demonstrate how to integrate loom files to SCN
download.file("https://s3.amazonaws.com/cnobjects/singleCellNet/examples/pbmc_6k.loom", "pbmc_6k.loom")

3.singleCellNet demo

加载查询数据:

stPark = utils_loadObject("sampTab_Park_MouseKidney_062118.rda")
expPark = utils_loadObject("expMatrix_Park_MouseKidney_Oct_12_2018.rda")
dim(expPark)
# [1] 16272 43745
genesPark = rownames(expPark)
rm(expPark)
gc()

加载测试数据:

expTMraw = utils_loadObject("expMatrix_TM_Raw_Oct_12_2018.rda")
dim(expTMraw)
# [1] 23433 24936
stTM = utils_loadObject("sampTab_TM_053018.rda")
dim(stTM)
# [1] 24936    17
stTM<-droplevels(stTM)

拆分训练集和测试集:

## 交集共有基因
commonGenes = intersect(rownames(expTMraw), genesPark)
length(commonGenes)
# [1] 13831
expTMraw = expTMraw[commonGenes,]
## 拆分数据
set.seed(100) #can be any random seed number
stList = splitCommon(sampTab=stTM, ncells=100, dLevel="newAnn")
stTrain = stList[[1]]
expTrain = expTMraw[,rownames(stTrain)]

训练分类器:

system.time(class_info<-scn_train(stTrain = stTrain, expTrain = expTrain, nTopGenes = 10, nRand = 70, nTrees = 1000, nTopGenePairs = 25, dLevel = "newAnn", colName_samp = "cell"))
#   user  system elapsed 
# 476.839  25.809 503.351

提取数据进行分类器评估:

#validate data
stTestList = splitCommon(sampTab=stList[[2]], ncells=100, dLevel="newAnn") #normalize validation data so that the assessment is as fair as possible
stTest = stTestList[[1]]
expTest = expTMraw[commonGenes,rownames(stTest)]
#predict
classRes_val_all = scn_predict(cnProc=class_info[['cnProc']], expDat=expTest, nrand = 50)

4.评估结果

看一下全部细胞准确度和召回率的结果:

tm_heldoutassessment = assess_comm(ct_scores = classRes_val_all, stTrain = stTrain, stQuery = stTest, dLevelSID = "cell", classTrain = "newAnn", classQuery = "newAnn", nRand = 50)
plot_PRs(tm_heldoutassessment)

分类热图评分:

#Create a name vector label used later in classification heatmap where the values are cell types/ clusters and names are the sample names
 
nrand = 50
sla = as.vector(stTest$newAnn)
names(sla) = as.vector(stTest$cell)
slaRand = rep("rand", nrand) 
names(slaRand) = paste("rand_", 1:nrand, sep='')
sla = append(sla, slaRand) #include in the random cells profile created
sc_hmClass(classMat = classRes_val_all,grps = sla, max=300, isBig=TRUE)

比例堆积图,这里如果分类效果好,细胞清晰的话理想状态是一行一个颜色,即每一组都是一种细胞类型

plot_attr(classRes=classRes_val_all, sampTab=stTest, nrand=nrand, dLevel="newAnn", sid="cell")

可视化训练数据的平均顶级对基因表达:

gpTab = compareGenePairs(query_exp = expTest, training_exp = expTrain, training_st = stTrain, classCol = "newAnn", sampleCol = "cell", RF_classifier = class_info$cnProc$classifier, numPairs = 20, trainingOnly= TRUE)
train = findAvgLabel(gpTab = gpTab, stTrain = stTrain, dLevel = "newAnn")
hm_gpa_sel(gpTab, genes = class_info$cnProc$xpairs, grps = train, maxPerGrp = 50)

查询数据及可视化:

expPark = utils_loadObject("expMatrix_Park_MouseKidney_Oct_12_2018.rda") 
  
nqRand = 50
system.time(crParkall<-scn_predict(class_info[['cnProc']], expPark, nrand=nqRand))
#   user  system elapsed 
# 89.633   5.010  95.041 
 
 sgrp = as.vector(stPark$description1)
names(sgrp) = as.vector(stPark$sample_name)
grpRand =rep("rand", nqRand)
names(grpRand) = paste("rand_", 1:nqRand, sep='')
sgrp = append(sgrp, grpRand)
# heatmap classification result
sc_hmClass(crParkall, sgrp, max=5000, isBig=TRUE, cCol=F, font=8)

分类注释分配:

# This classifies a cell with  the catgory with the highest classification score or higher than a classification score threshold of your choosing.
# The annotation result can be found in a column named category in the query sample table.
stPark <- get_cate(classRes = crParkall, sampTab = stPark, dLevel = "description1", sid = "sample_name", nrand = nqRand)
sc_violinClass(sampTab = stPark, classRes = crParkall, sid = "sample_name", dLevel = "description1", addRand = nqRand)

分类结果的天际线图,这个解释一下,可以看作是若干个细胞的密度图

library(viridis)
stKid2 = addRandToSampTab(crParkall, stPark, "description1", "sample_name")
skylineClass(crParkall, "T cell", stKid2, "description1",.25, "sample_name")

5.跨物种的评估

前面步骤是相似的,但是在加载直系同源物表时,将人类基因名称转换为小鼠直系同源物名称,并将分析限制为训练和查询数据之间共有的基因。

oTab = utils_loadObject("human_mouse_genes_Jul_24_2018.rda")
dim(oTab)
# [1] 16688     3
aa = csRenameOrth(expQuery, expTMraw, oTab)
expQueryOrth = aa[['expQuery']]
expTrainOrth = aa[['expTrain']]

各细胞类型横向的小提琴图:

sc_violinClass(sampTab = stQuery,classRes = crHS, sid = "sample_name", dLevel = "description", ncol = 12)

还有一个按分类划分的UMAP图:

system.time(umPrep_HS<-prep_umap_class(crHS, stQuery, nrand=nqRand, dLevel="description", sid="sample_name", topPC=5))
#  user  system elapsed 
# 25.703   0.740  26.450 
plot_umap(umPrep_HS)

6.小结

  • 该工具的适用情况没有想象中的这么广,虽说是多物种特点,但一般研究都是分开做的。细胞分大类的时候用不上,细分小类亚型的时候又用不了。属于是附加项吧,但是需要自己构建特征数据集,再去验证评估自己的分类效果,还是有一点绕的。
  • 因此小编认为还是bulk的适用更好一些,也不难怪作者对bulk的工具追更新了一版出来


目录
相关文章
|
XML 数据挖掘 Linux
服务器丨Linux安装测试单细胞分析软件copykat,遇到的常见报错与解决思路与方法
服务器丨Linux安装测试单细胞分析软件copykat,遇到的常见报错与解决思路与方法
|
9月前
|
机器学习/深度学习 人工智能 并行计算
"震撼!CLIP模型:OpenAI的跨模态奇迹,让图像与文字共舞,解锁AI理解新纪元!"
【10月更文挑战第14天】CLIP是由OpenAI在2021年推出的一种图像和文本联合表示学习模型,通过对比学习方法预训练,能有效理解图像与文本的关系。该模型由图像编码器和文本编码器组成,分别处理图像和文本数据,通过共享向量空间实现信息融合。CLIP利用大规模图像-文本对数据集进行训练,能够实现zero-shot图像分类、文本-图像检索等多种任务,展现出强大的跨模态理解能力。
812 2
|
机器学习/深度学习 数据处理 对象存储
阿里云机器学习平台PAI智能标注Quick Start
智能标注(iTAG)是一款智能化数据标注平台,支持图像、文本、视频、音频等多种数据类型的标注以及多模态的混合标注。智能标注(iTAG)提供了丰富的标注内容组件和题目组件,您可以直接使用平台预置的标注模板,也可以根据自己的场景自定义模板进行数据标注。本文以图片标注为例演示该功能的使用。
5621 1
阿里云机器学习平台PAI智能标注Quick Start
|
C++
如何使用MACS进行peak calling
MACS2是peak calling最常用的工具。 callpeak用法 这是MACS2的主要功能,因为MACS2的目的就是找peak,其他功能都是可有可无,唯独callpeak不可取代。
4128 0
|
4月前
|
人工智能 JSON 安全
全民AI时代,大模型客户端和服务端的实时通信到底用什么协议?
本文将分享 SSE 和 WebSocket 这两个AI大模型应用的标配网络通信协议,一起重新认识下这两位新时代里的老朋友。
176 0
|
数据采集 机器学习/深度学习 安全
疫苗效果分析:如何使用疫苗预防率等指标来评估疫苗的预防效果
疫苗效果分析:如何使用疫苗预防率等指标来评估疫苗的预防效果
2222 0
|
9月前
|
机器学习/深度学习 算法 Python
深度解析机器学习中过拟合与欠拟合现象:理解模型偏差背后的原因及其解决方案,附带Python示例代码助你轻松掌握平衡技巧
【10月更文挑战第10天】机器学习模型旨在从数据中学习规律并预测新数据。训练过程中常遇过拟合和欠拟合问题。过拟合指模型在训练集上表现优异但泛化能力差,欠拟合则指模型未能充分学习数据规律,两者均影响模型效果。解决方法包括正则化、增加训练数据和特征选择等。示例代码展示了如何使用Python和Scikit-learn进行线性回归建模,并观察不同情况下的表现。
1405 3
|
机器学习/深度学习 数据可视化 算法
umap:一个小巧而强大的Python库,探索高维数据的降维与可视化
umap:一个小巧而强大的Python库,探索高维数据的降维与可视化
581 0
|
10月前
|
Windows
解决“ACCESS_MASK不明确”错误
本文讨论了在编译过程中遇到的“ACCESS_MASK不明确”错误的原因和解决方法。错误通常由头文件冲突引起,解决方法包括去除自定义的命名空间、调整包含static函数的类头文件顺序,以及去除多余的#include指令。文章还提供了一些编程规范和参考链接。
344 1
|
数据采集 算法 数据可视化
审稿人:拜托,请把模型时间序列去趋势!!
**时间序列去趋势概述** 时间序列分析中,去趋势是关键步骤,旨在消除长期变化模式以便更好地分析数据。趋势可以上升、下降或平稳。常用去趋势方法包括移动平均、差分和多项式拟合。移动平均通过计算窗口内平均值平滑数据;差分通过相邻点差值去除趋势;多项式拟合通过拟合函数描述并减去趋势。去趋势后数据更平稳,便于预测和决策。实际应用如股票市场、气象和经济指标分析。在处理时需注意数据周期性、过度拟合和预处理。
230 5
审稿人:拜托,请把模型时间序列去趋势!!
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等