2012-03-22 79 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

而另一个程序制作的热图的图像对于我们来说更容易帮助你。