r语言 - 使用Pearson距离的微阵列数据热图



我一直在尝试在R中生成一些微阵列数据的热图,并且在很大程度上已经成功地根据在线指令生成了一个热图,但它并没有完全按照我想要的去做。我想做的是基于Pearson距离来聚类数据,而不是基于euclidean距离,但是我遇到了一些困难。

使用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是每个患者所属结局组的指标。使用hclusterfun在这里工作得很好,热图似乎对方法和整体工作的变化做出了响应。问题是,聚类距离都是欧氏距离,我想把它改成皮尔逊距离。所以我尝试如下:

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需要是一个方阵。因此,我尝试了以下一些额外的建议:

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中的原始表达式值。这不是我想要的!我想要这个,我只想让树形图以不同的方式聚类,我不想改变热图中实际表示的数据!这可能吗?

Ok…我认为你只是对cordist的运作方式感到困惑。从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假设它得到的)假设您已经计算了之间的距离,而使用cor实际上是计算之间的距离。在距离函数中添加一个简单的转置,可以让这个(非正方形)示例为我运行:

TEST <- matrix(runif(100),nrow=20)
heatmap.2(t(TEST), trace="none", density="none", 
            scale="row",
            labRow="",
            hclust=function(x) hclust(x,method="complete"),
            distfun=function(x) as.dist((1-cor(t(x)))/2))

相关内容

  • 没有找到相关文章

最新更新