r - R中的聚类和热图

标签 r cluster-analysis heatmap

我是 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(参数“breaks”)来做到这一点,但我并没有完全成功,而且我也没有设法把我与热图函数一起使用的行侧颜色。

最佳答案

如果您可以使用 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
如果您发布您获得的热图图像和其他程序制作的热图图像,我们将更容易为您提供更多帮助。

关于r - R中的聚类和热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9822214/

相关文章:

algorithm - 对角簇的 K-Means

r - 不推荐在 tibble 上设置行名称。错误 : invalid 'row.names' length

java - XY block 渲染器 jfreechart 中 block 的轮廓

R:每次运行时聚类结果都不一样

html - 如何将 LaTeX Sweave 文件 (Rnw) 转换为 HTML?

mysql - RMySQL 更新行,而不是全表

r - 将向量拆分为平衡列表(列表元素的平衡和)

matlab - K 表示在肘部图为平滑曲线时找到肘部

algorithm - 热图的聚类地理数据

r - 使用具有标准误差的 felm 输出进行预测