Comment interpréter la hauteur d'un dendrogramme pour le clustering par corrélation

8

Étant donné la trame de données suivante:

df <- data.frame(x1 = c(26, 28, 19, 27, 23, 31, 22, 1, 2, 1, 1, 1),
                 x2 = c(5, 5, 7, 5, 7, 4, 2, 0, 0, 0, 0, 1),
                 x3 = c(8, 6, 5, 7, 5, 9, 5, 1, 0, 1, 0, 1),
                 x4 = c(8, 5, 3, 8, 1, 3, 4, 0, 0, 1, 0, 0),
                 x5 = c(1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0),
                 x6 = c(2, 3, 1, 0, 1, 1, 3, 37, 49, 39, 28, 30))

Tel que

> df
   x1 x2 x3 x4 x5 x6
1  26  5  8  8  1  2
2  28  5  6  5  1  3
3  19  7  5  3  1  1
4  27  5  7  8  1  0
5  23  7  5  1  1  1
6  31  4  9  3  0  1
7  22  2  5  4  1  3
8   1  0  1  0  0 37
9   2  0  0  0  0 49
10  1  0  1  1  0 39
11  1  0  0  0  0 28
12  1  1  1  0  0 30

Je voudrais regrouper ces 12 individus en utilisant des grappes hiérarchiques et en utilisant la corrélation comme mesure de distance. Voici donc ce que j'ai fait:

clus <- hcluster(df, method = 'corr')

Et voici l'intrigue de clus:

dendogramme

C'est en dffait l'un des 69 cas sur lesquels je fais une analyse de cluster. Pour trouver un point de coupure, j'ai regardé plusieurs dendogrammes et joué avec le hparamètre cutreejusqu'à ce que je sois satisfait d'un résultat qui avait du sens pour la plupart des cas. Ce nombre était k = .5. Voici donc le regroupement avec lequel nous nous sommes retrouvés par la suite:

> data.frame(df, cluster = cutree(clus, h = .5))
   x1 x2 x3 x4 x5 x6 cluster
1  26  5  8  8  1  2       1
2  28  5  6  5  1  3       1
3  19  7  5  3  1  1       1
4  27  5  7  8  1  0       1
5  23  7  5  1  1  1       1
6  31  4  9  3  0  1       1
7  22  2  5  4  1  3       1
8   1  0  1  0  0 37       2
9   2  0  0  0  0 49       2
10  1  0  1  1  0 39       2
11  1  0  0  0  0 28       2
12  1  1  1  0  0 30       2

Cependant, j'ai du mal à interpréter le seuil de 0,5 dans ce cas. J'ai jeté un coup d'œil sur Internet, y compris les pages d'aide ?hcluster, ?hclustet ?cutree, mais sans succès. Le plus loin que je sois devenu pour comprendre le processus est en faisant ceci:

Tout d'abord, je regarde comment la fusion a été effectuée:

> clus$merge
      [,1] [,2]
 [1,]   -9  -11
 [2,]   -8  -10
 [3,]    1    2
 [4,]  -12    3
 [5,]   -1   -4
 [6,]   -3   -5
 [7,]   -2   -7
 [8,]   -6    7
 [9,]    5    8
[10,]    6    9
[11,]    4   10

Ce qui signifie que tout a commencé en joignant les observations 9 et 11, puis les observations 8 et 10, puis les étapes 1 et 2 (c.-à-d. En joignant 9, 11, 8 et 10), etc. La lecture de la mergevaleur de hclusteraide à comprendre la matrice ci-dessus.

Maintenant, je regarde la hauteur de chaque marche:

> clus$height
[1] 1.284794e-05 3.423587e-04 7.856873e-04 1.107160e-03 3.186764e-03 6.463286e-03 
6.746793e-03 1.539053e-02 3.060367e-02 6.125852e-02 1.381041e+00
> clus$height > .5
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE

Ce qui signifie que le clustering ne s'est arrêté qu'à la dernière étape, lorsque la hauteur dépasse finalement 0,5 (comme le Dendogram l'a déjà indiqué, BTW).

Maintenant, voici ma question: comment interpréter les hauteurs? Est-ce le "reste du coefficient de corrélation" (veuillez ne pas avoir de crise cardiaque)? Je peux reproduire la hauteur de la première marche (jonction des observations 9 et 11) comme ceci:

> 1 - cor(as.numeric(df[9, ]), as.numeric(df[11, ]))
[1] 1.284794e-05

Et aussi pour l'étape suivante, qui rejoint les observations 8 et 10:

> 1 - cor(as.numeric(df[8, ]), as.numeric(df[10, ]))
[1] 0.0003423587

Mais la prochaine étape consiste à joindre ces 4 observations, et je ne sais pas:

  1. La bonne façon de calculer la hauteur de cette étape
  2. Ce que chacune de ces hauteurs signifie réellement.
Waldir Leoncio
la source
1
Vous pourrez peut-être obtenir des informations de ma réponse ici: Déterminer des utilisateurs similaires à partir d'un clustering hiérarchique .
gung - Rétablir Monica

Réponses:

5

Rappelez-vous que dans le clustering hiérarchique, vous devez définir une métrique de distance entre les clusters. Par exemple, dans le clustering de liens hiérarchique moyen (probablement l'option la plus populaire), la distance entre les clusters est définie comme la distance moyenne entre toutes les paires inter-cluster. La distance entre les paires doit également être définie et peut être, par exemple, la distance euclidienne (ou la distance de corrélation dans votre cas). La distance entre les clusters est donc un moyen de généraliser la distance entre les paires.

Dans le dendrogramme, l'axe des y est simplement la valeur de cette métrique de distance entre les grappes. Par exemple, si vous voyez deux clusters fusionnés à une hauteur , cela signifie que la distance entre ces clusters était de .xx

Au niveau du bit
la source
Intrigant. Comment puis-je calculer la distance de corrélation entre les clusters {9, 11} et {8, 10}, dans mon cas?
Waldir Leoncio
2
Si vous utilisez le couplage moyen, alors ce serait , où est la distance (distance de corrélation) entre les instances et . 0.25(d(9,8)+d(9,10)+d(11,8)+d(11,10))d(a,b)ab
Bitwise