24

我有两个树状图,我希望将它们相互比较,以了解它们有多“相似”。但我不知道有任何方法可以做到这一点(更不用说在 R 中实现它的代码了)。

有什么线索吗?

更新(2014-09-13):

自从提出这个问题后,我编写了一个名为dendextend的 R 包,用于对树状图进行可视化、操作和比较。这个包在CRAN上,并带有一个详细的小插图。它包括cor_cophenetic,cor_bakers_gammaBk/等函数Bk_plot。以及tanglegram用于在视觉上比较两棵树的功能。

4

6 回答 6

17

比较树状图与比较层次聚类并不完全相同,因为前者包括分支的长度以及分裂,但我也认为这是一个好的开始。我建议你阅读 EB Fowlkes & CL Mallows (1983)。“一种比较两个层次聚类的方法”。美国统计协会杂志 78 (383): 553–584 (链接)

他们的方法是基于在每个级别k切割树,得到一个度量Bk,将分组比较到k个集群中,然后检查Bkk的图。度量Bk是基于查看成对的对象并查看它们是否落入同一个集群。

我确信可以根据这种方法编写代码,但首先我们需要知道树状图在 R 中是如何表示的。

于 2010-02-08T14:16:06.123 回答
5

如您所知,树状图源于层次聚类 - 所以您真正要问的是如何比较两个层次聚类运行的结果。我知道没有标准指标,但我会查看找到的集群数量并比较类似集群之间的成员相似性。 是我的同事写的关于聚类苏格兰威士忌的层次聚类的一个很好的概述。

于 2010-02-08T05:29:12.403 回答
3

看看这个页面

我也有类似的问题问here

似乎我们可以使用 cophenetic 相关性来衡量两个树状图之间的相似性。但目前 R 中似乎没有用于此目的的功能。

在 2014,9,18 编辑:包中 的cophenetic函数stats能够计算并列相异矩阵。并且可以使用cor函数计算相关性。正如@Tal 指出的那样,该as.dendrogram函数以不同的顺序返回了树,如果我们根据树状图结果计算相关性,则会导致错误的结果。如包中函数cor_cophenetic函数示例所示dendextend

set.seed(23235)
ss <- sample(1:150, 10 )
hc1 <- iris[ss,-5] %>% dist %>% hclust("com")
hc2 <- iris[ss,-5] %>% dist %>% hclust("single")
dend1 <- as.dendrogram(hc1)
dend2 <- as.dendrogram(hc2)
# cutree(dend1)
cophenetic(hc1)
cophenetic(hc2)
# notice how the dist matrix for the dendrograms have different orders:
cophenetic(dend1)
cophenetic(dend2)
cor(cophenetic(hc1), cophenetic(hc2)) # 0.874
cor(cophenetic(dend1), cophenetic(dend2)) # 0.16
# the difference is becasue the order of the distance table in the case of
# stats:::cophenetic.dendrogram will change between dendrograms!
于 2014-09-12T03:13:16.337 回答
1

如果您可以访问生成每个树状图的基础距离矩阵(如果您在 R 中生成树状图,您可能会这样做),您不能只使用两个矩阵的相应值之间的相关性吗?我知道这并没有解决您所要求的内容,但它是您所要求的精神的一个很好的解决方案。

于 2010-02-07T23:13:06.797 回答
1

看看这个页面,它有很多关于处理树的软件的信息,包括树状图。我注意到几个处理树比较的工具,虽然我还没有亲自使用过它们中的任何一个。那里也引用了许多参考文献。

于 2011-05-14T20:54:31.583 回答
1

在系统发育学界有大量关于树距离度量的文献,从计算机科学的角度来看,这些文献似乎被忽视了。参见包中dist.topoape两个树距离度量和几个引用(Penny 和 Hardy 1985,Kuhner 和 Felsenstein 1994),它们考虑了树分区的相似性,以及在包中具有 R 实现的Robinson-Foulds 度量。phangorn

一个问题是这些指标没有固定的比例,因此它们仅在 1) 树比较或 2) 与某些生成的基线进行比较的情况下有用,可能通过类似于 Tal 在 Baker's Gamma中所做的置换测试他的奇妙dendextend包。

R如果您有从层次聚类生成的 hclust 或树状图对象,as.phylo则使用ape包中的将您的树状图转换为系统发育树,以便在这些函数中使用。

于 2016-06-27T06:46:42.203 回答