微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用 xreg 编写滚动预测但无需在 R 中重新估计?

如何解决如何使用 xreg 编写滚动预测但无需在 R 中重新估计?

我希望编写一个无需重新估计的滚动窗口多步预测(我想一直使用 ARIMA(1,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,start=1990)
xregtrain <-window(hsales,end=1989.99)
n <- length(test) - h + 1
fit <- arima(train,order= c(1,0),xreg = xregtrain)
fc <- ts(numeric(n),end=1989.99+ (i-1)/12)
  y<- window(hsales,order=c(1,xreg=y)
  fc[i] <- forecast(refit,h=h,xreg=y)$mean[h]
}

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

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

感谢您的帮助!

解决方法

您当前的代码将无法工作,因为您正在对一个序列进行自我回归(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,12))
fit <- Arima(train,order = c(1,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,i - 1))
  refit <- Arima(y,xreg = x)
  fc[i] <- forecast(refit,h = h,xreg = x)$mean[h]
}
accuracy(fc,test)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。