在dplyr groupby函数的帮助下使用auto.arima进行预测

时间:2015-06-17 13:36:41

标签: r csv group-by dplyr forecasting

我需要预测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)

这部分不起作用。请让我知道此代码的问题。感谢。

1 个答案:

答案 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