R fable中的预测功能是否提供一步预测?
如上所述,在测试集中进行一步预测是避免随着预测范围的增加而不可避免地增加方差的一种方法。该节中提到的方法是使用已训练的模型对测试集执行一步预测,用于R fable中的预测功能是否提供一步预测?,r,forecasting,fable-r,R,Forecasting,Fable R,如上所述,在测试集中进行一步预测是避免随着预测范围的增加而不可避免地增加方差的一种方法。该节中提到的方法是使用已训练的模型对测试集执行一步预测,用于预测包。是否有类似的方法使用较新的fable软件包对测试数据执行一步预测?也许描述的new_data参数可以处理这个问题,但我不确定,因为h=24和new_data=x_test的预测如下所示: > library(fable) > library(fabletools) > x <- USAccDeaths %>% +
预测
包。是否有类似的方法使用较新的fable
软件包对测试数据执行一步预测?也许描述的new_data
参数可以处理这个问题,但我不确定,因为h=24
和new_data=x_test
的预测如下所示:
> library(fable)
> library(fabletools)
> x <- USAccDeaths %>%
+ as_tsibble()
> x
# A tsibble: 72 x 2 [1M]
index value
<mth> <dbl>
1 1973 Jan 9007
2 1973 Feb 8106
3 1973 Mar 8928
4 1973 Apr 9137
5 1973 May 10017
6 1973 Jun 10826
7 1973 Jul 11317
8 1973 Aug 10744
9 1973 Sep 9713
10 1973 Oct 9938
# … with 62 more rows
> x_train <- x %>% filter(year(index) < 1977)
> x_test <- x %>% filter(year(index) >= 1977)
> fit <- x_train %>% model(arima = ARIMA(log(value) ~ pdq(0, 1, 1) + PDQ(0, 1, 1)))
> fit
# A mable: 1 x 1
arima
<model>
1 <ARIMA(0,1,1)(0,1,1)[12]>
> nrow(x_test)
[1] 24
> forecast(fit, h = 24)$.mean
[1] 7778.052 7268.527 7831.507 7916.845 8769.478 9144.790 10004.816 9326.874 8172.226
[10] 8527.355 8015.100 8378.166 7692.356 7191.343 7751.466 7839.085 8686.833 9062.247
[19] 9918.487 9250.101 8108.202 8463.933 7958.667 8322.497
> forecast(fit, new_data = x_test)$.mean
[1] 7778.052 7268.527 7831.507 7916.845 8769.478 9144.790 10004.816 9326.874 8172.226
[10] 8527.355 8015.100 8378.166 7692.356 7191.343 7751.466 7839.085 8686.833 9062.247
[19] 9918.487 9250.101 8108.202 8463.933 7958.667 8322.497
>库(寓言)
>图书馆(fabletools)
>x%
+as_tsibble()
>x
#A t气泡:72 x 2[1M]
索引值
1973年1月1日9007年1月
1973年2月2日8106
1973年3月3日8928
1973年4月4日1937
1973年5月5日2017年5月10日
1973年6月6日10826
1973年7月11317日
1973年8月8日10744
1973年9月9日9713
1973年10月9938日
#…还有62行
>x_系列%过滤器(年份(指数)<1977年)
>x_试验%过滤器(年份(指数)>=1977)
>拟合%模型(arima=arima(对数(值)~pdq(0,1,1)+pdq(0,1,1)))
>合身
#一个mable:1x1
阿里玛
1.
>nrow(x_测试)
[1] 24
>预测(拟合,h=24)$平均值
[1] 7778.052 7268.527 7831.507 7916.845 8769.478 9144.790 10004.816 9326.874 8172.226
[10] 8527.355 8015.100 8378.166 7692.356 7191.343 7751.466 7839.085 8686.833 9062.247
[19] 9918.487 9250.101 8108.202 8463.933 7958.667 8322.497
>预测(拟合,新数据=x检验)$平均值
[1] 7778.052 7268.527 7831.507 7916.845 8769.478 9144.790 10004.816 9326.874 8172.226
[10] 8527.355 8015.100 8378.166 7692.356 7191.343 7751.466 7839.085 8686.833 9062.247
[19] 9918.487 9250.101 8108.202 8463.933 7958.667 8322.497
答案和代码
{forecast}
包中许多模型可用的model
参数相当于{fable}
包中的refit()
方法。与未来数据一起使用时,它可用于从模型生成多个一步预测
库(预测)
适合%
auto.arima()
拟合检验%
Arima(模型=拟合)
精度(拟合检验)
#>我是我的朋友
#>训练集22.45098167.064885.597240.2382773 0.9327587 0.3298545
#>ACF1
#>训练集-0.0968173
图书馆(寓言)
图书馆(dplyr)
美国意外死亡。型号。键入ME RMSE MAE MPE MAPE MASE RMSSE ACF1
#>
#>1 ARIMA(价值)培训22.5 167。85.6 0.238 0.933 0.330 0.490 -0.0968
由(v0.3.0)于2020年10月13日创建
解释
模型的fitted()。然而,有一个陷阱——模型的估计参数是基于整个训练集的,因此训练精度比预期的要好(模型包含一些关于其拟合的未来的信息)
forecast()
函数用于生成模型从未见过的未来时间点的预测。您可以使用forecast(,h=1)
生成单个一步预测。但是,这只生成一个预测。相反,我们希望生成一个提前一步的预测,向模型中添加一个新观测值,然后在新观测值之外生成另一个提前一步的预测(重复,直到数据用完)
这就是refit()
功能有用的地方。它接受现有模型,并将其应用于新数据集。此重新装配过程涉及对数据(已装配的fitted()
值)进行一步预测。通过设置reestimate=FALSE
,模型的估计系数将不会更新以更好地适应新的“未来”数据。这解决了模型系数的问题,该模型系数包含有关我们正在测试预测精度的未来值的一些信息。“相反,我们希望生成一个提前一步的预测,向模型添加一个新观测…”因此我们得到了提前一步的预测,但是,添加到模型中的新观察值是来自测试集的实际结果值,还是我们刚刚预测的值?“新观察值”是重新安装模型时的实际观察值。这是允许您生成多个提前一步的预测的原因,因为它们比实际观测数据早一步。这与前面的多个步骤不同,在多个步骤中,您的最佳猜测是预测值。