簡體   English   中英

R中的聚類和熱圖

[英]Clustering and heatmap in R

我是R的新手,我正在嘗試在數據表上進行一些聚類,其中行表示單個對象,列表示已為這些對象測量的特征。 我已經完成了一些聚類教程,但我得到了一些輸出,但是,我在聚類后獲得的熱圖與根據同一數據表與另一個程序生成的熱圖完全不對應。 雖然該程序的熱圖確實表明了對象之間標記表達的明顯差異,但我的熱圖並沒有顯示出太大的差異,我無法識別熱圖上的任何聚類(即顏色)圖案,它似乎是一個隨機混亂的集合顏色彼此接近(沒有大的對比度)。 這是我正在使用的代碼的一個例子,也許有人知道我可能做錯了什么。

mydata <- read.table("mydata.csv")
datamat <- as.matrix(mydata)
datalog <- log(datamat)

我正在使用聚類的日志值,因為我知道其他程序也這樣做

library(gplots)

hr <- hclust(as.dist(1-cor(t(datalog), method="pearson")), method="complete")
mycl <- cutree(hr, k=7)
mycol <- sample(rainbow(256)); mycol <- mycol[as.vector(mycl)]
heatmap(datamat, Rowv=as.dendrogram(hr), Colv=NA,
    col=colorpanel(40, "black","yellow","green"),
    scale="column", RowSideColors=mycol) 

再次,我繪制原始顏色,但使用日志集群,因為我知道這是其他程序的作用。

我嘗試使用這些方法,但我沒有得到任何至少在某種程度上看起來像聚集熱圖的東西。 當我取出縮放時,熱圖變得非常暗(我實際上確信我已經以某種方式按列擴展或規范化數據)。 我也嘗試用k-means進行聚類,但同樣,這沒有幫助。 我的想法是,由於兩個異常值,顏色標度可能無法完全使用,但是盡管去除它們會略微增加熱圖上繪制的顏色范圍,但這仍然沒有顯示出正確的聚類。

還有什么我可以玩的嗎?

是否可以使用熱圖更改色階,以便在最后一個具有“一切都大於特定值”范圍的倉中找到異常值? 我嘗試用heatmap.2(參數“break”)來做這個,但是我沒有成功,而且我也沒有設法將我使用的行側顏色與熱圖功能放在一起。

如果您可以使用gplots包中的heatmap.2,它將允許您添加中斷以將顏色指定給熱圖中表示的范圍。
例如,如果您有3種顏色藍色,白色和紅色,值從低到高,您可以執行以下操作:

my.breaks <- c(seq(-5, -.6, length.out=6),seq(-.5999999, .1, length.out=4),seq(.100009,5, length.out=7))
result <- heatmap.2(mtscaled, Rowv=T, scale='none', dendrogram="row", symm = T, col=bluered(16), breaks=my.breaks)

在這種情況下,您有3組與3種顏色相對應的值,這些值當然會有所不同,具體取決於您對數據的值。

你在程序中做的一件事就是在你的數據上調用hclust,然后在其上調用熱圖,但是如果你查看熱圖手冊頁,它會說:默認為hclust。 所以我認為你不需要這樣做。 您可能想看看我提出的一些類似的問題,這些問題可能有助於您指出正確的方向:

熱圖問題1

熱圖問題2

如果您發布熱圖的圖像,並且其他程序正在制作熱圖的圖像,我們將更容易為您提供幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM