Comment comparez-vous la "similitude" entre deux dendrogrammes (en R)?
j'ai deux dendrogrammes que je souhaite comparer entre eux afin de découvrir comment ils sont" similaires". Mais je ne connais aucune méthode pour le faire (encore moins un code pour le mettre en œuvre, disons, en R).
des pistes ?
mise à JOUR (2014-09-13):
depuis que j'ai posé cette question, j'ai écrit un paquet R appelé dendextend , pour la visualisation, la manipulation et comparaison de dendrogramme. Ce paquet est sur CRAN et est livré avec une vignette détaillée . Il comprend des fonctions telles que cor_cophenetic
, cor_bakers_gamma
et Bk
/ Bk_plot
. Ainsi qu'une fonction tanglegram
pour comparer visuellement deux arbres.
6 réponses
comparer des dendrogrammes n'est pas tout à fait la même chose que comparer des regroupements hiérarchiques, parce que le premier comprend les longueurs de branches aussi bien que les fentes, mais je pense aussi que c'est un bon début. Je vous suggère de lire E. B. Fowlkes & C. L. Mallows (1983). "Une Méthode de Comparaison de Deux Hiérarchique Clusterings". Journal de l'American Statistical Association 78 (383): 553-584 (lien) .
leur approche est basée sur la réduction arbres à chaque niveau k , obtenir une mesure Bk qui compare les regroupements en k grappes, puis l'examen des Bk vs k placettes. La mesure Bk est basée sur la recherche de paires d'objets et de voir si elles tombent dans le même cluster ou non.
je suis sûr que l'on peut écrire le code basé sur cette méthode, mais d'abord nous devrait savoir comment les dendrogrammes sont représentés dans R.
Comme vous le savez, Dendrograms proviennent de la classification hiérarchique - ce que vous êtes vraiment se demander est de savoir comment puis-je comparer les résultats de deux de clustering hiérarchique s'exécute. Il n'y a pas de mesures standard que je connaisse, mais je voudrais examiner le nombre de grappes trouvées et comparer la similarité des membres entre les grappes semblables. ici est un bon aperçu du regroupement hiérarchique que mon collègue a écrit sur le regroupement scotch whisky's.
regardez cette page :
j'ai aussi la même question posée ici
il semble que nous pouvons utiliser la corrélation cophénétique pour mesurer la similitude entre deux dendrogrammes. Mais il semble qu'il n'y ait pas de fonction à cet effet dans R actuellement.
MODIFIER au 2014,9,18:
La fonction cophenetic
dans le paquet stats
permet de calculer la matrice de dissimilarité de cophénétique. et la corrélation peut être calculée en utilisant la fonction cor
. comme @Tal l'a indiqué, la fonction as.dendrogram
renvoie l'arbre avec un ordre différent, ce qui causera des résultats erronés si nous calculons la corrélation basée sur les résultats du dendrogramme. Comme indiqué dans l'exemple de la fonction cor_cophenetic
fonction dans dendextend
paquet:
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!
si vous avez accès à la matrice de distance sous-jacente qui a généré chaque dendrogramme (ce que vous faites probablement si vous avez généré les dendorogrammes en R), ne pourriez-vous pas simplement utiliser la corrélation entre les valeurs correspondantes des deux matrices? Je sais que cela ne répond pas à la lettre de ce que vous avez demandé, mais c'est une bonne solution à l'esprit de ce que vous avez demandé.
regardez cette page qui contient beaucoup d'information sur les logiciels qui traitent des arbres, y compris les dendrogrammes. J'ai remarqué plusieurs outils qui traitent de la comparaison des arbres, bien que je n'ai personnellement utilisé aucun d'entre eux encore. Un certain nombre de références y sont également citées.
dans la communauté phylogénétique, il existe une abondante littérature sur les mesures de distance des arbres qui semble avoir été négligée du point de vue de l'informatique. Voir dist.topo
du paquet ape
pour deux mesures de distance d'arbre et plusieurs citations (Penny et Hardy 1985, Kuhner et Felsenstein 1994) qui considérant la similitude des partitions d'arbre, et aussi le Robinson-Foulds métrique qui a un R mise en œuvre dans le paquet phangorn
.
un problème est que ces mesures n'ont pas une échelle fixe, de sorte qu'ils ne sont utiles que dans les cas de 1) comparaison arbre ou 2) Comparaison à une certaine base générée, peut-être via tests de permutation similaire à ce que Tal a fait avec le Gamma de Baker dans son fantastique paquet dendextend.
si vous avez des objets hclust ou dendrogramme générés à partir R
groupement hiérarchique, en utilisant as.phylo
du paquet ape
convertira vos dendrogrammes en arbres phylogénétiques pour utilisation dans ces fonctions.