单细胞RNA-seq生信分析全流程——第八篇:聚类

8. 聚类Clustering

预处理和可视化使我们能够描述我们的scRNA-seq数据集并降低其维度。到目前为止,我们嵌入并可视化了细胞以了解数据集的基础属性。然而,它们的定义仍然相当抽象。单细胞分析的下一个步骤是识别数据集中的细胞结构。
在scRNA-seq数据分析中,我们通过查找与已知细胞状态或细胞周期阶段相关的细胞身份来描述数据集中的细胞结构。这个过程通常称为细胞身份注释。为此,我们将细胞组织成簇,以推断相似细胞的身份。聚类本身是一个常见的无监督机器学习问题。我们可以通过最小化表达空间中的簇内距离来导出簇。在这种情况下,表达空间决定了细胞相对于降维表示的基因表达相似性。例如,这种较低维度的表示是通过主成分分析确定的,然后基于欧几里德距离进行相似性评分。
在k最近邻(KNN)图中,节点反映数据集中的细胞。我们首先在PC(主成分)缩减表达空间上计算所有细胞的欧几里德距离矩阵,然后将每个细胞连接到其K个最相似的细胞。通常,K设置为5到100之间的值,具体取决于数据集的大小。KNN图通过图中的密集连接区域来反映表达数据的基础拓扑结构。KNN图中的密集区域是通过Leiden和Louvain等community检测方法实现。
Leiden算法是Louvain算法的改进版本,在单细胞RNA-seq数据分析方面优于其他聚类方法。由于Louvain算法不再维护,因此首选使用Leiden。
因此,我们建议在单细胞k最近邻(KNN)图上使用Leiden算法来对单细胞数据集进行聚类。
Leiden通过考虑簇中细胞之间的链接数量与数据集中的总体预期链接数量来创建簇。


Leiden算法在从PC简化表达空间获得的KNN图上计算聚类。它从一个初始分区开始,其中每个节点都来自自己的分区。接下来,算法将单个节点从一个社区移动到另一个社区以找到分区,然后对其进行细化。基于细化的分区生成聚合网络,再次细化直至无法获得进一步的改进,从而达到最终的分区。

起点是一个单例分区,其中每个节点都充当自己的社区(a)。下一步,该算法通过将单个节点从一个社区移动到另一个社区来创建分区(b),随后进行细化以增强分区(c)。然后将细化的分区聚合到网络(d)。随后,算法再次移动聚合网络中的各个节点(e),直到细化不再改变分区(f)。 重复所有步骤,直到创建最终的聚类并且分区不再发生变化。
Leiden模块具有分辨率参数,可以确定分区簇的规模,从而确定聚类的粗糙度。更高分辨率的参数会导致更多的簇。该算法还允许通过对KNN图进行子设置来对数据集中的特定聚类进行有效的子聚类。子聚类使用户能够识别聚类内的细胞类型特定状态或更精细的细胞类型标记,但也可能导致仅由于数据中存在的噪声而产生的结果。
前面提到,Leiden算法是在scanpy中实现的。

import scanpy as sc

sc.settings.verbosity = 0
sc.settings.set_figure_params(dpi=80, facecolor="white", frameon=False)

8.1 聚类人类骨髓来源细胞

首先,我们加载数据集。 我们对来自我们已经预处理的NeurIPS人类骨髓数据集的预处理样本site4-donor8进行聚类。
该数据集使用log1pPF、scran和scTransform 进行标准化。我们将按照预处理章节中的建议重点关注本笔记本中数据集的scran标准化版本,以更好地识别单个细胞的状态。

adata = sc.read("s4d8_subset_gex.h5ad")

我们可以使用scanpy函数sc.pp.neighbors计算低维基因表达表示的KNN图。我们在前30个主成分上调用此函数,因为它们捕获了数据集中的大部分方差。
可视化聚类可以帮助我们理解结果,因此我们将细胞嵌入到UMAP中。有关UMAP可视化的更多信息可以在可视化部分找到。

sc.pp.neighbors(adata, n_pcs=30)
sc.tl.umap(adata)

输出结果:

/Users/anna.schaar/opt/miniconda3/envs/bp_pp/lib/python3.8/site-packages/tqdm/auto.py:22: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html
  from .autonotebook import tqdm as notebook_tqdm
OMP: Info #276: omp_set_nested routine deprecated, please use omp_set_max_active_levels instead.

我们现在可以调用Leiden算法。

sc.tl.leiden(adata)

scanpy中默认的分辨率参数是1.0。然而,在许多情况下,分析人员可能希望尝试不同的分辨率参数来控制聚类的粗糙度。因此,我们建议将聚类结果保存。

sc.tl.leiden(adata, key_added="leiden_res0_25", resolution=0.25)
sc.tl.leiden(adata, key_added="leiden_res0_5", resolution=0.5)
sc.tl.leiden(adata, key_added="leiden_res1", resolution=1.0)

我们现在可视化在不同分辨率下使用莱顿算法获得的不同聚类结果。正如我们所看到的,分辨率很大程度上影响了我们的聚类的粗略程度。较高的分辨率参数会导致更多的社区,即更多的识别簇,而较低的分辨率参数会导致更少的社区。因此,分辨率参数控制算法将KNN嵌入中的聚类区域分组在一起的密度。这对于注释集群变得尤其重要。

sc.pl.umap(
    adata,
    color=["leiden_res0_25", "leiden_res0_5", "leiden_res1"],
    legend_loc="on data",
)
UMAP

我们现在可以清楚地检查不同分辨率对聚类结果的影响。对于0.25的分辨率,聚类更加粗糙,算法检测到的社区也更少。此外,与分辨率为1.0 时获得的聚类相比,聚类区域的密度较低。
我们想再次强调,必须谨慎解释显示的簇之间的距离。由于UMAP嵌入是二维的,因此不一定能很好地捕获所有点之间的距离。我们建议不要解释UMAP嵌入上可视化的簇之间的距离。

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

推荐阅读更多精彩内容