如何在R中进行分类时间序列预测?

时间:2018-03-19 16:08:45

标签: r time-series

我在R中使用ARIMA进行了一些时间序列预测,ARIMA根据一系列连续值预测未来时间点的值,但我不确定在处理分类值时如何处理时间序列预测。

鉴于这些简单的训练序列适用于5人的晨礼常规,我如何为person6的最后两个条目生成预测?

person1 <- c("underwear", "socks", "pants", "shirt", "tie", "shoes", "jacket")
person2 <- c("underwear", "pants",  "socks", "shirt", "tie", "jacket", "shoes")
person3 <- c("socks", "underwear",  "pants", "shirt", "tie", "shoes", "jacket")
person4 <- c("underwear", "socks", "shirt", "pants", "tie", "shoes", "jacket")
person5 <- c("underwear", "socks", "shirt", "tie", "pants", "jacket", "shoes")
person6 <- c("underwear", "socks", "pants", "shirt") # Predict next events

提前致谢!

2 个答案:

答案 0 :(得分:4)

使用markovchain包我们可以使用估计的转移矩阵估计给定当前状态的下一个状态。首先创建一个n×2矩阵m的转换对(每行一个),然后执行给出est的估计。由此我们可以使用predictplot转换矩阵来形成预测。

library(markovchain)

L <- list(person1, person2, person3, person4, person5)
m <- do.call("rbind", lapply(L, function(x) cbind(head(x, -1), tail(x, -1))))
mc <- markovchainFit(m)
est <- mc$estimate

est # show transition matrix
# ...snip...

# estimate next step after "shirt"
person6 <- c("underwear", "socks", "pants", "shirt")
prior_state <- tail(person6, 1)
predict(est, prior_state)
## [1] tie 

plot(est)

(情节后继续)

screenshot

上述的变化是考虑在没有再次出现的状态的条件下进行分配。此处allowed是那些未出现在person6中的状态。在这种情况下的预测仍然是"tie",但是上面的原始马尔可夫链的预测是在人6中发生的状态,那么预测将是不同的。此预测不再具有马尔可夫属性,因为下一个状态的预测取决于到目前为止发生的所有状态。

allowed <- setdiff(states(est), person6)
names(which.max(conditionalDistribution(est, tail(person6, 1))[allowed]))
## [1] "tie"

答案 1 :(得分:1)

这肯定是一个图形/马尔可夫链类型的问题,而不是你所说的时间序列。 我的猜测是你应该期待的价值是“领带”,“鞋子”,“夹克”

所有载体都有相同的元素“内衣”,“袜子”,“裤子”,“衬衫”,“领带”,“鞋子”,“夹克”一次出现。 你可以设置关于订单的逻辑限制(你不能系领带而不穿夹克的衬衫) 5人中有3人按照“领带”,“鞋子”,“夹克”的顺序出现3个要素

我对这类问题的正式通用解决方案非常感兴趣!