在 Traminer 中完成子序列

Complete subsequence in Traminer

子序列函数使用 seqefsub 函数给出有趣的结果。我研究由地理位置组成的序列。有没有办法知道列出的子序列是否是一个完整的子序列

我举个例子

library(TraMineR)
id = c(rep(1,5), rep(2,3), rep(3,3), rep(4,3), rep(5,2),  rep(6,2), rep(7,3), rep(8,3))
begin = c(1963, 1969, 1969, 1974, 2004, 1971, 1976, 1984, 1996, 1998, 2011, 1997, 2008, 2011, 1967, 1971, 1972, 1985, 1971, 1980, 1986, 1974, 2000, 2002)
end = c(1969, 1969, 1974, 2004, 2012, 1976, 1984, 2012, 1998, 2011, 2012, 2008, 2011, 2012, 1971, 2012, 1985 ,2012 ,1980 ,1986 ,2012 ,2000 ,2002 ,2012)
status = c(1, 5, 6, 5, 1, 1, 5, 1, 1, 3, 8, 1, 3, 1, 1, 5, 1, 8, 1, 5, 1, 1, 8, 1)
df = data.frame(id,begin,end,status)
df.seq1 = seqformat(df, from = "SPELL", to="STS", process = FALSE)
df.seq2 <- seqdef(df.seq1, informat='STS')
df.seq3 <- seqecreate(df.seq2, tevent = "transition")

fsubseq <-seqefsub(df.seq3, min.support = 1)

有8个序列,状态对应不同的地理位置。时间单位是年。 函数 fsubseq 列出了所有可能的子序列。

             Subsequence Support Count
1                    (*)   0.875     7
2              (*)-(*>1)   0.875     7
3                  (*>1)   0.875     7
4        (*)-(*>1)-(1>5)   0.375     3
5              (*)-(1>5)   0.375     3
6            (*>1)-(1>5)   0.375     3
7                  (1>5)   0.375     3
8                  (5>1)   0.375     3
9        (*)-(*>1)-(1>3)   0.250     2
10 (*)-(*>1)-(1>5)-(5>1)   0.250     2
11       (*)-(*>1)-(1>8)   0.250     2
12       (*)-(*>1)-(5>1)   0.250     2
13             (*)-(1>3)   0.250     2
14       (*)-(1>5)-(5>1)   0.250     2
15             (*)-(1>8)   0.250     2
16             (*)-(5>1)   0.250     2
17           (*>1)-(1>3)   0.250     2
18     (*>1)-(1>5)-(5>1)   0.250     2
19           (*>1)-(1>8)   0.250     2
20           (*>1)-(5>1)   0.250     2
21                 (1>3)   0.250     2
22           (1>5)-(5>1)   0.250     2
23                 (1>8)   0.250     2

我所说的“完整子序列”对应于包含一个人的所有连续状态的子序列。在此示例中,有七个:1/6/5/1、1/5/1、1/3/8、1/3/1、1/5、1/8、1/8/1。 “完整子序列”1/5/1 对应于第 10 行。 很难在列表中找到“完整的子序列”。所以我的问题是想知道是否有办法从列表中过滤出完整的子序列。

据我了解,您所说的“完整子序列”是不同连续状态的序列。

不同的连续状态是从 seqdss 的状态序列和 seqtab 的序列频率中获得的。所以,我们得到你所谓的“完整子序列”的频率:

seqtab(seqdss(df.seq2))
#                 Freq Percent
# 1/1-5/1-1/1        2      25
# 1/1-3/1-1/1        1      12
# 1/1-3/1-8/1        1      12
# 1/1-5/1            1      12
# 1/1-6/1-5/1-1/1    1      12
# 1/1-8/1            1      12
# 1/1-8/1-1/1        1      12