在子序列中搜索最常见的子串

时间:2014-11-29 05:31:54

标签: r traminer

我正在尝试搜索序列以找到最常见的子串(所有事件都相邻的I.E.子序列)。用户指南说明了他们的子序列搜索工具:

“子序列的概念是子串概念的扩展,并详细描述 例如Elzinga(2008)。虽然序列的子串必然由相邻的子串构成 符号,这个要求随着子序列的概念而放松。因此,如果x = abac,λ( 空字符串),u = b,v = bac和w = bc属于x的子序列集,而只有λ, u = b和v = bac是x“

的子串

有没有办法关闭那种放松,只看一下子串?这是使用 seqefsub 命令。我在TraMineR手册中找不到任何相关内容,所以对此有任何帮助表示赞赏!非常感谢,     安德鲁

1 个答案:

答案 0 :(得分:3)

虽然TraMineR没有子字符串的特定功能,但您可以通过播放时间限制来获得类似子字符串的结果。

例如,在maxGap=1的约束参数中设置seqefsub,您将获得在两个连续时间点发生的事件形成的频繁子序列。我在下面将actcal数据与TraMineR一起发货。

library(TraMineR)
data(mvad)
data(actcal)
## creating a state sequence object
actcal.seq <- seqdef(actcal,13:24,
  labels=c("> 36 hours", "19 to 36 hours", "< 19 hours", "no work"))
## transforming into an event sequence object
actcal.seqe <- seqecreate(actcal.seq, tevent="state")

## frequent subsequences without constraints
fsubs <- seqefsub(actcal.seqe, pMinSupport=.01)

library(TraMineRextras)
fsubsn <- seqentrans(fsubs)
## displaying only subsequences with at least 2 events
fsubsn[fsubsn$data$nevent>1]

## Now with the maxGap=1 constraint
cstr <- seqeconstraint(maxGap=1)
fsstr <- seqefsub(actcal.seqe, pMinSupport=.01, constraint=cstr)
fsstrn <- seqentrans(fsstr)
fsstrn[fsstrn$data$nevent>1]

在该示例中,您将获得在连续位置发生事件的子序列。要获得连续事件的子序列,而不考虑它们之间经过的时间,请定义事件序列,并将时间戳定义为连续数字,例如

id event timestamp
1  A     1   
1  C     2
1  B     3
2  C     1
2  B     2
3  A     1
3  B     2
...

希望这有帮助