2012-03-22 113 views
4

我是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) 

同樣,我繪製了原來的顏色,但使用log-集羣,因爲我知道,這是其他程序所做的。

我嘗試過使用這些方法,但是我沒有得到任何至少看起來像聚簇熱圖的東西。當我拿出縮放比例時,熱圖變得非常暗(我實際上非常肯定我以某種方式按比例縮放或標準化數據)。我也嘗試用k-means進行聚類,但是這再次沒有幫助。我的想法是由於有兩個異常值,顏色比例可能無法完全使用,但儘管將它們略微增加了熱圖上繪製的顏色範圍,但仍未顯示出適當的羣集。

還有什麼我可以玩的?

是否可以通過熱圖來改變顏色比例,以便在最後一個有「範圍大於特定值的區域」的區域發現異常值?我試圖用heatmap.2(參數「break」)來做到這一點,但是我沒有成功,而且我也沒有設法將熱像圖函數中使用的行邊顏色。

+0

有關使用ggplot2創建熱圖的教程,請參見[http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/] – 2012-03-22 13:16:53

+0

有關R中聚類分析的教程可用在[http://www.statmethods.net/advstats/cluster.html] – 2012-03-22 13:17:46

+0

@ EtienneLow-Décarie:謝謝,我之前通過了這些教程以及Thomas Girke的教程,但它並沒有幫助我找出問題。事實上,我一直在嘗試使用大量網站和教程來查找整個一週的解決方案。如果你可以給我一個關於我可能忽略了哪些特定細節的暗示,那麼這些細節無法正常工作。 – AnjaM 2012-03-22 13:37:52

回答

1

如果您可以使用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。 所以我認爲你不需要那樣做。你可能想看一看,我問過一些類似的問題,這可能會幫助你指出正確的方向:如果你發佈你的熱圖的圖像

Heatmap Question 1

Heatmap Question 2

而另一個程序製作的熱圖的圖像對於我們來說更容易幫助你。