前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言之双细胞检测工具DoubletFinder

R语言之双细胞检测工具DoubletFinder

作者头像
一粒沙
发布2022-11-21 21:50:51
5.9K0
发布2022-11-21 21:50:51
举报
文章被收录于专栏:R语言交流中心R语言交流中心

双细胞的定义是一个液滴或一个微孔中包含了2个或多个细胞 。根据Poisson分布,单个液滴包含超过一个细胞(doublets或multiplets)的频率随着上机细胞的浓度而改变。通常如果上样细胞浓度较高,doublets/multiplets的频率也会增加。因此,单细胞实验中的doublets事件限制了实验时的细胞通量。当前有两个工具是比较流行的,一个是基于python的scrublet。其原理是数据中出现doublet时,有两种情况。一种称之为内嵌双细胞,在这种情况下,doublet和真正存在的某种细胞类型有相似的基因表达,doublet会和这些细胞被聚类到一起,同时在分群结果中占某一个群的一小部分,不会对最终的分析结果产生严重的影响。另一种情况称之为新型双细胞,在这种情况下,doublet会构成一个和现有的细胞类型基因表达非常不同的群,而这个新的群会严重影响到后续的分析结果。但不管在什么情况下,都假定doublet只占样本数据中很小的一部分。

(引自:https://doi.org/10.1016/j.cels.2018.11.005)

另一个工具是DoubletFinder。其原理是从现有的矩阵的细胞中根据我们预先定义好的细胞类型模拟一些双细胞出来(比如单核和T细胞的双细胞、B细胞和中性粒细胞的双细胞等等),将模拟出的双细胞和原有矩阵的细胞混合在一起,进行降维聚类,原则上合成doublets占所有细胞的比例为pN,默认最大pN为25%,目的是生成足够多的人工doublets。用 pK 表示领域大小(neighborhood size,例如对5,000细胞的数据,pK=0.01时,相当于寻找给定细胞近邻的200个细胞)。将合并后的细胞在主成分空间的嵌入信息转换成欧几里得距离矩阵,基于该距离矩阵 定义每个细胞的最近邻(nearest neighbors,NN)。将人造NN(artificial nearest neighbors,ANN)数除以领域大小,得到人造NN的比例( pANN =n(模拟的doublets)/n(真实细胞+模拟的doublets));对不同的pN-pK组合分别计算pANN。利用 BCmvn (均值-方差标准化双峰系数)最大 化的方法寻找计算pANN的最优pK值,而将pN固定为25%,并利用该组合下的pANN鉴别 doublets;并排除DoubletFinder不能检出的同源doublets,得到优化后的预估doublets数量。

(引自:https://doi.org/10.1016/j.cels.2019.03.003)

当然,以上方法都存在一个不足,那就是他们并不能解决同一细胞双marker表达的情况以及单细胞UMI含量过高问题。这部分则需要基于专业知识进行手工筛查。

今天给大家介绍一款在R语言中的工具DoubletFinder。首先看下包的安装:

代码语言:javascript
复制
install.packages(“devtools”)
devtools::install_github('chris-mcginnis-ucsf/DoubletFinder')
install.packages(“Seurat”)
install.packages('hdf5r')
install.packages("tidyverse")

接下来我们需要获取实例数据:

数据下载链接:

https://cf.10xgenomics.com/samples/cell-exp/3.0.2/5k_pbmc_v3_nextgem/5k_pbmc_v3_nextgem_filtered_feature_bc_matrix.h5

1.数据的预处理

代码语言:javascript
复制
library(Seurat)
library(DoubletFinder)
library(hdf5r)
pbmc <- Read10X_h5("5k_pbmc_v3_nextgem_filtered_feature_bc_matrix.h5")
pbmc <- CreateSeuratObject(pbmc)
pbmc <- SCTransform(pbmc)
pbmc <- RunPCA(pbmc, verbose = F)
pc.num=1:30
pbmc <- RunUMAP(pbmc, dims=pc.num)
pbmc <- FindNeighbors(pbmc, dims = pc.num)
pbmc=FindClusters(pbmc,resolution = 0.3)
DimPlot(pbmc, reduction = "umap", group.by = "seurat_clusters")

2.寻找最优pK值。

代码语言:javascript
复制
sweep.res.list <- paramSweep_v3(pbmc, PCs = pc.num, sct = T)##sct指是否seurat做了SCT处理,做了为T。
sweep.stats <- summarizeSweep(sweep.res.list, GT = FALSE) 
bcmvn <- find.pK(sweep.stats)
pK_bcmvn <- as.numeric(bcmvn$pK[which.max(bcmvn$BCmetric)])

3.排除不能检出的同源doublets,优化期望的doublets数量。

代码语言:javascript
复制
DoubletRate = 0.039    # 5000细胞对应的doublets rate是3.9%
homotypic.prop <- modelHomotypic(pbmc$seurat_clusters)   # 最好提供celltype
nExp_poi <- round(DoubletRate*ncol(pbmc))
nExp_poi.adj <- round(nExp_poi*(1-homotypic.prop))

4.使用确定好的参数鉴定doublets

代码语言:javascript
复制
pbmc <- doubletFinder_v3(pbmc, PCs = pc.num, pN = 0.25, pK = pK_bcmvn,
                         nExp = nExp_poi.adj, reuse.pANN = F, sct = T)

5.结果展示

代码语言:javascript
复制
DimPlot(pbmc, reduction = "umap", group.by = "DF.classifications_0.25_11_171")

至此便是双细胞检测的所有步骤,欢迎你给大家学习交流!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 R语言交流中心 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档