詳細(xì)介紹新版SingleR進(jìn)行單細(xì)胞自動(dòng)化鑒定

作者:堯小飛
審稿:童蒙
編輯:amethyst


引言

隨著10xGenomics單細(xì)胞轉(zhuǎn)錄組技術(shù)的普及,現(xiàn)在的單細(xì)胞轉(zhuǎn)錄組分析越來越普及,得到的單細(xì)胞數(shù)據(jù)越來越多。然而單細(xì)胞轉(zhuǎn)錄組技術(shù)發(fā)展年限相對(duì)而言較短,在分析上還存在著一定的瓶頸,其中比較頭疼的一個(gè)瓶頸就是單細(xì)胞亞群的鑒定。比如說:得到這么多細(xì)胞,我不知道細(xì)胞是什么細(xì)胞,這怎么分析,這是單細(xì)胞轉(zhuǎn)錄組分析中繞不過去的一點(diǎn)。

一般來說,需要老師根據(jù)自己專業(yè)背景知識(shí),進(jìn)行判斷單細(xì)胞亞群是什么類型細(xì)胞,但不是每個(gè)老師的專業(yè)背景都這么強(qiáng)。

這個(gè)問題并不是我們才有的問題,全世界都有這個(gè)問題。幸好Dvir等人在2019年1月14日發(fā)表在Nature Immunology (https://www.x-mol.com/paper/journal/104)( IF 23.530 )上的文章解決了這個(gè)問題,作者開發(fā)了一個(gè)SingleR (http://www.bioconductor.org/packages/release/bioc/vignettes/SingleR/inst/doc/SingleR.html)工具,可以自動(dòng)鑒定細(xì)胞亞群的類型,這個(gè)工具支持人和小鼠兩個(gè)物種,其實(shí)工具的本質(zhì)上計(jì)算每個(gè)單細(xì)胞的表達(dá)量數(shù)據(jù)與純的bulk RNA數(shù)據(jù)相關(guān)性,相關(guān)性越大,說明是此類細(xì)胞,當(dāng)然作者對(duì)數(shù)據(jù)有其他的處理過程。SingleR也有在線版本的。主要功能有如下:

for each test cell:

  1. We compute the Spearman correlation between its expression profile and that of each reference sample. This is done across the union of marker genes identified between all pairs of labels.
  2. We define the per-label score as a fixed quantile (by default, 0.8) of the distribution of correlations.
  3. We repeat this for all labels and we take the label with the highest score as the annotation for this cell.
  4. We optionally perform a fine-tuning step:
  • The reference dataset is subsetted to only include labels with scores close to the maximum.
  • Scores are recomputed using only marker genes for the subset of labels.
  • This is iterated until one label remains.

下面我們來詳細(xì)看看如何使用這個(gè)軟件。

SingleR的安裝

  • 使用bioconductor安裝
    SingleR的安裝有多種方式,這是一個(gè)R包,并且發(fā)布在biocondutor,當(dāng)然可以直接用biocondutor方式來安裝:
if (!requireNamespace("BiocManager", quietly = TRUE))
 install.packages("BiocManager")
BiocManager::install("SingleR")
  • 使用github來安裝
    這個(gè)R包已經(jīng)放在GitHub上面,可以直接使用GitHub安裝R包的方式來安裝:
devtools::install_github('dviraran/SingleR')

不過在查找問題的時(shí)候,發(fā)現(xiàn)這個(gè)包已經(jīng)放在別的倉(cāng)庫(kù)了,因此可以通過別的倉(cāng)庫(kù)來安裝:

devtools::install_github('LTLA/SingleR')
  • 注意事項(xiàng)
    新的R包,需要在 R (version "3.6")版本以上的才能安裝,其實(shí)一直很納悶,為什么R一升級(jí),就不能兼容下面的,還得重新安裝R,這是R的一個(gè)大弊病。

SingleR升級(jí)

一般來說,如果工具能夠一直維護(hù)和升級(jí),當(dāng)然是好事,singleR第一版出來以后,解決了沒有工具自動(dòng)進(jìn)行細(xì)胞亞群鑒定的問題,但是存在一個(gè)較大的問題,就是這個(gè)運(yùn)行速度特別的慢,細(xì)胞類型少,自己定制參考數(shù)據(jù)集較困難,因此亟需改進(jìn)。作者在1月份發(fā)表文章,5月23日就做了一個(gè)較大的升級(jí)。這次的升級(jí)與之前的分析很多不兼容,具體升級(jí)的功能有:

1.官方提供了部分?jǐn)?shù)據(jù)集,細(xì)胞類型增多,免疫細(xì)胞分的更細(xì)了,更符合分析預(yù)期;
2.提高了運(yùn)行速度;
3.修改了部分函數(shù),舊版本的函數(shù)與新版本的函數(shù)可能不兼容;
4.提供了參考數(shù)據(jù)集的接口,雖然之前也提供了,但是現(xiàn)在的接口使用更便。

