TraMineR,将所有当前事件组合提取为虚拟变量

时间:2017-02-16 10:06:06

标签: r sequence sequences traminer pattern-mining

让我说我有这些数据。我的目标是序列的外推组合 我有一个约束,两个事件之间的时间可能不超过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)  
由于maxGap&gt;

(CB)和(CBC)将为0。 5.
我试图使用许多for循环为此编写一个函数,但是如果序列变大并且不同数量的evet也变得更大,它变得非常复杂。而且如果不同用户的数量增长到10万。

是否可以在seqeconstraint的帮助下在TraMineR中执行此操作?

1 个答案:

答案 0 :(得分: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中设置4seqefsub。只要你限制你正在寻找的最大子序列长度,个体数量就不应该是问题,也不应该是不同可能事件(字母表)的数量。

希望这有帮助