2012-08-13 12 views
6

używam następujący kod R wygenerować dendrogram (patrz załączone zdjęcie) z etykietami na podstawie sekwencji Traminer:Wyświetlanie Traminer (R) dendrogramów w formacie text/tabeli

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

pełny kod (łącznie z zestawu danych) można znaleźć here.

Informacje, takie jak dendrogram, są przedstawione w formie graficznej, dlatego warto uzyskać te same informacje w tekście i/lub formacie tabeli. Jeśli zadzwonię do któregokolwiek aspektu obiektu clusterward (utworzonego przez agnes), takiego jak "order" lub "merge", otrzymam wszystko oznaczone etykietami za pomocą liczb zamiast nazw otrzymanych od colnames(twitter_sequences). Ponadto nie widzę sposobu, w jaki mogę wyprowadzić grupowanie reprezentowane graficznie w dendrogramie.

Podsumowując: Jak uzyskać dane wyjściowe klastra w formacie tekstowym/tabelowym z etykietami prawidłowo wyświetlanymi przy użyciu R i najlepiej bibliotek tramera/klastra?

enter image description here

Odpowiedz

4

Pytanie dotyczy pakietu cluster. Strona pomocy dla agnes.object zwrócona przez agnes (zob. http://stat.ethz.ch/R-manual/R-devel/library/cluster/html/agnes.object.html) stwierdza, że ​​ten obiekt zawiera komponent "order.lab" podobny do order, ale zawierający etykiety obserwacyjne zamiast liczb obserwacji.Ten składnik jest dostępny tylko wtedy, gdy oryginalne obserwacje zostały oznaczone. "

Macierz odmienności (twitter.om w twoim przypadku) produkowana przez TraMineR obecnie nie zachowuje etykiet sekwencji jako nazw wierszy i kolumn. Aby uzyskać komponent order.lab, musisz ręcznie przypisać etykiety sekwencji zarówno do macierzy rownames jak i colnames. Ilustruję tutaj dane z mvad dostarczone przez pakiet 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) 

To jest za uzyskanie order z etykietami sekwencji zamiast liczb. Ale teraz nie jest dla mnie jasne, który wynik klastra chcesz w tekście/formie tabeli. Z dendrogramu wybierasz miejsce, w którym chcesz go przyciąć, tj. Liczbę żądanych grup i wycinasz dendrogram za pomocą cutree, np. cl.4 <- cutree(clusterward1, k = 4). Wynik cl.4 jest wektorem z przypisaniem do klastra dla każdej sekwencji, a otrzymasz listę członków grupy 1, na przykład z rownames(mvad.seq)[cl.4==1].

Można również użyć metody identify (zobacz ?identify.hclust), aby interaktywnie wybrać grupy z wykresu, ale należy przekazać argument jako as.hclust(cward). Oto kod dla przykładu:

## 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]] 

Mam nadzieję, że to pomoże.

+0

Dziękuję bardzo! To jest bardzo pomocne! – histelheim

Powiązane problemy