详细介绍新版SingleR进行单细胞自动化鉴定
随着10xGenomics单细胞转录组技术的普及,现在的单细胞转录组分析越来越普及,得到的单细胞数据越来越多。然而单细胞转录组技术发展年限相对而言较短,在分析上还存在着一定的瓶颈,其中比较头疼的一个瓶颈就是单细胞亚群的鉴定。比如说:得到这么多细胞,我不知道细胞是什么细胞,这怎么分析,这是单细胞转录组分析中绕不过去的一点。
一般来说,需要老师根据自己专业背景知识,进行判断单细胞亚群是什么类型细胞,但不是每个老师的专业背景都这么强。
这个问题并不是我们才有的问题,全世界都有这个问题。幸好Dvir等人在2019年1月14日发表在Nature Immunology (https://www.x-mol.com/paper/journal/104)( IF 23.530 )上的文章解决了这个问题,作者开发了一个SingleR (http://www.bioconductor.org/packages/release/bioc/vignettes/SingleR/inst/doc/SingleR.html)工具,可以自动鉴定细胞亚群的类型,这个工具支持人和小鼠两个物种,其实工具的本质上计算每个单细胞的表达量数据与纯的bulk RNA数据相关性,相关性越大,说明是此类细胞,当然作者对数据有其他的处理过程。SingleR也有在线版本的。主要功能有如下:
for each test cell:
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.
We define the per-label score as a fixed quantile (by default, 0.8) of the distribution of correlations.
We repeat this for all labels and we take the label with the highest score as the annotation for this cell.
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.
下面我们来详细看看如何使用这个软件。
01
SingleR的安装
使用bioconductor安装
SineleR的安装有多种方式,这是一个R包,并且发布在biocondutor,当然可以直接用biocondutor方式来安装:
1if (!requireNamespace("BiocManager", quietly = TRUE))
2 install.packages("BiocManager")
3BiocManager::install("SingleR")
使用github来安装
这个R包已经放在GitHub上面,可以直接使用GitHub安装R包的方式来安装:
1devtools::install_github('dviraran/SingleR')
不过在查找问题的时候,发现这个包已经放在别的仓库了,因此可以通过别的仓库来安装:
1devtools::install_github('LTLA/SingleR')
注意事项
新的R包,需要在 R (version "3.6")版本以上的才能安装,其实一直很纳闷,为什么R一升级,就不能兼容下面的,还得重新安装R,这是R的一个大弊病。
02
SingleR升级
一般来说,如果工具能够一直维护和升级,当然是好事,singleR第一版出来以后,解决了没有工具自动进行细胞亚群鉴定的问题,但是存在一个较大的问题,就是这个运行速度特别的慢,细胞类型少,自己定制参考数据集较困难,因此亟需改进。作者在1月份发表文章,5月23日就做了一个较大的升级。这次的升级与之前的分析很多不兼容,具体升级的功能有:
官方提供了部分数据集,细胞类型增多,免疫细胞分的更细了,更符合分析预期;
提高了运行速度;
修改了部分函数,旧版本的函数与新版本的函数可能不兼容;
提供了参考数据集的接口,虽然之前也提供了,但是现在的接口使用更便。
03
SingleR参考数据集
新版的SingleR一大优点就是提供了较多的数据集,不是之前的所有数据集整合在里面,我们看不见摸不着,而且细胞类型较少,新的数据集有7种,主要是人和小鼠物种,特别的两个物种的免疫基因,可以把细胞分成很细的T细胞。具体如下:
每个数据集类型较多,就不一一列举了。以下主要列举两个免疫基因数据集,主要是在单细胞转录组研究中,免疫细胞的研究较多,而且免疫细胞亚群鉴定相对困难,下面的数据集是非常好的参考数据集。
01
02
ImmGenData Labels
当然下面的表格不全,只是列举了少部分,从这些细胞类型来看,很多都能满足我们常见的免疫细胞鉴定。
03
其他数据集的细胞类型
当然下面的表格不全,只是列举了少部分,从这些细胞类型来看,很多都能满足我们常见的免疫细胞鉴定,其他数据集可以看SingleR的网页,点击如下的红色箭头指定的部分就可以看到所有细胞类型。
04
SingleR测试
报错的解决
在测试SingleR的时候,首先就是想把参考数据集下载下来,以后做分析的时候,可以直接用,不用联网分析。结果下载的时候,有如下所示报错,说明格式有问题。
然后发现数据下载是通过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##下载函数
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"
由于运行一直有报错,然后就一步一步地运行,在如下代码的时候报错:
1args$colData <- hub[hub$rdatapath==file.path(host, "coldata.rds")][[1]]
2h=hub[hub$rdatapath==file.path(host, paste0(a, ".rds"))]
3h[[1]]
上面图片的报错,可能还是网络的问题,没法翻墙的情况下就不能用这个方法,只能继续寻找其他方法。之后在GitHub上面发现有如下的数据,鉴于无法翻墙的网络,还是下载不了,不过在GitHub上面就好办,可以先把这个项目导入到gitee,然后从gitee下载。
通过下面方式导入,这个工具可能有点大,800M,估计要点时间。
结果示范图
05
不同参考数据集的影响
01
运行速度
不同数据集的影响
为了测试不同的参考数据集对结果的影响,这里用了同一个querry数据集、不同的参考数据集进行测试。这里选择的测试数据为小鼠,querry数据集是经过流式sort后的T细胞,有20519个细胞,这属于常规项目,细胞数不少。小鼠的参考数据集就只有两个,ImmGenData()和MouseRNAseqData(),前一个数据集主要集中在免疫细胞相关,后一个的细胞范围较广,两个数据集都有T细胞,因此两个数据集都可以使用。
下面表格为测试结果,从结果来看,参考数据集的细胞类型越少,其运行时间越短,MouseRNAseqData参考数据集所耗时间只有3 min左右。但是main labels为20个的ImmGenData所费时间要远远高于MouseRNAseqData的时间,这说明运行时间与参考数据集的细胞数或者说样品数目有关,ImmGenData有830个细胞或者样品,而MouseRNAseqData只有358个细胞或者样品。
02
结果准确性
不同数据集的影响
其实在这里说结果准确性有点不合适,我们也不知道具体的结果如何,只能比较一下其结果。
1. MouseRNAseqData
a .main labels
1> data<-immune.combined@assays$RNA@data
2> pred.hesc <- SingleR(test = data, ref =ref_data, labels = ref_data$label.main)
3> table(pred.hesc$labels)
4Dendritic cells Granulocytes NK cells T cells
5 1 1 192 20325
b. fine labels
1> pred.hesc_label.fine <- SingleR(test = data, ref =ref_data, labels = ref_data$label.fine)
2> table(pred.hesc_label.fine$labels)
3
4Granulocytes NK cells T cells
5 1 189 20329
从上面两种标签的结果来看,其结果基本上没有太大差异,不过有部分不一致,这个数据集是经过sort以后的T细胞,因此大部分细胞应该属于T细胞,从这个来说,上述结果都比较符合预期,比较sort的细胞也不能保证百分比的纯细胞,其他细胞1%以下还是可以接受的。如果非要分个上学,fine labels的T细胞数目更多,不过差别不大,只多了4个细胞,几乎可以忽略不计。
2. ImmGenData
ImmGenData数据的细胞数目和细胞种类要远远大于MouseRNAseqData数据集,因此运行的速度会远远低于它,但是细胞类型多,各种免疫细胞都有,其结果将更符合研究目的。
a. main labels
1> pred.hesc <- SingleR(test = data, ref =ref_data, labels = ref_data$label.main)
2> table(pred.hesc$labels)
3
4Basophils ILC NK cells NKT T cells Tgd
5 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 cells 一共有19761个细胞,比main labels的19435多了300多个细胞。其他的结果就不统计了。上面结果只展示了部分的细胞结果,如果仅仅从这个结果来看,这个参数数据集可以将T细胞或者其他免疫细胞分的很细,比如这里可以分到naive细胞或者效应细胞等等。因此这个数据集适合哪种sort T细胞或者其他免疫细胞。
结语
以上就是SingleR研究过程中的一些心得,希望可以对各位小伙伴有所启发~~
作者:尧小飞
审稿:童蒙
编辑:amethyst
往期精选