2012-08-13 5 views
6

Io uso il seguente codice R per generare un dendrogramma (vedi foto allegata) con le etichette in base a sequenze Traminer:Visualizzazione traminer (R) dendrogrammi in formato testo/tabella

library(TraMineR) 
library(cluster) 
clusterward <- agnes(twitter.om, diss = TRUE, method = "ward") 
plot(clusterward, which.plots = 2, labels=colnames(twitter_sequences)) 

Il codice completo (compreso il set di dati) può essere trovato here.

Per quanto informativo come il dendrogramma è graficamente, sarebbe utile ottenere le stesse informazioni in formato testo e/o tabella. Se chiamo uno degli aspetti dell'oggetto clusterward (creato da agnes), come "order" o "merge" ottengo tutto etichettato usando i numeri piuttosto che i nomi che ottengo da colnames(twitter_sequences). Inoltre, non vedo come posso generare i raggruppamenti rappresentati graficamente nel dendrogramma.

Per riassumere: Come posso ottenere l'output del cluster in formato testo/tabella con le etichette correttamente visualizzate utilizzando R e idealmente le librerie di traminer/cluster?

enter image description here

risposta

4

La questione riguarda il pacchetto cluster. La pagina di guida per il (Vedere http://stat.ethz.ch/R-manual/R-devel/library/cluster/html/agnes.object.html) indica che questo oggetto contiene un componente order.lab "simile a order, ma contenente etichette di osservazione anziché numeri di osservazione.Questo componente è disponibile solo se le osservazioni originali sono state etichettate."

La matrice di dissomiglianza (twitter.om nel tuo caso) prodotta da TraMineR attualmente non conserva le etichette di sequenza come nomi di righe e colonne. Per ottenere il componente order.lab è necessario assegnare manualmente le etichette di sequenza sia come rownames sia come colnames della matrice twitter.om. Illustro qui con i dati mvad forniti dal pacchetto TraMineR.

library(TraMineR) 
data(mvad) 
## attaching row labels 
rownames(mvad) <- paste("seq",rownames(mvad),sep="") 
mvad.seq <- seqdef(mvad[17:86]) 
## computing the dissimilarity matrix 
dist.om <- seqdist(mvad.seq, method = "OM", indel = 1, sm = "TRATE") 
## assigning row and column labels 
rownames(dist.om) <- rownames(mvad) 
colnames(dist.om) <- rownames(mvad) 
dist.om[1:6,1:6] 

## Hierarchical cluster with agnes library(cluster) 
cward <- agnes(dist.om, diss = TRUE, method = "ward") 

## here we can see that cward has an order.lab component 
attributes(cward) 

Questo è per ottenere order con le etichette di sequenza piuttosto che numeri. Ma ora non mi è chiaro quale risultato del cluster si desidera in forma di testo/tabella. Dal dendrogramma decidi dove vuoi tagliarlo, cioè il numero di gruppi che vuoi e tagliare il dendrogramma con cutree, ad es. cl.4 <- cutree(clusterward1, k = 4). Il risultato cl.4 è un vettore con l'appartenenza al cluster per ogni sequenza e si ottiene l'elenco dei membri del gruppo 1, ad esempio, con rownames(mvad.seq)[cl.4==1].

In alternativa, è possibile utilizzare il metodo identify (vedi ?identify.hclust) per selezionare i gruppi in modo interattivo dalla trama, ma è necessario passare l'argomento come as.hclust(cward). Ecco il codice per l'esempio

## plot the dendrogram 
plot(cward, which.plot = 2, labels=FALSE) 

## and select the groups manually from the plot 
x <- identify(as.hclust(cward)) ## Terminate with second mouse button 

## number of groups selected 
length(x) 
## list of members of the first group 
x[[1]] 

Spero che questo aiuti.

+0

Grazie mille! Questo è molto utile! – histelheim