0%

scRNA-seq中的Doublet/Multiplet的检测方法

单细胞测序中的Doublet检测方法汇总(最后更新2020/03/20)

Doublet/Multiplet 的检测方法

Seurat

Seurat软件包是SingleCell的基本分析软件工具包。
该软件包利用一种特殊的处理方式(oligo-tagged antibodies against ubuquitously expressed surface proteins to place a “sample barcode” on each single cell)得到的结果,对同一个液滴存在多个细胞的情况进行demultiplex,具体方法请单击: vignette.

ps: 一般的scRNA-seq方式得到的结果无法使用该方法计算

DoubletFinder

DoubletFinder软件可以通过以下四个步骤推断Doublet:

  1. 从现有的scRNA数据中产生人工的doublet,方法是随机挑选细胞对的基因表达求平均(pN)
  2. 预处理合并后的真假混合数据
  3. 对混合数据计算PCA,利用pc计算每个细胞中包含doublet成分的比例
  4. 对细胞进行排序

(1) Generate artificial doublets from existing scRNA-seq data

(2) Pre-process merged real-artificial data

(3) Perform PCA and use the PC distance matrix to find each cell’s proportion of artificial k nearest neighbors (pANN)

(4) Rank order and threshold pANN values according to the expected number of doublets

DoubletFinder

使用方法:

经测试,该程序适用seurat2版本的object,因此需要先按照seurat2

1
2
3
conda create -n  doubletfinder   r-seurat=2 r-modes=0.7.0 r-matrix=1.2.14   r-fields=9.6  r-devtools
...
#####未完,待测试

DoubletDetection

DoubletDetection 是一个使用Python3语言的scRNA-seq Doublet检测软件。

使用方法:

1
2
3
4
5
#安装DoubletDetection,需事先准备好python3环境
#如果没有python3环境,可以使用conda create -n py3 python=3 创建
git clone https://github.com/JonathanShor/DoubletDetection.git
cd DoubletDetection
pip3 install .

DoubletDetection 运行代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import doubletdetection
import numpy as np
import doubletdetection
import matplotlib.pyplot as plt
matrix_path = 'bmy1/matrix.mtx' # 为cellranger结果文件夹中的matrix.mtx文件,需解压出来
raw_counts = doubletdetection.load_mtx(matrix_path)
zero_genes = (np.sum(raw_counts, axis=0) == 0).A.ravel() #去除表达0的基因
raw_counts = raw_counts[:, ~zero_genes]

clf = doubletdetection.BoostClassifier(n_iters=500, use_phenograph=False, standard_scaling=True) # n_iters为迭代次数,当然越大越好,但是下一步计算时间会更长
doublets = clf.fit(raw_counts).predict(p_thresh=1e-16, voter_thresh=0.5)
np.savetxt('out1.txt', doublets, fmt="%d", delimiter=',') #输出最终预测结果到out1.txt文件中
# 结果文件中
# 1 :doublet
# 0 :singlet
# np.nan :ambiguous cell,无法判断

#以下为绘图(非必须)
#注意,以下步骤可能需要X11环境(即纯terminal可能报错)
#convergence_test.pdf 为预测的doublet数随着迭代次数变化的收敛曲线
#umap_test.pdf 为注明了doublet的tsne图(?)
#threshold_test.pdf 为不同参数阈值组合下预测的doublet数目的热图
f = doubletdetection.plot.convergence(clf, save='convergence_test.pdf', show=True, p_thresh=1e-16, voter_thresh=0.5)
f2, umap_coords = doubletdetection.plot.umap_plot(raw_counts, doublets, random_state=1,
save='umap_test.pdf', show=True)
f3 = doubletdetection.plot.threshold(clf, save='threshold_test.pdf', show=True, p_step=6)

以上代码可以再python3环境中一句句运行,也 可以写成一个py文件,python执行即可。