1

我正在使用 Rdendextend包,尝试将hclusts对象与cop_cophenetic.

我有两个从聚类中产生的对象:clustsclusts1,我想比较它们之间的共生相关性。我有以下几种选择:

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

我也可以尝试使用 base R 更直接的方法

cor(as.vector(cophenetic(clusts)), as.vector(cophenetic(clusts1)))
[1] 0.689649

首先,我不明白调用对象、调用树状图或 phylos之间cor_cophenetic的区别。这里有正确的方法吗?hclustscor_cophenetic

接下来,我尝试对clusts1.

per <- sample(length(clusts1$labels))
clusts1$labels <- clusts1$labels[per]

虽然 dendros 上的 cophenetic 在随机化上有所不同(我得到了一个分布)。保持不变(0.689649)的直接共hclusts质 - 并且不会改变。为什么?

4

1 回答 1

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 of 1) 在此处输入图像描述

两棵树的第二次比较(拓扑差异 - cor 为 0.31) 在此处输入图像描述

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

于 2017-07-11T08:55:51.043 回答