scRNAseq双细胞去除-1: DoubletFinder
10x平台的双细胞率(符合泊松分布1):
根据Poisson分布,单个液滴包含超过一个细胞(doublets或multiplets)的频率随着上机细胞的浓度而改变。通常如果上样细胞浓度较高,doublets/multiplets的频率也会增加。因此,单细胞实验中的doublets事件限制了实验时的细胞通量。
1. DoubletFinder概述
官网:https://github.com/ddiez/DoubletFinder
Cell Systems原文2:
1.1 原理
DoubletFinder的原理是从现有的矩阵的细胞中根据我们预先定义好的细胞类型模拟一些双细胞出来(比如单核和T细胞的双细胞、B细胞和中性粒细胞的双细胞等等),将模拟出的双细胞和原有矩阵的细胞混合在一起,进行降维聚类,原则上人工模拟的doublets会与真实的doublets距离较近,因此计算每个细胞K最近邻细胞中人工模拟doublets的比例 (pANN
),就可以根据pANN值对每个barcode的doublets概率进行排序。另外依据泊松分布的统计原理可以计算每个样本中doublets的数量,结合之前的细胞pANN值排序,就可以过滤doublets了。
1.2 步骤
DoubletFinder可以分为以下几个步骤:
-
1.2.1 参数选择
(1)处理原始矩阵,完成Seurat一般流程。从现有的scRNA-seq数据随机生成细胞对,对细胞对原始UMI值取均值,生成artificial doublets,合成doublets占所有细胞的比例为pN,默认最大pN
为25%,目的是生成足够多的人工doublets;
(2)将artificial doublets和原有的scRNA-seq矩阵合并,使用Seurat的pipeline预处理合并的real-artifical data至PCA降维。需要注意的是,在合并数据中,不对nUMI进行线性回归削弱,以保留doublets和singlets之间的差异;
(3)将合并后的细胞在主成分空间的嵌入信息转换成欧几里得距离矩阵,基于该距离矩阵定义每个细胞的最近邻(nearest neighbors,NN);
(4)用pK
表示领域大小(neighborhood size,例如对5,000细胞的数据,pK=0.01时,相当于寻找给定细胞近邻的200个细胞)。将人造NN(artificial nearest neighbors,ANN)数除以领域大小,得到人造NN的比例(pANN
=n(模拟的doublets)/n(真实细胞+模拟的doublets));
(5)对不同的pN-pK组合分别计算pANN。利用BCmvn
(均值-方差标准化双峰系数)最大化的方法寻找计算pANN的最优pK值,而将pN固定为25%,并利用该组合下的pANN鉴别doublets;并排除DoubletFinder不能检出的同源doublets,得到优化后的预估doublets数量。
- 1.2.2 鉴定doublets
(6)根据期望doublet rate,估计总doublets数的期望值;
(7)(可选)根据Poisson doublet形成率估计异型来源的(heterotypic)doublets期望值。这里涉及一个同型来源(homotypic)doublets的校正步骤,同型doublets的比例(pHomo)等于每个细胞类型频率的平方和。将1-pHomo作为异型doublets的频率pHeter,计算异型doublets的期望数量;
(8)根据doublets的期望数设置pANN的阈值,鉴定并去除doublets。
- 关于BCmvn
在数据分布中,BC(bimodality coefficient,双峰性系数)用来衡量与单峰分布的偏离程度。在DoubletFinder里,作者假设最优的pK-pN组合应该使得pANN呈非单峰分布,也就是说doublet(pANN偏大)和singlet(pANN偏小)能够截然分成两个峰。对于每个pK-pN组合都可以根据pANN的分布计算BC值。对给定pK值下的所有pN(例如从5%到25%),计算BC值的均值μBC,以及方差σ2BC,二者相除得到 BCmvn 值,选取最大值所代表的pK作为最优pK。
- pN和pK对分类准确性的影响
- 细胞聚类数和聚类区分度对DoubletFinder的影响
1.3 缺点
DoubletFinder对同种类型细胞间的doublets(即从转录相似的细胞状态衍生的doublets)不敏感。
2. 使用:
双细胞去除与Seurat的交互:在seurat标准流程进行到TSNE和UMAP降维之后,FindAllMarkers之前进行DoubletFinder操作。
- 安装:
devtools::install_github('chris-mcginnis-ucsf/DoubletFinder')
- 2.1 寻找最优pK值
library(DoubletFinder)
#这是一个测试最佳参数的过程,运行速度慢
sweep.res.list <- paramSweep_v3(scRNA, PCs = 1:pcSelect, sct = F)
#使用log标准化,sct参数设置为 sct = F(默认 ),如使用SCT标准化方法,设置为T
sweep.stats <- summarizeSweep(sweep.res.list, GT = FALSE)
bcmvn <- find.pK(sweep.stats) #可以看到最佳参数的点
pK_bcmvn <- bcmvn$pK[which.max(bcmvn$BCmetric)] %>% as.character() %>% as.numeric() #提取最佳pk值
- 2.2 检测双细胞
双细胞有两种,同源双细胞和异源双细胞。DoubletFinder只能检测异源双细胞。所以需要把同源双细胞可能的比率去除掉,以优化期望的doublets数量。
# DoubletRate = ncol(pbmc)*8*1e-6 #按每增加1000个细胞,双细胞比率增加千分之8来计算
DoubletRate = 0.075 # 直接查表,10000细胞对应的doublets rate是~7.6%
DoubletRate = ncol(pbmc)*8*1e-6 #更通用
#估计同源双细胞比例,根据modelHomotypic()中的参数人为混合双细胞。这里是从seurat_clusters中来混双细胞
homotypic.prop <- modelHomotypic(scRNA$seurat_clusters) #最好提供celltype,而不是seurat_clusters。
# 计算双细胞比例
nExp_poi <- round(DoubletRate*ncol(scRNA))
# 使用同源双细胞比例对计算的双细胞比例进行校正
nExp_poi.adj <- round(nExp_poi*(1-homotypic.prop))
## 使用确定好的参数鉴定doublets
scRNA <- doubletFinder_v3(scRNA, PCs = 1:pcSelect, pN = 0.25, pK = pK_bcmvn,
nExp = nExp_poi.adj, reuse.pANN = F, sct = F)
## 结果展示,分类结果在pbmc@meta.data中
DimPlot(pbmc2, reduction = "umap", group.by = "DF.classifications_0.25_0.3_171")
主要参数:
参数 | 意义 |
---|---|
seu | 这是一个经过充分处理的Seurat对象(即,在NormalizeData,FindVariableGenes,ScaleData,RunPCA和RunTSNE全部运行之后)。 |
pN | 定义生成的人工双峰的数量 (variable numbers of artificial doublets),表示为合并的真实人工数据的一部分。基于DoubletFinder在很大程度上是pN不变,默认设置为25% |
pK | 定义用于计算pANN (proportion of artificial nearest neighbors) 的PC邻域大小,表示为合并的真实人工数据的一部分。没有设置默认值,应该根据每个scRNA-seq数据集调整pK。 |
nExp | 定义用于进行最终双峰/单峰预测的pANN阈值。可以从10X / Drop-Seq中的细胞密度估计该值,并根据同型双峰的估计比例进行调整。 |
⚠️注意:预测的双细胞不一定全部都是双细胞,不同软件的预测结果也有差异。因此,在去除双细胞的时候要谨慎。
确定是否剔除预测双细胞的一般步骤:
1. 查看降维图上预测出来的双细胞位置。在降维图上,真实的双细胞更倾向于处于主群边缘或游离出来。
2. 如果预测的双细胞单独聚成群,查看其marker基因是否具有明显的多种细胞marker。
3. 不是我们主要研究对象的细胞群中的双细胞可以不去除。
参考文献:
- Estimating the frequency of multiplets in single-cell RNA sequencing from cell-mixing experiments
- DoubletFinder: Doublet Detection
in Single-Cell RNA Sequencing Data Using Artificial Nearest Neighbors