我有两个树形图,我希望相互比较,以找出它们是如何“相似”的。但我不知道有任何方法可以这样做(更不用说实现它的代码了,比方说,在R中)。
任何线索?
更新(2014-09-13):
自从提出这个问题以来,我编写了一个名为dendextend的R包,用于树形图的可视化,操作和比较。此软件包位于CRAN,附带detailed vignette。它包括cor_cophenetic
,cor_bakers_gamma
和Bk
/ Bk_plot
等功能。以及用于在视觉上比较两棵树的tanglegram
函数。
答案 0 :(得分:15)
比较树形图与比较层次聚类并不完全相同,因为前者包括分支的长度以及分裂,但我也认为这是一个好的开始。我建议你阅读E. B. Fowlkes& C. L. Mallows(1983)。 “比较两个分层聚类的方法”。 Journal of the American Statistical Association 78(383):553-584 (link)。
他们的方法是基于切割每个级别的树 k ,获得一个度量 Bk ,将分组与 k 群集进行比较,以及然后检查 Bk vs k 图。度量 Bk 基于查看对象对并查看它们是否属于同一群集。
我确信可以根据这种方法编写代码,但首先我们需要知道如何在R中表示树形图。
答案 1 :(得分:5)
如您所知,Dendrograms来自层次聚类 - 所以您真正要问的是如何比较两个层次聚类运行的结果。我不知道有哪些标准指标,但我会查看找到的集群数量,并比较类似集群之间的成员资格相似性。 Here是对我的同事在苏格兰威士忌聚类上所写的层次聚类的一个很好的概述。
答案 2 :(得分:3)
查看this page:
我也有类似问题here
似乎我们可以使用共生相关来测量两个树状图之间的相似性。但目前在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!
答案 3 :(得分:1)
如果您可以访问生成每个树形图的基础距离矩阵(如果您在R中生成了树形图,则可能会这样做),您是否只能使用两个矩阵的相应值之间的相关性?我知道这并没有解决你所问的问题,但这是你所问的精神的一个很好的解决方案。
答案 4 :(得分:1)
查看this页面,其中包含有关处理树木的软件的大量信息,包括树状图。我注意到了几种处理树比较的工具,尽管我还没有亲自使用它们。这里也引用了许多参考文献。
答案 5 :(得分:0)
在系统发育学界,有大量关于树距离度量的文献似乎从计算机科学的角度被忽略了。请参阅ape
包的dist.topo
了解两个树距离度量和几个引用(Penny和Hardy 1985,Kuhner和Felsenstein 1994),它们考虑了树分区的相似性,以及Robinson-Foulds metric在phangorn
包中有一个R实现。
一个问题是这些指标没有固定的比例,因此它们仅适用于1)树比较或2)与某些生成的基线进行比较,可能是通过permutation tests similar to what Tal has done with Baker's Gamma在他梦幻般的dendextend中封装
如果您有R
层次聚类生成的hclust或树形图对象,则使用as.phylo
包中的ape
会将树形图转换为系统发育树,以便在这些函数中使用。