单细胞空间转录组

单细胞分析之细胞注释-2:Garnett

2021-11-28  本文已影响0人  Hayley笔记

单细胞分析之细胞注释-1:Azimuth


摘要

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

Garnett的工作流程包括两部分:

使用

1. 安装

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

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

BiocManager::install()
BiocManager::install(c("monocle"))

# Next install a few more dependencies
BiocManager::install(c('DelayedArray', 'DelayedMatrixStats', 'org.Hs.eg.db', 'org.Mm.eg.db'))

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

2. 训练分类器

2.1 载入单细胞数据,处理为CDS格式

Garnett是基于Monocle3,所以它输入的数据格式是CellDataSet (CDS)。
这一部分的操作可以参考Monocle3

##加载R包
library(Seurat)
library(monocle3)
library(garnett)
library(SingleR)
library(org.Hs.eg.db)
library(tidyverse)
library(patchwork)
#载入演示数据集,依然是熟悉的pbmc3k
pbmc <- readRDS("pbmc.rds")

#创建CDS对象
data <- GetAssayData(pbmc, assay = 'RNA', slot = 'counts')
cell_metadata <- pbmc@meta.data
gene_annotation <- data.frame(gene_short_name = rownames(data))
rownames(gene_annotation) <- rownames(data)
cds <- new_cell_data_set(data,
                         cell_metadata = cell_metadata,
                         gene_metadata = gene_annotation)
#preprocess_cds函数相当于seurat中NormalizeData+ScaleData+RunPCA
cds <- preprocess_cds(cds, num_dim = 50)
2.2 marker文件准备

a. 直接下载
pre-trained分类器链接:https://cole-trapnell-lab.github.io/garnett/classifiers/,可以直接下载这些marker基因列表(第二列)使用。

#如下载上面hsPBMC_markers.txt文件
download.file(url="https://cole-trapnell-lab.github.io/garnett/marker_files/hsPBMC_markers.txt",
              destfile = "hsPBMC_markers.txt")

b. 当pre-trained分类器中的genelist不能满足需求时,也可以自己准备marker基因文件。

格式:需要包含至少如下两行
1. “>”开头的细胞类型行;
2. “expressed:” 开头行,后面跟定义细胞类型的marker基因。基因之间使用,分隔。

可选以下几行的附加信息:
1. “not expressed:” 开头行,后面跟定义细胞类型的负选marker基因。例如CD4+T细胞不能表达CD8,就可以写在这一行。
2. 可以使用“expressed above:”、“expressed below:”、“expressed between:”定义marker基因的表达值范围。适用于一些marker基因是根据high/low来区分细胞群的情况。比如注释Ly6ChighCCR2highCX3CR1low的单核细胞。
3. “subtype of:” 开头的字符定义细胞类型的父类,即此类细胞属于哪种细胞的亚型。
4. “references:” 开头的字符定义marker基因的选择依据。
5. #后可添加注释

2.3 marker基因评估
# 对marker file中marker基因评分
marker_check <- check_markers(cds, "hsPBMC_markers.txt",
                              db=org.Hs.eg.db,
                              cds_gene_id_type = "SYMBOL",
                              marker_file_gene_id_type = "SYMBOL")
plot_markers(marker_check)

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

2.4 训练分类器
# 使用marker file和cds对象训练分类器
# 这一步比较慢❗️
pbmc_classifier <- train_cell_classifier(cds = cds,
                                         marker_file = "hsPBMC_markers.txt",
                                         db=org.Hs.eg.db,
                                         cds_gene_id_type = "SYMBOL",
                                         num_unknown = 50,
                                         marker_file_gene_id_type = "SYMBOL")
saveRDS(pbmc_classifier, "pbmc_classifier.rds")

# 查看分类器最后选择的根节点基因,注意markerfile的基因都会在其中
feature_genes_root <- get_feature_genes(pbmc_classifier, node = "root",  
                                        db = org.Hs.eg.db, convert_ids = TRUE)
head(feature_genes_root)
#                 B cells Dendritic cells   Monocytes     NK cells    T cells     Unknown
# (Intercept) -0.58587469       2.5432315  0.39392524 -1.273097026  1.3280862 -2.40627129
# MS4A1        4.22744788      -1.7427981 -2.92309279 -0.481741931 -2.6971375  3.61732250
# CD3E         0.06193712      -0.4754740  0.32149610 -0.401413523  0.8284622 -0.33500786
# CD3D        -0.08966444      -0.9919422  0.08437099 -0.002444114  0.7886462  0.21103359
# CD3G         0.31612388      -0.6283401  0.23584751 -0.749523853  0.8628022 -0.03690959
# CD19         4.96368329      -0.5244165 -5.40305396 -0.120560423 -4.2104908  5.29483834
# 查看分类器中分支节点的分类基因
feature_genes_branch <- get_feature_genes(pbmc_classifier, node = "T cells",  
                                        db = org.Hs.eg.db, convert_ids = TRUE)
head(feature_genes_branch)  
#              CD4 T cells   CD8 T cells      Unknown
# (Intercept) -2.288375871 -3.213676e-01  2.609743456
# IL7R         3.927857793 -4.670505e+00  0.742647421
# PPP6C       -0.000225455  1.163007e-06  0.000224292
# IL2RA        4.370269532 -2.698651e+00 -1.671618461
# CD4          3.844007505 -3.589102e+00 -0.254905668
# CD8A        -4.915576863  5.761798e+00 -0.846220932

3. 使用训练好的分类器预测自己的数据

pData(cds)$garnett_cluster <- pData(cds)$seurat_clusters
# 使用前面训练的pbmc_classifier来对自己的数据进行细胞分型
cds <- classify_cells(cds, pbmc_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()
pbmc <- AddMetaData(pbmc, metadata = cds.meta)
#查看结果
p <- DimPlot(pbmc, group.by = "cluster_ext_type", label = T, 
              label.size = 3,repel = T) +  ggtitle("Classified by Garnett")
ggsave("Garnett.pdf", p, width = 8, height = 6)

也可以下载已有的分类器来预测

## 下载已经训练好的分类器
hsPBMC <- readRDS("hsPBMC.rds")
## 使用下载的的hsPBMC来对自己的数据进行细胞分型
pData(cds)$garnett_cluster <- pData(cds)$seurat_clusters
cds <- classify_cells(cds, hsPBMC, db = org.Hs.eg.db, cluster_extend = TRUE, cds_gene_id_type = "SYMBOL")
cds.meta <- subset(pData(cds), select = c("cell_type", "cluster_ext_type")) %>% as.data.frame()
pbmc <- AddMetaData(pbmc, metadata = cds.meta)

参考:
https://cole-trapnell-lab.github.io/garnett/docs_m3/
https://mp.weixin.qq.com/s/tYNW86UsjM9quytLTxbmMA

上一篇下一篇

猜你喜欢

热点阅读