R中的聚类和热图

4

我是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的颜色刻度表,以便将离群值找到一个具有“大于某个特定值的所有内容”范围的最后一个箱中?我尝试过heatmap.2(参数“breaks”),但我没有成功,也没有成功使用heatmap函数中使用的行侧颜色。


使用ggplot2创建热图的教程可在[http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/]上找到。 - Etienne Low-Décarie
在R中有一个聚类分析教程可供学习,网址为[http://www.statmethods.net/advstats/cluster.html]。 - Etienne Low-Décarie
@EtienneLow-Décarie:谢谢,我确实看过这些教程以及Thomas Girke的教程,但它们并没有帮助我找到问题所在。事实上,我已经尝试了一整个星期,使用了许多网站和教程来寻找解决方案。如果您能给我一个提示,告诉我可能由于哪个特定的细节被忽略了,导致聚类不能正常工作,我将不胜感激。 - AnjaM
这是什么其他程序?它如何计算热力图? - EDi
@EDi:这不是商业软件,而是在我大学开发的。它使用自然对数数据的分层聚类算法。热图显示非对数数据值,你可以清楚地看到热图上的不同人群。我被告知数据没有缩放。 - AnjaM
如果您提供数据获取链接,可能会有所帮助。 - Alos
1个回答

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,然后调用heatmap,但是如果您查看heatmap手册页面,它会声明: 默认为hclust。 因此我认为您不需要这样做。您可能想查看一些类似的问题,这些问题可能会帮助您指出正确的方向: 热图问题1 热图问题2 如果您发布一个热图的图像以及另一个程序正在制作的热图的图像,我们将更容易地帮助您解决问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接