SingleR參考數(shù)據(jù)集

新版的SingleR一大優(yōu)點(diǎn)就是提供了較多的數(shù)據(jù)集,不是之前的所有數(shù)據(jù)集整合在里面,我們看不見摸不著,而且細(xì)胞類型較少,新的數(shù)據(jù)集有7種,主要是人和小鼠物種,特別的兩個(gè)物種的免疫基因,可以把細(xì)胞分成很細(xì)的T細(xì)胞。具體如下:

每個(gè)數(shù)據(jù)集類型較多,就不一一列舉了。以下主要列舉兩個(gè)免疫基因數(shù)據(jù)集,主要是在單細(xì)胞轉(zhuǎn)錄組研究中,免疫細(xì)胞的研究較多,而且免疫細(xì)胞亞群鑒定相對(duì)困難,下面的數(shù)據(jù)集是非常好的參考數(shù)據(jù)集。

01 DatabaseImmuneCellExpressionData Labels

02 ImmGenData Labels

當(dāng)然下面的表格不全,只是列舉了少部分,從這些細(xì)胞類型來看,很多都能滿足我們常見的免疫細(xì)胞鑒定。

03 其他數(shù)據(jù)集的細(xì)胞類型

當(dāng)然下面的表格不全,只是列舉了少部分,從這些細(xì)胞類型來看,很多都能滿足我們常見的免疫細(xì)胞鑒定,其他數(shù)據(jù)集可以看SingleR的網(wǎng)頁(yè),點(diǎn)擊如下的紅色箭頭指定的部分就可以看到所有細(xì)胞類型。

SingleR測(cè)試

報(bào)錯(cuò)的解決

在測(cè)試SingleR的時(shí)候,首先就是想把參考數(shù)據(jù)集下載下來,以后做分析的時(shí)候,可以直接用,不用聯(lián)網(wǎng)分析。結(jié)果下載的時(shí)候,有如下所示報(bào)錯(cuò),說明格式有問題。

然后發(fā)現(xiàn)數(shù)據(jù)下載是通過ExperimentHub下載,其下載源代碼如下:

 1.create_se <- function(dataset, hub = ExperimentHub(), assays="logcounts",
 2    rm.NA = c("rows","cols","both","none"), has.rowdata=FALSE, has.coldata=TRUE) 
 3{
 4    rm.NA <- match.arg(rm.NA)
 5    host <- file.path("SingleR", dataset)
 6    # hub$rdatapath[grep('SingleR',hub$rdatapath)]
 7    ## extract normalized values --------
 8    all.assays <- list()
 9    for (a in assays) {
10        nrmcnts <- hub[hub$rdatapath==file.path(host, paste0(a, ".rds"))][[1]]
11        all.assays[[a]] <- .rm_NAs(nrmcnts, rm.NA)
12    }
13
14    ## get metadata ----------------------
15    args <- list()
16    if (has.coldata) {
17        args$colData <- hub[hub$rdatapath==file.path(host, "coldata.rds")][[1]]
18    }
19    if (has.rowdata) {
20        args$rowData <- hub[hub$rdatapath==file.path(host, "rowdata.rds")][[1]]
21    }
22
23    ## make the final SE object ----------
24    do.call(SummarizedExperiment, c(list(assays=all.assays), args))
25}
26##下載函數(shù)
27ImmGenData <- function(ensembl=FALSE) {
28    version <- "1.0.0"
29    se <- .create_se(file.path("immgen", version), 
30        assays="logcounts", rm.NA = "none",
31        has.rowdata = FALSE, has.coldata = TRUE)
32
33    if (ensembl) {
34        se <- .convert_to_ensembl(se, "Mm")
35    }
36    se
37}
38 hub$rdatapath[grep('SingleR',hub$rdatapath)]
39> hub$rdatapath[grep('SingleR',hub$rdatapath)]
40 #[1] "SingleR/blueprint_encode/1.0.0/logcounts.rds"
41 #[2] "SingleR/blueprint_encode/1.0.0/coldata.rds"
42 #[3] "SingleR/hpca/1.0.0/logcounts.rds"
43 #[4] "SingleR/hpca/1.0.0/coldata.rds"
44 #[5] "SingleR/immgen/1.0.0/logcounts.rds"
45 #[6] "SingleR/immgen/1.0.0/coldata.rds"
46 #[7] "SingleR/mouse.rnaseq/1.0.0/logcounts.rds"
47 #[8] "SingleR/mouse.rnaseq/1.0.0/coldata.rds"
48# [9] "SingleR/dice/1.0.0/logcounts.rds"
49#[10] "SingleR/dice/1.0.0/coldata.rds"
50#[11] "SingleR/dmap/1.0.0/logcounts.rds"
51#[12] "SingleR/dmap/1.0.0/coldata.rds"
52#[13] "SingleR/monaco_immune/1.0.0/logcounts.rds"
53#[14] "SingleR/monaco_immune/1.0.0/coldata.rds"

