首页 文章

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

提问于
浏览
1

这个问题实际上源于我曾问过自己的问题,但我认为这是一个单独的问题 .

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

所以我的问题是:

  • 我可以设置任何标志或任何标志以进行转换吗?

  • 如果不是,我怎么能删除这些行,因为它们的长度不同,缺少值 . 例如,我可能有以下序列:

失踪失踪-A-A-A-A A-A-missing-missing-missing-missing-missing-missing

非常感谢提前!

提供我的数据样本:

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,]) 它有效

3 回答

  • 3

    当缺少状态且序列长度不同时,会发生错误 . 解决方法是在 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")
    
  • 1

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

    我设法通过不设置 missing 选项并创建"dummy"状态Z来实现它,我添加到字母表和标签"Z-missing" . 我还设置了选项 left="Z"right="Z" .

    虽然我看起来仍然像个小虫 .

  • 0

    我不确定这可能是答案,但在这个Cran Page,http://cran.r-project.org/web/packages/TraMineR/NEWS,他们谈到TraMineR的开发版本1.9.8,他们引用了一个错误:

    错误修复: - seqformat():当从STS转换为TSE时,如果tevent矩阵有空字符串(即“”),则会引发错误 . 现在,这被认为是没有事件 .

    事实并非如此,因为序列本身并不是空的,但它可能是同一个问题 . 我相信他们在内部使用seqformat()函数,因此我可能会以某种方式与bug相关 .

    我将下载开发版并发布她的演绎方式 .

相关问题