2012-01-26 73 views
10

¿Cómo puedo crear un gráfico de clúster en R sin usar clustplot?Cómo crear un gráfico de clúster en R?

Estoy tratando de familiarizarme con algunos clústeres (usando R) y la visualización (usando HTML5 Canvas).

Básicamente, quiero crear un cluster plot, pero en lugar de trazar los datos, quiero obtener un conjunto de puntos 2D o coordenadas que pueda dibujar en el lienzo y hacer algo bonito con (pero no estoy seguro de cómo hacer esto). Me imagino que yo:

  1. Crear una matriz de similitud para todo el conjunto de datos (usando dist)
  2. Cluster de la matriz de similitud utilizando kmeans o algo similar (usando kmeans)
  3. represente el resultado con MDS o PCA - pero no estoy seguro de cómo se relacionan los pasos 2 y 3 (escala de cm).

He comprobado a cabo preguntas here, here y here (con el último ser de mayor utilidad).

Respuesta

28

¿Quiso decir algo como esto? Lo siento pero no sé nada sobre HTML5 Canvas, solo R ... Pero espero que ayude ...

Primero agrupo los datos usando kmeans (tenga en cuenta que no he agrupado la matriz de distancia), que calculo el distancia matix y trazarlo usando cmdscale. Luego agrego colores al diagrama MDS que corresponden a los grupos identificados por kmeans. Además de algunas agradables características gráficas adicionales.

Puede acceder a las coordenadas del objeto creado por cmdscale.

### some sample data 
require(vegan) 
data(dune) 

# kmeans 
kclus <- kmeans(dune,centers= 4, iter.max=1000, nstart=10000) 

# distance matrix 
dune_dist <- dist(dune) 

# Multidimensional scaling 
cmd <- cmdscale(dune_dist) 

# plot MDS, with colors by groups from kmeans 
groups <- levels(factor(kclus$cluster)) 
ordiplot(cmd, type = "n") 
cols <- c("steelblue", "darkred", "darkgreen", "pink") 
for(i in seq_along(groups)){ 
    points(cmd[factor(kclus$cluster) == groups[i], ], col = cols[i], pch = 16) 
} 

# add spider and hull 
ordispider(cmd, factor(kclus$cluster), label = TRUE) 
ordihull(cmd, factor(kclus$cluster), lty = "dotted") 

enter image description here

+1

Gracias @EDi, eso es realmente genial. Entonces, solo para aclarar, se agrupan y luego crean una similitud matirx. A continuación, usa MDS para colocar los puntos en 2D y LUEGO colorea los puntos según sus relaciones con el clúster. Brillante. Si tiene la oportunidad, podría explicar lo que hace: grupos <- levels (factor (kclus $ cluster)) – slotishtype

+1

ver mi edición. groups es solo un objeto que contiene los nombres de los grupos, solo se utiliza para el for-loop. – EDi

+0

Ok, veo su edición. Una última pregunta, ¿puedes agrupar la matriz de distancia o es un movimiento loco? Lo siento, aprendiendo en este momento y solo trabajando en mi camino a través de las cosas. – slotishtype

0

Aquí puede encontrar un gráfico para analizar los resultados de racimo "coordinar parcela", dentro del paquete "clusplot".

No está basado en PCA. Utiliza la escala de función para tener todas las variables significa en un rango de 0 a 1, por lo que puede comparar qué clúster contiene el promedio máximo/mínimo para cada variable.

install.packages("devtools") ## To be able to download packages from github 
library(devtools) 
install_github("pablo14/clusplus") 
library(clusplus) 

## Create k-means model with 3 clusters 
fit_mtcars=kmeans(mtcars,3) 

## Call the function 
plot_clus_coord(fit_mtcars, mtcars) 

This post explica cómo usarlo.

Cuestiones relacionadas