本文是参考学习单细胞转录组高级分析一:多样本合并与批次校正的学习笔记。可能根据学习情况有所改动。
前言实际的科研项目中不可能只有一个样本,多样本的单细胞数据如何合并在一起,是否需要校正批次效应呢?先上一张图说明多样本scRNA数据的批次效应:
左边的图简单地把多个单细胞的数据合并在一起,不考虑去除批次效应,样本之间有明显的分离现象。右边的图是使用算法校正批次效应,不同的样本基本融和在一起了。scRNA数据校正批次效应的算法有很多:MNN, CCA+MNN, Harmony, Scanorama, scMerge等,本文推荐发表在Cell上的CCA+MNN方法,通过Seurat包就可以实现。Seurat数据整合功能简介Seurat早期版本整合数据的核心算法是CCA,文章发表在2018年的nature biotechnology,作者是Seurat的开发者Andrew Butler。同年Haghverdi等人开发了MNN算法校正批次效应,文章也发表在了nature biotechnology。2019年Andrew等人将CCA与MNN算法结合起来,并参考SNN算法的理念设计了“锚点”评分体系,使Seurat整合数据更强大更稳健。它不仅可以校正实验的批次效应,还能跨平台整合数据,例如将10x单细胞数据、BD单细胞数据和SMART单细胞数据整合在一起;也能整合单细胞多组学数据,例如将单细胞ATAC、空间转录组与单细胞转录组数据整合在一起。本文只讨论多样本数据的合并与校正批次效应,多组学数据的整合以后专门写篇文章介绍。Seurat整合流程与原理
1、使用CCA分析将两个数据集降维到同一个低维空间,因为CCA降维之后的空间距离不是相似性而是相关性,所以相同类型与状态的细胞可以克服技术偏倚重叠在一起。CCA分析效果见下图:
左图使用PCA降维,细胞之间的距离体现的是转录特征相似性,批次效应引入的系统误差会使样本分离。右图使用CCA降维,细胞之间的距离体现的是转录特征相关性,因此同类型且同状态的细胞可以跨越技术差异重叠在一起。
2、CCA降维之后细胞在低维空间有了可以度量的“距离”,MNN(mutual nearest neighbor)算法以此找到两个数据集之间互相“距离”最近的细胞,Seurat将这些相互最近邻细胞称为“锚点细胞”。我们用两个数据集A和B来说明锚点,假设:
A样本中的细胞A3与B样本中距离最近的细胞有3个(B1,B2,B3)
B样本中的细胞B1与A样本中距离最近的细胞有4个(A1,A2,A3,A4)
B样本中的细胞B2与A样本中距离最近的细胞有2个(A5,A6)
B样本中的细胞B3与A样本中距离最近的细胞有3个(A1,A2,A7)
那么A3与B1是相互最近邻细胞,A3与B2、B3不是相互最近邻细胞,A3+B1就是A、B两个数据集中的锚点之一。实际数据中,两个数据集之间的锚点可能有几百上千个,如下图所示:
图中每条线段连接的都是相互最近邻细胞
3、理想情况下相同类型和状态的细胞才能构成配对锚点细胞,但是异常的情况也会出现,如上图中query数据集中黑色的细胞团。它在reference数据集没有相同类型的细胞,但是它也找到了锚点配对细胞(红色连线)。Seurat会通过两步过滤这些不正确的锚点:
在CCA低维空间找到的锚点,返回到基因表达数据构建的高维空间中验证,如果它们的转录特征相似性高则保留,否则过滤此锚点。
检查锚点细胞所在数据集最邻近的30个细胞,查看它们重叠的锚点配对细胞的数量,重叠越多分值越高,代表锚点可靠性更高。原理见下图:
左边query数据集的一个锚点细胞能在reference数据集邻近区域找到多个配对锚点细胞,可以得到更高的锚点可靠性评分;右边一个锚点细胞只能在reference数据集邻近区域找到一个配对锚点细胞,锚点可靠性评分则较低。
4、经过层层过滤剩下的锚点细胞对,可以认为它们是相同类型和状态的细胞,它们之间的基因表达差异是技术偏倚引起的。Seurat计算它们的差异向量,然后用此向量校正这个锚点锚定的细胞子集的基因表达值。校正后的基因表达值即消除了技术偏倚,实现了两个单细胞数据集的整合。
深究技术细节的朋友可以参阅原文:Tim S, Andrew Butler, Paul Hoffman , et al. Comprehensive integration of single cell data[J].Cell,2019.获取数据集
本专题的数据来自Immune Landscape of Viral- and Carcinogen-Driven Head and Neck Cancer,数据集GEO编号:GSE139324。建议大家练习自己下载,也可以加Kinesin微信获取数据的百度云链接。
后续我会摸索之后写一篇下载数据的教程。
原数据集有63个scRNA的数据,都是分选的CD45+免疫细胞。考虑到计算资源问题,挑选了10个样本用于此次演示。
数据集合并前面讲了很多数据整合的原理,大家是不是很心动呢?所有类型的单细胞数据都要进行整合吗,数据整合算法真的像开发者说的只消除技术偏倚不掩盖细胞之间真实的基因表达差异吗?如果你掌握了本文介绍的内容,建议你整合与不整合的数据都分析试试,实践出真知!回到本节数据集合并的话题上,介绍两种方法合并多个样本的数据:
library(Seurat)
通过最后的dim和table函数查看数据,可以发现两种方法得到的基因数和细胞数完全一样。下面我们降维聚类看看有没有差异:
scRNA1 <- NormalizeData(scRNA1)
第一种方法合并数据的结果:
第二种方法合并数据的结果:
通过降维图可以看出两种方法的结果完全一致。这两种方法真的没有一点差异吗,有兴趣的朋友可以用GSE125449的数据集试试。
数据集整合
#scRNAlist是之前代码运行保存好的seurat对象列表,保存了10个样本的独立数据
与合并样本的降维结果对比如下图:
数据质控
##==数据质控==#
质控后的数据
细胞类型鉴定
为了后续分析的方便,我们先用SingleR预测每个cluster的细胞类型。
##==鉴定细胞类型==##
用两个参考数据库分别运行SingleR,结果有一定差异,由此可见SingleR+Marker基因人工鉴定才是可靠的细胞鉴定的方法。
我们后续分析采用左图鉴定的结果