[scRNA-seq]doublets检测——DoubletFinder & scrublet (上)

现今最常用的单细胞RNA测序技术是通过形成一个个液滴,让一个液滴内包含一个细胞,对细胞进行裂解,释放mRNA,添加barcode再逆转录成cDNA最后进行批量测序的一个过程。在这一过程中,我们会给同一个液滴内的所有mRNA一个相同的barcode。因为我们假定一个液滴内仅包含一个细胞,因而拥有相同barcode、来自同一个液滴的mRNA,我们在分析中也会当成同一个细胞的数据。

但在实际情况中,有一些液滴会包含超过两个或两个以上细胞,被称之为doublet或multiplet。因为同一个液滴内的mRNA会拥有一样的barcode,当液滴内包含超过一个细胞时,它们依旧会被当做一个细胞处理,在后续分析中,引入一些错误的信息。因为doublet的情况比较常见,也更难被识别出来,我们后续就主要针对doublet进行说明。

我们在进行分析前通常会使用细胞表达的总reads数、细胞表达的基因数以及reads中属于线粒体基因的比例这类信息去对细胞做一个基本的筛选,去除掉一些低质量的数据。在这一过程中,我们能去除掉部分拥有高于正常值的总reads数和基因数的doublet。

但通过这样简单的筛选,有的时候并没有办法完全去除doublet和multiplet。一些分化程度高、只拥有有限、固定功能的细胞,例如肌肉细胞,可能会有比较低的总reads数及基因数。它们只拥有比较固定的功能,因此不需要表达大量不同的基因。当样本中包含这类细胞时,他们与其它细胞在一个液滴中形成的doublet就不会有太高的总reads数及基因数。在这种情况下,我们需要运用一些其它的方法检测出可能的doublet。其中DoubletFinder和scrublet是小L尝试过的两种。

DoubletFinder的整个算法流程主要分为以上这几个步骤。

1. 首先,我们有一个未分析的scRNA数据。

2. 因为doublet是两个细胞被当成了一个细胞处理,DoubletFinder通过随机将两个细胞的基因表达数据相加来模拟可能出现的doublet的基因表达情况,并把这些模拟出来的doublet也当作正常的细胞进行后续的处理。

3. 通过常规的PCA对reads数矩阵(cell×gene matrix)进行降维,更好地对信息进行压缩和提取。

4. 找出每一个细胞的邻近细胞(neighbors)

5. 在这些细胞中,包含了我们数据中原有的细胞,也包括模拟出来的doublet。DoubletFinder会计算出每个细胞的邻近细胞中包含多大比例模拟出来的doublet。比例高即说明这个细胞和模拟出来的doublet相似,即更有可能是doublet。DoubletFinder用一个用户自己设定的值pANN作为分界线,高于设定的pANN即为doublet。

6. 去除DoubletFinder认定为doublet的细胞。

DoubletFinder是一个基于R的doublet检测工具,在它的GitHub主页上,作者给出了如何将它与seurat结合进行分析的代码。在实践过程中,小L发现两个问题。

一是作者给出的范例仅针对我们有一个样本数据的情况下。如果我们有多个样本时,在分析的哪一步进行doublet检测就变得复杂起来了。我们是在对数据进行基础的筛选以及去除批次效应(batch effect)之后呢,还是之前呢?是使用原始的reads数呢?还是使用标准化(normalization)之后的reads数呢?

二是使用DoubletFinder最终会产生一个非常大的seurat对象(object),但其中可能有很多信息是我们不需要的,如果不进行合理的信息提取,会占用大量的计算资源,在样本数量多的情况下,甚至会导致更严重的后果。小L习惯使用Rstudio server进行数据分析,在使用DoubletFinder就曾经因为要分析多个sample,数据太大,导致Rstudio server崩溃。几经调试才找到合适的处理的方法。

小L进行了不同的尝试,翻阅了一些资料,还参考了运用类似思路进行doublet检测的不同工具的使用方法,最后得出结论:应该使用DoubletFinder根据它的tutorial直接对多个样本进行依次分析,先判断出每个细胞是否为doublet,再对它们一起进行过滤(filtering)、整合(integration)等操作。因此,我们在DoubletFinder进行分析后,只需要保留它的结论以及pANN值添加到我们原始数据的metadate里,就能进行后续分析了,不需要保留整个DoubletFinder分析产生的seurat对象(object)。

由于这一块的内容比较多,关于scrublet算法的分析、DoubletFinder和scrublet的比较以及相关的代码范例就放到下一篇内容里写。

祝大家吃好喝好睡好、远离新冠、科研快乐~

欢迎关注同名“小L的读博日常” 第一时间获得更多、更新的关于生物信息学的小技巧、小知识。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容