Comparer des dendrogrammes en R : tanglegrammes, corrélation

Deux méthodes de liaison donnent deux arbres différents — alignez-les avec un tanglegramme, mesurez leur accord avec la corrélation cophénétique et de Baker, et décidez à quel regroupement vous fier

Comparez deux arbres de classification hiérarchique en R avec le package dendextend. Tracez un tanglegramme pour aligner deux dendrogrammes côte à côte et repérer leurs désaccords, lisez le score d’enchevêtrement, puis quantifiez leur similarité avec la corrélation cophénétique et de Baker. Inclut la comparaison simultanée de plusieurs méthodes de liaison à l’aide d’une matrice de corrélation et d’un corrplot.

Date de publication

24 juin 2026

Modifié

7 juillet 2026

AstucePoints clés
  • L’arbre de regroupement que vous obtenez dépend de la méthode de liaison — les méthodes average et Ward peuvent regrouper différemment les mêmes observations. Avant de vous fier à un dendrogramme, comparez-le à une alternative.
  • Un tanglegramme trace deux dendrogrammes face à face et relie par une ligne chaque paire d’étiquettes correspondantes — plus les lignes sont nettes, plus les deux arbres s’accordent.
  • L’enchevêtrement est un nombre unique (de 0 à 1) qui résume à quel point ces lignes sont entremêlées : plus c’est bas, mieux c’est (0 = parfaitement aligné).
  • Un tanglegramme est visuel et peut induire en erreur — appuyez-le sur un nombre. cor.dendlist() donne la corrélation cophénétique ou de Baker entre les arbres (de −1 à 1 ; proche de 1 = très similaires).
  • Vous pouvez comparer plusieurs arbres à la fois : construisez un dendlist, obtenez la matrice de corrélation complète et lisez-la sur un corrplot.
Obtenez le livre — Practical Guide to Cluster Analysis in R (PDF)

Introduction

Vous avez exécuté une classification hiérarchique, obtenu un dendrogramme et regroupé vos données. Puis un relecteur pose la question évidente : une autre méthode de liaison aurait-elle donné des regroupements différents ? C’est souvent le cas — la liaison average et la méthode de Ward peuvent placer les mêmes observations dans des branches différentes. Donc avant de bâtir un récit sur un seul arbre, vous devriez comparer deux arbres et voir à quel point ils s’accordent réellement.

Cette leçon présente les deux outils que le package dendextend vous offre pour cela :

  • tanglegram() — une comparaison visuelle, côte à côte, de deux dendrogrammes.
  • cor.dendlist() — une matrice de corrélation qui transforme « à quel point ces arbres sont-ils similaires ? » en un nombre.

Tout ce qui suit relève du R de base plus dendextend. Nous utilisons les données intégrées USArrests pour que vous puissiez exécuter chaque bloc tel quel.

Les données

Nous utiliserons les données intégrées de R USArrests (nombre d’arrestations pour 100 000 habitants pour Murder, Assault et Rape, plus le pourcentage UrbanPop, pour chaque État américain). Les différentes variables sont sur des échelles très différentes, nous les standardisons donc d’abord avec scale() — exactement comme vous le feriez avant tout regroupement fondé sur les distances.

Un tanglegramme à 50 États serait un mur de lignes illisible. Pour garder les graphiques lisibles, nous prenons un petit sous-ensemble aléatoire de 10 États avec sample(). Le set.seed(123) rend ce sous-ensemble reproductible, de sorte que vos arbres correspondent à ceux ci-dessous.

# Standardize all four variables
df <- scale(USArrests)

# Keep a readable random subset of 10 states
set.seed(123)
ss <- sample(1:50, 10)
df <- df[ss, ]

head(df, 3)
               Murder   Assault    UrbanPop        Rape
New Mexico  0.8292944  1.370809  0.30812248  1.16031965
Iowa       -1.2829727 -1.377048 -0.58999237 -1.06038781
Indiana    -0.1350014 -0.693084 -0.03730631 -0.02476943

