簡體   English   中英

使用寓言系列后期使用 xreg 進行分層預測

[英]Hierarchical forecast with xreg late in series using fable

我正在使用偉大的fable package 並嘗試使用 arima 和 ets 模型創建分層預測,並與 td、mo、bu 和 min 跟蹤進行協調以比較並查看最佳方法。 我的系列在系列后期有一些需要回歸的效果,所以我正在嘗試創建一個二元回歸器來處理這個問題。 我已經閱讀了關於使用new_data參數添加具有分層預測的回歸量的new_data 1 和xreg 參數 正如 Rob Hyndman 在鏈接 1 中所描述的那樣,我通過將數據拆分為訓練集和測試集並將測試傳遞給new_data的方法取得了成功。 我在當前任務中遇到的問題是,需要建模的效果都在系列的后期,所以它們都在測試集中。

首先是我可重現的示例數據:

library(tidyverse)
library(forecast)
library(fable)
library(tsibble)
library(tsibbledata)
library(lubridate)

data <- aus_livestock %>%
  filter(State %in% c("Tasmania", "New South Wales", "Queensland"),
         as.Date(Month) > as.Date("2000-01-01")) %>%
  aggregate_key(State, Count=sum(Count)) %>%
  mutate(xreg=as.factor(if_else(as.Date(Month) > as.Date("2018-01-01") &
                                  as.Date(Month) < as.Date("2018-10-01"), 1, 0)))

我過去曾成功做過這樣的事情:

train <- data %>%
  filter(as.Date(Month) < as.Date("2017-10-01"))

test <- data %>%
  filter(as.Date(Month) >= as.Date("2017-10-01"))

mod_data <- train %>%
  model(ets=ETS(Count),
        arima=ARIMA(Count ~ xreg)
        ) %>%
  reconcile(bu_ets=bottom_up(ets),
            td_ets=top_down(ets),
            mint_ets=min_trace(ets),
            bu_arima=bottom_up(arima),
            td_arima=top_down(arima),
            mint_arima=min_trace(arima)
            )

forc_data <- mod_data %>%
  forecast(new_data=test)

autoplot(forc_data,
         data,
         level=NULL)

但由於在這種情況下,訓練集中的回歸量全為零,這預計會提供錯誤Provided exogenous regressors are rank deficient, removing regressors: xreg1 我認為我需要做的是將我擁有的所有數據提供給 model,而不是將數據拆分為訓練和測試,但我不確定如何在new_data文件沒有數據時使用 fable 預測 model。 我得到的最接近的是這樣的:

dates <- sort(rep(seq(as.Date("2019-01-01"), as.Date("2020-12-01"), "months"), 3))

future_data <- tibble(
  Month=dates,
  State=rep(c("Tasmania", "New South Wales", "Queensland"), 24), 
  Count=0
) %>%
  mutate(Month=yearmonth(Month)) %>%
  as_tsibble(index=Month, key=State) %>%
  aggregate_key(State, Count=sum(Count)) %>%
  mutate(xreg=factor(0, levels=c(0, 1))) %>%
  select(-Count)

mod_data <- data %>%
  model(ets=ETS(Count),
        arima=ARIMA(Count ~ xreg)
        ) %>%
  reconcile(bu_ets=bottom_up(ets),
            td_ets=top_down(ets),
            mint_ets=min_trace(ets),
            bu_arima=bottom_up(arima),
            td_arima=top_down(arima),
            mint_arima=min_trace(arima)
            )

forc_data <- mod_data %>%
  forecast(new_data=future_data)

autoplot(forc_data,
         data,
         level=NULL)

Oddly this code causes my R Studio to crash when I try to run the forecast piece saying R session aborted R has encountered a fatal error . 我認為這可能與代碼無關,因為我實際上是讓它在我的真實數據上工作,但預測看起來並不像我預期的那樣。

因此,總而言之,我想知道當所有回歸效應都需要在測試集期間發生時,我如何使用fable來預測具有外生回歸量的層次序列。

提前感謝我能得到的任何幫助!

我認為不可能只在測試集中這樣做,因為 model 在訓練集中沒有什么可學習的。 即你只能在訓練過程中包含一個外生變量,如果它同時存在於訓練和測試集中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM