我有两个问题。 (注意:问题的第一部分已在下面的评论中解决)
首先,我试图根据Rob Hyndman的this tutorial确定VAR预测的平均绝对误差,并收到以下错误消息:
Error in `-.default`(fcast[['mean']], dxnext) :
non-numeric argument to binary operator
我相信我已设法将其追踪到VAR的输出,这是非数字的,并且似乎导致了这个问题。
有解决方法吗?
其次,此代码需要适用于双变量和多变量模型,因此我怀疑是否应该使用dx
的{{1}}长度作为教程建议,或者其中一个变量的长度,因为这是表示给定时间范围的长度。问题在于n
的长度以及在给定预测长度(在这种情况下为12)的循环中如何处理它。任何意见都将不胜感激。
以下是包含示例数据和所需包的代码,以便可以复制错误。
dx
修改
以下代码似乎可以解决上述问题,但我仍然遇到有关如何处理输出的问题。
我的直觉是它只记录循环的最后一次迭代,并且该迭代的预测范围延伸到未来(超出可用数据的范围)。
正如我在上面提供的链接中部分解释的那样,代码尝试基于蓝色数据运行模型(参见下面的示例图片)并预测红色数据集,记录每个预测范围的平均误差,将其存储在数据帧,最后取所有迭代的平均误差。
require("forecast")
require("vars")
x <- rnorm(70)
y <- rnorm(70)
dx <- cbind(x,y)
dx <- as.ts(dx)
# Forecast Accuracy
k <- 58 # data length less forecast horison (as minimum)
n <- length(dx)
mae <- matrix(NA, n-k, 12)
st <- tsp(dx)[1]+(k-2)/12
for (i in 1:(n-k)) {
dxshort <- window(dx, end=st+i/12)
dxnext <- window(dx, start=st + (i+1)/12, end=st+(i+12)/12)
fit <- VAR(dxshort, p = 2)
fcast <- forecast(fit, h = 12)
mae[i,1:length(dxnext)] <- abs(fcast[['mean']] - dxnext)
}
plot(1:12, colMeans(mae,na.rm = TRUE), type = "1", Col = 2, xlab = "horizon", ylab = "MAE")