ConsensusClusterPlus: R中实现鉴定簇集数及其成员的算法

Python09

ConsensusClusterPlus: R中实现鉴定簇集数及其成员的算法,第1张

使用 ConsensusClusterPlus 的主要三个步骤:

首先收集用于聚类分析的数据,比如 mRNA 表达微阵列或免疫组织化学染色强度的实验结果数据。输入数据的格式应为矩阵。下面以 ALL 基因表达数据为例进行操作。

取矩阵中 MAD 值 top 5000 的数据:

先设定几个参数:

这时工作路径的文件夹会出现9张图。

查看一下结果:

分别为图例、 k = 2, 3, 4, 5 时的矩阵热图。

​通过ConsensusClusterPlus包对基因表达谱执行一致性聚类(Consensus Clustering)

在大样本的组学分析中,经常需要讨论样本的分子分型。文章中最常见的方法,就是使用一种叫一致性聚类(Consensus Clustering)的方法,对转录组、蛋白组谱等数据进行聚类,最后可以将样本划分为不同的聚类群,不同聚类群的样本之间在转录组、蛋白组等分子模式上存在明显差异,但各聚类群内的样本的分子模式则较为相似,如此则实现了对大样本队列的分子分型的目的。

例如,在“Proteogenomic landscape of squamous cell lung cancer”这篇文献中,作者基于108个肺鳞状细胞癌样本的定量蛋白组数据,通过一致性聚类将108个肿瘤组织划分为5种分子亚型,即(1)炎症亚型A、(2)炎症亚型B、(3)氧化还原亚型A、(4)氧化还原亚型B以及(5)混合亚型。并在获得了分子亚型后,后续展开的详细亚型特征的描述和讨论。

好了,现在假设我们也有类似的一批组学样本队列,我们也期望通过一致性聚类实现对转录组、蛋白组或者蛋白修饰谱的分型,该如何实现呢?本节教程简介通过R语言ConsensusClusterPlus包实现一致性聚类的方法。

1准备表达谱数据集

首先准备一个基因表达矩阵,将它读入到R中。可以是转录组(如RNA-seq,芯片数据等),也可以是定量蛋白组,或者蛋白磷酸化、糖基化等修饰。具体以哪种类型的数据为主,根据实际关注的问题来。如果您更期望使用转录组进行分型,就使用RNA表达谱;如果您更期望使用蛋白组进行分型,就使用蛋白定量谱;如果您更关注蛋白修饰的分型,就使用表观修饰的组学。

本次我们以Biobase包的芯片数据集为例,展示如何对基因表达谱执行一致性聚类分析。首先来看一下示例数据,该数据集一共包含26个样本,500个基因的表达谱。

2通过ConsensusClusterPlus包执行聚类

能够执行一致性聚类的R包很多,但基本原理都是差不多的。这里我们以ConsensusClusterPlus包的方法为例作为展示。

过程大致包括两步,(1)对表达谱数据的标准化,(2)对标准化后的数据执行聚类。函数执行完毕后,R语言的当前工作目录下会生成一个文件夹(本示例以“example”未命名),里面存放了聚类结果图。

3结果说明

在本示例中,我们通过参数“maxK = 4”指定了期望划分的最大聚类群数量,即从聚2类开始,逐一增加类别数量进行尝试,直到到达指定的最大聚类群数量4为止结束。

结果中,这两张图可以帮助我们评估选择最合适的聚类数量。我们需要同时考虑这两个标准,根据左图选择CDF下降坡度更小的曲线,根据右图选择CDF更高的值。通常而言这两个标准趋势相反,也就是我们需要尽量保证CDF下降不那么剧烈且CDF值也不能太小。在这里,似乎当k=3时是最合适的。当然,有时不一定要遵守这个方法,一些研究也按照自己的研究目的选择了其它最优k值标准。

这些图展示了在不同的k值(划分的聚类群数量)下,样本的聚类情况。在示例中,似乎k=3时相对更好一些。

该图展示了在不同的k值(划分的聚类群数量)下,各样本所属的聚类群。

学习文档: https://cran.r-project.org/web/packages/NMF/vignettes/heatmaps.pdf

NMF包中的热图引擎是由 aheatmap 函数实现,其余的热图函数都是基于它的修改。而 aheatmap 函数本身又是 pheatmap 包 pheatmap 函数的修改版本。引擎具体的优点作者有在文档是写,我就不唠叨了。

为了演示热图函数的用法,我们这里创建一个随机的NMF输入矩阵,以及一些注释和协变量。

查看下生成的注释数据:

这里 X 实际是一个矩阵, rdata 是行注释, covariates 是列注释。

下面画图:

接着,我们使用NMF模型来分解矩阵。

NMF结果的混合系数矩阵可以使用 coefmap() 函数进行绘制。该函数默认添加2个注释通道用来展示 从最佳拟合结果中获得的簇(聚类数)和一致性矩阵的层次聚类 。在图例中,这两个通道分别以 basis 和 consensus 命名。对于一个简单的NMF模型结果,一致性数据是不能显示的,只能通过最佳拟合进行聚类。

默认情况下:

如果想让 coefmap() 显示 aheatmap() 函数的默认形式,设置 Rowv=TRUE, Colv=TRUE, scale='none' 。

自动注释的通道可以使用 tracks=NA 进行隐藏,或者设置一个( tracks=':basis' 或 tracks='basis:' 可以分别设置行注释或列注释),图例名可以以 tracks=c(Metagene=':basis', 'consensus') 的形式进行修改。除此之外,利用 annCol 参数可以添加用户设定的手动注释。

基底矩阵可以使用 basismap 函数进行绘制,默认的行为是添加basis注释通道,每一行显示主导的基底组分,即每一行有最高负载的基底组分。

默认情况下:

当使用NMF进行矩阵的时候,一种评估基于指定rank评估聚类稳定性的方法是考虑由多个独立NMF运行结果计算得到的连接矩阵。有篇 不错的中文博文 讲的比较清晰,建议看看。

我们所用数据 res 设定的参数是 nrun=10 ,因此包含了10次运行得到的最佳结果以及基于所有运行的一致性矩阵。

很显然这是一个对称矩阵,结果看上一半或者下一半都可以。

函数 nmf 可以接受一组 rank 序列用来拟合多个不同的rank的结果。

然后可以同样的画图

可以比较同一rank不同方法的结果。

还有很多自定义画热图的例子,使用下面的命令查看。