gpt4 book ai didi

r - 使用来自预测的准确度()测量 VAR 准确度

转载 作者:行者123 更新时间:2023-12-04 12:08:48 27 4
gpt4 key购买 nike

我正在尝试使用 vars 学习向量自回归模型R 中的包。这个包没有任何方法来衡量返回模型的准确性。

具体来说,我想使用 accuracy 中定义的 MASE来自 forecast 的函数R 中的包,以比较使用 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 的功能等等并尝试写一个 forecast.varresult包,但有更简单的方法吗?

最佳答案

为什么不尝试阅读文档。这是关于第一个参数的说明,f :

An object of class "forecast", or a numerical vector containing forecasts. It will also work with Arima, ets and lm objects if x is omitted – in which case in-sample accuracy measures are returned.


VAR不返回“预测”类的对象,但您可以计算包含预测的数值向量。

现在阅读第二个参数, x .

An optional numerical vector containing actual values of the same length as object, or a time series overlapping with the times of f.



好的,这很简单。只需在 x 中给出实际值即可以及 f 中的预测值.

但这不会为您提供 MASE,因为在帮助页面的进一步下方,它解释说“MASE 计算是使用非季节性时间序列的样本内朴素预测的 MAE、季节性时间序列的样本内季节性朴素预测和非时间序列数据的样本内平均预测。”所以它不能在没有历史数据的情况下进行计算,除非你传递一个“预测”类的对象,否则它不会知道它们。

然而,欺骗它提供你想要的并不难。这是一些执行此操作的代码:
trainingdata <- window(Canada, end=c(1998,4))
testdata <- window(Canada, start=c(1999,1))
v <- VAR(trainingdata, p=2)
p <- predict(v, n.ahead=8)
res <- residuals(v)
fits <- fitted(v)
for(i in 1:4)
{
fc <- structure(list(mean=p$fcst[[i]][,"fcst"], x=trainingdata[,i],
fitted=c(NA,NA,fits[,i])),class="forecast")
print(accuracy(fc,testdata[,i]))
}

关于r - 使用来自预测的准确度()测量 VAR 准确度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18244506/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com