2012-01-26 11 views
10

Come è possibile creare un grafico a cluster in R senza utilizzare clustplot?Come creare un grafico a cluster in R?

Sto cercando di fare i conti con un po 'di clustering (usando R) e visualizzazione (usando Canvas HTML5).

Fondamentalmente, voglio creare un cluster plot ma invece di tracciare i dati, voglio ottenere un insieme di punti o coordinate 2D che posso tirare su tela e fare qualcosa con cui potrebbe essere bello (ma non sono sicuro di come Fai questo). Immagino che ho:

  1. Creare un matrice di similarità per l'intero set di dati (utilizzando dist)
  2. Cluster la matrice di similarità con Kmeans o qualcosa di simile (utilizzando Kmeans)
  3. Plot il risultato usando MDS o PCA - ma non sono sicuro di come i passaggi 2 e 3 si riferiscono (cmdscale).

ho verificato domande here, here e here (con l'ultimo essere di maggiore utilità).

risposta

28

Intendevi qualcosa del genere? Scusate ma non so nulla su HTML5 Canvas, solo R ... Ma spero che aiuti ...

Prima ho raggruppato i dati usando i kmea (si noti che non ho raggruppato la matrice della distanza), di quanto ho calcolato distanza matix e tracciarlo usando cmdscale. Quindi aggiungo i colori al tracciato MDS che corrisponde ai gruppi identificati dai kmea. Inoltre alcune interessanti funzionalità grafiche aggiuntive.

È possibile accedere alle coordinate dall'oggetto creato da 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

Grazie a @ii, è davvero fantastico. Quindi, solo per chiarire, si raggruppa e quindi si costruisce una matrice di somiglianza. Quindi si utilizza MDS per posizionare i punti in 2D e POI si colorano i punti in base alle loro relazioni con il cluster. Brillante. Se hai una possibilità, potresti spiegare cosa fa: gruppi <- livelli (fattore (kclus $ cluster)) – slotishtype

+1

vedi la mia modifica. i gruppi sono solo un oggetto che contiene i nomi dei gruppi, usati solo per il ciclo. – EDi

+0

Ok, vedo la tua modifica. Un'ultima domanda, puoi raggruppare la matrice della distanza o è una mossa pazzesca? Scusa, sto imparando al momento e mi sto solo muovendo tra le cose. – slotishtype

0

Qui trovi un grafico per analizzare i risultati a grappolo, "coordinare trama", nel pacchetto "clusplot".

Non è basato su PCA. Usa la scala delle funzioni per avere tutte le variabili che significano in un intervallo da 0 a 1, quindi puoi confrontare quale cluster tiene la media massima/minima per ogni variabile.

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 spiega come utilizzarlo.