9.单细胞 RNA-seq:聚类分析

学习目标:

  • 利用多种方法来评估聚类选择的 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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容