Jak porównać "podobieństwo" dwóch dendrogramów (w R)?

Mam dwa dendrogramy, które chciałbym porównać ze sobą, aby dowiedzieć się, jak "podobne" są. Ale nie znam żadnej metody, aby to zrobić (nie mówiąc już o kodzie do implementacji, powiedzmy, w R).

Jakieś tropy ?

Aktualizacja (2014-09-13):

Odkąd zadałem to pytanie, napisałem pakiet r o nazwie dendextend , do wizualizacji, manipulacji i porównania dendrogramu. Ten pakiet jest na CRAN i pochodzi z szczegółowa winieta . Obejmuje funkcje takie jak cor_cophenetic, cor_bakers_gamma oraz Bk / Bk_plot. Oraz funkcję tanglegram do wizualnego porównywania dwóch drzew.

Author: Tal Galili, 2010-02-08

6 answers

Porównywanie dendrogramów to nie to samo, co porównywanie hierarchicznych klastrów, ponieważ pierwsze obejmuje zarówno długości gałęzi, jak i podziały, ale myślę też, że to dobry początek. Proponuję przeczytać E. B. Fowlkes & C. L. Mallows (1983). "Metoda porównywania dwóch hierarchicznych klastrów". Journal of the American Statistical Association 78 (383): 553-584 (link) .

Ich podejście opiera się na ścinaniu drzew na każdym poziomie k , uzyskanie pomiar Bk, który porównuje grupy do Kklastrów, a następnie bada działki Bkvs k. Miara Bk opiera się na patrzeniu na pary obiektów i sprawdzaniu, czy należą do tej samej gromady, czy nie.

Jestem pewien, że można napisać kod oparty na tej metodzie, ale najpierw musimy wiedzieć, jak dendrogramy są reprezentowane w R.

 15
Author: Aniko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-08 14:16:06

Jak wiesz, Dendrogramy powstają z hierarchicznego klastrowania - więc tak naprawdę pytasz, Jak mogę porównać wyniki dwóch hierarchicznych klastrów. Nie ma standardowych metryk, które znam, ale chciałbym spojrzeć na liczbę znalezionych klastrów i porównać podobieństwo członkostwa między podobnymi klastrami. Tutaj {[2] } jest dobry przegląd hierarchicznego klastrowania, który mój kolega napisał na clustering scotch whiskey ' s.

 5
Author: Paul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-15 19:11:32

Spójrz na tę stronę :

Mam też podobne pytanie zadane tutaj

Wydaje się, że możemy użyć korelacji kofenetycznej do zmierzenia podobieństwa między dwoma dendrogramami. Wydaje się jednak, że obecnie w R nie ma funkcji do tego celu.

EDIT at 2014,9,18: Funkcja cophenetic w pakiecie stats jest w stanie obliczyć macierz różniczkowalności kofenetycznej. a korelację można obliczyć za pomocą funkcji cor. jak zauważył @Tal Funkcja as.dendrogram zwróciła drzewo o innej kolejności, co spowoduje błędne wyniki, jeśli obliczymy korelację na podstawie wyników dendrogramu. Jak pokazano w przykładzie function cor_cophenetic function in dendextend package:

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
Author: pengchy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:29:38

Jeśli masz dostęp do podstawowej macierzy odległości, która generowała każdy dendrogram (prawdopodobnie masz to zrobić, jeśli wygenerowałeś dendorogramy w R), nie możesz po prostu użyć korelacji między odpowiednimi wartościami dwóch macierzy? Wiem, że to nie odnosi się do litery tego, o co prosiłeś, ale to dobre rozwiązanie dla ducha tego, o co prosiłeś.

 1
Author: dsimcha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-07 23:13:06

Spójrz na tę stronę, która zawiera wiele informacji o oprogramowaniu zajmującym się drzewami, w tym dendrogramami. Zauważyłem kilka narzędzi, które zajmują się porównywaniem drzew, chociaż osobiście nie używałem jeszcze żadnego z nich. Istnieje również szereg cytowanych tam odniesień.

 1
Author: kc2001,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-14 20:54:31

Istnieje bogata literatura dotycząca metryk odległości drzew w środowisku filogenetycznym, która wydaje się być zaniedbywana z punktu widzenia informatyki. Zobacz też dist.topo z pakietu ape dla dwóch metryk odległości drzewa i kilku cytowań (Penny and Hardy 1985, Kuhner and Felsenstein 1994), który biorąc pod uwagę podobieństwo partycji drzew, a także Robinson-Faulds metric , który ma implementację R w phangorn Paczka.

One problem polega na tym, że te metryki nie mają stałej skali, więc są użyteczne tylko w przypadku 1) porównania drzewa lub 2) porównania z jakąś wygenerowaną linią bazową, być może za pomocą testów permutacji podobnych do tego, co Tal zrobił z Gamma Bakera w jego fantastycznym pakiecie dendextend.

Jeśli masz obiekty hclust lub dendrogram wygenerowane z R hierarchicznego klastrowania, użycie as.phylo z pakietu ape przekonwertuje Twoje dendrogramy na drzewa filogenetyczne do użycia w tych funkcje.

 0
Author: jayelm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-27 06:46:42