Dado o seguinte quadro de dados:
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))
De tal modo 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
Eu gostaria de agrupar esses 12 indivíduos usando clusters hierárquicos e usando a correlação como medida de distância. Então foi isso que eu fiz:
clus <- hcluster(df, method = 'corr')
E este é o enredo de clus
:
Este df
é realmente um dos 69 casos em que estou fazendo análise de cluster. Para chegar a um ponto de corte, observei vários dendogramas e brinquei com o h
parâmetro cutree
até ficar satisfeito com um resultado que fazia sentido para a maioria dos casos. Esse número foi k = .5
. Portanto, este é o agrupamento com o qual acabamos depois:
> 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
No entanto, estou tendo problemas para interpretar o ponto de corte .5 neste caso. Eu tenho tido um olhar ao redor da Internet, incluindo as páginas de ajuda ?hcluster
, ?hclust
e ?cutree
, mas sem sucesso. O mais longe que me tornei para entender o processo é fazer isso:
Primeiro, dou uma olhada em como a fusão foi feita:
> 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
O que significa que tudo começou juntando as observações 9 e 11, depois as observações 8 e 10, depois as etapas 1 e 2 (ou seja, juntando 9, 11, 8 e 10), etc. Ler sobre o merge
valor de hcluster
ajuda a entender a matriz acima.
Agora, dou uma olhada na altura de cada passo:
> 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
O que significa que o agrupamento parou apenas na etapa final, quando a altura finalmente ultrapassou 0,5 (como o Dendograma já havia apontado, BTW).
Agora, aqui está a minha pergunta: como interpreto as alturas? É o "restante do coeficiente de correlação" (por favor, não tenha um ataque cardíaco)? Posso reproduzir a altura do primeiro passo (junção das observações 9 e 11) da seguinte forma:
> 1 - cor(as.numeric(df[9, ]), as.numeric(df[11, ]))
[1] 1.284794e-05
E também para a etapa seguinte, que une as observações 8 e 10:
> 1 - cor(as.numeric(df[8, ]), as.numeric(df[10, ]))
[1] 0.0003423587
Mas o próximo passo envolve juntar essas 4 observações, e eu não sei:
- A maneira correta de calcular a altura desta etapa
- O que cada uma dessas alturas realmente significa.
fonte
Respostas:
Lembre-se de que no cluster hierárquico, você deve definir uma métrica de distância entre os clusters. Por exemplo, no cluster de ligação média hierárquica (provavelmente a opção mais popular), a distância entre os clusters é definida como a distância média entre todos os pares entre clusters. A distância entre pares também deve ser definida e pode ser, por exemplo, distância euclidiana (ou distância de correlação no seu caso). Portanto, a distância entre clusters é uma maneira de generalizar a distância entre pares.
No dendograma, o eixo y é simplesmente o valor dessa métrica de distância entre os clusters. Por exemplo, se você ver dois clusters mesclados na altura , significa que a distância entre esses clusters era .xx x
fonte