【问题标题】:TraMineR, Extract all present combination of events as dummy variablesTraMineR,将所有当前的事件组合提取为虚拟变量
【发布时间】:2017-07-05 08:57:19
【问题描述】:

假设我有这些数据。我的目标是提取序列组合。
我有一个约束,两个事件之间的时间可能不超过 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循环编写一个函数,但是如果序列变得更大并且不同数量的事件也变得更大,它会变得非常复杂。如果不同用户的数量增长到 100 000。

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

【问题讨论】:

    标签: r sequence sequences traminer pattern-mining


    【解决方案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。只要您限制您正在寻找的最大子序列长度,个体的数量应该不是问题,不同的可能事件(字母表)的数量也不应该成为问题。

    希望对你有帮助

    【讨论】:

    • 谢谢吉尔伯特,也谢谢你提供了一个方便的包:)
    • 不幸的是,它无法在更大的数据集上执行。我尝试将 maxK 设置为 4、3、2 和 1。但它仍然不起作用。您对其他可能有用的软件包有什么想法吗?我看过 arulesSequences 但认为它也不起作用......
    猜你喜欢
    • 1970-01-01
    • 2017-10-23
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    • 2021-03-07
    • 2018-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多