scRNA分析|Marker gene 可视化 以及 细胞亚群注释--你是如何人工注释的?

简介: scRNA分析|Marker gene 可视化 以及 细胞亚群注释--你是如何人工注释的?


细胞类型注释是单细胞转录组中非常重要的环节,2021年 Nature protocols 中发表了一篇细胞注释的教程综述Tutorial: guidelines for annotating single-cell transcriptomic maps using automated and manual methods含有细胞注释常见的流程,以及每个步骤可用的软件以及一些资源和建议。

主要就是以下三个步骤(模块),自动注释,人工注释 以及 验证 。

人工注释需要依托于各种资源(loupe,数据库,文献等)获取各个cluster的基因的线索来完成注释,可能会存在一些主观因素。

每个人的人工注释方式可能会有区别,本文使用笔者采用较多的人工注释方式对 scRNA分析|多样本merge 和 harmony去批次 得到的数据进行注释 。


一 Marker gene 可视化

人工注释的方式有很多种 ,也许比较常见的就是 根据自己整理的 Marker gene(数据库,文献等),绘制一些常见的图形(vln plot,dot plot,feature plot,heatmap ),再结合各个cluster的差异基因 来进行注释。

根据自定义的Marker gene 绘制图形

library(Seurat) 
library(tidyverse)
#点图 可以接受list
Marker = list(Epi=c("EPCAM"),
Endo=c("PECAM1","PLVAP"),
                      Fibroblast=c("COL3A1","COL1A1","COL1A2"),
                      IM=c('PTPRC'),
                      B=c("CD79A","CD79B","CD19"),
                      T=c("CD3D","CD3E","CD8A","CD4"),
                      Myeloid=c("C1QA","C1QB","CD163","CD1C")
)
Marker2 = c("EPCAM",
               "PECAM1","PLVAP",
               "COL3A1","COL1A1","COL1A2",
               'PTPRC',
               "CD79A","CD79B","CD19",
               "CD3D","CD3E","CD8A","CD4",
               "C1QA","C1QB","CD163","CD1C"
)
#点图 可以接受list
DotPlot(sce2,features=Marker2,group.by='RNA_snn_res.0.5')
VlnPlot(sce2,features = Marker22,pt.size = 0,ncol = 5)
FeaturePlot(sce2, features = c("EPCAM","PECAM1","COL3A1",'PTPRC',
                               "CD79A","CD79B","CD3D","CD3E","C1QA","C1QB") )

然后根据Marker gene的表达量多少 以及在各个cluster中特异性表达的情况,完成各个cluster的注释。此处仅为示例,marker gene的选择 和注释结果可能不是很准确 。


注:实际的人工注释过程 可能很复杂,需要根据多结合一些信息进行注释。比如

(1)每个人都可以有 也会有 自己的marker gene 列表;

(2)Marker gene 可能没有表达 或者 低表达;

(3)Marker gene 可能并不是特异表达的,会在很多cluster中有表达;

(4)某个cluster可能表达很多种 celltype的 marker gene ;

(5)还需要结合cluster的差异基因确定。


二 亚群注释


根据以上的Marker gene的各种表型 以及 各个cluster的差异基因,知道了各个cluster对应的celltype ,那么怎么可视化 或者 加到metadata中呢?

2.1 向量注释 - Seurat官网

首先通过向量按顺序指定每一个clustyer的细胞类型,注意第一个celltype对应的是cluster0 。通过RenameIdents函数完成注释Seurat - Guided Clustering Tutorial • Seurat (satijalab.org)

new.cluster.ids <- c('Epi','Epi','Myeloid','Fibroblast','Epi','Epi','Fibroblast','Epi','T','Epi',
                     'Fibroblast','Epi','Endo','un','Epi','Epi','Fibroblast','un','Fibroblast')
names(new.cluster.ids) <- levels(sce2)
sce2 <- RenameIdents(sce2, new.cluster.ids)
#可以添加到metadata中 ,方便后续使用
sce2@meta.data$new.cluster.ids <- Idents(sce2)
DimPlot(sce2, reduction = 'umap', 
        label = TRUE, pt.size = 0.5) + NoLegend()


2.2 直接指定

与上面类似,但是分别指定各个cluster对应的celltype,更不容易出错,推荐!

Idents(sce2) <- "seurat_clusters"
sce2 <- RenameIdents(sce2,"0"="Epi",
                      "1"="Epi", 
                      "2"="Myeloid", 
                      "3"= "Fibroblast", 
                      "4"= "Epi", 
                      "5"= "Epi",
                      "6"= "Fibroblast", 
                      "7"= "Epi", 
                      "8"= "T",
                      "9"= "Epi" ,
                      "10"="Fibroblast",
                      "11"="Epi", 
                      "12"="Endo", 
                      "13"= "un", 
                      "14"= "Epi", 
                      "15"= "Epi",
                      "16"= "Fibroblast", 
                      "17"= "un", 
                      "18"= "Fibroblast"
                      )
sce2@meta.data$celltype <- Idents(sce2)
DimPlot(sce2, reduction = 'umap', 
        label = TRUE, pt.size = 0.5) + NoLegend()


