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

3
我正在尝试搜索序列以查找最常见的子字符串(即所有事件都相邻的子序列)。用户指南中关于子序列搜索工具的说明如下:
“子序列的概念是子串概念的扩展,例如在Elzinga(2008)中详细描述。虽然序列的子串必须由相邻符号组成,但这个要求在子序列概念中被放松了。因此,如果x = abac,λ(空字符串),u = b,v = bac和w = bc属于x的子序列集合,而只有λ、u = b和v = bac是x的子串。”
是否有办法关闭这种放松,仅查看子串?这是使用seqefsub命令的情况。我在TraMineR手册中找不到任何相关信息,所以非常感谢任何帮助!谢谢, 安德鲁
1个回答

3

虽然TraMineR没有特定的子字符串功能,但您可以通过设置时间约束来获得类似于子字符串的结果。

例如,在seqefsub的约束参数中设置maxGap=1,您可以获得由在两个连续时间点发生的事件组成的频繁子序列。我以下面TraMineR附带的actcal数据为例进行说明。

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

希望这能帮到您。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接