Dado el siguiente marco de datos:
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))
Tal 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
Me gustaría agrupar a estos 12 individuos usando grupos jerárquicos y usando la correlación como medida de distancia. Entonces esto es lo que hice:
clus <- hcluster(df, method = 'corr')
Y esta es la trama de clus
:
Este df
es en realidad uno de los 69 casos en los que estoy haciendo análisis de clúster. Para llegar a un punto de corte, he mirado varios dendogramas y jugué con el h
parámetro cutree
hasta que estuve satisfecho con un resultado que tenía sentido para la mayoría de los casos. Ese número fue k = .5
. Entonces esta es la agrupación con la que terminamos después:
> 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
Sin embargo, tengo problemas para interpretar el corte de .5 en este caso. He echado un vistazo a Internet, incluidas las páginas de ayuda ?hcluster
, ?hclust
y ?cutree
sin éxito. Lo más lejos que he llegado a comprender el proceso es haciendo esto:
Primero, miro cómo se realizó la fusión:
> 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
Lo que significa que todo comenzó uniendo las observaciones 9 y 11, luego las observaciones 8 y 10, luego los pasos 1 y 2 (es decir, uniendo 9, 11, 8 y 10), etc. Leer sobre el merge
valor de hcluster
ayuda a comprender la matriz anterior.
Ahora miro la altura de cada paso:
> 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
Lo que significa que la agrupación se detuvo solo en el paso final, cuando la altura finalmente supera los 0,5 (como ya había señalado el Dendograma, por cierto).
Ahora, aquí está mi pregunta: ¿cómo interpreto las alturas? ¿Es el "resto del coeficiente de correlación" (no sufra un ataque cardíaco)? Puedo reproducir la altura del primer paso (unión de las observaciones 9 y 11) así:
> 1 - cor(as.numeric(df[9, ]), as.numeric(df[11, ]))
[1] 1.284794e-05
Y también para el siguiente paso, que une las observaciones 8 y 10:
> 1 - cor(as.numeric(df[8, ]), as.numeric(df[10, ]))
[1] 0.0003423587
Pero el siguiente paso implica unir esas 4 observaciones, y no sé:
- La forma correcta de calcular la altura de este paso
- Lo que realmente significa cada una de esas alturas.
fuente
Respuestas:
Recuerde que en la agrupación jerárquica, debe definir una métrica de distancia entre las agrupaciones. Por ejemplo, en la agrupación de enlaces promedio jerárquica (probablemente la opción más popular), la distancia entre grupos se define como la distancia promedio entre todos los pares entre grupos. La distancia entre pares también debe definirse y podría ser, por ejemplo, la distancia euclidiana (o la distancia de correlación en su caso). Entonces, la distancia entre grupos es una forma de generalizar la distancia entre pares.
En el dendrograma, el eje y es simplemente el valor de esta métrica de distancia entre grupos. Por ejemplo, si ve dos grupos combinados a una alturaX , significa que la distancia entre esos grupos era X .
fuente