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

mow*_*per 2 r time-series

我已经在 R 中使用 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
Run Code Online (Sandbox Code Playgroud)

提前致谢!

G. *_*eck 5

使用 markovchain 包,我们可以使用估计的转换矩阵估计给定当前状态的下一个状态。首先创建一个 nx 2m的转换对矩阵(每行一个),然后执行估计给出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)
Run Code Online (Sandbox Code Playgroud)

(剧情后续)

截屏

上述的一种变体是考虑以没有再次出现的状态为条件的分布。下面allowed是那些没有出现在person6. 在这种情况下"tie",预测仍然是,但如果来自上述原始马尔可夫链的预测是在 person6 中发生的状态,那么预测就会不同。这个预测不再具有马尔可夫特性,因为下一个状态的预测取决于到目前为止发生的所有状态。

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