4.9 实战九 | 不同技术数据整合 | 人胰腺细胞
刘小泽写于2020.7.21
1 前言
2016年很多研究都对人类胰腺细胞的scRNA很感兴趣,也因此发表了很多文章:(Muraro et al. 2016; Grun et al. 2016; Lawlor et al. 2017; Segerstolpe et al. 2016)。这些不同作者不同技术手段得到的数据,也给数据整合带来了不小的挑战。相比于之前的PBMC数据整合,这里更为复杂,因为包含的建库、测序方法多样,供体的类型、数量更是不一致。
2 简单一点的试验
首先拿技术相似的两套数据来做:分别是 Muraro et al. 2016; Grun et al. 2016,采用了CEL-seq 和 CEL-seq2
load('final.sce.grun.Rdata')
load('final.sce.muraro.RData')
final.sce.grun
# class: SingleCellExperiment
# dim: 17548 1063
# metadata(0):
# assays(2): counts logcounts
# rownames(17548): ENSG00000268895 ENSG00000121410 ...
# ENSG00000074755 ENSG00000036549
# rowData names(2): symbol chr
# colnames(1063): D2ex_1 D2ex_2 ... D17TGFB_94
# D17TGFB_95
# colData names(3): donor sample sizeFactor
# reducedDimNames(0):
# altExpNames(1): ERCC
final.sce.muraro
# class: SingleCellExperiment
# dim: 16940 2299
# metadata(0):
# assays(2): counts logcounts
# rownames(16940): ENSG00000268895 ENSG00000121410 ...
# ENSG00000159840 ENSG00000074755
# rowData names(2): symbol chr
# colnames(2299): D28-1_1 D28-1_2 ... D30-8_93
# D30-8_94
# colData names(4): label donor plate sizeFactor
# reducedDimNames(0):
# altExpNames(1): ERCC2.1 取两个数据的交集子集
首先获得交集基因
对数据集取子集
既然是经过处理后的数据,那么就略过了之前介绍的质控步骤
2.2 数据整合后的归一化
首先测序深度导致的文库大小差异是批次效应的一个重要来源,因此可以先对不同的批次进行文库矫正。会以文库最小的批次为基准,对其他批次进行文库归一化。最后返回一个列表
使用一个归一化函数:
multiBatchNorm,它应用的就是最简单的library size normalization归一化方法: Perform scaling normalization within each batch to provide comparable results to the lowest-coverage batch.
既然是要处理文库差异,那就先看看各自原本的文库大小
然后进行处理,可以看看前后的变化,就明白了这个函数做了什么事情
看到混合以后的sce.muraro3相对于之前独立的sce.muraro2的变化了吧
2.3 数据整合后找表达量高变化基因
首先对表达量变化模型取子集
之后组合两组的结果
使用
combineVar,它的作用是:Combine the results of multiple variance decompositions, usually generated for the same genes across separate batches of cells.
2.4 矫正批次效应
之前在:3.8 批次效应处理 中介绍过:
bulk mRNA转录组中常用的矫正批次效应方法就是线性回归,对每个基因表达量拟合一个线性模型。例如limma的
removeBatchEffect()(Ritchie et al. 2015) 、sva的comBat()( Leek et al. 2012)。如果要使用这类方法,就需要假设:批次间的细胞组成相同。另外的一个假设是:批次效应的累积的,对于任何给定的基因,在不同亚群中经过任何因素诱导的表达变化倍数是相同的。(其实,从这两个假设就看出来,这个方法不适合我们的单细胞数据,但还是要继续了解下去)
先来看看基于线性回归的rescaleBatches()
它也是对每个基因的log表达量进行了线性回归,并提高了一些运行性能。另外与removeBatchEffect()不同的是,rescaleBatches()保持了数据的稀疏性,而removeBatchEffect()会破坏稀疏性
不过结果并不尽如人意,两个批次还是分得很开,表明处理有效果但不彻底 。影响效果的原因是:我们的数据违背了这个方法的假设

