2014-01-24 5 views
2

Используя biofam набор данных, который поставляется в составе TraMineR:Как определить последовательности внутри каждого кластера?

library(TraMineR) 
data(biofam) 
lab <- c("P","L","M","LM","C","LC","LMC","D") 
biofam.seq <- seqdef(biofam[,10:25], states=lab) 
head(biofam.seq) 
    Sequence          
1167 P-P-P-P-P-P-P-P-P-LM-LMC-LMC-LMC-LMC-LMC-LMC 
514 P-L-L-L-L-L-L-L-L-L-L-LM-LMC-LMC-LMC-LMC  
1013 P-P-P-P-P-P-P-L-L-L-L-L-LM-LMC-LMC-LMC  
275 P-P-P-P-P-L-L-L-L-L-L-L-L-L-L-L    
2580 P-P-P-P-P-L-L-L-L-L-L-L-L-LMC-LMC-LMC  
773 P-P-P-P-P-P-P-P-P-P-P-P-P-P-P-P 

Я могу выполнить кластерный анализ:

library(cluster) 
couts <- seqsubm(biofam.seq, method = "TRATE") 
biofam.om <- seqdist(biofam.seq, method = "OM", indel = 3, sm = couts) 
clusterward <- agnes(biofam.om, diss = TRUE, method = "ward") 
cluster3 <- cutree(clusterward, k = 3) 
cluster3 <- factor(cluster3, labels = c("Type 1", "Type 2", "Type 3")) 

Однако в этом процессе, были заменены уникальные идентификаторы из biofam.seq по списку номеров от 1 до N:

head(cluster3, 10) 
[1] Type 1 Type 2 Type 2 Type 2 Type 2 Type 3 Type 3 Type 2 Type 1 
[10] Type 2 
Levels: Type 1 Type 2 Type 3 

Теперь, я хочу знать, какие последовательности находятся внутри каждого кластера, чтобы я мог применять другие функции для получения средней длины, энтропии, подпоследовательности, несходства и т. д. в каждом кластере. Что мне нужно сделать, это:

  1. Карту старых идентификаторов к новым идентификаторам
  2. Вставьте последовательности в каждом кластере в отдельную последовательность объектах
  3. Run статистики я хочу на каждом новую последовательность объектов

Как я могу выполнить 2 и 3 в списке выше?

+1

Я хотел бы помочь, но я не могу запустить свой пример: где 'biofam.seq' приходит из? – flodel

+0

Он загружается с помощью 'TraMineR': http://mephisto.unige.ch/traminer/doc/biofam.html, если он не загружается автоматически, вы должны быть в состоянии сделать это, используя' biofam.seq <- seqdef (biofam) 'после запуска' data (biofam) ' – histelheim

+0

Данные' biofam' содержат также ковариаты. В 'seqdef' вам следует указать столбцы, в которых мы находим данные последовательности, т. Е.' Seqdef (biofam [10:25,]) '. Я соответствующим образом отредактировал вопрос. – Gilbert

ответ

1

состояние объекта последовательность для первого кластера, например, может просто быть получено с

bio1.seq <- biofam.seq[cluster3=="Type 1",] 
summary(bio1.seq) 
1

Я думаю, что это ответит на ваши вопросы. Я использовал код, который я нашел здесь http://www.bristol.ac.uk/cmm/software/support/workshops/materials/solutions-to-r.pdf, чтобы создать biofam.seq, так как ни один из предложенных вами не работал для меня.

# create data 
library(TraMineR) 
data(biofam) 
bf.states <- c("Parent", "Left", "Married", "Left/Married", "Child", 
       "Left/Child", "Left/Married/Child", "Divorced") 
bf.shortlab <- c("P","L","M","LM","C","LC", "LMC", "D") 
biofam.seq <- seqdef(biofam[, 10:25], states = bf.shortlab, 
             labels = bf.states) 

# cluster 
library(cluster) 
couts <- seqsubm(biofam.seq, method = "TRATE") 
biofam.om <- seqdist(biofam.seq, method = "OM", indel = 3, sm = couts) 
clusterward <- agnes(biofam.om, diss = TRUE, method = "ward") 
cluster3 <- cutree(clusterward, k = 3) 
cluster3 <- factor(cluster3, labels = c("Type 1", "Type 2", "Type 3")) 

Во-первых, я использую split создать список индексов для каждого кластера, который я затем использовать в lapply петлю, чтобы создать список суб-последовательностей из biofam.seq:

# create a list of sequences 
idx.list <- split(seq_len(nrow(biofam)), cluster3) 
seq.list <- lapply(idx.list, function(idx)biofam.seq[idx, ]) 

Наконец, вы можете запустить аналитику по каждой подпоследовательности с помощью lapply или sapply

# compute statistics on each sub-sequence (just an example) 
cluster.sizes <- sapply(seq.list, FUN = nrow) 

где FUN может быть любой функцией, которую вы обычно запускаете в одной последовательности.

+0

@histelheim, если я ответил на ваш вопрос, пожалуйста, подумайте о его принятии. Благодарю. – flodel

 Смежные вопросы

  • Нет связанных вопросов^_^