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


单细胞分析之细胞注释-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

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

推荐阅读更多精彩内容