【问题标题】:Forecast using auto.arima with help of dplyr groupby function借助 dplyr groupby 函数使用 auto.arima 进行预测
【发布时间】:2015-06-17 13:36:41
【问题描述】:

我需要预测 100 家商店中某些产品(10 种产品)在 150 天内的需求。在这我需要对产品和商店进行分组,并拟合一个 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)})

到这里为止,代码可以正常工作,但会出现一些警告,例如“无法使用最大似然拟合最终模型。AIC 值已近似”。我希望它没问题,如果不是,请告诉我为什么。

现在我需要将它预测到一个列 Forecast 我是 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)

这部分不工作。请让我知道这段代码的问题。谢谢。

【问题讨论】:

    标签: r csv group-by dplyr forecasting


    【解决方案1】:

    仅供参考,如果您陈述一个简单、可重复的示例,您将获得更多/更好/更快的答案(我无法访问 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
    

    如果您准确说明您收到的错误消息,也会有所帮助。我的猜测是,您得到的内容类似于“结果不是数据框”,就像我在这里所做的那样:

    > 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
    

    【讨论】:

    • 很抱歉写得不好。你的大部分假设都是正确的。唯一的问题是我有两列可以分组,我需要将预测值存储在同一数据框的新列中。您提供的代码未将其存储在数据框中。此外 h 的值不是恒定的(即它会根据子集的行数而变化)
    • 写错题没问题;只是想帮助您获得更好的答案。 :) 如果每一行都包含一个日期,我猜你想附加到旧数据框?这可以通过 bind_rows 完成。对于不同的预测范围,您应该能够传递一个汇总分组数据的变量,而不是我使用的常量。如果您想要更准确的答案,也许您可​​以更新您的问题以包含我的示例输入的修改版本,其中涵盖了您提到的这些其他问题。
    猜你喜欢
    • 2021-10-18
    • 2019-03-19
    • 2018-09-08
    • 1970-01-01
    • 2013-02-09
    • 2013-04-09
    • 2015-09-17
    • 1970-01-01
    相关资源
    最近更新 更多