修改状态序列的时间粒度

机器算法验证 电车 序列分析
2022-03-27 06:47:02

我从我的 SPELL 格式数据集中创建了一个序列对象。序列对象的序列长度为 1440(即一天间隔 1 分钟)。

TraMineR 是否有任何简单的方法可以将序列长度从 1440 转换为 288(即 5 分钟间隔),使用每个时间间隔的第一分钟的状态来表示该 5 分钟期间个人的状态?

2个回答

另一种解决方案是使用包seqgranularity提供的功能TraMineRextras这个函数使用不同的方法改变时间粒度,当前要么是"first"状态,要么是"last"状态,但未来应该实现其他方法,例如选择聚合法术中最频繁的状态。

对于上面的示例,您只需使用

mvadg.seq.year <- seqgranularity(mvad.seq, tspan=12, method = "first")

TraMineRextras应该在不久的将来在 CRAN 上提供。同时,如果你有最新版本的 R,你可以从 R-Forge 安装它

install.packages("TraMineRextras", repos="http://R-Forge.R-project.org")

您可以简单地选择相应的列。在您的情况下,这应该是第 1、6、11 列...您可以使用“seq”函数获取列索引:

column.5min <- seq(from = 1, to = 1440, by=5)

现在您可以选择列,例如使用:

myseq5min <- myseq[, column.5min]

这是一个使用“mvad”数据集并选择每年的第一个州的示例。

 ## Loading the library
 library(TraMineR)
 data(mvad)
 ## Defining sequence properties
 mvad.alphabet <- c("employment", "FE", "HE", "joblessness", "school", "training")
 mvad.lab <- c("employment", "further education", "higher education", "joblessness", "school", "training")
 mvad.shortlab <- c("EM", "FE", "HE", "JL", "SC", "TR")
 ## The state sequence object.
 mvad.seq <- seqdef(mvad, 17:86, alphabet = mvad.alphabet, states = mvad.shortlab, labels = mvad.lab, xtstep = 6)
 ## Now select the column every year (every twelve monthes)
 mvad.seq.year <- mvad.seq[, seq(from=1, to=70, by=12)]
 seqdplot(mvad.seq.year)