2017-02-16 9 views
2

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

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.
Я пытался написать функцию для этого, используя много для-петли, но он становится очень сложным, если последовательность становится больше и разное количество 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: Can I get the complete sequence if I give an event sub sequence?)

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

Надеется, что это помогает

+0

Спасибо Гилберта, и спасибо за удобный пакет :) – TKN

+0

, к сожалению, не удалось выполнить с большим набором данными. Я попытался установить maxK на 4,3,2 и 1. Но он все еще не работал. У вас есть идеи о других пакетах, которые могут работать? Я посмотрел на arulesSequences, но не думаю, что это работает ... – TKN

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