我需要预测100个商店中一些产品(10种产品)的需求,为期150天。在这里我需要通过PRODUCT和STORE分组,并适合arima模型并进行预测。有些产品可能会有更少的商店。我需要使用auto.arima,因为有10000个子集。我编写了一个计算合适但无法预测的代码。
data <- read.csv("data.csv")
dat <- data.frame(data)
library(dplyr)
library(forecast)
model_fit <- group_by(dat, PRODUCT,STORE) %>% do({fit=auto.arima(.$DEMAND)})
直到这里,代码可以正常使用一些警告,例如&#34;无法使用最大似然拟合最终模型。 AIC值接近&#34;。我希望它没关系,请告诉我,如果没有,为什么。
现在我需要将其预测到预测列中 我是R的新手,所以通过在线资料,我觉得这样可行。
dat[,"Forecast"] <- NULL
model_fit <- group_by(dat, PRODUCT,STORE) %>% do({fit=auto.arima(.$DEMAND) Forecast = forecast(fit)})
write.csv(dat,"Forecast.csv",row.names = FALSE)
这部分不起作用。请让我知道此代码的问题。感谢。
答案 0 :(得分:0)
仅供参考,如果您说明一个简单,可重复的示例(我无法访问data.csv,那么您将获得更多/更好/更快的答案,因此我无法运行您拥有的内容究竟)。
这里有一些示例输入,我认为它可以捕捉您问题的主要观点:
> df <- data_frame(g = c(1, 1, 1, 1, 2, 2, 2, 2), v = c(1, 2, 3, 4, 1, 4, 9, 16))
> df
Source: local data frame [8 x 2]
g v
1 1 1
2 1 2
3 1 3
4 1 4
5 2 1
6 2 4
7 2 9
8 2 16
如果您确切地说明了您正在收到的错误消息,这也会有所帮助。我的猜测是你得到的东西是&#34;结果不是数据框&#34;,就像我在这里做的那样:
> df %>% group_by(g) %>% do(forecast(auto.arima(.$v), h=3))
Error: Results are not data frames at positions: 1, 2
我相信您的问题是您没有在do()语句中返回数据框,也许您还想返回$ mean值。
在我给出的示例中,要为每个组g创建预测,您可以执行以下操作:
> df %>% group_by(g) %>% do(data.frame(v_hat = forecast(auto.arima(.$v), h=3)$mean))
Source: local data frame [6 x 2]
Groups: g
g v_hat
1 1 6
2 1 7
3 1 8
4 2 31
5 2 37
6 2 43