我正在尝试使用vars
R 中的包来学习向量自回归模型。这个包没有任何方法来测量返回模型的准确性。
具体来说,我想使用 R 包中的accuracy
函数中定义的 MASEforecast
来比较预测与 VAR 与使用 Arima 模型对每个组件时间序列的预测(我使用 4 个可能相关的时间序列)。accuracy
不识别varest
返回的对象vars
。如何获得每个预测组件的 MASE?我想计算样本内和样本外的准确性
代码示例:
library(vars)
library(forecast)
data(Canada)
v<- VAR(window(Canada, end=c(1998,4)), p=2)
accuracy(v$varresult[[1]])
的参数accuracy
是一个 lm 对象,并将系列 1 的训练精度返回为:
ME RMSE MAE MPE MAPE MASE
Training set 1.536303e-15 0.3346096 0.2653946 -1.288309e-05 0.0281736 0.03914555
我想使用类似的东西来获得样本外测试的准确性(不完全是这样,因为需要指定预测期):
accuracy(v$varresult[[1]], window(Canada[,1], start=c(1999,1)))
但这不支持 lm 对象并返回错误
Error in testaccuracy(f, x, test) : Unknown list structure
如果我按如下方式直接使用这些值,我不会得到 MASE,它需要有关训练集的信息。这也容易出现一对一的错误,因为使用的是值而不是ts
对象,对象accuracy
将直接匹配存储的时间:
p<-predict(v, n.ahead=8)
accuracy(p$fcst[[1]][,"fcst"],window(Canada[,1], start=c(1999,1)))
ME RMSE MAE MPE MAPE ACF1 Theil's U
Test set -0.1058358 0.8585455 0.7385238 -0.01114099 0.07694492 0.5655117 1.359761
理想情况下,我想将其预测为:
fr<-forecast(v$varresult[[1]], h=8)
但这行不通,因为它需要其他系列进行预测,并给出:
Error in eval(expr, envir, enclos) : object 'datamat' not found
我可以尝试复制forecast.Arima
etc 的功能并尝试编写一个forecast.varresult
包,但有没有更简单的出路?