Количество различных состояний / событий в последовательности с TraMineR

Мне интересно подсчитать количество различных состояний, присутствующих в каждой последовательности моего набора данных. Для простоты я воспользуюсь примером TraMineR:

  1. начиная с этой последовательности:

    1230 D-D-D-D-A-A-A-A-A-A-A-D

  2. затем вычисляя извлечение различных состояний с помощью функции seqdss, получая:

    1230 D-A-D

Есть ли функция для извлечения общего количества различных состояний в последовательности с учетом только наличия состояния, а не его потенциального повторения в последовательности? Другими словами, для описанного выше случая я хотел бы получить вектор, содержащий для этой последовательности значение 2 (событие A и событие D) вместо 3 (1 событие A + 2 события D).
Спасибо.


person emanuela.struffolino    schedule 23.06.2013    source источник


Ответы (3)


Вы можете вычислить количество различных состояний, сначала вычислив распределение состояний каждой последовательности с помощью seqistatd, а затем суммируя количество ненулевых элементов в каждой строке матрицы, возвращаемой seqistatd. Я проиллюстрирую ниже, используя данные биоплавки:

library(TraMineR)
data(biofam)
bf.seq <- seqdef(biofam[,10:25])

## longitudinal distributions 
bf.ldist <- seqistatd(bf.seq)
n.states <- apply(bf.ldist,1,function(x) sum(x != 0))

## displaying results
bf.ldist[1:3,]
     0  1 2 3 4 5 6 7
1167 9  0 0 1 0 0 6 0
514  1 10 0 1 0 0 4 0
1013 7  5 0 1 0 0 3 0

n.states[1:3]
1167  514 1013 
   3    4    4 
person Gilbert    schedule 23.06.2013
comment
то, что я искал. Спасибо, Гилберт! - person emanuela.struffolino; 23.06.2013

Возможно, мне здесь что-то не хватает, но похоже, что вам нужен unique.

person Hong Ooi    schedule 23.06.2013
comment
aggregate даст общее количество A и D вхождений, а не количество состояний (2: A и D). - person Hong Ooi; 23.06.2013

Ваш ожидаемый результат неясен (возможно, потому, что вы описываете его на английском языке, а не в псевдокоде). Я думаю, вы ищете table, чтобы подсчитать количество состояний на тему. Здесь я использую предоставленный пакет TraMineR:

library(TraMineR)
data(actcal)
actcal.seq <- seqdef(actcal,13:24)
head(actcal.seq )

     Sequence               
2848 B-B-B-B-B-B-B-B-B-B-B-B
1230 D-D-D-D-A-A-A-A-A-A-A-D
2468 B-B-B-B-B-B-B-B-B-B-B-B
654  C-C-C-C-C-C-C-C-C-B-B-B
6946 A-A-A-A-A-A-A-A-A-A-A-A
1872 D-B-B-B-B-B-B-B-B-B-B-B

Теперь примените table к 4-й строке, например:

tab <- table(unlist(actcal.seq[4,]))
tab[tab>0]
B C 
3 9
person agstudy    schedule 23.06.2013
comment
Это может быть первый возможный шаг, поскольку я искал способ подсчитать ненулевые элементы, а не возникновение каждого состояния для каждой последовательности. Спасибо. - person emanuela.struffolino; 23.06.2013
comment
@ emanuela.struffolino Я редактирую свой ответ, чтобы получить желаемый результат. - person agstudy; 23.06.2013