查看原文
其他

单细胞分析十八般武艺9:DoubletFinder

Kinesin 生信会客厅 2022-08-10

      单细胞测序技术的发展日新月异,新的分析工具也层出不穷。每个工具都有它的优势与不足,在没有权威工具和流程的单细胞生信江湖里,多掌握几种分析方法和工具,探索数据时常常会有意想不到的惊喜。


往期专题

单细胞转录组基础分析专题

单细胞转录组高级分析专题


背景知识

Doublets及其形成的原因

单细胞测序期望每个barcode标签下只有一个真实的细胞,但是实际数据中会有两个或多个细胞共用一个barcode的情况,业内称之为doublets或multiplets(后面统称为doublets)。Doublets形成的原因主要是高通量单细胞测序一般使用液滴微流控(droplet microfluidic)或纳米孔(nanowell)技术,细胞被液滴或纳米孔捕获的概率遵循泊松分布规律,doublets填充液滴的概率会随着输入细胞浓度升高而增加。此外,使用磁珠分选细胞,操作不当也会增加doublets形成的概率。


10X genomics单细胞平台的dulblets比率


CellRanger可以检测doublets吗?

10X genomics在官网对此问题进行过回复,大意如下:

CellRanger目前并不支持单物种样本doublets的检测,对于混合物种的样本(例如人和小鼠细胞1:1混合)可以根据基因组比对情况识别同时包含两个物种细胞的doublets(multiplets),也就是说cellranger检测doublets的能力聊胜于无。

10X genomics公司目前也没有官方推荐的dedoublets方法,但是官网的技术支持给出了三点建议:

  1. 看细胞内是不是有多种不应该在一起的marker基因,例如一个“细胞”或cluster中同时表达T细胞和B细胞的marker基因。

  2. 看“细胞”或cluster的基因数和UMI数是否异常,通常来说doublets会有更高的基因数和UMI数。

  3. 使用DoubletFinder之类的软件分析doublets。需要注意的是,dedoublets还没有权威方法,这些方法可能会过滤一些真正的单细胞。

原文链接:https://kb.10xgenomics.com/hc/en-us/articles/360001074271-Does-Cell-Ranger-automatically-exclude-doublets-


综上所述:按目前8000 cells/样本的普遍上样量,doublets的问题确实值得重视。


DoubletFinder简介

分析原理

依据单细胞表达矩阵建立的低维空间中,表达特征相似的细胞彼此之间距离更近。DoubletFinder生成人工模拟的doublets,并将他们掺入原始单细胞表达数据,原则上人工模拟的doublets会与真实的doublets距离较近。因此计算每个细胞K最近邻细胞中人工模拟doublets的比例(pANN),就可以根据pANN值对每个barcode的doublets概率进行排序。另外依据泊松分布的统计原理可以计算每个样本中doublets的数量,结合之前的细胞pANN值排序,就可以过滤doublets了。需要注意的是DoubletFinder对相同细胞类型构成的doublets不敏感,因为这些细胞在表达特征上与真实的单细胞没有明显的差异。


分析流程

DoubletFinder工作流程示意图

实际分析中主要有以下四步:

  1. 使用单细胞数据创建seurat对象,并进行数据标准化、降维,最好进行聚类和细胞类型鉴定;

  2. 使用BCmvn(均值-方差标准化双峰系数)寻找计算pANN的最优pK值;

  3. 根据泊松分布统计原理估计样本中doublets的数量,并排除DoubletFinder不能检出的同源doublets,得到优化后的预估doublets数量;

  4. 使用前两步得到的参数运行函数鉴定doublets数据。



软件安装

remotes::install_github('chris-mcginnis-ucsf/DoubletFinder')


10X PBMC数据实测

测试数据来源于10x genomics官网的示例数据集。

数据下载链接:https://cf.10xgenomics.com/samples/cell-exp/3.0.2/5k_pbmc_v3_nextgem/5k_pbmc_v3_nextgem_filtered_feature_bc_matrix.h5

保存文件名:pbmc.h5


deDoulblets代码

以下代码使用SCT标准化方法,如果使用log标准化,把所有函数中的sct参数设置为 sct = F 即可。

library(DoubletFinder)library(tidyverse)library(Seurat)library(patchwork)rm(list=ls())
dir.create("DoulbletFinder")setwd("DoulbletFinder")
## 下载数据并预处理pbmc <- Read10X_h5("pbmc.h5")pbmc <- CreateSeuratObject(pbmc, min.cells = 3, min.features = 200)pbmc <- SCTransform(pbmc)pbmc <- RunPCA(pbmc, verbose = F)ElbowPlot(pbmc)pc.num=1:15pbmc <- RunUMAP(pbmc, dims=pc.num)pbmc <- FindNeighbors(pbmc, dims = pc.num) %>% FindClusters(resolution = 0.3)
## 寻找最优pK值sweep.res.list <- paramSweep_v3(pbmc, PCs = pc.num, 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()
## 排除不能检出的同源doublets,优化期望的doublets数量DoubletRate = 0.039 # 5000细胞对应的doublets rate是3.9%homotypic.prop <- modelHomotypic(pbmc$seurat_clusters) # 最好提供celltypenExp_poi <- round(DoubletRate*ncol(pbmc)) nExp_poi.adj <- round(nExp_poi*(1-homotypic.prop))
## 使用确定好的参数鉴定doubletspbmc <- doubletFinder_v3(pbmc, PCs = pc.num, pN = 0.25, pK = pK_bcmvn,                          nExp = nExp_poi.adj, reuse.pANN = F, sct = T)                         ## 结果展示,分类结果在pbmc@meta.data中DimPlot(pbmc2, reduction = "umap", group.by = "DF.classifications_0.25_0.3_171")

对比《单细胞分析十八般武艺8:Garnett》中使用Gernett分类器鉴定的结果(下图),我发现一个有意思的现象:DoubletFinder识别的doublets与Garnett定义为Unknown的类型有一些是重合的。


交流探讨

如果您阅读此文有所疑惑,或有不同见解,亦或其他问题,欢迎添加我的微信探讨。我工作的公司2016年开始单细胞测序服务,至今已完成近万例样本的单细胞测序,服务质量经过了10X Genomics公司的权威认证。欢迎大家联系Kinesin洽谈单细胞测序及数据分析业务!


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存