熱圖是文章中必不可少的一類圖形明也,而如何聚的好看也就成了無(wú)法避免的話題,好看不僅帶來(lái)視覺的喜好,同時(shí)也更好的從至少某一方面揭示了事物的內(nèi)在規(guī)律办素,一個(gè)好的聚類常常能帶來(lái)有前景的實(shí)際應(yīng)用,比如用于臨床標(biāo)志物的發(fā)現(xiàn)或者疾病的分子亞型分類祸穷。因此性穿,如何能聚的更準(zhǔn)確,這就成了我們關(guān)心的問(wèn)題雷滚。
這個(gè)post需曾,說(shuō)是小技巧,其實(shí)大部分人都用不到祈远,很多時(shí)候大家并不關(guān)心聚類聚錯(cuò)的具體數(shù)字呆万。我卻被困惑了很久,每次做聚類熱圖车份,只是看上去大概差不多了谋减,但到底差多少?師兄是一個(gè)很認(rèn)真的人扫沼,所以我每次都只能通過(guò)數(shù)格子進(jìn)行統(tǒng)計(jì)(原諒我智商有限)出爹,這樣樣本量一大不僅效率低下,而且很容易數(shù)錯(cuò)缎除。
今天突然想起了之前一個(gè)公眾號(hào)的一個(gè)熱圖的代碼严就,經(jīng)過(guò)思考和嘗試,終于以自己的方式解決了這個(gè)問(wèn)題器罐,雖然還不夠快盈蛮,但還是比數(shù)數(shù)準(zhǔn)確多了。
統(tǒng)計(jì)聚類結(jié)局與實(shí)際分類的差別技矮,本質(zhì)上其實(shí)也是比較預(yù)測(cè)的混淆矩陣問(wèn)題抖誉,因此,在熱圖中衰倦,一個(gè)關(guān)鍵的基礎(chǔ)就是把樣本聚類后的樣本名稱按順序從圖中拉下來(lái)袒炉,并根據(jù)聚類簇找到聚類的分界點(diǎn),可以有兩種方法實(shí)現(xiàn):
1.通過(guò)代碼實(shí)現(xiàn),b<-pheatmap(z2)
,這一句可以畫出heatmap(中間過(guò)程自己設(shè))樊零,然后我磁,關(guān)鍵的一句:z2_cluster <- z2[b$tree_row$order, b$tree_col$order]
孽文,這一句得到一個(gè)數(shù)值框,我們關(guān)心的是colname夺艰,因此芋哭,再運(yùn)行colnames(z2_cluster)
即可得到熱圖中聚類后的樣本順序。當(dāng)然郁副,如果樣本很多比如大于100個(gè)减牺,那可以通過(guò)write.csv()
語(yǔ)句把它寫出來(lái)。核對(duì)之后發(fā)現(xiàn)確實(shí)是熱圖中的樣本順序存谎。
2.第二種方法也很簡(jiǎn)單拔疚,打開熱圖,直接從左到右復(fù)制樣本名稱既荚,粘貼到excel中即可稚失。
通過(guò)前面的步驟,就完成了第一步恰聘,此時(shí)在excel中完成如下excel數(shù)據(jù)排列:
其中的G列是聚類后樣本的排序句各,這里保留排序以防后面打亂;在真實(shí)樣本分類和聚類后分類(cluster)中間空出一列晴叨;
第二步凿宾、
接下來(lái)填充cluster
一列,在熱圖中找到聚類樹的分界
用pdf的矩形工具拉到底篙螟,找到對(duì)應(yīng)的樣本名菌湃,即是0和1的預(yù)測(cè)分界,該樣本以上為0遍略,以下為1(或相反惧所,看具體聚類情況),填寫到
cluster
一列中绪杏;然后將
SampleId
一列復(fù)制到最后H列并分列下愈,將樣本順序按從小到大排列(注意只排聚類后的幾列,這就是為什么要空出D列的原因)蕾久,最后H列分列后的最后一列即為樣本順序势似,此時(shí)表格變?yōu)檫@樣:第三步、
現(xiàn)在僧著,可以刪掉D列了履因。刪掉后對(duì)所有表格執(zhí)行篩選操作:
現(xiàn)在我們來(lái)看聚類的混淆矩陣:
先看特異性,即真實(shí)類別和聚類類別均為0盹愚,先篩選“真實(shí)類別”一列為0栅迄,再看“cluster”下有幾個(gè)0,發(fā)現(xiàn)只有一個(gè)樣本即sample5皆怕;
同樣的毅舆,篩選“真實(shí)類別”為1西篓,再看“cluster”下有幾個(gè)1,發(fā)現(xiàn)有sample1,sample2,sample3,sample4,共4個(gè)樣本聚類為1分類憋活。而真實(shí)類別下的0和1個(gè)數(shù)分別為5個(gè)和10個(gè)岂津,因此對(duì)應(yīng)的特異性和靈敏度即是:1/5=20%和4/10=40%
通過(guò)這個(gè)方法可以比較不同模型在聚類熱圖中的聚類情況。其實(shí)意義不大悦即,不過(guò)如果本身只是基于某些特征做聚類熱圖吮成,那還是有意義的。