4.4 实战四 | 10X | 过滤后的PBMC
刘小泽写于2020.7.19
1 前言
这次使用的数据是来自Zheng et al. 2017 的三个PBMC数据,而且这个数据是经过前期过滤的
准备数据
library(TENxPBMCData)
all.sce <- list(
pbmc3k=TENxPBMCData('pbmc3k'),
pbmc4k=TENxPBMCData('pbmc4k'),
pbmc8k=TENxPBMCData('pbmc8k')
)
all.sce
# $pbmc3k
# class: SingleCellExperiment
# dim: 32738 2700
# metadata(0):
# assays(1): counts
# rownames(32738): ENSG00000243485 ENSG00000237613 ...
# ENSG00000215616 ENSG00000215611
# rowData names(3): ENSEMBL_ID Symbol_TENx Symbol
# colnames: NULL
# colData names(11): Sample Barcode ... Individual
# Date_published
# reducedDimNames(0):
# altExpNames(0):
#
# $pbmc4k
# class: SingleCellExperiment
# dim: 33694 4340
# metadata(0):
# assays(1): counts
# rownames(33694): ENSG00000243485 ENSG00000237613 ...
# ENSG00000277475 ENSG00000268674
# rowData names(3): ENSEMBL_ID Symbol_TENx Symbol
# colnames: NULL
# colData names(11): Sample Barcode ... Individual
# Date_published
# reducedDimNames(0):
# altExpNames(0):
#
# $pbmc8k
# class: SingleCellExperiment
# dim: 33694 8381
# metadata(0):
# assays(1): counts
# rownames(33694): ENSG00000243485 ENSG00000237613 ...
# ENSG00000277475 ENSG00000268674
# rowData names(3): ENSEMBL_ID Symbol_TENx Symbol
# colnames: NULL
# colData names(11): Sample Barcode ... Individual
# Date_published
# reducedDimNames(0):
# altExpNames(0):多个数据集的批量处理,重点就是列表list和for循环的熟练使用,还有相关的apply家族函数。而且每个结果数据也要对应放在一个新列表中,比如下面质控使用的stats <- high.mito <- list() ,就是新建了两个空列表,然后把结果放进去
2 批量质控
数据备份
把unfiltered数据主要用在质控的探索上
还是先通过线粒体含量计算质控结果,然后根据这个结果进行过滤,一个for循环搞定
看一下根据线粒体过滤的结果
批量作图(也是把作图结果放进list,方便后期批量导出)

3 批量归一化
这里使用的是最简单的方法logNormCounts(),就是用某个细胞中每个基因或spike-in转录本的表达量除以这个细胞计算的size factor,最后还进行一个log转换,得到一个新的矩阵:logcounts 【不过这个名字并不是很贴切,只是因为拼写简单,真实应该是:log-transformed normalized expression values。而不是单纯字面意思取个log】
看到这里,可能会想,为什么没计算size factor就直接进行了logNormCounts?
前面提到的操作,一般都是:
看一下logNormCounts的帮助文档就能明白了,逻辑很清楚:
函数默认的参数是:
size_factors=NULL,如果没有计算size factor更新给函数,那么函数会执行normalizeCounts的操作再来看
normalizeCounts会有什么操作:如果没有提供size factor,它会根据数据类型去自己计算size factor对于count矩阵和SummarizedExperiment数据类型,会通过
librarySizeFactors计算对于SingleCellExperiment这种数据类型,它会首先在数据中寻找size factor是否存在,如果找不到,也是会使用
librarySizeFactors
也就是说,如果我们不提前计算,就会自动帮我们用最简单的librarySizeFactors计算,并添加到我们的数据中。正是因为我们只需要最简单的方法,所以才可以不提供。如果要使用去卷积方法,还是要自己先计算好
最后看下结果
4 批量找表达量高变化基因
同样也是使用了最简单的计算方法
作图

每个点表示一个基因
图中蓝线指的是:技术因素导致的偏差
纵坐标表示总偏差:它等于技术偏差+生物因素偏差
因此,要衡量一个基因的生物因素偏差大小,就看对应的纵坐标减去对应的蓝线的值
5 批量降维
这里将每个PBMC数据单独进行降维,而并没有把它们混合起来再分析
关于降维方法,这里选择是与PCA近似的SVD算法(singular value decomposition,奇异值分解),scater或scran都可以直接通过函数计算SVD,利用参数BSPARAM=传递一个BiocSingularParam对象到runPCA中
SVD是一种矩阵分解方法,相当于因式分解,目的纯粹就是将一个矩阵拆分成多个矩阵相乘的形式
对于稀疏矩阵来说,SVD算法更适用,这样对于大数据来说节省了很大空间
这里使用SVD其实还是为了帮助更好地进行PCA,支持4种方式:
ExactParam: exact SVD with runExactSVD.
IrlbaParam: approximate SVD with irlba via runIrlbaSVD.
RandomParam: approximate SVD with rsvd via runRandomSVD.
FastAutoParam: fast approximate SVD, chosen based on the matrix representation.
6 批量聚类
使用基于图形的聚类,最基础的想法是:我们首先构建一个图,其中每个节点都是一个细胞,它与高维空间中最邻近的细胞相连。连线基于细胞之间的相似性计算权重,权重越高,表示细胞间关系更密切。如果一群细胞之间的权重高于另一群细胞,那么这一群细胞就被当做一个群体 “communiity”。
作图

7 数据整合
前面只是批量进行了各个数据集的分析,现在要把它们整合起来再分析一下
找共有基因
对每个数据批量取子集
把三个数据当做一个数据的三个批次,重新进行归一化
根据重新归一化的结果,再次找HVGs
这次是把3个批次放在一起再找的
对一个大数据进行降维
结合:单细胞交响乐10-数据集整合后的批次矫正 中的【第4部分 MNN矫正】
fastMNN先进行PCA降维,以加速下面的聚类环节
检查一下结果,使用lost.var ,值越大表示丢失的真实生物异质性越多
It contains a matrix of the variance lost in each batch (column) at each merge step (row).
Large proportions of lost variance (>10%) suggest that correction is removing genuine biological heterogeneity.
对一个大数据进行聚类
可视化

最后更新于
这有帮助吗?