2022-11-08 ConsensusClusterPlus 包进行一致性聚类

Consensus Clustering 是一种可用于鉴定数据集(比如 microarray 基因表达)中的簇集 (clusters) 成员及其数量的算法。说人话就是一致性聚类通常被用于确定最佳的聚类数目K。一致聚类通过基于重采样的方法来验证聚类合理性,其主要目的是评估聚类的稳定性。
Consensus Clustering 的基本原理假设:从原数据集不同的子类中提取出的样本构成一个新的数据集,并且从同一个子类中有不同的样本被提取出来,那么在新数据集上聚类分析之后的结果,无论是聚类的数目还是类内样本都应该和原数据集相差不大。因此所得到的聚类相对于抽样变异越稳定,我们越可以相信这一样的聚类代表了一个真实的子类结构。重采样的方法可以打乱原始数据集,这样对每一次重采样的样本进行聚类分析然后再综合评估多次聚类分析的结果给出一致性(Consensus)的评估。

先来看看ConsensusClusterPlus 包中的两个主函数:

(1)ConsensusClusterPlus函数:
用法:
ConsensusClusterPlus(
d=NULL, maxK = 3, reps=10, pItem=0.8, pFeature=1, clusterAlg='hc',title='untitled_consensus_cluster',
innerLinkage='average', finalLinkage='average', distance='pearson', ml=NULL,

tmyPal=NULL,seed=NULL,plot=NULL,writeTable=FALSE,weightsItem=NULL,weightsFeature=NULL,verbose=F,corUse='everything')

(2)calcICL函数:
用法:
calcICL(res,title='untitled_consensus_cluster',plot=NULL,writeTable=FALSE)
library(ALL)
data(ALL)
d=exprs(ALL)
dim(d)
#[1] 12625   128
d[1:5,1:5]  #共128个样品,12625个探针数据

mads=apply(d,1,mad)   #计算每个基因的标准差
d=d[rev(order(mads))[1:5000],]

#sweep函数减去中位数进行标准化
d = sweep(d,1, apply(d,1,median,na.rm=T))

library(ConsensusClusterPlus)
results = ConsensusClusterPlus(d,maxK=6,reps=50,pItem=0.8,pFeature=1)
#这里设置的maxK=6、reps=50,但是实际上需要更高的reps(如1000)和更高的maxK(如20)

生成的图片如下
(1)图例:矩阵热图的颜色图例



(2)k = 2, 3, 4, 5, 6 时的矩阵热图:矩阵的行和列表示的都是样本,一致性矩阵的值按从0(不可能聚类在一起)到1(总是聚类在一起)用白色到深蓝色表示,一致性矩阵按照一致性分类(热图上方的树状图)来排列。树状图和热图之间的长条即分出来的类别。







(3)一致性累积分布函数(CDF)图:此图展示了k取不同数值时的累积分布函数,用于判断当k取何值时,CDF达到一个近似最大值,此时的聚类分析结果最可靠。即考虑CDF下降坡度小的k值。



(4)Delta Area Plot:此图展示的是 k 和 k-1 相比CDF曲线下面积的相对变化。当k=2时,因为没有k=1,所以第一个点表示的是k=2时CDF曲线下总面积,而非面积的相对变化值。当k=6时,曲线下面积仅小幅增长,故5为合适的k值。

查看结果

ConsensusClusterPlus输出的是一个列表,其中列表对应于来自Kth集群的结果,例如,results[[2]]是k=2的结果。

View(results)
#输出K=2时的一致性矩阵,consensusMatrix输出一致矩阵。
results[[2]][['consensusMatrix']][1:5,1:5]
# hclust选项
results[[2]][['consensusTree']]
#consensusClass可以看到各个样品被分到了哪个类别里面去
results[[2]][['consensusClass']][1:5]

计算聚类一致性 (cluster-consensus) 和样品一致性 (item-consensus)

icl <- calcICL(results)

结果:
(1)Tracking Plot:此图下方的黑色条纹表示样品,展示的是样品在k取不同的值时,归属的分类情况,不同颜色的色块代表不同的分类。取不同k值前后经常改变颜色分类的样品代表其分类不稳定。若分类不稳定的样本太多,则说明该k值下的分类不稳定。



2)Cluster-Consensus Plot:此图展示的是不同k值下,每个分类的cluster-consensus value(该簇中成员pairwise consensus values的均值)。该值越高(低)代表稳定性越高(低)。可用于判断同一k值下以及不同k值之间cluster-consensus value的高低。



(3)item-Consensus Plot:纵坐标代表Item-consensus values。k值不同时,每个样本都会有一个对应不同簇的item-consensus values。竖条代表每一个样本,竖条的高度代表该样本的总item-consensus values。每个样本的上方都有一个小叉叉,小叉叉的颜色代表该样本被分到了哪一簇。从这张图,可以看到每个样本的分类是否足够“纯净”,从而帮助决定k值,例如当k=6时,样本的分类变得没有那么纯净,说明k=5才是合适的。

## 返回了具有两个元素的list,分别查看一下
dim(icl[['clusterConsensus']])
# [1] 20 3
icl[["clusterConsensus"]]
      k cluster clusterConsensus
 [1,] 2       1        0.8447769
 [2,] 2       2        0.9752694
 [3,] 3       1        0.6613792
 [4,] 3       2        0.7499191
 [5,] 3       3        1.0000000
 [6,] 4       1        0.8486466
 [7,] 4       2        0.8856553
 [8,] 4       3        0.7037400
 [9,] 4       4        1.0000000
[10,] 5       1        0.9144969
[11,] 5       2        0.8730016
[12,] 5       3        0.5858013
[13,] 5       4        0.7977151
[14,] 5       5        1.0000000
[15,] 6       1        0.8567648
[16,] 6       2        0.8528658
[17,] 6       3        0.7009412
[18,] 6       4        0.7327485
[19,] 6       5        0.7977151
[20,] 6       6        1.0000000
dim(icl[["itemConsensus"]])
[1] 2560    4
icl[['itemConsensus']][1:5,]
  k cluster  item itemConsensus
1 2       1 01007     0.1073574
2 2       1 01003     0.1138066
3 2       1 02020     0.1170829
4 2       1 04018     0.1162691
5 2       1 09002     0.1019760

参考:R语言|ConsensusClusterPlus 包进行一致性聚类 (360doc.com)

你可能感兴趣的:(2022-11-08 ConsensusClusterPlus 包进行一致性聚类)