我是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进行聚类,但同样,这没有帮助。我的想法是,由于两个异常值,颜色标度可能无法完全使用,但是尽管去除它们会稍微增加热图上绘制的颜色范围,但仍然没有显示正确的聚类。
还有什么我可以玩的吗?
是否可以使用热图更改色阶,以便在最后一个具有“一切都大于特定值”范围的bin中找到异常值?我尝试用heatmap.2(参数“break”)来做这个,但是我没有成功,而且我也没有设法将我使用的行侧颜色与热图功能放在一起。
答案 0 :(得分: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。 所以我认为你不需要这样做。您可能想看看我提出的一些类似的问题,这些问题可能有助于您指明正确的方向:
如果您发布了热图的图像,并且其他程序正在制作的热图图像将更容易为您提供帮助。