Consensus Clustering(一致性聚類)仇奶,無(wú)監(jiān)督聚類方法陡蝇,可根據(jù)不同組學(xué)數(shù)據(jù)集將樣本區(qū)分成幾個(gè)亞型践樱,從而發(fā)現(xiàn)新的疾病亞型或者對(duì)不同亞型進(jìn)行比較分析翰灾。
Consensus Clustering的思路是:采用重抽樣方法抽取一定樣本的數(shù)據(jù)集,指定聚類數(shù)目k并計(jì)算不同聚類數(shù)目下的合理性(PAC方法)
NOTE : PAC可用來(lái)優(yōu)化聚類模型選擇最優(yōu)的K值
代碼如下:
# 這里不建議使用模擬數(shù)據(jù)稚茅,結(jié)果會(huì)很差
# 1.獲取示例數(shù)據(jù)
library(ALL)
data(ALL)
df <- exprs(ALL)
# 2.篩選基因(通過中位數(shù)絕對(duì)偏差度量纸淮,MAD)
mads <- apply(df,1,mad) # MAD測(cè)度
df <- df[rev(order(mads))[1:5000],] #提取前5000個(gè)基因
# 3.標(biāo)準(zhǔn)化
df <- sweep(df,1, apply(df,1,median,na.rm=T)) # 在行的方向上減去最小值,默認(rèn)是減法
# 4.運(yùn)行ConsensusClusterPlus
library(ConsensusClusterPlus)
maxK <- 6 # 選一個(gè)K值進(jìn)行嘗試
results <- ConsensusClusterPlus(df,
maxK = maxK,
reps = 1000, # 抽樣次數(shù)(一般1000或更多)
pItem = 0.8, # 抽樣比例
pFeature = 1,
clusterAlg = "pam", # 聚類方法
distance="pearson", # 距離計(jì)算方法
title="~/test_ty/Rtest/", # 結(jié)果保存路徑
innerLinkage="complete", # 這里不建議使用默認(rèn)的方法"average"
plot="png") # 結(jié)果保存形式
主要結(jié)果圖如下:
結(jié)果.png
可以看出亚享,K值為4的時(shí)候咽块,聚類結(jié)果最好。
當(dāng)然欺税,PAC方法可以計(jì)算出最佳的K值侈沪,代碼如下:
# 5.用PAC的方法確定最佳聚類數(shù)
# 面積最小值對(duì)應(yīng)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 為計(jì)算出共識(shí)矩陣
PAC[i-1] = Fn(x2) - Fn(x1)
}
optK = Kvec[which.min(PAC)] # 理想的K值
icl = calcICL(results,
title="~/test_ty/Rtest/",
plot="pdf")
結(jié)果如下:
最佳K.png
最佳的K就是4
包括從icl的圖中可以看出揭璃,K=4時(shí)穩(wěn)定性最好
結(jié)果.png