我打算为ARIMA
预测方法找到均方根误差,我模拟了它的数据。我的方法是使用R
按照Rob J.Hyndman的方法完成的:
- 将时间序列数据划分为
train
和test
集 - 通过
auto.arima()
函数获得最佳模型 - 预测列车数据集的未来,直至测试集的长度
- 计算预测的
RMSE
MWE
library(forecast)
n=50
phi <- 0.6
set.seed(106100125)
ar1 <- arima.sim(n, model = list(ar=phi, order = c(1, 0, 0)), sd = 1)
train <- head(ar1, round(length(ar1) * 0.8)) # Train set
test <- tail(ar1, length(ar1) - length(train)) # Test set
nfuture <- forecast(train, model = auto.arima(train), h = length(test)) # makes the `forecast of test set to the future up to length of test set
RMSE <- accuracy(test, nfuture) # RETURN RMSE
当我在MWE中使用RMSE
时,我得到了0
。但当我打电话给test
和nfuture
时,我收到了
#[1] 1.0470537 0.3984545 0.5811056 2.2703350 -1.0060028 -1.6126040 -0.4329466 2.1523534 1.2588265 0.7308986
和
#[1] 0.55281252 0.42374990 0.32481894 0.24898494 0.19085556 0.14629738 0.11214200 0.08596072 0.06589186 0.05050839
因此,RMSE
不可能是0
请帮我解决我做错了什么,让我明白我需要做些什么来纠正错误。
使用您的代码,会产生以下错误:
RMSE <- accuracy(test, nfuture)
#> Error in xx - ff[1:n]: non-numeric argument to binary operator
你改变了辩论的顺序。如果你解决了这个问题,你会得到以下结果
accuracy(nfuture, test)
#> ME RMSE MAE MPE MAPE MASE
#> Training set 0.1068326 0.7035255 0.5543322 146.47245 194.2587 0.9426693
#> Test set 0.3185452 1.2399912 1.0237739 81.17983 82.4495 1.7409780
#> ACF1 Theil's U
#> Training set 0.1696878 NA
#> Test set 0.1777069 0.9050431
由reprex包(v0.3.0(于2020-09-24创建