ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
122 stars 30 forks source link

一致性聚类(Consensus Clustering)及其在R中实现 #1728

Closed ixxmu closed 2 years ago

ixxmu commented 2 years ago

https://mp.weixin.qq.com/s/Ou0zfqvlhAX4KEvUY6dzOw

github-actions[bot] commented 2 years ago

一致性聚类(Consensus Clustering)及其在R中实现 by 小白鱼的生统笔记

使用ConsensusClusterPlus包实现表达谱的一致性聚类(Consensus Clustering)和分子分型
无监督聚类是常见的探索性数据分析方法之一,如层次聚类k均值划分(k-means围绕中心点划分(PAM等,在复杂且通常是异构的数据集的数据汇总和初步结构识别中有着重要作用。然而过多的聚类算法和性能指标使得选择最优聚类算法成为一项具有挑战性的任务。由于算法的不同或者数据本身引起的可变性等,导致单一聚类结果之间可能存在偏差,这引起了对集成算法的需求,以试图将各种聚类组合成一个稳健的聚类。

一致性聚类(Consensus ClusteringCC)或称共识聚类,是一种将多个聚类合并为一个更稳定聚类的技术。其思路是,采用重抽样方法抽取一定样本的子数据集,然后通过指定的聚类算法将每组子样本划分为最多k个组,最后再综合多次重采样后的聚类分析结果给出一致性的评估。由于所得到的聚类相对于抽样变异越稳定,可以相信这一致的聚类结果代表了一个真实的子类结构。


一致性聚类大致包含两个主要过程。

1)分区生成(Partition Generation)。在这个阶段,采用不同的聚类参数,并对整个数据集抽取不同的随机子样本,数据对象的不同分区使用不同的数据属性子集创建。一旦生成了初始分区,就在分区之间达成共识,并继续根据之前的共识进一步迭代生成新的分区。

2)共识生成(Consensus Generation)。数据分区之间的一致性是使用共识函数生成的,基于不同的共识函数,存在多种类型的一致性聚类算法。

基于中位数分区(Median Partitioning)的方法,根据先前分区的数据点的中位数形成新的分区,不同分区的数据点根据它们的相似性指数分组在一起。

基于共现(Co-occurrence)的方法,包括:基于重新标记/投票(Relabeling / Voting)的方法,通过确定与当前共识的对应关系来生成新的分区,每个实例从它们的分区分配中获得一定的投票,并相应地更新共识和分区分配;基于关联矩阵(Co-association matrix)的方法,通过数据点的相似性在关联矩阵的基础上生成新的分区;基于图(Graph)的方法,生成加权图表示多个聚类,并通过最小化图分割找到最优划分。

因此,一致性聚类的优点是聚类群的鲁棒性更好,并能够独立获得各个分区,以及可以更好地处理缺失值。 


一篇使用一致性聚类方法对表达谱数据进行聚类和分子分型的文献举例


在生物学数据分析中,一致性聚类方法被广泛用于基于亚群鉴定,分子分型等方面。一个常见例子是肿瘤亚型分类,根据不同组学数据集将样本划分为不同的聚类群,实现对大样本队列的分子分型的目的,从而发现新的疾病亚型或者对不同亚型进行比较分析。

例如,在Stewart等(2019)对肺鳞状细胞癌的多组学研究中,为了明确肿瘤分型,作者基于108个肺鳞状细胞癌样本的定量蛋白组数据,通过一致性聚类将108个肿瘤组织划分为三种主要的分子亚型,包括炎症亚型(可进一步细分为炎症亚型A和炎症亚型B)、氧化还原亚型(可进一步细分为氧化还原亚型A和氧化还原亚型B)以及混合亚型。并在后续通过更深入的分析继续表明肺鳞状细胞癌可以被认为是一种具有三种亚型的疾病,大部分(87%)与免疫浸润(炎症)或氧化还原(氧化还原)生物学有关,提示大多数患者可以从针对免疫细胞类型(炎症)或肿瘤内在途径的代谢调节(氧化还原)的治疗中受益。


