八、右揽雀尾
后坐扣脚 收脚抱球 转体上步 弓步掤臂 摆臂后捋
转体搭手 弓步前挤 转腕分手 后坐引手 弓步前按
单细胞RNA-seq数据中的生物异质性通常与包括测序深度在内的技术因素混淆。即使在同一细胞类型内,每个细胞中检测到的分子数量也可能在细胞之间发生显着变化。对scRNA-seq数据的解释需要有效的预处理和标准化,以消除这种技术差异。在Hafemeister和Satija,2019年,我们引入了一个建模框架,用于对来自scRNA-seq实验的分子计数数据进行归一化和方差稳定化。此过程省略了对包括伪计数加法或对数转换在内的启发式步骤的需要,并改善了常见的下游分析任务,例如可变基因选择,降维和差异表达。
在此插图中,我们演示了与对数归一化相比,使用基于sctransform的归一化如何能够恢复更清晰的生物学区别。
library(Seurat)
library(ggplot2)
library(sctransform)
加载数据并创建Seurat对象
pbmc_data <- Read10X(data.dir = "../data/pbmc3k/filtered_gene_bc_matrices/hg19/")
pbmc <- CreateSeuratObject(counts = pbmc_data)
应用sctransform规范化
- 请注意,这个单一命令替换NormalizeData()
,
ScaleData()和
FindVariableFeatures()`。 - 转换后的数据将在SCT分析中提供,运行sctransform后将其设置为默认值
- 在标准化期间,我们还可以删除混杂的变异源,例如线粒体作图百分比
# store mitochondrial percentage in object meta data
pbmc <- PercentageFeatureSet(pbmc, pattern = "^MT-", col.name = "percent.mt")
# run sctransform
pbmc <- SCTransform(pbmc, vars.to.regress = "percent.mt", verbose = FALSE)
最新版本sctransform
还支持使用glmGamPoi软件包,从而大大提高了学习过程的速度。可以通过指定调用它method="glmGamPoi"
。
if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")
BiocManager::install("glmGamPoi")
pbmc <- SCTransform(pbmc, method = "glmGamPoi", vars.to.regress = "percent.mt", verbose = FALSE)
通过PCA和UMAP嵌入执行降维
# These are now standard steps in the Seurat workflow for visualization and clustering
pbmc <- RunPCA(pbmc, verbose = FALSE)
pbmc <- RunUMAP(pbmc, dims = 1:30, verbose = FALSE)
pbmc <- FindNeighbors(pbmc, dims = 1:30, verbose = FALSE)
pbmc <- FindClusters(pbmc, verbose = FALSE)
DimPlot(pbmc, label = TRUE) + NoLegend()
在标准的Seurat工作流程中,我们重点关注此数据集的10个PC,尽管我们强调指出,此参数的设置较高时,结果相似。有趣的是,我们发现使用sctransform时,通常可以通过将此参数推得更高来受益。我们认为这是因为sctransform工作流程执行了更有效的规范化,从而从数据中强烈消除了技术影响。
即使经过标准的对数归一化后,测序深度的变化仍然是一个混杂因素(请参见图1),并且这种影响会微妙地影响更高的PC。在sctransform中,此效果已大大减轻(请参见图3)。这意味着更高的PC更可能代表微妙的但与生物学相关的异质性来源-因此包括它们可能会改善下游分析。
此外,默认情况下,sctransform返回3,000个可变功能,而不是2,000。基本原理相似,其他可变特征不太可能受细胞间技术差异的驱动,而可能代表更微妙的生物学波动。通常,我们发现用sctransform生成的结果对这些参数的依赖性较小(实际上,在转录组中使用所有基因时,我们获得了几乎相同的结果,尽管这确实降低了计算效率)。这可以帮助用户生成更可靠的结果,此外,还可以使用具有相同参数设置的标准分析管道进行应用,这些参数设置可以快速应用于新的数据集:
例如,以下代码在一个命令中复制了完整的端到端工作流程:
pbmc <- CreateSeuratObject(pbmc_data) %>% PercentageFeatureSet(pattern = "^MT-", col.name = "percent.mt") %>%
SCTransform(vars.to.regress = "percent.mt") %>% RunPCA() %>% FindNeighbors(dims = 1:30) %>%
RunUMAP(dims = 1:30) %>% FindClusters()
如我们的论文所述,sctransform使用“正负二项式回归”计算scRNA-seq数据中的技术噪声模型。该模型的残差为归一化值,可以为正或负。给定细胞中给定基因的正残基表明,与基因在种群和细胞测序深度中的平均表达相比,我们观察到的UMI比预期多,而负残基则相反。
sctransfrom的结果存储在“ SCT”分析中。您可以在我们的插图,命令备忘单或开发人员指南中了解有关Seurat中多测定数据和命令的更多信息。
pbmc[["SCT"]]@scale.data
包含残差(归一化值),并直接用作PCA的输入。请注意,此矩阵是非稀疏的,因此如果为所有基因存储,可能会占用大量内存。为了节省内存,我们仅通过在SCTransform()`函数调用中默认设置return.only.var.genes = TRUE来为变量基因存储这些值。协助进行可视化和解释。我们还将Pearson残差转换回“校正”的UMI计数。您可以将它们解释为如果所有单元格都测序到相同深度,我们期望观察到的UMI计数。如果您想确切了解我们如何执行此操作,请在此处查看正确的功能。
“更正后的” UMI计数存储在中
pbmc[["SCT"]]@counts
。我们将这些校正后的计数的对数标准化版本存储在中pbmc[["SCT"]]@data
,这对可视化非常有帮助。您可以将校正后的对数归一化计数用于差异表达和积分。但是,原则上,最好直接对(存储在
scale.data
插槽中的)残差本身执行这些计算。Seurat v3当前不支持此功能,但很快就会支持。- *</details>
用户可以基于规范标记单独注释集群。但是,与标准的Seurat工作流程相比,sctransform归一化方法在生物学上有更明显的区别,其中包括:
- 基于CD8A,GZMK,CCL5,GZMK表达,至少3个CD8 T细胞群体(幼稚,记忆,效应子)的清晰分离
- 基于S100A4,CCR7,IL32和ISG15的三个CD4 T细胞群体(天然,记忆,IFN激活)的清晰分离
- 基于TCL1A,FCER2的B细胞簇中的其他发育子结构
- 根据XCL1和FCGR3A,将NK细胞进一步分离为CD56dim与明亮簇
# These are now standard steps in the Seurat workflow for visualization and clustering Visualize
# canonical marker genes as violin plots.
VlnPlot(pbmc, features = c("CD8A", "GZMK", "CCL5", "S100A4", "ANXA1", "CCR7", "ISG15", "CD3D"),
pt.size = 0.2, ncol = 4)
# Visualize canonical marker genes on the sctransform embedding.
FeaturePlot(pbmc, features = c("CD8A", "GZMK", "CCL5", "S100A4", "ANXA1", "CCR7"), pt.size = 0.2,
ncol = 3)
FeaturePlot(pbmc, features = c("CD3D", "ISG15", "TCL1A", "FCER2", "XCL1", "FCGR3A"), pt.size = 0.2,
ncol = 3)
说明一个样本也可以使用sctransform处理的。