Consensus Clustering(一致性聚类),无监督聚类方法,可根据不同组学数据集将样本区分成几个亚型,从而发现新的疾病亚型或者对不同亚型进行比较分析。
Consensus Clustering的思路是:采用重抽样方法抽取一定样本的数据集,指定聚类数目k并计算不同聚类数目下的合理性(PAC方法)
NOTE : PAC可用来优化聚类模型选择最优的K值
代码如下:
# 这里不建议使用模拟数据,结果会很差
# 1.获取示例数据
library(ALL)
data(ALL)
df <- exprs(ALL)
# 2.筛选基因(通过中位数绝对偏差度量,MAD)
mads <- apply(df,1,mad) # MAD测度
df <- df[rev(order(mads))[1:5000],] #提取前5000个基因
# 3.标准化
df <- sweep(df,1, apply(df,1,median,na.rm=T)) # 在行的方向上减去最小值,默认是减法
# 4.运行ConsensusClusterPlus
library(ConsensusClusterPlus)
maxK <- 6 # 选一个K值进行尝试
results <- ConsensusClusterPlus(df,
maxK = maxK,
reps = 1000, # 抽样次数(一般1000或更多)
pItem = 0.8, # 抽样比例
pFeature = 1,
clusterAlg = "pam", # 聚类方法
distance="pearson", # 距离计算方法
title="~/test_ty/Rtest/", # 结果保存路径
innerLinkage="complete", # 这里不建议使用默认的方法"average"
plot="png") # 结果保存形式
主要结果图如下:
结果.png
可以看出,K值为4的时候,聚类结果最好。
当然,PAC方法可以计算出最佳的K值,代码如下:
# 5.用PAC的方法确定最佳聚类数
# 面积最小值对应K为最佳K
Kvec = 2:maxK
x1 = 0.1; x2 = 0.9 # threshold defining the intermediate sub-interval
PAC = rep(NA,length(Kvec))
names(PAC) = paste("K=",Kvec,sep="") # from 2 to maxK
for(i in Kvec){
M = results[[i]]$consensusMatrix
Fn = ecdf(M[lower.tri(M)]) # M 为计算出共识矩阵
PAC[i-1] = Fn(x2) - Fn(x1)
}
optK = Kvec[which.min(PAC)] # 理想的K值
icl = calcICL(results,
title="~/test_ty/Rtest/",
plot="pdf")
结果如下:
最佳K.png
最佳的K就是4
包括从icl的图中可以看出,K=4时稳定性最好
结果.png
网友评论