将状态序列转换为事件序列

Transforming states sequences into event sequences

这个问题实际上是由我问过自己的这个问题 ( 引起的,但我认为这是一个单独的问题。

根据 Gilbert 的回复,我尝试从状态序列创建事件序列,但我遇到了问题。

建议使用

seqe=seqecreate(comp.seq,tevent="state")

然后使用

seqefsub(seqe,strsubseq="(a)-(d)")

但是当我尝试使用 seqecreate() 时出现以下错误:

Error in `seqelength<-`(`*tmp*`, value = c(64, 64, 64, 64, 61, 62, 61,  : (...) 
s and len should be of the same size.

如果我尝试使用以下方法将其转换为事件序列,也会发生同样的情况:

seqe=seqecreate(comp.seq,tevent="transition")

尝试使用行的子集并确定哪些行导致了问题我发现有问题的行都处于恒定状态,这意味着它们实际上没有转换,它们永久保持在同一个状态(例如 A-A-A-A-A-A ).

所以我的问题是:

  1. 是否有任何标志或任何我可以设置的东西来进行转换?
  2. 如果不是,我该如何删除这些行,因为它们具有不同的长度和缺失值。例如我可能有这样的序列:

    失踪-失踪-A-A-A-A A-A-缺失-缺失-缺失-缺失-缺失

提前致谢!

提供我的数据样本:

comp.seq <- seqdef(comp,NULL,states=comp.scodes,labels=comp.labels, alphabet=comp.alphabet,missing="Z") comp.seq[1:7,] 1 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-B-B-B-B-B-B-B-B-D-D-D-D-D-A-A-A-A-A-A-A-A-A 2 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-C-C-C-C-C-C-C-C-C-C-C-C-C-C-*-B-B-B-B-B-B-B-B-B-B-B-B-B-A-A-A-A-A-A 3 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-A-A-A-C-C-A-A-A-A-A-A-A-D-D-A-A-A-A-A-A-A-A 4 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-B-B-B-B-B-B-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A-A 5 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-C-C-D-D-D-D-D-D-D-D-D-D-A-A-A-A-A 6 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-B-B-B-B-B-B-B-B-B-B-B-B-B-D-D-D-D-D-D-D-D-A-A-A-A 7 *-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-A-A-A-A-A-A-A-A-A-A-A-A

第 7 行有问题。如果我尝试使用 seqecreate(comp.seq[1:6,]) 它有效

我不确定这是否是答案,但在这个 Cran 页面上,http://cran.r-project.org/web/packages/TraMineR/NEWS,他们谈论 TraMineR 的开发版本 1.9.8,他们提到了一个错误:

Bug fixes: - seqformat(): When converting from STS to TSE, an error was raised if the tevent matrix had empty strings (i.e. ""). Now, this is considered as no event.

情况并非完全如此,因为序列本身不为空,但这可能是同一个问题。我相信他们在内部使用 seqformat() 函数,因此这个错误可能与我有某种关系。

我会下载开发版,post她会怎样。

所以在我使用的序列中,我为缺失值设置了一个代码,seqdef() 函数中的 missing="Z" 选项。

我设法通过不设置 missing 选项并创建 "dummy" 状态 Z 来使其工作,我将其添加到字母表和标签 "Z-missing" 中。我还设置了选项 left="Z"right="Z" .

虽然对我来说仍然像是一个错误。

当存在缺失状态和序列长度不同时会出现错误。解决方法是在 seqdef 调用中设置 right="NA"

这是一个最小的例子:

x1 <- "*-*-A-B"
x2 <- "*-A-A"
dat.str <- data.frame(string=rbind(x1,x2))
dat <- seqdecomp(dat.str, sep="-", miss="*")

## creating state sequence object with and without right="NA"
dat.seq.NA <- seqdef(dat, right="NA")
dat.seq.void <- seqdef(dat)

## next command works without error
dat.eseq <- seqecreate(dat.seq.NA, tevent="state")

## while this one produces the error
dat.eseq <- seqecreate(dat.seq.void, tevent="state")