2010-02-07 135 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包將您的樹狀圖轉換爲系統進化樹在這些功能的使用。