封面
❝
熟悉师兄公众号的都应该清楚,师兄之前的推文主要集中在各种类型的科研绘图上!但是不少粉丝小伙伴们还是反应,只知道绘图,数据不会分析,还是不行的呀!没错,拿不到可靠的分析结果,只知道绘图,这当然是远远不够的!因此,
学习各种常用的生信数据分析则必然成为了每一个生信人必须要经历的事情。
因此,后续的推文中,师兄会尽可能地多更新一些有关数据分析的内容,可能包含的系列包括《R语言数据处理基本技巧》、《从零开始学单细胞转录组》、《从零开始学空间转录组》等;
本系列,师兄将
从单细胞转录组学开始
,带领大家一起
从零开始学单细胞
!系列内容可以详见下方大纲!
说明:
由于本系列教程还是强调
面对完全零基础小白
,所以很多内容师兄会介绍的非常细,对于部分已经入门的老手来说可能比较多余,所以
大家选择性阅读即可!
本系列主要内容目录及单细胞学习交流群,请看Part 1;
本期主要内容,请看Part 2;
合作服务器推荐及生信师兄粉丝专属优惠详情,请看Part 3;
如果您觉得本系列文章对你有帮助的话,欢迎
点赞、收藏、在看+转发
!您的支持是师兄持续更新的最大动力!
Part 1 系列介绍
1.1 内容大纲
单细胞转录组系列教程目录
1.2 生信师兄单细胞学习交流群
❝
当然了,好的学习过程离不开详尽地交流讨论和重难点答疑!因此,在发布教程的同时,师兄也成立了
《生信师兄单细胞学习交流群》
用于本系列内容的学习交流。需要的小伙伴可以扫描下方二维码,添加师兄微信后备注
“单细胞学习交流群”
后付费加群!
1.2.1
群内资源
-
本系列所有免费及付费内容的配套学习资源、代码资源及示例数据;
群内资源(以上图课程目录为准)
-
师兄会在群内提供不定时答疑,满足答疑要求的问题师兄会尽可能抽时间回答;
-
1.2.2 入群费用
-
入群费用:
¥299元(每集赞1个抵扣1元,至多抵扣100元!此优惠永久有效!)
1.2.3 本系列不含视频教程
-
目前,师兄还没有足够的时间进行视频课程的录制,所以
本系列教程不包含视频课程
!但是如果大家需要,师兄也一定会尽可能抽时间录制课程!
-
如果后续推出视频课程
,还是和《R语言科研绘图进阶版视频教程》一样,
加群的小伙伴届时可凭借入群截图,抵扣购课差价。
所以,早入群早享受吧!
1.2.4 声明
❝
-
是否加群,纯属自愿!
本系列的大部分内容会是免费阅读,
所以完全支持白嫖!
但是看完还请动动你的手指,
点个赞!点个在看!如果能转发那就太感谢了!
-
加群可以
获取本系列所有付费部分内容,代码,示例数据,以及定期答疑的交流群
!
-
如果考虑好加群,就
早加早享受,随着群内资源的增加,入群的费用也可能会随之增加
!
-
优惠方式
:
点赞 + 在看,并转发这个系列任意一篇文章至朋友圈,每集赞1个抵扣1元,至多抵扣100元!此优惠永久有效哦!
Part1 前言
❝
在单细胞测序实验中,细胞悬液制备过程中常会出现细胞聚集现象,导致
形成双细胞或多细胞的团块
。若这些团块未被有效检测和过滤,则会在下游分析中表现为混合的转录组信号
(即“双细胞效应”)
,严重干扰数据的准确性和生物学解释。为了保证单细胞测序数据的质量,开发可靠的双细胞检测方法显得尤为重要。
目前,
DoubletFinder
和
Scrublet
是两个常用的计算方法,分别基于
单细胞数据的统计特性
和
模拟双细胞特征
进行检测。本文将详细介绍这两种方法的基本原理及其代码实操,帮助各位小伙伴轻松掌握这两种工具。
Part2 主要内容
2.1 DoubletFinder
❝
DoubletFinder
是一种基于
单细胞聚类与混合信号特征
的双细胞检测方法,其
核心原理
:通过生成模拟双细胞(artificial doublets),并在降维空间中与真实数据进行比较,预测哪些细胞具有双细胞特征。
原论文于2019年发表在Cell System上:
DoubletFinder: Doublet Detection in Single-Cell RNA Sequencing Data Using Artificial Nearest Neighbors
DoubletFinder
2.1.1 基本原理
基本步骤
-
从真实数据中随机抽取两细胞的表达值进行加权平均,模拟实际双细胞的转录特征;
-
将生成的模拟双细胞与真实细胞数据合并,并对合并后的矩阵进行标准化处理;
-
对合并数据进行 PCA 降维,计算每个细胞的 k 近邻中模拟双细胞的比例,作为
pANN 值
;
-
根据用户设置的阈值筛选出高 pANN 值的细胞,标记为双细胞(双联体);
2.1.2 安装
-
R包官网:https://github.com/chris-mcginnis-ucsf/DoubletFinder
# 直接从github安装就行,如果安装失败,可以下载到本地用install_local安装:
remotes::install_github('chris-mcginnis-ucsf/DoubletFinder')
2.1.3 参数介绍
-
seu:
一个已经经过标准化和降维处理的 Seurat 对象(即运行过 NormalizeData、FindVariableGenes、ScaleData、RunPCA 和 RunTSNE 的对象);
-
PCs:
指定用于分析的统计显著性主成分的数量,通常表示为一个范围(例如,PCs = 1:10);
-
pN:
定义生成的人工双细胞数量,表示为合并的真实-人工数据的比例。
默认设置为 25%,
因为原文的结果表明 DoubletFinder 的性能对该参数的变化相对稳定;
-
pK:
定义用于计算 pANN 的 PC 邻域大小,同样表示为合并的真实-人工数据的比例。
此参数没有默认值,需要为每个 scRNA-seq 数据集单独优化,通常通过计算最优值确定;
-
nExp:
定义进行最终双细胞/单细胞预测时的 pANN 阈值,通常根据实验设备(如 10X/Drop-Seq)的细胞密度估算,并结合预期的双细胞比例进行调整。
❝
补充:关于10x的双细胞率可以参考官网链接:
https://kb.10xgenomics.com/hc/en-us/articles/360001378811-What-is-the-maximum-number-of-cells-that-can-be-profiled
注意:
对于DoubletFinder而言,我们需要在
数据的多样本整合
之前进行双细胞的去除,而不是之后。举个🌰,如果你把 WT 和突变细胞系的合并数据跑 DoubletFinder(它们其实是在不同的 10X 泳道测的),工具会生成 WT 和突变细胞的“混搭双细胞”,而这种情况根本不存在(你没在一起测序怎么可能会有这种双细胞),这样会导致结果的严重失真。因此下表中的细胞数量针对的是
单个样本中的细胞数量
。依据这个标准来进行参数的调整和设定!
10X Doublet Rate
2.1.4 实操
library(Seurat)
library(SeuratData)
library(tidyverse)
library(DoubletFinder)
# 安装并加载pbmc3k数据集
# InstallData("pbmc3k") # 数据下载不下来就多下载几遍;
data("pbmc3k")
## 预处理 -----------------------------------
pbmc min.cells = 3, min.features = 200)
# 标准流程
pbmc %
FindVariableFeatures(selection.method = "vst", nfeatures = 2000) %>%
ScaleData() %>%
RunPCA() %>%
RunUMAP(dims = 1:10)
# SCTransform
pbmc_SCT %
RunPCA() %>%
RunUMAP(dims = 1:10)
## 分析过程 -----------------------------------
# 这是一个测试最佳参数的过程,运行速度慢
sweep.res.list_pbmc 1:10, sct = F) # 如使用SCT标准化方法,设置为T
sweep.stats_pbmc FALSE)
bcmvn_pbmc #可以看到最佳参数的点
image-20241122011401707
pK_bcmvn % as.character() %>% as.numeric() #提取最佳pk值
pK_bcmvn
## 排除不能检出的同源doublets,优化期望的doublets数量
DoubletRate 0.016 # 2700细胞对应的doublets rate是1.6%
DoubletRate1 8*1e-6 #更通用
# 估计同源双细胞比例,根据modelHopbmc#估计同源双细胞比例,
# 根据modelHomotypic()中的参数人为混合双细胞。这里是从seurat_clusters中来混双细胞
homotypic.prop # 计算双细胞比例
nExp_poi # 使用同源双细胞比例对计算的双细胞比例进行校正
nExp_poi.adj 1-homotypic.prop))
## 使用确定好的参数鉴定doublets
pbmc 1:10, pN = 0.25, pK = pK_bcmvn,
nExp = nExp_poi.adj, reuse.pANN = F, sct = T)
## 结果展示,分类结果在[email protected]中
colnames([email protected])
DimPlot(pbmc, reduction = "umap", group.by = "DF.classifications_0.25_0.01_36")
Singlet&Doublet
2.2 Scrublet
❝
Scrublet
是一种用于单细胞转录组测序(scRNA-seq)数据中双细胞污染(doublet)的
Python工具包
,通过模拟双细胞(synthetic doublets)的方式来识别和移除实际的双细胞污染。它不依赖预先定义的细胞类型或marker基因,仅需几分钟即可高效处理上万个细胞。
由于Python调用Scrublet网上的资源很多,师兄这里主要介绍一下R中如何调用Scrublet。
Scrublet
2.2.1 两个假设
-
双细胞是低概率事件
:在单细胞数据中,双细胞的比例相对较低。
-
双细胞的细胞状态来源于单细胞
:生成双细胞的两个细胞状态在数据中作为单独的单细胞状态都可以找到。
根据以上假设,Scrublet 通过随机抽样单细胞表达谱,构建模拟的双细胞表达谱(synthetic doublets),并基于这些模拟双细胞的分布训练分类器,从而鉴别实际的双细胞污染。
2.2.2 算法原理
-
模拟双细胞数据
: Scrublet 通过随机抽取两个单细胞的转录组表达谱并进行线性加和,生成模拟的双细胞数据。这些模拟数据被用作分类器的“诱饵”,用以区分实际数据中的单细胞(singlets)和双细胞。
-
降维处理
: 利用主成分分析(PCA)对实际细胞和模拟双细胞的数据进行降维。降维后的数据可以更有效地捕获细胞间的表达差异。
-
kNN 分类器构建
: 在降维后的空间中,Scrublet 构建一个基于最近邻(k-Nearest Neighbors, kNN)的分类器,用于判断某个细胞是单细胞还是双细胞。分类器会根据每个细胞与其邻域中伪双细胞的相似性,输出一个
双细胞评分
(Doublet Score)。
-
阈值判断
: Scrublet 的分类器评分通常呈现双峰分布,通过设置合理的阈值区分双细胞和单细胞。评分较低的双细胞称为“embedded doublets”,其状态难以与单细胞区分;评分较高的双细胞称为“neotypic doublets”,它们的状态显著偏离单细胞。
算法原理