无监督一致性聚类

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

你可能感兴趣的:(无监督一致性聚类)