我用ARIMA在R中做了一些时间序列预测,它在给定一系列连续值的情况下预测未来时间点的值,但我不确定在处理类别值时如何处理时间序列预测。
给定这些针对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提前感谢!
发布于 2018-03-20 00:27:53
使用markovchain包,我们可以使用估计的转移矩阵在给定当前状态的情况下估计下一个状态。首先创建一个转移对(每行一个)的n×2矩阵m,然后执行给出est的估计。由此,我们可以使用predict和plot转换矩阵来形成预测。
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)(打印后继续)

上面的一个变体是考虑在没有状态出现的条件下再次出现的分布。这里的allowed是那些没有出现在person6中的状态。这种情况下的预测仍然是"tie",但是如果来自上面的原始马尔可夫链的预测是发生在person6中的状态,那么预测就会不同。该预测不再具有马尔可夫属性,因为对下一状态的预测取决于到目前为止发生的所有状态。
allowed <- setdiff(states(est), person6)
names(which.max(conditionalDistribution(est, tail(person6, 1))[allowed]))
## [1] "tie"发布于 2018-03-20 00:25:28
这绝对是一个图/马尔可夫链类型的问题,而不是你所说的时间序列。我猜你应该期望的值是“领带”,“鞋子”,“夹克”。
所有向量都有相同的元素“内衣”、“袜子”、“裤子”、“衬衫”、“领带”、“鞋子”、“夹克”出现一次。你可以设置关于顺序的逻辑约束(你不能在不穿衬衫的情况下打领带,夹克也是如此)5个人中的3个人在顺序中提出了3个元素“领带”,“鞋子”,“夹克”
我对这些问题的正式通用解决方案非常感兴趣!
https://stackoverflow.com/questions/49367498
复制相似问题