节选自Stewart等(2019)图1,肺鳞状细胞癌的蛋白质组分型分析。108名患者的肿瘤样本以列显示,下方热图展示了前1000个具有最高变异系数的蛋白的表达谱。通过一致性聚类将108名患者的肿瘤组织划分为五个簇,对应于三种分子亚型(炎症、氧化还原和混合)。


使用R包ConsensusClusterPlus实现对基因表达谱的一致性聚类


在上述Stewart等(2019)的材料方法部分,作者提到使用R语言ConsensusClusterPlus包执行对蛋白表达谱的一致性聚类分析。因此接下来不妨就以ConsensusClusterPlus包提供的方法为例作演示吧。

 

示例数据集


Biobase包的内置数据集“geneData”为例,该数据集节选自某项研究中使用Affymetrix U95v2芯片获得的基因表达谱,由26列样本和500行基因组成的数据框。

#以 Biobase 包的基因表达矩阵数据集为例,详情加载 Biobase 包后 ?geneData
data(geneData, package = 'Biobase')
head(geneData)

 

使用ConsensusClusterPlus包执行一致性聚类评估


接下来期望对上述转录组数据进行一致性聚类,对26个样本进行分子分型。ConsensusClusterPlus包中,使用函数ConsensusClusterPlus()执行一致性聚类,在参数中指定抽取子样本的方法、聚类算法等执行。

#通过 Bioconductor 安装 ConsensusClusterPlus 包
#install.packages('BiocManager')
#BiocManager::install('ConsensusClusterPlus')
 
#加载 ConsensusClusterPlus 包
library(ConsensusClusterPlus)
 
#归一化基因表达矩阵,便于后续聚类,本示例执行中位数标准化
dc <- sweep(geneData,1, apply(geneData, 1, median))
 
#基于表达谱数据对样本进行一致性聚类和评估,详情 ?ConsensusClusterPlus
cluster <- ConsensusClusterPlus(
    d = dc, #数据矩阵,列是样本,行是变量
    maxK = 5, #要评估的最大聚类簇数量
    seed = 1234, #指定随机数种子,用于子样本处理等随机的过程
    reps = 10, #抽取的子样本数量
    pItem = 0.8, #抽样样本的比例
    pFeature = 1, #抽样变量的比例
    clusterAlg = 'hc', #选择聚类算法
    distance = 'pearson', #指定聚类时使用的距离或相关性类型
    innerLinkage = 'complete', #子样本的聚类方法
    finalLinkage = 'complete', #一致性矩阵的聚类方法
    corUse = 'pairwise.complete.obs', #处理缺失值的方法
    title = 'test', plot = 'png' #聚类簇评估结果的输出格式
)
 
#查看样品一致性和聚类一致性
calcICL(cluster, title = 'test', plot = 'png', writeTable = TRUE)

执行完毕后,R语言的当前工作路径下会生成一个新路径。根据上述ConsensusClusterPlus()中的参数设置,本示例默认以“test”命名,提供了聚类簇数量k=2~5各个情况下对转录组数据分型的评估结果。

后续即可根据这些评估结果,从中选择最合适的聚类,基于这个转录组数据确定最终的分子亚型。再往后就可在此基础上继续进行不同亚型间的差异分析、功能富集分析、网络分析等,不再多说。

 

