Como interpretar a altura do dendograma para agrupamento por correlação

8

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:

dendograma

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 hparâmetro cutreeaté 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, ?hcluste ?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 mergevalor de hclusterajuda 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:

  1. A maneira correta de calcular a altura desta etapa
  2. O que cada uma dessas alturas realmente significa.
Waldir Leoncio
fonte
1
Você pode obter algumas informações da minha resposta aqui: Determinando usuários semelhantes a partir de cluster hierárquico .
gung - Restabelece Monica

Respostas:

5

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 .xxx

Bit a bit
fonte
Intrigante. Como eu calcularia a distância de correlação entre os clusters {9, 11} e {8, 10}, no meu caso?
Waldir Leoncio 30/04
2
Se você estiver usando ligação média, isso seria , em que é a distância (distância de correlação) entre as instâncias e . d ( a , b ) a b0,25(d(9,8)+d(9,10)+d(11,8)+d(11,10))d(uma,b)umab
Bitwise