首页 > 解决方案 > R:从单个数据帧预测多个时间序列

问题描述

我正在尝试预测单个数据框中存在的多个时间序列数据。数据框df如下所示。下面dput(df)也给出了快速复制。

  Date           Group       Value
01-04-2019      Saffron      62.78
01-04-2019      Green        75.65
01-05-2019      Saffron      67.89
01-06-2019      Saffron      54.56
01-06-2019      Green        77.00
01-07-2019      Green        71.22

structure(list(Date = structure(c(1L, 1L, 2L, 3L, 3L, 4L), .Label = c("01-04-2019", "01-05-2019", "01-06-2019", "01-07-2019"), class = "factor"), 
Group = structure(c(2L, 1L, 2L, 2L, 1L, 1L), .Label = c("Green", 
"Saffron"), class = "factor"), Value = c(62.78, 75.65, 67.89, 
54.56, 77, 71.22)), .Names = c("Date", "Group", "Value"), class = "data.frame", row.names = c(NA, -6L))

目标:我想预测每个Group使用forecast包。

所以我的方法如下:

col_name_date     <- "Date"   
col_name_measure  <- "Value"
col_name_sku_depo <- "Group"
dates_to_forecast <- 3
for (v in unique(as.character(df$Group))) {
    temp <-subset(data,Group == v)
    assign(paste0("df_",tolower(v)),temp)
    temp <- temp [order(temp[, col_name_date]), ]
    start_date  <- as.Date(temp[1, col_name_date], date_format) #< ---library(lubridate)
    ts_historic <- ts(temp[, col_name_measure], 
                      start = c(year(start_date), month(start_date)),
                      frequency = 12)
    ----Forecasting process using forecast package, omitting as it is out of scope-----

    forecast_mean   <- rep(NA, dates_to_forecast)
    forecast_mean   <- ts_forecast$mean
    forecast_upper  <- ts_forecast$upper
    forecast_lower  <- ts_forecast$lower
    dates_all_mean  <- as.numeric(c(as.numeric(ts_historic), as.numeric(forecast_mean)))
    dates_all_lower <- as.numeric(c(rep(NA, length(ts_historic)), as.numeric(forecast_lower)))
    dates_all_upper <- as.numeric(c(rep(NA, length(ts_historic)), as.numeric(forecast_upper)))
    result <- data.frame(
                 MONTH = dates_all, 
                 MEASURETYPE = date_types,
                 GROUP = v
                 MEASURE = dates_all_mean, 
                 MEASURELOWER = dates_all_lower, 
                 MEASUREUPPER = dates_all_upper, 
                 MODEL = model_descr)
     }

上面的代码适用于单个Group即 Saffron。但这不会产生Green组的结果。

我正在寻找以下输出:

MONTH          MEASURETYPE    GROUP         MEASURE    MEASUREUPPER   MEASURELOWER    MODEL
01-04-2019     Actual        Saffron         62.78       NA             NA            Test
01-05-2019     Actual        Saffron         67.89       NA             NA            Test
01-06-2019     Actual        Saffron         54.56       NA             NA            Test
01-07-2019     Forecast      Saffron         55.35       56.15          54.23         Test
01-08-2019     Forecast      Saffron         57.29       58.15          56.39         Test
01-04-2019     Actual        Green           75.65       NA             NA            Test
01-05-2019     Actual        Green           77.00       NA             NA            Test
01-06-2019     Actual        Green           71.22       NA             NA            Test
01-07-2019     Forecast      Green           76.35       77.15          75.23         Test
01-08-2019     Forecast      Green           73.29       74.29          72.30         Test

从代码中可以看出,我只能为Saffron.

我怎样才能添加Green如上面的输出所示?

我在哪里错过了for循环?

标签: r

解决方案


推荐阅读