2010-02-07 525 views
15

我有两个树状图,我想彼此比较,以了解它们是多么“相似”。但我不知道有任何方法可以这么做(更不用说在R中实现它的代码)。如何比较两个树状图(R中)的“相似性”?

任何线索?

UPDATE(2014年9月13日):

由于问这个问题,我写的R包称为dendextend,对于可视化,操纵和比较聚类的。该软件包位于CRAN,并附带detailed vignette。它包括功能如cor_cophenetic,cor_bakers_gammaBk/Bk_plot。以及用于视觉比较两棵树的tanglegram函数。

+1

::查找树状图::现在你有我好奇。这种比较首先有什么指标? – dmckee 2010-02-07 21:41:18

+2

您确定要这么做吗?树状图只是数据的表示。我认为比较(直接)在这两个树状图中划分的数据将会提供更多信息。 – doug 2010-02-16 18:51:56

回答

11

比较树状图是不太一样的层次比较聚类,因为前者包含分支以及劈叉的长度,但我也认为这是一个良好的开端。我建议你阅读E. B. Fowlkes & C. L. Mallows(1983)。 “比较两个分层集群的方法”。 Journal of the American Statistical Association 78(383):553-584 (link)

他们的方法是基于切削树在每个级别ķ,得到一个量度BK,所述分组进行比较成ķ簇,然后检查BK VS ķ图。度量值Bk基于查看对象对并查看它们是否落入同一个簇中。

我相信,人们可以基于该方法编写代码,但首先我们需要知道的树状图是如何在R.

代表
+0

这是非常有益的Aniko - 谢谢你! 我会进一步阅读。 – 2010-02-08 16:37:53

+2

+1感谢您的链接。这看起来像Tal的票。 – Paul 2010-02-09 17:23:56

+1

亲爱的Aniko,自从我开始这个线程以来,我已经编写了一个名为_dendextend_的R包,并带有几个用于比较树状图的函数。特别是:'cor_cophenetic','cor_bakers_gamma'和'Bk' /'Bk_plot'。该软件包还附带详细介绍这些功能的小插图。 – 2014-09-13 08:48:07

1

如果有权访问该生成的每个树状底层距离矩阵(你可能做,如果你产生R中的dendorograms),不能你只需要使用两个矩阵的相应值之间的相关?我知道这并没有解决你所问的问题,但这是你所问的精神的一个很好的解决方案。

+0

嗨dsimcha, 感谢您的想法。 在我的特殊情况下,我只有两个中的一个距离矩阵。所以你的解决方案不适用。但再次感谢! – 2010-02-08 10:26:13

4

如您所知,Dendrograms产生于层次聚类 - 所以你真正要问的是如何比较两个层次聚类运行的结果。没有我知道的标准度量标准,但是我会查看找到的群集数量,并比较类似群集之间的成员相似度。 Here是我的同事在聚类苏格兰威士忌时写的分层聚类的好概述。

+0

Hi Paul, 谢谢你的回答,我会在稍后阅读。 谢谢, Tal – 2010-02-08 10:26:43

1

看看this页面有很多信息软件处理树木,包括树状图。我注意到几个处理树比较的工具,尽管我还没有亲自使用它们中的任何一个。这里也有一些参考文献。

2

看看this page

我也有类似的问题问here

我们似乎可以用表象相关测量两个树形图之间的相似性。但是目前在R中似乎没有这个功能。

EDIT在2014,9,18:stats包的cophenetic功能是能够计算同表象相异矩阵。并且可以使用cor函数来计算相关性。因为@Tal指出as.dendrogram函数以不同的顺序返回树,如果我们根据树状图结果计算相关性,这将导致错误的结果。作为dendextend包装表现出功能cor_cophenetic功能的例子:

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! 
+1

Dear @pengchy - 在R中有这样的函数。它是'cor_cophenetic'函数,从_dendextend_包。 – 2014-09-13 08:44:55

+1

@TalGalili伟大的工作。谢谢 – pengchy 2014-09-14 08:21:03

0

有丰富的文献在系统发育的社区,好像树距离度量的身体已经从计算机科学的角度忽视。参见ape包的dist.topo两个树距离度量和几个引用(Penny and Hardy 1985,Kuhner和Felsenstein 1994),其考虑了树分区的相似性,以及在phangorn包中具有R实现的Robinson-Foulds metric

一个问题是这些指标没有固定比例,所以它们仅在1)树比较或2)与某些生成的基线比较的情况下有用,可能是通过permutation tests similar to what Tal has done with Baker's Gamma在他的梦幻般的dendextend包中。

如果您hclust或R分层聚类产生的聚类分析对象,用as.phyloape包将您的树状图转换为系统进化树在这些功能的使用。