Construire deux dendrogrammes

Pour avoir quelque chose à comparer, nous regroupons les mêmes données deux fois avec deux méthodes de liaison différentes"average" et "ward.D2" — et convertissons chaque résultat de hclust() en dendrogramme avec as.dendrogram(). dendlist() réunit ensuite les deux dendrogrammes dans un seul objet liste que les fonctions de comparaison comprennent.

library(dendextend)

# One distance matrix, reused for both trees
res.dist <- dist(df, method = "euclidean")

# Two hierarchical clusterings with different linkage
hc1 <- hclust(res.dist, method = "average")
hc2 <- hclust(res.dist, method = "ward.D2")

# Turn each into a dendrogram
dend1 <- as.dendrogram(hc1)
dend2 <- as.dendrogram(hc2)

# Hold both in a dendlist
dend_list <- dendlist(dend1, dend2)
dend_list
[[1]]
'dendrogram' with 2 branches and 10 members total, at height 2.912926 

[[2]]
'dendrogram' with 2 branches and 10 members total, at height 5.908419 

attr(,"class")
[1] "dendlist"

Les comparer visuellement : le tanglegramme

Un tanglegramme trace les deux dendrogrammes face à face et relie chaque étiquette de gauche à la même étiquette de droite. Les fonctions concernées, toutes issues de dendextend :

  • untangle() — fait pivoter heuristiquement les branches pour trouver l’agencement avec le moins de lignes croisées (nous utilisons method = "step1side").
  • tanglegram() — trace les deux arbres alignés avec les lignes de liaison.
  • entanglement() — note la qualité de l’alignement sur une échelle de 0 à 1, où 1 correspond à un enchevêtrement total et 0 à un alignement parfait, sans croisement. Plus c’est bas, mieux c’est.

Lisez le résultat ainsi : des lignes de liaison droites et horizontales signifient que les deux arbres placent cet État de la même façon ; les lignes croisées marquent les États sur lesquels les deux méthodes sont en désaccord ; et les branches en pointillés sont des sous-arbres qui existent dans un arbre mais pas dans l’autre.

# Align the two trees, then draw them side by side
dendlist(dend1, dend2) %>%
  untangle(method = "step1side") %>%  # find the best-aligned layout
  tanglegram()                        # draw the two dendrograms

A tanglegram with the average-linkage dendrogram on the left and the ward.D2 dendrogram on the right, ten US states labelled down the middle. Most connecting lines run straight across, a few cross, and dashed branches mark subtrees unique to one tree.

Mettez maintenant un nombre sur la qualité de leur alignement :

# Alignment quality: lower = better (0 is perfect, 1 is fully tangled)
dendlist(dend1, dend2) %>%
  untangle(method = "step1side") %>%
  entanglement()
[1] 0

L’enchevêtrement est ici de 0 — ces deux arbres s’alignent parfaitement, sans aucune ligne croisée, donc pour ce sous-ensemble le choix entre la liaison average et celle de Ward ne change quasiment pas le regroupement.

tanglegram() accepte de nombreuses options de style. Quelques-unes bien utiles : désactiver la mise en évidence en pointillés des « branches uniques », supprimer les couleurs par ligne, ou colorer les sous-arbres communs pour faire ressortir la structure partagée.

dendlist(dend1, dend2) %>%
  untangle(method = "step1side") %>%
  tanglegram(
    highlight_distinct_edges = FALSE,    # turn off dashed lines
    common_subtrees_color_lines = FALSE, # turn off line colours
    common_subtrees_color_branches = TRUE # colour the shared branches
  )
Avertissement

Un tanglegramme peut flatter deux arbres. Obtenir des lignes de liaison horizontales ne prouve pas que les arbres sont identiques, ni même topologiquement similaires — untangle() est autorisé à faire pivoter les branches pour réduire les croisements. Confirmez toujours une impression visuelle par une corrélation, que nous calculons ensuite.

