【问题标题】:Hierarchical forecast with xreg late in series using fable使用寓言系列后期使用 xreg 进行分层预测
【发布时间】:2021-08-17 00:24:29
【问题描述】:

我正在使用出色的 fable 包,并尝试使用 arima 和 ets 模型创建分层预测,并与 td、mo、bu 和 min 跟踪进行协调以比较并查看最佳方法。我的系列在系列后期有一些需要回归的效果,所以我正在尝试创建一个二元回归器来处理这个问题。我已阅读 link1link2 关于使用 new_data 参数添加具有分层预测的回归量,而不是我用于非分层预测的 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。我认为我需要做的是将我拥有的所有数据提供给模型,而不是将数据拆分为训练和测试,但是当new_data 文件没有数据时,我不确定如何使用 fable 预测该模型。我得到的最接近的是这样的:

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)

奇怪的是,当我尝试运行 R session aborted R has encountered a fatal error 的预测片段时,这段代码会导致我的 R Studio 崩溃。我认为这可能与代码无关,因为我实际上是让它在我的真实数据上工作,但预测看起来并不像我预期的那样。

所以,总而言之,我想知道当所有回归效应都需要在测试集期间发生时,我如何使用fable 来预测具有外生回归量的层次序列。

提前感谢您提供的任何帮助!

【问题讨论】:

    标签: r hierarchical forecast fable-r


    【解决方案1】:

    我认为仅在测试集中是不可能的,因为这样模型在训练集中就没有什么可学习的了。 IE。如果训练和测试集中都存在外生变量,则只能在训练过程中包含它。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2020-01-14
    • 1970-01-01
    • 2021-10-18
    • 2019-03-19
    • 2018-09-08
    • 2017-06-26
    • 1970-01-01
    • 2020-01-21
    相关资源
    最近更新 更多