6

我正在使用 R 包 TraMineR 对序列分析进行一些学术研究。

我想找到一种模式,定义为某人在目标公司,然后出去,然后回到目标公司。

(简化)我已将 A 州定义为目标公司;B 为外部行业公司,C 为内部行业公司。

所以我想做的是找到具有特定模式 ABA 或 ACA 的序列。

在看了这个问题(奇怪的子序列数?)并阅读了用户指南之后,特别是以下段落:

4.3.3 子序列 如果 u 的所有连续元素 ui 以相同的顺序出现在 x 中,则序列 u 是 x 的子序列,我们简单地用 u x 表示。根据这个定义,非共享 > 状态可以出现在序列 u 和 x 共有的状态之间。例如,u = S;M 是 x = S 的 > 子序列;你; 米;MC。

7.3.2 查找具有给定子序列的序列 seqpm() 函数计算包含给定子序列的序列的数量并收集它们的行索引号。该函数返回一个包含两个元素的列表。第一个元素 MTab 只是一个表格,其中包含数据中给定子序列的出现次数。请注意,每个序列只计算一次出现,即使子序列在序列中出现多次。列表的第二个元素 MIndex 给出了包含子序列的序列的行索引号。这些索引号对于访问相关序列可能很有用(下面的示例)。由于在字符串中搜索模式更容易,因此当使用带有 TRUE 选项的 seqconc 函数时,函数 rst 以这种格式转换序列数据。

我得出的结论是 seqpm() 是我完成工作所需的函数。

所以我有这样的序列:AAAABBBBBAAAAAA

根据我在提及的来源中找到的子序列的定义,我想我可以通过使用以下方法找到这种序列:

seqpm(sequence,"ABA")

但这不会发生。为了找到我需要输入的示例序列

seqpm(sequence,"ABBBBBA")

这对我需要的东西不是很有用。

  1. 那么你们看到我可能错过了什么吗?
  2. 如何检索从 A 到 B 并返回到 A 的所有序列?
  3. 有没有办法让我找到从 A 到其他任何地方然后回到 A 的方法?

非常感谢 !

4

1 回答 1

3

帮助页面的标题seqpm是“在序列中查找子字符串模式”,这就是函数的实际作用。它搜索包含给定子字符串(不是子序列)的序列。用户指南中似乎存在配方错误。

找到包含给定子序列的序列的一种解决方案是将状态序列转换为事件序列seqecreate,然后使用seqefsubandseqeapplysub函数。我使用actcal随附的数据进行说明TraMineR

library(TraMineR)
data(actcal)
actcal.seq <- seqdef(actcal[,13:24])

## displaying the first state sequences
head(actcal.seq)

## transforming into event sequences
actcal.seqe <- seqecreate(actcal.seq, tevent = "state", use.labels=FALSE)

## displaying the first event sequences
head(actcal.seqe)

## now searching for the subsequences
subs <- seqefsub(actcal.seqe, strsubseq=c("(A)-(D)","(D)-(B)"))
## and identifying the sequences that contain the subsequences
subs.pres <- seqeapplysub(subs, method="presence")
head(subs.pres)

## we can now, for example, count the sequences that contain (A)-(D)
sum(subs.pres[,1])
## or list the sequences that contain (A)-(D)
rownames(subs.pres)[subs.pres[,1]==1]

希望这可以帮助。

于 2015-01-23T15:26:21.350 回答