Mesurer l’accord : corrélation des dendrogrammes

cor.dendlist() calcule une matrice de corrélation entre les arbres d’un dendlist. Elle prend en charge deux mesures, allant toutes deux de −1 à 1, où des valeurs proches de 0 signifient que les arbres ne sont pas statistiquement similaires et des valeurs proches de 1 qu’ils s’accordent fortement :

  • Corrélation cophénétique — corrèle les distances cophénétiques (la hauteur à laquelle chaque paire d’observations se retrouve pour la première fois dans la même branche). C’est la mesure classique.
  • Gamma de Baker — une mesure fondée sur les rangs, construite à partir des mêmes hauteurs de fusion ; moins sensible aux distances exactes, davantage à l’ordre dans lequel les observations fusionnent.
# Cophenetic correlation matrix
cor.dendlist(dend_list, method = "cophenetic")
          [,1]      [,2]
[1,] 1.0000000 0.9925544
[2,] 0.9925544 1.0000000
# Baker correlation matrix
cor.dendlist(dend_list, method = "baker")
          [,1]      [,2]
[1,] 1.0000000 0.9895528
[2,] 0.9895528 1.0000000

L’entrée hors diagonale est le nombre qui vous intéresse — ici environ 0.99 pour les deux mesures. Toutes deux sont très proches de 1, ce qui confirme le tanglegramme : les arbres average et Ward sont presque identiques.

Pour seulement deux arbres, vous pouvez vous passer de la matrice et obtenir directement le coefficient unique :

# Cophenetic correlation coefficient
cor_cophenetic(dend1, dend2)
[1] 0.9925544
# Baker correlation coefficient
cor_bakers_gamma(dend1, dend2)
[1] 0.9895528

Comparer plusieurs méthodes de liaison à la fois

La matrice prend toute sa valeur lorsque vous comparez plus de deux arbres. Construisez un arbre par méthode de liaison, donnez un nom à chacun dans dendlist(), et cor.dendlist() renvoie la matrice complète des paires. Un corrplot fait alors ressortir d’un coup d’œil les accords (et les désaccords).

# Four trees on the same data, different linkage methods
res.dist <- dist(df, method = "euclidean")
dend1 <- as.dendrogram(hclust(res.dist, method = "complete"))
dend2 <- as.dendrogram(hclust(res.dist, method = "single"))
dend3 <- as.dendrogram(hclust(res.dist, method = "average"))
dend4 <- as.dendrogram(hclust(res.dist, method = "centroid"))

# Name them so the matrix is readable
dend_list <- dendlist(
  "Complete" = dend1, "Single" = dend2,
  "Average"  = dend3, "Centroid" = dend4
)

# Full pairwise (cophenetic) correlation matrix
cors <- cor.dendlist(dend_list)
round(cors, 2)
         Complete Single Average Centroid
Complete     1.00   0.46    0.45     0.30
Single       0.46   1.00    0.23     0.17
Average      0.45   0.23    1.00     0.31
Centroid     0.30   0.17    0.31     1.00
library(corrplot)
corrplot(cors, "pie", "lower")

A lower-triangle pie corrplot of the correlation matrix between four linkage-method dendrograms. All pies are small — no two methods agree strongly; complete vs single is the largest (about 0.46) and centroid is the most isolated.

Lisez le graphique : sur ce petit sous-ensemble, aucune paire de méthodes de liaison ne s’accorde fortement — la corrélation hors diagonale la plus élevée n’est que d’environ 0.46 (complete vs single), et la liaison centroid est la plus isolée de toutes (de 0.17 à 0.31 avec les autres). Autrement dit, les quatre méthodes construisent ici des arbres réellement différents. C’est exactement le type de désaccord que vous voulez faire ressortir avant de vous engager sur un regroupement — sur ces données, le choix de la méthode de liaison compte clairement.

Essayez en direct