累积分布函数(CDF

一致性累积分布函数(consensus cumulative distribution functionconsensus CDF)图中展示了不同聚类簇数量k下的CDF分布,值越大表明该k值下的聚类结果越稳健。Delta area图展示的是kk-1相比CDF曲线下面积的相对变化,值越大表明该k值下的聚类效果相比k-1的聚类效果的优度提升更明显。


通常结合这两张图可以帮助评估最合适的k值,尽量保证CDF分布更平缓值更高,且CDF曲线下面积提升相对更大的结果。例如在本示例中,当k=45时的CDF分布更平缓且近似最大值,而k=5时的CDF曲线下面积提升效果相对不如k=4明显,提示最好考虑k=4时的聚类结果。当然,有时不一定要遵守这个方法,一些研究也按照自己的研究目的选择了其它最优k值标准。

 

Tracking plot

本示例中,热图提供了聚类簇数量k=2~5各个情况下,对各样本划分的聚类群。如果一些样本在取不同k值前后经常改变分类,则表明它们的分类可能不稳定。


#查看样本所属的聚类群
#例如,查看当划分 4 个聚类群时,各样本所属的聚类情况
#其它聚类群的情况,更改数字即可
cluster_select <- cluster[[4]]$consensusClass
cluster_select <- data.frame(sample = names(cluster_select), cluster = cluster_select)
cluster_select
 
#write.csv(cluster_select, 'cluster_select.csv')

 

一致性矩阵和聚类热图

聚类热图中的行和列都是样本,展示了样本之间的一致性聚类情况,默认从白色到深蓝色表示从01的样本间的一致性矩阵,聚类树和热图之间的矩形颜色代表了不同聚类簇数量k下的样本聚类。


#查看样本间的一致性矩阵
#例如,查看 k=4 时的一致矩阵
consensusMatrix_select <- cluster[[4]][['consensusMatrix']]
colnames(consensusMatrix_select) <- colnames(dc)
rownames(consensusMatrix_select) <- colnames(dc)
consensusMatrix_select[1:6,1:6]

#write.csv(consensusMatrix_select, 'consensusMatrix_select.csv')

 

样品一致性(IC)和聚类一致性(CLC

样品一致性(item-consensusIC)图中是一个样本和一个聚类簇的成员之间的平均一致性值,因此一个样本在不同聚类簇数量k处有多个 IC 值对应于k个簇。根据该样本在不同聚类簇中IC值的高低,判断该样本应划分为哪个聚类簇。对于某个样本而言,如果它在某个聚类簇中的IC值占更大比例则表明其分类稳定,而如果它在不同聚类簇中的IC值相差不大则表明它们的分类可能不稳定。


聚类一致性(cluster-consensusCLC)代表了一致性聚类簇中成对样本间的平均IC,该值越高代表稳定性越高,可帮助评估增大k值后与当前k值下相比,聚类效果的优度提升更明显。


 

参考资料


https://www.geeksforgeeks.org/consensus-clustering/
Stewart Paul A, Welsh Eric A, Slebos Robbert J C et al. Proteogenomic landscape of squamous cell lung cancer. Nat Commun, 2019, 10: 3578.


友情链接

无监督的聚类方法


层次聚类

层次聚合分类,“自底向上”的聚合策略,包括单连接聚合聚类(单联动)、完全连接聚合聚类(全联动)、平均聚合聚类(UPGMAUPGMCWPGMAWPGMC)、Ward最小方差聚类、灵活聚类等方法

双向指示种分析(TWINSPAN,层次分划的一种,“自顶向下”的分拆策略

层次聚类结果的比较和评估

 

划分聚类

k均值划分(k-means

围绕中心点划分(PAM

避免不存在的类

 

模糊聚类

模糊c均值聚类(FCM

 

潜变量分析

潜剖面分析(LPA(处理数值变量)

潜类别分析(LCA(处理分类变量)

   

自组织映射(SOM)

 

带监督的聚类方法


logistic回归(一种应用于类别型响应变量的广义线性模型)

 

回归树的分类

决策树

随机森林(RF)分类

多元回归树(MRT

 

支持向量机(SVM)分类

 

判别分析(DA,一种结合降维思想的分类器

↑包括线性判别分析(LDA二次判别分析(QDA、混合判别分析(MDA)、弹性判别分析(FDA)、正则化判别分析(RDA)等

        偏最小二乘判别分析(PLS-DA

        正交偏最小二乘判别分析(OPLS-DA

        稀疏偏最小二乘判别分析(sPLS-DA)

 

分类器模型优度评估

受试者工作特征(ROC)曲线