我一直在尝试在R中为某些微阵列数据生成热图,并且大部分已成功生成基于在线指令的热图,但它并不完全符合我的要求。我想要的是基于Pearson距离而不是欧几里德距离来聚类数据,但我遇到了一些困难。
使用heatmap2(来自gplots包)我使用以下代码制作我的初始热图:
heatmap.2(Test402,trace="none",density="none",scale="row", ColSideColors=c("red","blue") [data.test.factors],col=redgreen,labRow="",hclustfun=function(x) hclust(x,method="complete"))
Test402是具有402行(基因)和31列(患者)的矩阵,data.test.factors是每个患者所属的结果组的指标。使用hclustfun在这里工作正常,热图似乎对方法和整体工作的变化做出响应。问题是,聚类距离都是欧几里德距离,我想把它改为Pearson距离。所以我尝试以下方法:
heatmap.2(Test402,trace="none",density="none",scale="row", ColSideColors=c("red","blue")[data.test.factors],col=redgreen,labRow="",hclustfun=function(x) hclust(x,method="complete"), distfun=function(x) as.dist((1-cor(x))/2) )
以上命令失败。那是因为Test402 needs to be a square matrix.所以看了一些额外的建议我尝试了以下内容:
cU = cor(Test402)
heatmap.2(cU,trace="none",density="none",scale="row", ColSideColors=c("red","blue")[data.test.factors],col=redgreen,labRow="",hclustfun=function(x) hclust(x,method="complete"), distfun=function(x) as.dist((1-x)/2) )
这是有效的,但这是问题所在。热图,而不是在TEST402中具有原始表达式值,现在仅显示相关性。这不是我想要的!我想要this,我只希望树形图以不同的方式聚类,我不想改变热图中实际表示的数据!这可能吗?
答案 0 :(得分:10)
好的......我认为您对cor
和dist
的运作方式感到困惑。来自dist
的文档:
This function computes and returns the distance matrix computed by using the specified
distance measure to compute the distances between the rows of a data matrix.
来自cor
的文档:
If x and y are matrices then the covariances (or correlations)
between the columns of x and the columns of y are computed.
看到区别? dist
(以及dist
对象,这是heatmap.2
假设它正在获得的对象)假设您计算了行之间的距离,同时使用{{1你基本上是在计算列之间的距离。在距离函数中添加一个简单的转置允许这个(非方形)示例为我运行:
cor