首页 文章

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

提问于
浏览
2

可以说我有这些数据 . 我的目标是序列的extraxt组合 .
我有一个约束,两个事件之间的时间可能不超过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 > 5以来,(CB)和(CBC)将为0 .
我试图使用许多for循环为此编写一个函数,但是如果序列变大并且不同数量的evet也变得更大,它变得非常复杂 . 并且如果不同用户的数量增长到10万 .

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

1 回答

  • 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的子序列 . 我们建议在 seqefsub 中设置 maxK=34 . 只要你限制你正在寻找的最大子序列长度,个体数量就不应该是问题,也不应该是不同可能事件(字母表)的数量 .

    希望这可以帮助

相关问题