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
, Количество людей не должно быть проблемой, равно как и количество различных возможных событий (алфавит), если вы ограничиваете максимальную длину подпоследовательности, которую вы ищете.
Надеюсь это поможет