Comparez vous-même deux méthodes de liaison. Remplacez "ward.D2" par "complete", "single" ou "centroid", relancez, et observez le tanglegramme et le score d’enchevêtrement changer. Cliquez sur Run.

🟢 Avec un agent IA

Demandez à Prova « compare deux arbres de regroupement sur mes données et dis-moi si le choix de la liaison compte » — elle répond avec du code dendextend que vous pouvez exécuter sur votre propre data frame, trace le tanglegramme et vous lit la corrélation cophénétique. The runtime is the judge. Demander à Prova →

Problèmes courants

Mon tanglegramme est un mur de lignes illisible. Les tanglegrammes ne restent lisibles que pour de petits arbres (environ 10 à 30 étiquettes). Avec plus de 50 observations, les lignes de liaison se chevauchent et deviennent du bruit. Prenez un sous-ensemble aléatoire (comme nous l’avons fait avec sample()), ou comparez plutôt les arbres avec la matrice de corrélation — elle s’adapte à n’importe quelle taille.

Que signifie réellement le nombre d’enchevêtrement ? Il mesure à quel point les lignes de liaison sont croisées après alignement, sur une échelle de 0 à 1 : 0 correspond à un agencement net, sans croisement, et 1 à un enchevêtrement maximal. Plus c’est bas, mieux c’est. Il décrit la qualité de l’agencement visuel, et non la similarité des arbres — pour la similarité, utilisez la corrélation cophénétique ou de Baker.

Cophénétique ou Baker — quelle corrélation rapporter ? Utilisez la cophénétique par défaut ; c’est la norme et elle reflète les hauteurs réelles de fusion. Tournez-vous vers le gamma de Baker lorsque vous vous souciez de l’ordre dans lequel les observations fusionnent plutôt que des distances exactes, ou lorsque quelques grandes distances domineraient la valeur cophénétique. Elles concordent généralement de près (ici, environ 0.99 toutes les deux).

Questions fréquentes

Un tanglegramme est un graphique qui place deux dendrogrammes face à face et trace une ligne reliant chaque étiquette correspondante. Il sert à comparer visuellement deux arbres de regroupement : les lignes droites et horizontales marquent les étiquettes que les deux arbres placent de la même façon, les lignes croisées marquent les désaccords, et les branches en pointillés marquent les sous-arbres propres à un seul arbre. En R, tracez-en un avec dendextend::tanglegram().

Construisez chaque arbre avec hclust(), convertissez-les avec as.dendrogram(), et placez les deux dans un dendlist(). Ensuite, visualisez la comparaison avec tanglegram() et quantifiez-la avec cor.dendlist() (ou cor_cophenetic() pour une seule paire). Le visuel et le nombre, ensemble, vous indiquent si les deux arbres s’accordent réellement.

C’est la corrélation entre les distances cophénétiques des deux arbres — la hauteur à laquelle chaque paire d’observations se retrouve pour la première fois dans la même branche. Elle va de −1 à 1 ; proche de 1 signifie que les deux arbres sont très similaires, proche de 0 qu’ils ne sont pas statistiquement similaires. Calculez-la avec cor.dendlist(dend_list, method = "cophenetic") ou cor_cophenetic(dend1, dend2).

L’enchevêtrement va de 0 à 1 et mesure à quel point les lignes de liaison du tanglegramme sont entremêlées après alignement — plus c’est bas, mieux c’est, 0 signifiant un alignement parfait, sans croisement. Il n’y a pas de seuil strict, mais des valeurs proches de 0 (disons, inférieures à 0.1) indiquent que les deux arbres s’alignent proprement. Il mesure la qualité de l’agencement, et non la similarité des arbres.

Les deux mesurent à quel point deux dendrogrammes sont similaires, de −1 à 1. La corrélation cophénétique utilise les hauteurs de fusion réelles (distances cophénétiques). Le gamma de Baker est fondé sur les rangs, construit à partir de l’ordre dans lequel les observations fusionnent, il est donc moins sensible aux distances exactes. Elles concordent généralement ; rapportez la cophénétique par défaut et utilisez Baker quand les rangs comptent davantage que les magnitudes.

