É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
:
C'est en df
fait 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 h
paramètre cutree
jusqu'à 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
, ?hclust
et ?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 merge
valeur de hcluster
aide à 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:
- La bonne façon de calculer la hauteur de cette étape
- Ce que chacune de ces hauteurs signifie réellement.
la source
Réponses:
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 .x x
la source