由于運(yùn)行一直有報(bào)錯(cuò),然后就一步一步地運(yùn)行,在如下代碼的時(shí)候報(bào)錯(cuò):

1args$colData <- hub[hub$rdatapath==file.path(host, "coldata.rds")][[1]]
2h=hub[hub$rdatapath==file.path(host, paste0(a, ".rds"))]
3h[[1]]

上面圖片的報(bào)錯(cuò),可能還是網(wǎng)絡(luò)的問題,沒法翻墻的情況下就不能用這個(gè)方法,只能繼續(xù)尋找其他方法。之后在GitHub上面發(fā)現(xiàn)有如下的數(shù)據(jù),鑒于無法翻墻的網(wǎng)絡(luò),還是下載不了,不過在GitHub上面就好辦,可以先把這個(gè)項(xiàng)目導(dǎo)入到gitee,然后從gitee下載。

通過下面方式導(dǎo)入,這個(gè)工具可能有點(diǎn)大,800M,估計(jì)要點(diǎn)時(shí)間。

結(jié)果示范圖

不同參考數(shù)據(jù)集的影響

01 運(yùn)行速度-不同數(shù)據(jù)集的影響

為了測(cè)試不同的參考數(shù)據(jù)集對(duì)結(jié)果的影響,這里用了同一個(gè)querry數(shù)據(jù)集、不同的參考數(shù)據(jù)集進(jìn)行測(cè)試。這里選擇的測(cè)試數(shù)據(jù)為小鼠,querry數(shù)據(jù)集是經(jīng)過流式sort后的T細(xì)胞,有20519個(gè)細(xì)胞,這屬于常規(guī)項(xiàng)目,細(xì)胞數(shù)不少。小鼠的參考數(shù)據(jù)集就只有兩個(gè),ImmGenData()和MouseRNAseqData(),前一個(gè)數(shù)據(jù)集主要集中在免疫細(xì)胞相關(guān),后一個(gè)的細(xì)胞范圍較廣,兩個(gè)數(shù)據(jù)集都有T細(xì)胞,因此兩個(gè)數(shù)據(jù)集都可以使用。

下面表格為測(cè)試結(jié)果,從結(jié)果來看,參考數(shù)據(jù)集的細(xì)胞類型越少,其運(yùn)行時(shí)間越短,MouseRNAseqData參考數(shù)據(jù)集所耗時(shí)間只有3 min左右。但是main labels為20個(gè)的ImmGenData所費(fèi)時(shí)間要遠(yuǎn)遠(yuǎn)高于MouseRNAseqData的時(shí)間,這說明運(yùn)行時(shí)間與參考數(shù)據(jù)集的細(xì)胞數(shù)或者說樣品數(shù)目有關(guān),ImmGenData有830個(gè)細(xì)胞或者樣品,而MouseRNAseqData只有358個(gè)細(xì)胞或者樣品。