Testez vos connaissances

Sur le sous-ensemble standardisé de 10 États de USArrests, construisez un dendrogramme avec la liaison complete et un avec la liaison single, puis affichez leur corrélation cophénétique. Est-elle supérieure ou inférieure au ~0.99 que nous avons vu pour average vs Ward ?

# Put "complete" in the first hclust() and "single" in the second.
library(dendextend) df <- scale(USArrests) set.seed(123) df <- df[sample(1:50, 10), ] res.dist <- dist(df, method = "euclidean") dc <- as.dendrogram(hclust(res.dist, method = "complete")) ds <- as.dendrogram(hclust(res.dist, method = "single")) cor_cophenetic(dc, ds)
library(dendextend)
df <- scale(USArrests)
set.seed(123)
df <- df[sample(1:50, 10), ]

res.dist <- dist(df, method = "euclidean")
dc <- as.dendrogram(hclust(res.dist, method = "complete"))
ds <- as.dendrogram(hclust(res.dist, method = "single"))
cor_cophenetic(dc, ds)
  1. Conceptuel. Un tanglegramme montre toutes les lignes de liaison parfaitement horizontales, et pourtant la corrélation cophénétique entre les deux arbres n’est que de 0.6. Comment est-ce possible ? (Réponse : untangle() fait pivoter les branches pour minimiser les croisements de lignes, donc un tanglegramme à l’air net reflète un bon agencement, pas nécessairement des arbres similaires. La corrélation est la mesure fiable de la similarité — confirmez toujours l’image par un nombre.)

  2. Conceptuel. Vous construisez quatre arbres (complete, single, average, centroid) et la matrice de corrélation montre chaque valeur hors diagonale inférieure à 0.5, avec centroid la plus isolée. Que devez-vous conclure ? (Réponse : Les quatre méthodes de liaison produisent des regroupements nettement différents sur ces données — aucune ne s’accorde fortement. Votre regroupement est très sensible à la méthode de liaison, alors indiquez quelle méthode vous avez utilisée et pourquoi, et ne traitez aucun dendrogramme isolé comme l’unique vraie réponse.)

Conclusion

Un dendrogramme isolé n’est que l’un des plusieurs arbres plausibles pour vos données. dendextend vous permet de le confronter à une alternative : réunissez deux arbres avec dendlist(), alignez-les visuellement avec tanglegram() et son score d’enchevêtrement, puis tranchez la question avec un nombre — la corrélation cophénétique ou de Baker de cor.dendlist(). Étendez cela à plusieurs méthodes de liaison à la fois avec une matrice de corrélation et un corrplot, et vous saurez avant de vous engager si vos regroupements sont robustes au choix de la méthode, ou un artefact de celui-ci.

Leçons connexes

Vous préférez un livre ? Practical Guide to Cluster Analysis in R est disponible en PDF téléchargeable — toutes les leçons de cette série, hors ligne et à vous.

Obtenir le livre (PDF) →Les leçons restent gratuites en ligne.
Cette page vous a-t-elle été utile ?

Prouvez que vous savez le faire. Maîtrisez toute la série Analyse de clustering en R — suivez votre parcours, construisez des projets et obtenez un certificat.

Commencer gratuitement →

Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.

dès 15 $/mois facturé annuellement

Passer à Pro →

✓ Vous êtes Pro — continuez. The runtime is the judge.

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Comparer des dendrogrammes en R : tanglegrammes, corrélation},
  date = {2026-06-24},
  url = {https://www.datanovia.com/learn/machine-learning/clustering/comparing-dendrograms},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Comparer des dendrogrammes en R : tanglegrammes, corrélation.” 2026. June 24. https://www.datanovia.com/learn/machine-learning/clustering/comparing-dendrograms.