我正在尝试搜索序列以找到最常见的子串(所有事件都相邻的I.E.子序列)。用户指南说明了他们的子序列搜索工具:
“子序列的概念是子串概念的扩展,并详细描述 例如Elzinga(2008)。虽然序列的子串必然由相邻的子串构成 符号,这个要求随着子序列的概念而放松。因此,如果x = abac,λ( 空字符串),u = b,v = bac和w = bc属于x的子序列集,而只有λ, u = b和v = bac是x“
的子串有没有办法关闭那种放松,只看一下子串?这是使用 seqefsub 命令。我在TraMineR手册中找不到任何相关内容,所以对此有任何帮助表示赞赏!非常感谢, 安德鲁
答案 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
...
希望这有帮助