对应原版教程第5章http://bioconductor.org/books/release/OSCA/overview.html
a typical scRNA-seq analysis workflow
本小节概述了从测序到数据分析的基本流程,让我们对scRNA-seq先有一个整体的印象。
1、上游实验简介
1.1 测序技术
1.2 从测序结果到表达矩阵
2、下游基础流程
2.1 构建SingleCellExperiment对象
2.2 基础流程
2.3 基础流程code quick start
1、上游实验简介
1.1 测序技术
历经10年左右发展,单细胞测序技术目前有两大主流平台。分别是10X Genomics(Droplet-based)与Smart-seq2(Plate-based with reads),各有优劣。
- 10X Genomics:通量高(10k~100k cells),相对来说测序成本低,因此适宜全面捕获取样组织的细胞种类信息,用的也多。但测序过程会存在一定的dropout/doublet rate problem(通量越高,越影响。)
- Smart-seq2:通量相对较低,但测序深度高,因此适宜单细胞水平的转录本或可变剪切分析,突变检测等。从某种角度上,Smart-seq2的测序结果更类似传统的Bulk RNA-seq
- 关于这两种技术的详细区别,可参考张泽民团队2020年发表的文章,从具体实验结果角度的比较结论。https://www.sciencedirect.com/science/article/pii/S1672022921000486
From paper:实验步骤示意图
1.2 从测序结果到表达矩阵
类似传统RNA-seq,测序得到的fastq文件,需要比对基因组、计数得到最终的表达矩阵才可以进行真正的下游数据分析。
- 对于10X的测序数据,官方提供了御用软件
CellRanger
,可以比较方便得到表达矩阵结果。(简单来说首先使用STAR比对,然后统计每个基因比对到多少个UMI,作为表达量) - 对于Smart-seq的测序数据,则可以参考传统的RNA-seq比对、计数pipeline。
- 此外还有一些R包,专门用来处理单细胞的fastq文件。例如作者推荐的
scPipe
,介绍如下(我暂时没用过,用过的朋友可以来说说咋样)
A preprocessing pipeline for single cell RNA-seq data that starts from the fastq files and produces a gene count matrix with associated quality control information. It can process fastq data generated by CEL-seq, MARS-seq, Drop-seq, Chromium 10x and SMART-seq protocols.
- 需要格外注意的一点是:如果实验设计中加入的spike-in transcripts(比如ERCC),在比对时一定要将这些参考序列加入到我们的参考基因组中,再进行比对。否则可以理解加了也是白加。
2、下游基础流程
2.1 构建SingleCellExperiment对象
- 根据上一步得到的表达矩阵,以及实验批次、分组信息等(如果有的话)构建sce对象。
- 之后的每一步分析基本都是以sce对象为载体,并将结果储存在该结构里。
- 关于SingleCellExperiment介绍,可参考上一篇笔记。
2.2 基础流程
对于scRNA-seq数据分析,包含最基本的5个步骤
- (1)质控:过滤出不合格、或者是低质量的细胞;
- (2)标准化:类似Bulk RNA-seq,为了使不同细胞间细胞表达更具有可比性;
- (3)挑选高变基因:为降维做准备,降低无表达变化基因的噪音信息干扰;
- (4)降维:最大化保留细胞特征信息的同时,降低每个细胞信息的复杂度,从近万个维度,到几十个维度;
-
(5)聚类:根据细胞的特征表达与细胞间的相似性,将这一批细胞分为若干有潜在意义的组别。
2.3 基础流程code quick start
- 相关R包,没有的话,需要安装
BiocManager::install("package_name")
- 用法,简介可参考Bioconda的该包介绍,一般很详细的。相关函数用法会在之后教程中使用到再做介绍。
#数据包,提供很多示例scRNA-seq表达矩阵信息
library(scRNAseq)
#scRNA-seq分析工具包
library(scater)
##scRNA-seq分析工具包
library(scran)
- 基础五步骤的代码展示
library(scRNAseq)
sce <- MacoskoRetinaData() #直接为sce格式
# (1)Quality control.
library(scater)
is.mito <- grepl("^MT-", rownames(sce))
qcstats <- perCellQCMetrics(sce, subsets=list(Mito=is.mito))
filtered <- quickPerCellQC(qcstats, percent_subsets="subsets_Mito_percent")
sce <- sce[, !filtered$discard]
# (2)Normalization.
sce <- logNormCounts(sce)
# (3)Feature selection.
library(scran)
dec <- modelGeneVar(sce)
hvg <- getTopHVGs(dec, prop=0.1)
# (4)Dimensionality reduction.
set.seed(1234)
sce <- runPCA(sce, ncomponents=25, subset_row=hvg)
sce <- runUMAP(sce, dimred = 'PCA', external_neighbors=TRUE)
# (5)Clustering.
g <- buildSNNGraph(sce, use.dimred = 'PCA')
colLabels(sce) <- factor(igraph::cluster_louvain(g)$membership)
# (5)Visualization.分群可视化
plotUMAP(sce, colour_by="label")
下一节会学习下游分析的第一步,也就是质控过程中的若干问题。
网友评论