Quería plantearos un ejemplo de análisis cluster para observar el peligro que tiene agrupar observaciones in base a grupos homogéneos creados con distancias multivariantes. Para ilustrar el ejemplo, trabajamos con R; creamos grupos in base a dos variables, lo que nos facilita los análisis gráficos. Simulamos el conjunto de datos con el que trabajamos:
# GRUPO 1
x <- runif(500, 70, 90)
y <- runif(500, 70, 90)
grupo1 <- data.frame(cbind(x, y))
grupo1$grupo <- 1
# GRUPO 2
x <- runif(1000, 10, 40)
y <- runif(1000, 10, 40)
grupo2 <- data.frame(cbind(x, y))
grupo2$grupo <- 2
# GRUPO 3
x <- runif(3000, 0, 100)
y <- runif(3000, 0, 100)
grupo3.1 <- data.frame(cbind(x, y))
grupo3.1$separacion <- (x + y)
grupo3.1 <- subset(grupo3.1, separacion >= 80 & separacion <= 140, select = -separacion)
grupo3.1 <- subset(grupo3.1, y > 0)
grupo3.1$grupo <- 3
# UNIMOS TODOS LOS GRUPOS
total <- rbind(grupo1, grupo2, grupo3.1)
plot(total$x, total$y, col = c(1, 2, 3)[total$grupo])
Los grupos parecen claros:

Cabe preguntarse: ¿qué sucede si segmentamos in base a centroides? Para responder a esta pregunta, hacemos un análisis no jerárquico; empleamos el algoritmo de las k-medias, del que ya se ha hablado en este blog in alguna ocasión:
distancias <- dist(total)
clus <- kmeans(distancias, 3)
total$grupo_nuevo <- clus$cluster
plot(total$x, total$y, col = c(1, 2, 3)[total$grupo_nuevo])

Necesitamos un objeto con las distancias y, sobre él, utilizamos la función kmeans(), que es la más popular y sencilla. El objeto resultante de la realización del modelo tiene una variable cluster que añadimos a nuestros datos y, tras graficar, vemos que es evidente que no ha funcionado muy correctamente: nos ha creado los tres grupos homogéneos in base a la distancia entre observaciones, pero no son los segmentos deseados… Mucho cuidado cuando utilicemos este tipo de técnicas.
¿Cómo podemos realizar una segmentación más apropiada para estos datos? ¿Qué técnica podemos utilizar? La respuesta, in breve. Espero que esto sirva para desordenar alguna conciencia. Saludos.