Я пытаюсь прогнозировать данные нескольких временных рядов, которые присутствуют в одном фрейме данных. Кадр данных 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
, т. Е. Шафрана. Но это не дает результат для 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
l oop?