随机化中的corcchenetic行为

时间:2017-07-10 15:31:36

标签: r hclust dendextend

我正在使用ip_hex = hex(int('0x73FF0861', 16)) 包在R中工作,尝试将dendextend个对象与hclusts进行比较。

我有两个从聚类中升起的对象:cop_copheneticclusts,我想比较它们之间的共生相关性。我有以下几个选项:

clusts1

我也可以尝试使用基础R

更直接的方法
cor_cophenetic(as.phylo(clusts), as.phylo(clusts1))
[1] 0.1632751
cor_cophenetic(as.dendrogram(clusts), as.dendrogram(clusts1))
[1] 0.1632751
cor_cophenetic(clusts, clusts1)
[1] 0.689649
cor_cophenetic(as.phylo.hclust(clusts), as.phylo.hclust(clusts1))
[1] 0.1632751

首先,我不理解在cor(as.vector(cophenetic(clusts)), as.vector(cophenetic(clusts1))) [1] 0.689649 个对象上调用cor_cophenetic,在树形图上调用hclusts或者phylos之间的区别。这里有正确的方法吗?

接下来,我尝试对cor_cophenetic的标签进行随机化测试。

clusts1

虽然dendros上的共生在随机化方面有所不同(我得到了分布)。 per <- sample(length(clusts1$labels)) clusts1$labels <- clusts1$labels[per] 上的直接共同作用保持不变(0.689649) - 并且不会改变。为什么?

1 个答案:

答案 0 :(得分:0)

使用共生相关时要记住的事情是两棵树的(共生)距离矩阵必须以相同的方式排序,以使检查具有可比性。因此,旋转树或更改其数据类型结构不应对值产生影响。你报道的是一个潜在的错误。但我无法重现它。这是一个给出正确结果的例子:

library(dendextend)
dend15 <- c(1:5) %>% dist %>% hclust(method = "average") %>% as.dendrogram %>% set("labels", as.character(labels(.)))
dend51 <- dend15 %>% set("labels", as.character(5:1)) %>% match_order_by_labels(dend15)
dend15_r <- rev(dend15)
tanglegram(dend15 ,dend15_r )
tanglegram(dend15 ,dend51 )

cor_cophenetic(dend15 ,dend15_r )
cor_cophenetic(dend15 ,dend51 )

cor_cophenetic(as.hclust(dend15),as.hclust(dend15_r) )
cor_cophenetic(as.hclust(dend15) ,as.hclust(dend51) )

输出:

> 
> cor_cophenetic(dend15 ,dend15_r )
[1] 1
> cor_cophenetic(dend15 ,dend51 )
[1] 0.3125
> 
> cor_cophenetic(as.hclust(dend15),as.hclust(dend15_r) )
[1] 1
> cor_cophenetic(as.hclust(dend15) ,as.hclust(dend51) )
[1] 0.3125
> 

前两棵树(没有拓扑差异 - cor为1) enter image description here

两棵树的第二次比较(具有拓扑差异 - cor为0.31) enter image description here

请创建一个小的自包含示例来重现此问题,并在此处发布:https://github.com/talgalili/dendextend/issues