【问题标题】:Apply lapply function on forecast package (accuracy and auto.arima)在预测包上应用 lapply 功能(准确性和 auto.arima)
【发布时间】:2020-04-26 08:12:06
【问题描述】:

我正在从 fpp2 包中获取数据集 uschange,并从预测包 auto.arima 中获取函数。因为我同时预测了几个时间序列,所以我使用自己的函数同时进行多个预测。

# 
library(fpp2) # data
library(dplyr)
library(forecast)

MY_DATA<-uschange[,1:4]

Trening_set<-subset(MY_DATA,start=1,end=150) # Training set
Test_set<-subset(MY_DATA,start=151,end=187) # Test set 20% of observations

# 1.Own functions for forecasting
FORECASTING_FUNCTION_ARIMA <- function(Z, hrz = 16) {
  timeseries <- msts(Z, start = 1970, seasonal.periods = 4)
  forecast <- auto.arima(timeseries)
  #ic = c("bic")
}
FORECASTING_LIST_ARIMA <- lapply(X = Trening_set, FORECASTING_FUNCTION_ARIMA)
ARIMA_MODELS_FORECAST<-lapply(FORECASTING_LIST_ARIMA, forecast,h=37)

为了查看这个模型的准确性,我使用了 lapply 函数。所以代码和结果可以在下面看到:

# Accurancy test
ACCURANCY_ARIMA <- lapply(FORECASTING_LIST_ARIMA,  accuracy)

所以下一步应该是如何使用相同的函数来产生与上一个示例相同的精度错误,但现在使用测试集。我尝试使用下面的代码,但出了点问题,我无法得到好的结果。

 ACCURANCY_ARIMA1<-lapply(FORECASTING_LIST_ARIMA, accuracy(forecast(ARIMA_MODELS_ALL,h=37),x=Test_set))

如果此功能正常工作,输出应如下表所示(数字仅用于说明)。

那么任何人都可以帮助我如何修复此代码行并获得类似于上面最后一张图片的输出。

【问题讨论】:

  • 如何为 1 个模型运行 accuracy?如果我这样做accuracy(forecast(FORECASTING_LIST_ARIMA[[1]],h=37), x = Test_set) 它会给出错误Error in testaccuracy(object, x, test, d, D) : Not enough forecasts. Check that forecasts and test data match.
  • 我认为这是您问题的答案。这就是这个示例仅在一个没有自己功能的时间序列上的样子。这行代码可以正常工作 MY_DATA_1

标签: r lapply forecast


【解决方案1】:

你可以试试:

library(forecast)

ACCURACY_ARIMA <- Map(function(x, y) accuracy(forecast(x, h = 37), 
        x = Test_set[, y]), FORECASTING_LIST_ARIMA, seq_len(ncol(Test_set)))

ACCURACY_ARIMA
#$Consumption
#                   ME RMSE  MAE MPE MAPE MASE  ACF1 Theil's U
#Training set  0.00082 0.61 0.45  62  192 0.66 0.018        NA
#Test set     -0.44644 0.66 0.49 165  346 0.72 0.629      0.67

#$Income
#                   ME RMSE  MAE MPE MAPE MASE   ACF1 Theil's U
#Training set  4.2e-15 0.86 0.60  40  163 0.63 -0.056        NA
#Test set     -3.4e-01 1.18 0.69  20  212 0.72 -0.326      0.65

#$Production
#                  ME RMSE  MAE MPE MAPE MASE   ACF1 Theil's U
#Training set  0.0094  1.3 0.88  36  114 0.59 -0.021        NA
#Test set     -0.6538  1.8 1.05  18  124 0.71  0.771         1

#$Savings
#              ME RMSE  MAE MPE MAPE MASE   ACF1 Theil's U
#Training set 1.2   12  8.1 111  176 0.65 -0.012        NA
#Test set     2.5   19 11.9 101  101 0.96 -0.356      0.97

【讨论】:

  • 我试过这个函数。这个函数用训练和测试集产生结果,但有一件事是不正确的。即此函数 ACCURACY_ARIMA 仅适用于嵌入到 Test_set_1 的一个时间序列(消耗)。最初在我的第一篇文章中描述的 Test_set 包含四个时间序列(消费、收入、生产和储蓄)。所以请检查是否可以。提前谢谢
  • @silent_hunter 我已经更新了答案,你现在可以查看。
猜你喜欢
  • 1970-01-01
  • 2016-09-20
  • 2021-01-09
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 2020-02-21
  • 2016-06-03
  • 1970-01-01
相关资源
最近更新 更多