scPred:单细胞数据集有监督细胞聚类注释

最近在读一篇文献的时候,了解到一个R包-scPred。有什么用呢,且听我娓娓道来。首先平时我们拿到单细胞数据集,经过seurat标准流程,降维聚类,然后根据已知的marker基因对细胞进行注释,这个过程的降维分群是一个无监督的过程。而scPred结合机器学习算法,提供的是一种有监督的细胞注释分群。有什么用呢?假设这样一个场景,我们预先对某一个数据进行了完美的分群注释,尤其是细胞亚群,当我们要对另外一个数据集进行注释的时候,就可以将之前注释好的数据当作training数据,当前数据作为test数据,根据之前的注释对当前数据集进行分类。还有,做类器官发育的时候,需要要发育阶段的细胞进行分群注释,我们这个时候可以参考相同物种的正常发育顺序的单细胞数据集,对自己的数据进行注释。 接下来我们就看看这个包的具体操作。当然了,这类的有监督聚类的R包不止这一个,这里我们只是提供一种思路和演示。 R包链接:https://github.com/powellgenomicslab/scPred/文章链接:https://genomebiology.biomedcentral.com/articles/10.1186/s13059-019-1862-5本文参考链接:https://powellgenomicslab.github.io/scPred/articles/introduction.html这里我们没有使用示例数据,我们用别的数据进行验证。traning数据集是一个小鼠PMN分好亚群的数据。test数据集是我们自己的小鼠PMN数据。我们利用前面的数据对我们的数据集进行注释。 首先安装R包并对数据进行训练:


library(harmony)
devtools::install_github("powellgenomicslab/scPred")
library(scPred)
library("Seurat")
library("magrittr")
setwd('D:/KS项目/公众号文章/scPred单细胞有监督注释')
#======================================================================================
#===============================1、Reference data training================================
#======================================================================================
reference <- getFeatureSpace(mouse_data, "celltype")
reference <- trainModel(reference)
get_probabilities(reference) %>% head()
# PMN(3)       PMN(2)       PMN(1)       PMN(0)
# Female_NTPH_GCTTTCGGTTCTTCAT-1 4.387384e-01 1.963304e-05 1.408294e-05 0.0001599593
# Female_NTPH_GATGGAGGTCGCTTGG-1 4.119691e-05 8.232246e-01 1.202540e-01 0.0059803552
# Female_NTPH_AGTCTCCAGTCTTCCC-1 1.260117e-04 7.995576e-01 1.583251e-01 0.0002833583
# Female_NTPH_GGAGCAACAGGTCTCG-1 4.984621e-04 7.252164e-01 1.752820e-02 0.0020682616
# Female_NTPH_ATGGATCCAGACACCC-1 5.982061e-04 1.386497e-02 8.812309e-01 0.0023515900
# Female_NTPH_GGGAGTACAGATACCT-1 6.537663e-05 1.787674e-02 9.872667e-01 0.0052899333
# PMN(5)       PMN(6)       PMN(4)       PMN(7)
# Female_NTPH_GCTTTCGGTTCTTCAT-1 0.9226594823 8.498277e-06 5.534320e-07 0.0006438826
# Female_NTPH_GATGGAGGTCGCTTGG-1 0.0002222603 1.723565e-04 6.440098e-06 0.0002707403
# Female_NTPH_AGTCTCCAGTCTTCCC-1 0.0006326606 1.319499e-04 2.916959e-05 0.0003673744
# Female_NTPH_GGAGCAACAGGTCTCG-1 0.1611489503 1.672275e-03 2.831901e-04 0.0006098397
# Female_NTPH_ATGGATCCAGACACCC-1 0.0029780794 1.798155e-04 4.437796e-03 0.0011741416
# Female_NTPH_GGGAGTACAGATACCT-1 0.0074298716 1.011856e-04 1.435643e-05 0.0003051911
get_scpred(reference)
#   |Cell type |    n| Features|Method    |   ROC|  Sens|  Spec|
#   |:---------|----:|--------:|:---------|-----:|-----:|-----:|
#   |PMN(0)    | 1360|       50|svmRadial | 0.998| 0.960| 0.989|
#   |PMN(1)    | 1295|       50|svmRadial | 0.985| 0.867| 0.970|
#   |PMN(2)    | 1149|       50|svmRadial | 0.985| 0.862| 0.971|
#   |PMN(3)    |  745|       50|svmRadial | 0.999| 0.949| 0.995|
#   |PMN(4)    |  594|       50|svmRadial | 0.996| 0.911| 0.989|
#   |PMN(5)    |  551|       50|svmRadial | 0.993| 0.869| 0.991|
#   |PMN(6)    |  267|       50|svmRadial | 0.999| 0.929| 0.998|
#   |PMN(7)    |   64|       50|svmRadial | 1.000| 0.888| 1.000|
plot_probabilities(reference)

image.png

可以看到训练数据的sens还是可以的。接下来对一个新的数据进行正常的降维分析,然后利用之前的数据集对其注释。

#======================================================================================
#===============================2、Test single cell test================================
#======================================================================================
#做一下标准的降维
BM2 <- read.table('BM2.txt',header = T,row.names = 1)
BM2 <- CreateSeuratObject(counts = BM2, project = "BM2",min.cells = 3, min.features = 200)
BM2[["percent.mt"]] <- PercentageFeatureSet(BM2, pattern = "^mt-")

VlnPlot(BM2, features = c("nFeature_RNA", "nCount_RNA", "percent.mt"), pt.size = 0)
#QC一下
BM2 <- subset(BM2, subset = percent.mt < 5)
BM2 <- NormalizeData(BM2)
BM2 <- FindVariableFeatures(BM2, nfeatures = 4000)
Seurat::ElbowPlot(BM2)
BM2 <- ScaleData(BM2, verbose = FALSE)
BM2 <- RunPCA(BM2, npcs = 50, verbose = FALSE)
BM2 <- FindNeighbors(BM2, reduction = "pca", dims = 1:15)
BM2 <- FindClusters(BM2, resolution = 1)
BM2 <- RunUMAP(BM2, reduction = "pca", dims = 1:15)
DimPlot(BM2,label = T)


BM2 <- scPredict(BM2, reference)
DimPlot(BM2, group.by = "scpred_prediction", reduction = "scpred")
BM2 <- RunUMAP(BM2, reduction = "scpred", dims = 1:15)
DimPlot(BM2, group.by = "scpred_prediction", label = TRUE, repel = TRUE)
image.png

可以看到有些细胞是没有被识别的,而且PMN3,5,6都没有。我们将未鉴定的细胞去除看看。


PMN <- subset(BM2, scpred_prediction=='unassigned', invert=T)
DimPlot(PMN, group.by = "scpred_prediction", label = TRUE, repel = TRUE)
DimPlot(PMN, label = TRUE, repel = TRUE)
image.png

鉴定到的细胞聚类还是可以的。这里有些细胞没有鉴定到可能的原因是两个数据集的来源不同。不过还是有些细胞群鉴定到了,效果可以的。这里也是提供一种思路,希望对你的研究有帮助。觉得分享有用的点个赞再走呗。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容