学习目标:
- 利用多种方法来评估聚类选择的 PC
- 基于重要的 PC 执行单细胞聚类
单细胞 RNA-seq 聚类分析
现在我们已经整合了高质量的细胞,我们想知道我们的细胞群中存在的不同细胞类型。
image目标:
- 为了生成特定细胞类型的簇,并使用已知的细胞类型的标志基因来确定的簇的身份。
- 为了确定分群是否代表真实的细胞类型或由于生物或技术差异而形成的群集,如在细胞周期的S期的细胞群,特定批次的簇,或具有高线粒体含量的细胞。
挑战:
- 识别可能由于无意义的生物或技术差异引起的低质量集群**
- 识别每个分群的细胞类型**
- 保持耐心,因为这可能是聚类和标记识别之间的高度迭代过程(有时甚至回到 QC 过滤)
建议:
- 在执行聚类之前,请充分了解您对存在的细胞类型的期望。了解您是否期望低复杂性或高线粒体含量的细胞类型,以及这些细胞是否正在分化
- 如果您有多个条件,执行整合以对齐细胞很有帮助
- 如果需要并适合实验,回归出UMI 的数量(默认情况下使用 sctransform)、线粒体含量和细胞周期,避免进行聚类
- 确定要删除的任何垃圾群集或要重新QC过滤的群集。垃圾群集可能是包含高线粒体含量和低UMIs/基因的那些。如果由许多细胞组成,那么重新回到QC过滤掉,然后重整合/分群可能会很有帮助。
- 如果未将所有细胞类型检测为单独的群集,请尝试更改用于分群的分辨率或PC数量。
基于top-PCs(metagenes)的细胞分群
设置
在开始本课程之前,让我们命名为clustering.R
.
首先加载我们需要的所有库。
# Single-cell RNA-seq - clustering
# Load libraries
library(Seurat)
library(tidyverse)
library(RCurl)
library(cowplot)
识别重要的 PCs
为了克服 scRNA-seq 数据的任何单个基因表达中的广泛技术噪音,Seurat 根据来自整合的最可变基因的表达的 PCA 分数将细胞分配到亚群中,每个 PC 基本上代表一个结合相关基因组信息“metagene”。因此,确定要包含在分群步骤中包含多少PC 数量对于确保我们捕获数据集中存在的大部分变异或细胞类型非常重要。
在决定下游分群分析要包括哪些PC之前,先探索 PC 很有用。
(a) 探索 PC 的一种方法是使用热图来可视化选择 PC 的变异最大的基因,其中基因和细胞按 PCA 分数排序。这里的想法是查看 PC ,并确定驱动它们的基因是否对区分不同的细胞类型有意义。
cells 参数指定用于绘图的PCA得分负向最低或正向最高的细胞数量。我们的想法是,我们正在寻找一个PC,它的热图开始看起来更“模糊”,也就是说,基因组之间的区别不是那么明显。
# Explore heatmap of PCs
DimHeatmap(seurat_integrated,
dims = 1:9,
cells = 500,
balanced = TRUE)
image
如果我们想探索大量 PC,这种方法可能会很慢并且难以可视化单个基因。同样,为了探索大量 PC,我们可以通过驱动 PC 的 PCA 分数显示出前 10 个(或更多)阳性和阴性基因。
# Printing out the most variable genes driving PCs
print(x = seurat_integrated[["pca"]],
dims = 1:10,
nfeatures = 5)
image
(b)elbow plot是确定使用多少个PC进行分群的另一种有用的方法,这样我们就可以捕获数据中的大部分变化。elbow plot 直观地显示了每个PC的标准偏差,我们要找的就是标准偏差开始趋于平稳的位置。本质上,elbow 出现的位置通常是识别大部分变化的阈值。但是,这种方法可能相当的主观。
我们使用排名前40位的PC绘制一张elbow plot
# Plot the elbow plot
ElbowPlot(object = seurat_integrated,
ndims = 40)
image
基于这个曲线图,我们可以粗略地根据elbow出现在PC8-PC10周围的位置来确定大部分变化,或者有人可能会争辩说,应该是当数据点开始接近X轴时,PC30左右。这让我们对需要包括的PC数量有了一个非常粗略的了解,我们可以以定量的方式提取此处可视化的信息,这可能更可靠一些。
虽然上述 2 种方法在 Seurat 以前的方法中使用得更多,用于对可变基因进行标准化和识别,但它们不再像以前那样重要。这是因为SCTransform 方法比旧方法更准确。
为什么选择 PC 对旧方法更重要?
较旧的方法将一些技术变异来源纳入一些较高的 PC,因此 PC 的选择更为重要。SCTransform 更好地估计了方差,并且在较高的 PC 中经常不包括这些技术变化的来源。
理论上,使用 SCTransform,我们选择的 PC 越多,在执行聚类时考虑的变化就越多,但执行聚类需要更长的时间。因此,对于此分析,我们将使用前40个PC来生成集群。
聚类细胞
Seurat 使用基于图的聚类方法,该方法使用 K 最近邻 (KNN) (默认情况下)将细胞嵌入到图结构中,并在具有相似基因表达模式的细胞之间绘制边。然后,它尝试将该图划分为高度互连的“准集团”或“社区”[ Seurat - 引导聚类教程]。SVI 生物信息学和细胞基因组学实验室课程中提供了对聚类方法的深入描述。
我们使用FindClusters()
函数来执行基于图的聚类。这resolution
是一个重要的参数,它设置了下游聚类的“精度”,需要针对每个单独的实验进行优化。对于 3,000 - 5,000 个单元格的数据集,resolution
介于0.4
-1.4
的集合之间,通常会产生良好的聚类。增加的分辨率值会导致更多的聚类,这通常是较大的数据集所使用。
该FindClusters()
函数允许我们输入一系列分辨率,并将计算聚类的“精度”。这对于测试哪种分辨率适用于当前非常有用,而无需为每个分辨率都运行一次。
# Determine the K-nearest neighbor graph
seurat_integrated <- FindNeighbors(object = seurat_integrated,
dims = 1:40)
# Determine the clusters for various resolutions
seurat_integrated <- FindClusters(object = seurat_integrated,
resolution = c(0.4, 0.6, 0.8, 1.0, 1.4))
如果我们查看 Seurat 对象 ( seurat_integrated@meta.data
)的数据,就会发现计算出的每个不同分辨率都有一个单独的列。
# Explore resolutions
seurat_integrated@meta.data %>%
View()
要选择一个分辨率作为开始,我们通常会选择范围中间的值,例如 0.6 或 0.8。我们将从 0.8 的分辨率开始,通过使用该Idents()
函数选择分群的标准。
# Assign identity of clusters
Idents(object = seurat_integrated) <- "integrated_snn_res.0.8"
为了可视化细胞簇,有一些不同的降维技术可能会有所帮助。最流行的方法包括t 分布随机邻域嵌入 (t-SNE)和均匀流形近似和投影 (UMAP)技术。
这两种方法都旨在将高维空间中具有相似局部邻域的细胞放在低维空间中。这些方法将要求您输入用于可视化的 PCA 维度的数量,我们建议使用相同数量的 PC 作为聚类分析的输入。在这里,我们将继续使用UMAP 方法来可视化集群。
## Calculation of UMAP
## DO NOT RUN (calculated in the last lesson)
# seurat_integrated <- RunUMAP(seurat_integrated,
# reduction = "pca",
# dims = 1:40)
# Plot the UMAP
DimPlot(seurat_integrated,
reduction = "umap",
label = TRUE,
label.size = 6)
image
探索不同的分辨率也很有用。它将让您快速了解集群将如何根据分辨率参数发生变化。例如,让我们切换到 0.4 的分辨率:
# Assign identity of clusters
Idents(object = seurat_integrated) <- "integrated_snn_res.0.4"
# Plot the UMAP
DimPlot(seurat_integrated,
reduction = "umap",
label = TRUE,
label.size = 6)
image
您的 UMAP 图与上面的图相比如何?
与本课程中的图像相比,您的集群的外观可能存在一些差异。特别是,您可能会看到 cluster 的标签有所不同。这是软件包版本(主要是 Seurat 依赖项)的轻微变化的结果。
如果您的集群看起来与课程中的相同,就继续下一部分。
如果您的集群看起来与我们在课程中看到的不同,请按照下面提供的说明进行操作。
在您的data
文件夹中,您将看到一个名为additional_data
. 它包含我们为该类创建的 seurat_integrated 对象。
- 将对象加载到 R 会话并覆盖现有的:
load("data/additional_data/seurat_integrated.RData.bz")
练习
加载seurat_integrated.RData.bz
后,查看不同分辨率(0.4、0.6、0.8、1.0、1.4)下的亚群分类数。对于每个分辨率,绘制相应的 UMAP 并报告您观察到的集群数量。您认为哪个分辨率有意义?
我们现在将继续使用 0.8 分辨率来检查预期细胞类型的质量控制指标和已知标记。再次绘制 UMAP 以确保您的图像现在(或仍然)与您在课程中看到的相匹配:
# Assign identity of clusters
Idents(object = seurat_integrated) <- "integrated_snn_res.0.8"
# Plot the UMAP
DimPlot(seurat_integrated,
reduction = "umap",
label = TRUE,
label.size = 6)
image
网友评论