【问题标题】:cor_cophenetic behavior in randomizations随机化中的关联行为
【发布时间】:2017-07-10 15:31:36
【问题描述】:

我在 R 中工作,使用 dendextend 包,试图将 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

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

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

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

虽然 dendros 上的 cophenetic 在随机化上有所不同(我得到了一个分布)。 hclusts 上的直接同义词保持固定 (0.689649) - 不会改变。为什么会这样?

【问题讨论】:

    标签: r hclust dendextend


    【解决方案1】:

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

    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

    【讨论】:

    • 嗨,塔尔,感谢您的回答!我调查了一下,似乎当您在 phylo 或 dendro 类型的对象上使用 cor_cophenetic 时,您不必遵循顺序,而当您传递 hclust 类型的对象时,您必须更加注意标签的顺序.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 2012-06-03
    • 2011-12-26
    相关资源
    最近更新 更多