我在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
提前致谢!
答案 0 :(得分:4)
使用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"
,但是上面的原始马尔可夫链的预测是在人6中发生的状态,那么预测将是不同的。此预测不再具有马尔可夫属性,因为下一个状态的预测取决于到目前为止发生的所有状态。
allowed <- setdiff(states(est), person6)
names(which.max(conditionalDistribution(est, tail(person6, 1))[allowed]))
## [1] "tie"
答案 1 :(得分:1)
这肯定是一个图形/马尔可夫链类型的问题,而不是你所说的时间序列。 我的猜测是你应该期待的价值是“领带”,“鞋子”,“夹克”
所有载体都有相同的元素“内衣”,“袜子”,“裤子”,“衬衫”,“领带”,“鞋子”,“夹克”一次出现。 你可以设置关于订单的逻辑限制(你不能系领带而不穿夹克的衬衫) 5人中有3人按照“领带”,“鞋子”,“夹克”的顺序出现3个要素
我对这类问题的正式通用解决方案非常感兴趣!