Garnett—細胞類型注釋工具
- 2020 年 3 月 27 日
- 筆記
分享是一種態度
作者 | 周運來
男,
一個長大了才會遇到的帥哥,
穩健,瀟洒,大方,靠譜。
一段生信緣,一棵技能樹,
一枚大型測序工廠的螺絲釘,
一個隨機森林中提燈覓食的津門旅客。
前言

Garnett是一個從單細胞表達數據中實現自動細胞類型分類的軟體包。Garnett的工作方式是獲取單細胞數據和細胞類型定義(marker)文件,並訓練一個基於回歸的分類器。一旦被訓練成一個針對某一組織/樣本類型的一個分類器,它就可以應用於從相似組織中對未來的數據集進行分類。除了描述訓練和分類功能,這個網站的另一個目標是成為一個存儲以前訓練出來的分類器倉庫。
安裝Garnett
R> 3.5 依賴Monocle(3),注意:Garnett 不再支援monocle2官網這樣寫真的很困惑,因為後面的例子很多還是基於monocle2的。
1# First install Bioconductor and Monocle 2if (!requireNamespace("BiocManager")) 3 install.packages("BiocManager") 4 5BiocManager::install() 6BiocManager::install(c("monocle")) 7 8# Next install a few more dependencies 9BiocManager::install(c('DelayedArray', 'DelayedMatrixStats', 'org.Hs.eg.db', 'org.Mm.eg.db'))
1install.packages("devtools") 2devtools::install_github("cole-trapnell-lab/garnett") 3 4library(garnett)
Garnett工作流有兩個主要部分,每個部分的詳細描述如下:
- Train/obtain the classifier: 要麼下載現有的分類器,要麼訓練自己的分類器。為了訓練,Garnett解析一個標記文件,選擇一組訓練細胞,然後訓練一個多項分類器來區分細胞類型。
- Classify cells: 接下來,Garnett將分類器應用於一組細胞,以生成cell類型。Garnett還可以選擇將分類擴展到類似的細胞,以生成一組獨立的分群擴展類型。
使用預先訓練的分類器
我們已經為各種生物和組織生成了一系列預先訓練的分類器。如果您的數據類型存在一個預先訓練好的分類器,我們建議您嘗試一下。可用的分類器列表可以在這裡找到(https://cole-trapnell-lab.github.io/garnett/classifiers)。我們希望在生成新的分類器時不斷地更新和添加它們。我們也接受由其他人產生的分類器-請提交你所做的任何分類器並幫助建立社區!關於如何提交分類器的詳細資訊可以在這裡找到(https://cole-trapnell-lab.github.io/garnett/docs/#submitting-a-classifier)。
目前已有的分類器模型:


根據你的組織類型下載一個吧。
使用一個預先訓練好的分類器,首先下載分類器,然後將它載入到你的R會話使用:
1classifier <- readRDS("path/to/classifier.RDS")
因為Garnett 建立在 Monocle(http://cole-trapnell-lab.github.io/monocle-release) 上,所以Garnett 的數據保存在CellDataSet (CDS)類的對象中。這個類派生自Bioconductor ExpressionSet類,它為那些分析過生物微陣列實驗的人提供了一個常見的介面。Monocle提供了關於如何生成輸入cds的詳細文檔here(http://cole-trapnell-lab.github.io/monocle-release/docs/#the-celldataset-class)。
例如,Garnett包含一個來自PBMC 10x V1表達式數據的小數據集.
1# load in the data 2# NOTE: the 'system.file' file name is only necessary to read in 3# included package data 4# 5mat <- Matrix::readMM(system.file("extdata", "exprs_sparse.mtx", package = "garnett")) 6fdata <- read.table(system.file("extdata", "fdata.txt", package = "garnett")) 7pdata <- read.table(system.file("extdata", "pdata.txt", package = "garnett"), 8 sep="t") 9row.names(mat) <- row.names(fdata) 10colnames(mat) <- row.names(pdata) 11 12# create a new CDS object 13#pd <- new("AnnotatedDataFrame", data = pdata) 14#fd <- new("AnnotatedDataFrame", data = fdata) 15pbmc_cds <- new_cell_data_set(as(as.matrix(mat), 'sparseMatrix'), 16 cell_metadata = pdata, 17 gene_metadata = fdata) 18 19# generate size factors for normalization later 20#pbmc_cds <- estimateSizeFactors(pbmc_cds)#
有了分類器之後,就可以使用classify_cells函數對細胞進行分類了!關鍵的點是:
cds
: 是包含您的基因表達數據的CDS對象(見上面)。classifier
:這就是您在上面獲得的garnett_classifierdb: db
: 是用於轉換基因id的生物導體注釋db類包的必要參數。例如,對於人類使用org.Hs.eg.db。在Bioconductor網站上可以找到相關的包裝。使用library(db)載入您選擇的db。如果您的物種沒有帶注釋的db類包,請參見這裡。cluster_extend
:這告訴Garnett是否創建第二組任務,將分類擴展到相同群中的細胞。您可以在名為「garnett_cluster」的列的pData表中提供分群的id,也可以讓Garnett分群並填充。
警告:如果不提供「garnett_cluster」列,並將一個非常大的數據集的cluster_extend設置為TRUE,則此函數的運行速度將大大降低。為了方便起見,Garnett將它計算的集群保存為「garnett_cluster」,因此如果再次運行該函數,速度會更快。
cds_gene_id_type
這個告訴garnett你的cd對象中基因id的格式。它應該是列(db)中的一個值。默認是「ENSEMBL」。
classify_cells函數在pData表中返回一個(如果cluster_extend = TRUE,則返回兩個)包含Garnett分類的新列的輸入CDS對象。
1pbmc_classifier<-hsPBMC 2library(org.Hs.eg.db) 3pbmc_cds <- classify_cells(pbmc_cds, pbmc_classifier, 4 db = org.Hs.eg.db, 5 cluster_extend = TRUE, 6 cds_gene_id_type = "SYMBOL") 7 8head(pData(pbmc_cds)) 9 10DataFrame with 6 rows and 7 columns 11 tsne_1 tsne_2 12 <numeric> <numeric> 13AAGCACTGCACACA-1 3.8403149909359 12.0841914129204 14GGCTCACTGGTCTA-1 9.97096226657347 3.50539308651821 15AGCACTGATATCTC-1 3.45952940410281 4.93527280576176 16ACACGTGATATTCC-1 1.74394947394641 7.78267061846286 17ATATGCCTCTGCAA-1 5.78344829514223 8.55889827553495 18TGACGAACCTATTC-1 10.7928530485958 10.5852739146963 19 Size_Factor FACS_type garnett_cluster 20 <numeric> <character> <logical> 21AAGCACTGCACACA-1 0.559181445161514 B cells NA 22GGCTCACTGGTCTA-1 0.515934033527584 B cells NA 23AGCACTGATATCTC-1 0.698028398302026 B cells NA 24ACACGTGATATTCC-1 0.815631008885519 B cells NA 25ATATGCCTCTGCAA-1 1.11532798424345 B cells NA 26TGACGAACCTATTC-1 0.649469901028841 B cells NA 27 cell_type cluster_ext_type 28 <character> <character> 29AAGCACTGCACACA-1 B cells B cells 30GGCTCACTGGTCTA-1 B cells B cells 31AGCACTGATATCTC-1 B cells B cells 32ACACGTGATATTCC-1 B cells B cells 33ATATGCCTCTGCAA-1 B cells B cells 34TGACGAACCTATTC-1 Unknown Unknown 35 36table(pData(pbmc_cds)$cell_type) 37 B cells CD34+ CD4 T cells CD8 T cells 38 321 1 89 52 39Dendritic cells T cells Unknown 40 12 160 165 41 42table(pData(pbmc_cds)$cluster_ext_type) 43 44 B cells CD4 T cells Dendritic cells T cells 45 373 200 3 200 46 Unknown 47 24
1qplot(tsne_1, tsne_2, color = cell_type, data = as.data.frame(pData(pbmc_cds))) + theme_bw()

1qplot(tsne_1, tsne_2, color = cluster_ext_type, data = as.data.frame(pData(pbmc_cds)))+ theme_bw()

上面的第一個圖顯示了Garnett的cell類型分配,第二個圖顯示了Garnett的集群擴展類型分配。您可以看到,T細胞子集(CD4和CD8)在這些集群中並沒有很好地分離,因此在計算集群擴展類型時,Garnett將層次結構退回到更可靠的「T細胞」分配。 因為這個示例數據來自FACS排序的細胞樣本,所以我們可以將Garnett的分配與「真正的」細胞類型進行比較。

Troubleshooting
Common marker file errors

這裡,我們提供了一些常見的標記文件錯誤和Garnett分類的潛在結果的例子。對於所有面板,分類器在10x PBMC version 2 (V2)數據上進行訓練,然後使用分類器對上面所示的10x PBMC version 1 (V1)數據進行分類。第一個面板由基於facs的10x單元類型分配著色。其餘的面板由Garnett集群無關的細胞類型分配著色。
- A cell type is missing from the marker file。在PBMC標記文件中,不包括T細胞定義(面板2)。在原稿中討論的例外情況是,缺失的細胞類型(即表達NK標記FCGR3A的NKT細胞)中存在描述現有細胞類型的特徵。
- A cell type is defined but includes no good specific markers. 在PBMC標記文件中,只使用CD4而不是CD3來定義T細胞(面板3)。在這種情況下,我們發現Garnett只標記了T細胞的一個子集,而未標記其餘細胞。
- A gene that is not specific and widely expressed is used to define a cell type. 如果我們將MALAT1 (PBMC數據集中表達最多的轉錄本)添加到T細胞定義(面板4)中,在這種情況下,我們會發現每個細胞類型最終都在真細胞類型和T細胞之間混合分配。在另一種情況下,包含一個廣泛表達的非特異性基因可能會導致Garnett根本找不到足夠的訓練樣本,因為它會認為所有細胞都是模糊的(即它們會表達其他標記加上非特異性的)。
- A cell type definition includes genes that are specific to another cell type. 是這樣一個定義在哪裡真正的「錯誤」,即如果B細胞(CD79A)是最好的標記添加到T細胞的定義(面板5)。我們發現B細胞集群混合細胞類型任務的B細胞和T細胞,但是剩下的細胞類型的標籤主要不變。
My species doesn't have an AnnotationDbi-class database If your species doesn't have an available AnnotationDbi-class database, then Garnett won't be able to convert among gene ID types. However, you can still use Garnett for classification. Set db = 'none' and then be sure that you use the same gene ID type in your marker file as your CDS object. When db = 'none' Garnett ignores the arguments for gene ID type.
1citation("garnett") 2 3# Hannah A. Pliner, Jay Shendure & Cole Trapnell (2019). Supervised classification enables rapid annotation of cell atlases. Nature Methods 4# 5# A BibTeX entry for LaTeX users is 6# 7# @Article{, 8# title = {Supervised classification enables rapid annotation of cell atlases}, 9# journal = {Nature Methods}, 10# year = {2019}, 11# author = {Hannah A. Pliner and Jay Shendure and Cole Trapnell}, 12# } 13#