单细胞分析之细胞注释工具Garnett

本文摘自公众号 【生信诊断所】
原文链接:https://mp.weixin.qq.com/s/eV0m1H6a9gyf4FMZjqQnzA

摘要
Garnett是一个单细胞自动注释软件包,输入数据包括一个单细胞数据集和细胞类型定义文件。Garnett使用弹性网回归模型的机器学习算法训练出一个基于回归的分类器。随后训练好的分类器就可以用于更多数据集的细胞类型定义。 官网:https://cole-trapnell-lab.github.io/garnett/

a993753032104b1371104904b8159ad0.png

b84303b69baa1fbcc7067ca42e05959c.png

  1. 安装
    Garnett的运行依赖于monole,因此在安装garnett前需要先安装monole和其他依赖包。

我这里安装的是monocle3,所以以下记录都是根据monocle3的版本。

从Github上安装:必须要先安装monocle3和其他依赖包。

# First install Bioconductor and Monocle 3
if (!requireNamespace("BiocManager"))
    install.packages("BiocManager")

BiocManager::install()

# Next install a few more dependencies
BiocManager::install(c('BiocGenerics', 'DelayedArray', 
                       'DelayedMatrixStats',
                       'limma', 'S4Vectors', 'SingleCellExperiment',
                       'SummarizedExperiment'))

install.packages("devtools")
devtools::install_github('cole-trapnell-lab/monocle3')

安装Garnett

# Install a few Garnett dependencies:
BiocManager::install(c('org.Hs.eg.db', 'org.Mm.eg.db'))

# Install Garnett
devtools::install_github("cole-trapnell-lab/garnett",ref="monocle3")

导入Garnett

安装后,通过打开一个新的R会话并键入,测试Garnett是否安装正确

library(garnett)

2.使用

2.1,如果你有自己的marker,就可以训练你自己的classifier,

如果没有,可以下载官方的marker文件进行训练,或者直接下载已经训练好的classifier。

2.1a :训练自己的文件

先准备文件:文件格式要求如下:
>B cells
expressed: CD19, MS4A1

>T cells
expressed: CD3D

可以根据需要:

>B cells
expressed: CD19, MS4A1
expressed above: CD79A 10
references: https://www.abcam.com/primary-antibodies/b-cells-basic-immunophenotyping,
10.3109/07420528.2013.775654

>T cells
expressed: CD3D
sample: blood # A meta data specification

>Helper T cells
expressed: CD4
subtype of: T cells
references: https://www.ncbi.nlm.nih.gov/pubmed/?term=12000723

可以使用check_markers 和plot_markers去检查你自己的marker表达情况,根据情况再去调整marker文件,以达到最好的效果。

2.1b :下载已经训练好的classifier

下载地址:https://cole-trapnell-lab.github.io/garnett/classifiers/

e747d2d33f4254246a8fdee173af68a0.png

2.2 导入数据

这里使用Seurat前期处理后的

Garnett 是基于monocle3,所以它输入的数据格式是CellDataSet(CDS)。

这一部分的操作可以参考monocle3的使用。

需要先创建CDS 对象

library(monocle3)
library(garnett)
library(org.Hs.eg.db)

# 这里使用的是Seurat经过标准流程处理过的seurat对象
data = GetAssayData(sc_seurat_obj, assay="RNA", slot = 'counts')
cell_metadata <- [email protected]
gene_annotation <- data.frame(gene_short_name = rownames(data))
rownames(gene_annotation) <- rownames(data)

# 创建cds 对象
cds <- monocle3::new_cell_data_set(data, cell_metadata = cell_metadata,
                                    gene_metadata = gene_annotation)
cds <- monocle3::preprocess_cds(cds, num_dim = 10)

# 对marker file中的marker基因评分
# 将自己准备的marker文件放入这里:"pbmc_bad_markers.txt",
marker_check <- check_markers(pbmc_cds, "./my_marker_file.txt",
                              db=org.Hs.eg.db,
                              cds_gene_id_type = "SYMBOL",
                              marker_file_gene_id_type = "SYMBOL")
plot_markers(marker_check)
0032fecb2b1dc90358bddb565889c59a.png

评估结果会以红色字体提示哪些marker基因在数据库中找不到对应的Ensembl名称,以及哪些基因的特异性不高(标注“High overlap with XX cells”)。我们可以根据评估结果优化marker基因,或者添加其他信息来辅助区分细胞类型。

2.4 训练分类器

# 使用marker file和cds对象训练分类器 # 这一步比较慢可以使用cores
sc_seurat_obj_classifier <- train_cell_classifier(cds = cds,
                            marker_file = "./my_marker_file.txt",
                            db = org.Hs.eg.db,
                            cds_gene_id_type = "SYMBOL",
                            num_unknown = 10,
                            marker_file_gene_id_type = "SYMBOL",
                            min_observations = 50,
                            cores = 16,  # windows
                            # cores = 64, # linux
)
  1. 使用自己训练好的classifier预测自己的数据
pData(cds)$garnett_cluster <- pData(cds)$seurat_clusters
# 使用前面训练的pbmc_classifier来对自己的数据进行细胞分型
cds <- classify_cells(cds, sc_seurat_obj_classifier, 
                      db=org.Hs.eg.db, 
                      cluster_extend = TRUE, 
                      cds_gene_id_type = "SYMBOL")
## 将结果返回给seurat对象# 提取分类结果
cds.meta <- subset(pData(cds), 
  select = c("cell_type","cluster_ext_type")) %>% as.data.frame()
sc_seurat_obj <- AddMetaData(sc_seurat_obj, metadata = cds.meta)

# 查看结果
DimPlot(sc_seurat_obj, group.by = "cluster_ext_type", 
    label = T, label.size = 3) + ggtitle("Classified by Garnett")
90e0f0441fb5da39b896391426f35e64.png

上图是用自己的真实的数据测试的结果。

准确性暂不评价,等测试完SingleR,scCATCH之后再对比一下。

生信学习交流Q群:826162518

你可能感兴趣的:(单细胞分析之细胞注释工具Garnett)