在预测包上应用 lapply 函数(准确性和 auto.arima)
Apply lapply function on forecast package (accuracy and auto.arima)
我正在从 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 function.So 代码和结果,您可以在下面看到:
# 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))
如果此函数正常工作,输出应如下所示 table(数字仅供说明)。
所以谁能帮我解决这个代码行并得到类似于上图的输出。
你可以试试:
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
我正在从 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 function.So 代码和结果,您可以在下面看到:
# 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))
如果此函数正常工作,输出应如下所示 table(数字仅供说明)。
所以谁能帮我解决这个代码行并得到类似于上图的输出。
你可以试试:
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