【问题标题】:How to write a rolling forecast with xreg but without re-estimation in R?如何用 xreg 编写滚动预测,但在 R 中不重新估计?
【发布时间】:2021-09-19 07:59:50
【问题描述】:

我希望在不重新估计的情况下编写一个滚动窗口多步预测(我想一直使用 ARIMA(1,0,0) 模型)并在其中实现一个 xreg。

我使用来自 Rob Hyndam 的代码,他的代码如下:

h <- 5
train <- window(hsales,end=1989.99)
test <- window(hsales,start=1990)
n <- length(test) - h + 1
fit <- auto.arima(train)
fc <- ts(numeric(n), start=1990+(h-1)/12, freq=12)
for(i in 1:n)
{  
  x <- window(hsales, end=1989.99 + (i-1)/12)
  refit <- Arima(x, model=fit)
  fc[i] <- forecast(refit, h=h)$mean[h]
}

我已经阅读了许多不同的帖子,但许多帖子在实现 xreg 时使用了模型的重新估计,并且在尝试解决问题时,我经常遇到我的 xreg 长度与拟合线。

因此我试图用这段代码解决我的问题:

h <- 5
train <- window(hsales,end=1989.99)
test <- window(hsales,start=1990)
xregtrain <-window(hsales, end=1989.99)
n <- length(test) - h + 1
fit <- arima(train, order= c(1,0,0), xreg = xregtrain)
fc <- ts(numeric(n), start=1990+(h-1)/12, freq=12)
for(i in 1:n)
{  
  x <- window(hsales, end=1989.99+ (i-1)/12)
  y<- window(hsales, end=1989.99 + (i-1)/12)
  refit <- Arima(x, order=c(1,0,0), xreg=y)
  fc[i] <- forecast(refit, h=h, xreg=y)$mean[h]
}

这应该更新 xreg 的长度以匹配每个新预测的 hsales 长度并且似乎有效,但是我希望有人能告诉我如何检查这是否在每个新预测中更新 xreg 的值或也许有更深入了解的人可以确认它正在做我想让它做的事情。

我的最后一个问题是;如何从中获取预测值并分析该模型的预测能力,例如如何计算该预测的 MAPE?

感谢您的帮助!

【问题讨论】:

    标签: r regression forecasting arima


    【解决方案1】:

    您当前的代码将无法工作,因为您正在对一个序列进行自我回归(xreg 与您正在建模的时间序列相同)。下面是一些使用随机生成的 xreg 进行说明的代码。

    library(fpp2)
    
    h <- 5
    train <- window(hsales, end = c(1989, 12))
    test <- window(hsales, start = 1990)
    xreg <- hsales * rnorm(length(hsales))
    xregtrain <- window(xreg, end = c(1989, 12))
    fit <- Arima(train, order = c(1, 0, 0), xreg = xregtrain)
    n <- length(test) - h + 1
    fc <- ts(numeric(n), start=c(1990, h), frequency = 12)
    for (i in seq(n)) {
      y <- window(hsales, end = c(1990, i - 1))
      x <- window(xreg, end = c(1990, i - 1))
      refit <- Arima(y, order = c(1, 0, 0), xreg = x)
      fc[i] <- forecast(refit, h = h, xreg = x)$mean[h]
    }
    accuracy(fc, test)
    

    accuracy() 函数将计算 MAPE 和其他预测准确度度量。

    【讨论】:

    • 感谢您的帮助!如果我想把它变成滚动窗口预测,我该怎么做?
    • 在循环中的窗口中添加开始日期
    • 您好,Rob,感谢您的帮助。例如,如果我希望滚动窗口持续 10 个周期(等于 h=10),我尝试在循环中执行以下操作; for (i in seq(n)) { y
    猜你喜欢
    • 1970-01-01
    • 2017-06-26
    • 2016-04-24
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    相关资源
    最近更新 更多