【问题标题】:Transforming states sequences into event sequences将状态序列转换为事件序列
【发布时间】:2015-01-24 15:16:28
【问题描述】:

这个问题实际上源于我问过自己的这个问题 (Find specific patterns in 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. 如果不是,我如何删除这些行,因为它们具有不同的长度和缺失值。例如我可能有这样的序列:

    missing-missing-A-A-A-A A-A-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,]) 它可以工作

【问题讨论】:

  • 我们无法从您的示例中看到 StatesSequence 是什么。请提供一个最小示例,显示原始数据和状态序列对象的创建seqdef

标签: r traminer


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    在我看来仍然是一个错误。

    【讨论】:

      【解决方案3】:

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

      错误修复: - seqformat():从 STS 转换为 TSE 时,如果 tevent 矩阵有空字符串(即“”)。现在,这被视为没有事件。

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

      我会下载开发版并告诉她进展如何。

      【讨论】:

      • 不!我安装了 1.9.9 版本,它保持不变。
      猜你喜欢
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 2021-03-02
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      相关资源
      最近更新 更多