02 結(jié)果準(zhǔn)確性-不同數(shù)據(jù)集的影響

其實(shí)在這里說結(jié)果準(zhǔn)確性有點(diǎn)不合適,我們也不知道具體的結(jié)果如何,只能比較一下其結(jié)果。

1. MouseRNAseqData

a .main labels

> data<-immune.combined@assays$RNA@data
> pred.hesc <- SingleR(test = data, ref =ref_data, labels = ref_data$label.main)
> table(pred.hesc$labels)
Dendritic cells    Granulocytes        NK cells         T cells 
              1               1             192           20325

b. fine labels

> pred.hesc_label.fine <- SingleR(test = data, ref =ref_data, labels = ref_data$label.fine)
> table(pred.hesc_label.fine$labels)

Granulocytes     NK cells      T cells 
           1          189        20329 

從上面兩種標(biāo)簽的結(jié)果來看,其結(jié)果基本上沒有太大差異,不過有部分不一致,這個(gè)數(shù)據(jù)集是經(jīng)過sort以后的T細(xì)胞,因此大部分細(xì)胞應(yīng)該屬于T細(xì)胞,從這個(gè)來說,上述結(jié)果都比較符合預(yù)期,比較sort的細(xì)胞也不能保證百分比的純細(xì)胞,其他細(xì)胞1%以下還是可以接受的。如果非要分個(gè)上學(xué),fine labels的T細(xì)胞數(shù)目更多,不過差別不大,只多了4個(gè)細(xì)胞,幾乎可以忽略不計(jì)。

2. ImmGenData

ImmGenData數(shù)據(jù)的細(xì)胞數(shù)目和細(xì)胞種類要遠(yuǎn)遠(yuǎn)大于MouseRNAseqData數(shù)據(jù)集,因此運(yùn)行的速度會(huì)遠(yuǎn)遠(yuǎn)低于它,但是細(xì)胞類型多,各種免疫細(xì)胞都有,其結(jié)果將更符合研究目的。
a. main labels

> pred.hesc <- SingleR(test = data, ref =ref_data, labels = ref_data$label.main)
> table(pred.hesc$labels)
Basophils       ILC  NK cells       NKT   T cells       Tgd 
        2        81        39       721     19435       241 

b. fine labels

1> pred.hesc_label.fine <- SingleR(test = data, ref =ref_data, labels = ref_data$label.fine)
 2> as.matrix(table(pred.hesc_label.fine$labels))
 3T cells (T.4SP69+)    1
 4T cells (T.8EFF.OT1.12HR.LISOVA)    114
 5T cells (T.8EFF.OT1.24HR.LISOVA)    135
 6T cells (T.8EFF.OT1.48HR.LISOVA)    66
 7T cells (T.8Mem)    1515
 8T cells (T.8MEM)    61
 9T cells (T.8MEMKLRG1-CD127+.D8.LISOVA)    445
10T cells (T.8NVE.OT1)    386
11T cells (T.8Nve)    574
12T cells (T.8NVE)    19
13T cells (T.CD4.1H)    1707
14T cells (T.CD4.24H)    6
15T cells (T.CD4.48H)    1
16T cells (T.CD4.5H)    40
17T cells (T.CD4.CTR)    22
18T cells (T.CD4+TESTDB)    1

統(tǒng)計(jì)了一下,T cells 一共有19761個(gè)細(xì)胞,比main labels的19435多了300多個(gè)細(xì)胞。其他的結(jié)果就不統(tǒng)計(jì)了。上面結(jié)果只展示了部分的細(xì)胞結(jié)果,如果僅僅從這個(gè)結(jié)果來看,這個(gè)參數(shù)數(shù)據(jù)集可以將T細(xì)胞或者其他免疫細(xì)胞分的很細(xì),比如這里可以分到naive細(xì)胞或者效應(yīng)細(xì)胞等等。因此這個(gè)數(shù)據(jù)集適合哪種sort T細(xì)胞或者其他免疫細(xì)胞。

結(jié)語(yǔ)

以上就是SingleR研究過程中的一些心得,希望可以對(duì)各位小伙伴有所啟發(fā)~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容