再来使用fastMNN()
与线性回归方法相比,MNN方法不会假设细胞群组成相同或者事先已知。MNN会自己学习细胞群的结构并进行估计.
可能之前听过:mnnCorrect()这个方法,它是Haghverdi et al. (2018) 提出来的,之前也介绍过:单细胞转录组数据校正批次效应实战
它和fastMNN()原理类似,但速度会慢很多,总之它们的不同可以概括为:
For scRNA-seq data,
fastMNN()tends to be both faster and better at achieving a satisfactory merge.mnnCorrect()is mainly provided here for posterity’s sake, though it is more robust thanfastMNN()to certain violations of the orthogonality assumptions.
再做个图
效果有明显改进

3 更具挑战性的操作
前面是将一个CEL-seq和一个CEL-seq2数据整合,总的说来还不是很复杂
但这里,会再加上两个数据,分别来自Lawlor et al. 2017 和 Segerstolpe et al. 2016 的数据进行整合,这样四个数据就会包括不同的技术、不同的UMI、不同的表达量、更加不同的供体
3.1 取四个数据的子集
首先获得交集基因
再分别取子集
3.2 数据整合后的归一化
3.3 数据整合后找表达量高变化基因
首先获得各个数据集的表达量变化模型
再取子集
再组合四组的结果
3.4 矫正批次效应
fastMNN也包含了PCA的操作
3.5 聚类
看到一个批次中都包含了很多clusters,说明数据整合的效果还不错,批次效应没有很强;当然有些clusters只显示在了seger批次中(比如7、8、12、16、17、18、19),那究竟这些clusters到底是不是seger数据特有的细胞类型呢?这个还有待考证
作图
注意其中使用到了一个很有趣的函数
I(),简单的一个字母,它是base包里的函数
因为我们是根据mnn.pancreas进行作图的,但clusters这个向量是根据mnn.pancreas创建的,但又不直接存在于mnn.pancreas(不像batch一样存在于mnn.pancreas中)。
因此要从外部把它导入到作图函数中,就可以用这个I()

上面我们粗略根据四个数据集看了下批次效应,发现Seger这个数据还有点特殊,因为很多clusters只存在于Seger中
批次效应的来源除了表面上的4个数据集整合,还有一个重点考虑对象是:供体的种类
3.6 对批次效应的检查
看一下来自各个数据中供体的批次效应
首先检查一下各个数据的供体信息,看到Seger最多,因此它的风险也最大。但这个怀疑到底对不对,还要做个图看看

看到图中Seger的供体各个细胞最为分散,因此它的供体批次效应是最强的

虽说供体也是生物信息,但它对于后续的细胞类型注释没有直接的帮助,相反还会产生混淆的作用(比如前面看到很多clusters只存在于Seger中,说不定就是由于Seger的供体批次效应导致的)
因此,一个更为谨慎的操作是:除了去除数据集之间的批次效应以外,还要将每个数据内部的供体信息作为另一个批次效应,分别处理掉
3.7 进行一次更严格的批次矫正
将原来的4个分开的数据聚合在一起,使用noCorrect 进行简单的聚合
它的含义是:This function is effectively equivalent to cbinding the matrices together without any correction.

对这个数据进行批次矫正,但首先要把数据批次和供体批次分开
依然是使用fastMNN
检查一下聚类结果
从下面的结果中可以看到单独属于Seger的cluster没有了
作图结果也发现数据混合更理想了

最后,和已发表的细胞类型做对比
由于这些数据都已发表,数据集中也包含了最后作者注释的细胞类型(sce.grun除外)
因此,可以将我们自己整合后又矫正的分群,与发表的细胞分群对比,来说明批次处理质量

看到其中大小写参差不齐,可以全变成小写
最后检查一下

看到,我们处理完批次效应后的分群结果可以比较好的匹配到真实的细胞类型,因此说明了这里使用的批次矫正的方法的力度刚刚好
最后更新于
这有帮助吗?