答案和代码
The model
参数可用于许多模型{forecast}
包相当于refit()
方法中的{fable}
包裹。当与未来数据一起使用时,它可用于从模型生成多个一步预测。
library(forecast)
fit <- head(USAccDeaths, -24) %>%
auto.arima()
fit_test <- tail(USAccDeaths, 24) %>%
Arima(model = fit)
accuracy(fit_test)
#> ME RMSE MAE MPE MAPE MASE
#> Training set 22.45098 167.0648 85.59724 0.2382773 0.9327587 0.3298545
#> ACF1
#> Training set -0.0968173
library(fable)
library(dplyr)
us_accidental_deaths <- as_tsibble(USAccDeaths)
fit <- head(us_accidental_deaths, -24) %>%
model(ARIMA(value))
fit_test <- refit(fit, tail(us_accidental_deaths, 24), reestimate = FALSE)
accuracy(fit_test)
#> # A tibble: 1 x 10
#> .model .type ME RMSE MAE MPE MAPE MASE RMSSE ACF1
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1 ARIMA(value) Training 22.5 167. 85.6 0.238 0.933 0.330 0.490 -0.0968
Created on 2020-10-13 by the reprex package https://reprex.tidyverse.org (v0.3.0)
解释
The fitted()
模型的值是一步预测,可用于评估“训练准确性”性能(训练数据的预测准确性)。然而有一个问题 - 模型的估计参数基于整个训练集,因此训练精度比预期的要好(模型包含有关其拟合的未来的一些信息)。
The forecast()
函数用于生成模型从未见过的未来时间点的预测。您可以使用以下方法生成单个一步预测forecast(<mable>, h = 1)
。然而,这只能产生一个预测。相反,我们希望生成一个超前预测,向模型添加一个新观测值,然后在该新观测值之外生成另一个超前预测(重复操作,直到用完数据)。
这就是refit()
功能很有用。它采用现有模型,并将其应用到新数据集。这一改装过程涉及计算数据的一步预测(fitted()
值)。通过设置reestimate = FALSE
,模型的估计系数将不会更新以更好地适应新的“未来”数据。这解决了模型系数的问题,其中包含有关我们正在测试预测准确性的未来值的一些信息。