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_classifier
  • db: 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#