3

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

“子序列的概念是子串概念的扩展,例如在 Elzinga (2008) 中进行了详细描述。虽然序列的子串必然由相邻符号构成,但通过子序列的概念放宽了这一要求。因此如果x=abac,λ(空串),u=b,v=bac和w=bc属于x的子序列集合,而只有λ,u=b和v=bac是x的子串"

有没有办法关闭这种放松,只看子串?这是专门使用seqefsub命令。我在 TraMineR 手册中找不到任何关于此的信息,因此感谢您提供任何帮助!非常感谢,安德鲁

4

1 回答 1

3

虽然TraMineR对子串没有特定的功能,但你可以通过玩时间限制来获得类似子串的结果。

例如,maxGap=1在您的约束参数中进行设置,seqefsub可以获得由在两个连续时间点发生的事件形成的频繁子序列。我在下面actcalTraMineR.

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
...

希望这可以帮助

于 2014-12-01T14:30:36.310 回答