2.3 metadata 中添加分群信息

metadata是含有很多重要信息的数据框,是后续可视化的数据来源 。使用数据框的处理方式,循环添加。注意的是cluster从0开始,需要减1。

sce2$Anno = "NA"
celltype = c('Epi','Epi','Myeloid','Fibroblast','Epi','Epi','Fibroblast','Epi','T','Epi',
         'Fibroblast','Epi','Endo','un','Epi','Epi','Fibroblast','un','Fibroblast')
#for循环添加
sub_length = length(unique(sce2$seurat_clusters)) - 1
for (i in 0:sub_length){ 
  sce2$Anno[sce2$seurat_clusters==i] = celltype[i+1]
  }
# 绘制注释umap图
DimPlot(sce2, reduction = 'umap', group.by='Anno',
label = TRUE, pt.size = 0.5) + NoLegend()
DimPlot(sce2, reduction = 'umap', 
label = TRUE, pt.size = 0.5) + NoLegend()

注:当前Idents为Anno时候,加不加 group.by='Anno' 结果一致。

最后看一下metadata中的信息 ,保存数据以待后续使用。

head(sce2@meta.data)

save(sce2,file =  "sce.anno.RData")


需要美化umap图的话,可以参考

相关文章
|
数据可视化 数据库
scRNA分析|使用CellChat完成细胞通讯分析-简单且可视化出众,代码自取
scRNA分析|使用CellChat完成细胞通讯分析-简单且可视化出众,代码自取
2343 0
|
人工智能 自然语言处理 算法
秒级开通,仅60元/月,即刻畅享私域知识库+LLM智能问答系统
chatGPT等LLM发展如火如荼,但实际使用中,时常出现胡说八道的问题。究其原因,是因为LLM存在知识茧房短板:模型一旦训练完成,对于数据样本外的知识知之甚少,在涉及企业私域知识等场景的问答效果不佳。由此,业界通常使用知识库+LLM方式来解决。部署LLM需要GPU,成本高昂。鉴于此,阿里云Lindorm多模数据库推出了智能问答体验版,秒级开通,仅60元/月。支持用户直接上传知识库文件,便捷构建具备私域知识+LLM的智能问答系统。欢迎加入钉钉群:35977898。参与功能试用和讨论。
983 3
秒级开通,仅60元/月,即刻畅享私域知识库+LLM智能问答系统
|
运维 分布式计算 监控
NameNode如何处理DataNode故障?
【8月更文挑战第31天】
447 1
|
前端开发
侧边导航栏(抽屉式设计)界面 (html + css)
写在前面 哈喽~大家好,这篇呢带来的是侧边导航栏(抽屉式设计),采用 (html + css) 来实现的,编辑器是 WebStorm 。接下来来看看效果吧。
1354 0
侧边导航栏(抽屉式设计)界面 (html + css)
|
机器学习/深度学习 人工智能 安全
AI战略丨阿里云百炼再升级:模型、工具、AI能力,快速接入、应有尽有
阿里云百炼持续加码模型服务,基于丰富的底层计算能力与通义系列模型的最佳实践,构建训练评测、标注、部署全生命周期模型工具,帮助企业、开发者在云上一站式调用、优化大模型,成为大模型时代的商业化基础设施。
|
存储 算法 程序员
【C/C++ 随机数】深入探索C++随机数生成,random 模块的应用
【C/C++ 随机数】深入探索C++随机数生成,random 模块的应用
759 0
|
机器学习/深度学习 人工智能 算法
【深度学习】因果推断与机器学习的高级实践 | 数学建模
【深度学习】因果推断与机器学习的高级实践 | 数学建模
|
机器学习/深度学习 弹性计算 数据可视化
玩ST、肿瘤研究的来学习一下!16分Nature子刊的单细胞空间转录组+机器学习
Nature Communications 发表了一项关于空间转录组和机器学习在肿瘤研究中的应用。研究聚焦于HPV阴性口腔鳞状细胞癌,通过整合单细胞和空间转录组分析,揭示了肿瘤核心(TC)和前沿边缘(LE)的独特转录特征。TC和LE的基因表达模式与多种癌症的预后相关,其中LE基因标志关联不良预后,而TC则与较好预后相关。利用机器学习,研究人员建立了预测模型,识别出跨癌症类型的保守TC和LE特征。此外,他们还分析了RNA剪接动态,发现了潜在的治疗脆弱性。这项工作为肿瘤生物学和靶向治疗提供了新见解,并为药物开发提供了依据。
273 0
|
人工智能 数据可视化
跟SCI学umap图| ggplot2 绘制umap图,坐标位置 ,颜色 ,大小还不是你说了算
跟SCI学umap图| ggplot2 绘制umap图,坐标位置 ,颜色 ,大小还不是你说了算
1563 1
|
数据可视化 API 云计算
【收藏级】88条关于OpenStack命令的手册(常看常新)(一)
【收藏级】88条关于OpenStack命令的手册(常看常新)
1192 0