使用xreg进行滚动预测并进行重新估计

如何解决使用xreg进行滚动预测并进行重新估计

我尝试在重新估算的滚动预测中实现xreg。 不幸的是,我遇到了xreg长度的问题。

# sample data  
sample <- ts(rnorm(100,mean = 1000,sd=7),start = c(2012,1),end = c(2019,12),frequency = 12)
external <- ts(mtcars,frequency = 12)

#Define h --> One-step ahead (for a start,later to be increased)
h <- 1
#specify length to forecast
test  <- window(sample,start = c(2018,01),frequency = 12)
n <- length(test) - h + 1
#provide total length of regressors available
total_xreg <- ts(external[,c(1,2,3)],end= c(2019,frequency = 12)

#create empty matrix
fcmatx <- matrix(0,nrow=n,ncol=h)

# create loop
for(i in 1:n)
{  
# x is the target variable,provide training data 
  x <- window(sample,end= c(2017,12) + (i-1)/12)
# provide xregs for training data
  xregs <- window(total_xreg,end = c(2017,12) + (i-1)/12)
# provide new xregs for forecasting,assuming that xreg is available for the forecasting period
  xregs2 <- window(total_xreg,1) + (i-1)/12
# limit xregs2 to show only the first line since we are only forecasting 1 step in advance
 xregs3 <- xregs2[1,]
# create auto.arima model
  refit.multirex <- auto.arima(x,xreg = xregs)
# forecast using regressors
  fcmatx[i,] <- forecast(refit.multirex,h=h,xreg = xregs3
                         )$mean
}
fcmattsx <- ts(fcmatx,frequency = 12)

这将导致以下错误

Error in forecast.forecast_ARIMA(refit.multirex,h = h,xreg = xregs3) : 
  Number of regressors does not match fitted model

h是长度1,而xregs是长度3,因为我要填写3个变量,但它们都只能使用一个时间段。我尝试了各种调整,但无法正确调整。

解决方法

以下一行

xregs3 <- xregs2[1,]

返回向量而不是矩阵。当您从矩阵中提取单个列或行时,这是R中的默认行为。更改为

xregs3 <- xregs2[1,drop=FALSE]

保留矩阵结构(1x3)。这样forecast()函数将不会返回错误。

i=23时,您将得到一个不同的错误,因为在创建start时,您在end之后有xregs2

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

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?