TraMineR, извлеките все существующие комбинации событий как фиктивные переменные

Допустим, у меня есть эти данные. Моя цель - извлечь комбинации последовательностей.
У меня есть одно ограничение, время между двумя событиями может быть не более 5, давайте назовем это maxGap,

User <- c(rep(1,3))     # One users
Event <- c("C","B","C") # Say this is random events could be anything from LETTERS[1:4]
Time <- c(c(1,12,13))   # This is a timeline
df <- data.frame(User=User,
             Event=Event,
             Time=Time)

Если хотите использовать эти последовательности в качестве двоичных объясняющих переменных для анализа.
Учитывая этот фрейм данных, результат должен быть таким.

res.df <- data.frame(User=1,
                     C=1,
                     B=1,
                     CB=0,
                     BC=1,
                     CBC=0)  

(CB) и (CBC) будет 0, так как maxGap > 5.
Я пытался написать функцию для этого, используя много циклов for, но это становится очень сложным, если последовательность становится больше, и разное количество evets также становится больше. А также, если количество разных пользователей вырастет до 100 000.

Возможно ли это сделать в TraMineR с помощью seqeconstraint?

1 ответ

Решение

Вот как бы вы сделали это с TraMineR

df.seqe <- seqecreate(id=df$User, timestamp=df$Time, event=df$Event)

constr <- seqeconstraint(maxGap=5)
subseq <- seqefsub(df.seqe, minSupport=0, constraint=constr)
(presence <- seqeapplysub(subseq, method="presence"))

который дает

                   (B) (B)-(C) (C)
1-(C)-11-(B)-1-(C)   1       1   1

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

Тем не менее, имейте в виду, что TraMineR отлично работает только с подпоследовательностями длиной примерно до 4 или 5. Мы предлагаем установить maxK=3 или же 4 в seqefsub, Количество людей не должно быть проблемой, равно как и количество различных возможных событий (алфавит), если вы ограничиваете максимальную длину подпоследовательности, которую вы ищете.

Надеюсь это поможет

Другие вопросы по тегам