## UKgas データのモデリング

# ガス消費量を四半期ごとに観測した時系列データ

data(UKgas)
u <- UKgas
plot(u) # 観測値のプロット

library("forecast")
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## 
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## Loading required package: timeDate
## This is forecast 5.6

# stepwise=F で網羅的に調べてくれる
# trace=T で実行内容出力
auto.arima(u,stepwise = F,trace=T) -> fit.arima
## 
##  ARIMA(0,1,0)(0,1,0)[4]                    : 1061.603
##  ARIMA(0,1,0)(0,1,1)[4]                    : 1062.474
##  ARIMA(0,1,0)(0,1,2)[4]                    : 1064.484
##  ARIMA(0,1,0)(1,1,0)[4]                    : 1066.418
##  ARIMA(0,1,0)(1,1,1)[4]                    : 1068.54
##  ARIMA(0,1,0)(1,1,2)[4]                    : Inf
##  ARIMA(0,1,0)(2,1,0)[4]                    : 1072.662
##  ARIMA(0,1,0)(2,1,1)[4]                    : 1074.83
##  ARIMA(0,1,0)(2,1,2)[4]                    : 1070.62
##  ARIMA(0,1,1)(0,1,0)[4]                    : 991.3633
##  ARIMA(0,1,1)(0,1,1)[4]                    : 993.4824
##  ARIMA(0,1,1)(0,1,2)[4]                    : 995.3999
##  ARIMA(0,1,1)(1,1,0)[4]                    : 996.8972
##  ARIMA(0,1,1)(1,1,1)[4]                    : Inf
##  ARIMA(0,1,1)(1,1,2)[4]                    : Inf
##  ARIMA(0,1,1)(2,1,0)[4]                    : 1003.22
##  ARIMA(0,1,1)(2,1,1)[4]                    : Inf
##  ARIMA(0,1,1)(2,1,2)[4]                    : Inf
##  ARIMA(0,1,2)(0,1,0)[4]                    : 991.8972
##  ARIMA(0,1,2)(0,1,1)[4]                    : 994.0086
##  ARIMA(0,1,2)(0,1,2)[4]                    : 995.9851
##  ARIMA(0,1,2)(1,1,0)[4]                    : 997.606
##  ARIMA(0,1,2)(1,1,1)[4]                    : 999.7985
##  ARIMA(0,1,2)(1,1,2)[4]                    : 998.8268
##  ARIMA(0,1,2)(2,1,0)[4]                    : 1004.351
##  ARIMA(0,1,2)(2,1,1)[4]                    : 1003.061
##  ARIMA(0,1,3)(0,1,0)[4]                    : 989.9013
##  ARIMA(0,1,3)(0,1,1)[4]                    : 991.609
##  ARIMA(0,1,3)(0,1,2)[4]                    : 993.8635
##  ARIMA(0,1,3)(1,1,0)[4]                    : 995.3873
##  ARIMA(0,1,3)(1,1,1)[4]                    : 997.6109
##  ARIMA(0,1,3)(2,1,0)[4]                    : 1002.871
##  ARIMA(1,1,0)(0,1,0)[4]                    : 1040.247
##  ARIMA(1,1,0)(0,1,1)[4]                    : 1042.176
##  ARIMA(1,1,0)(0,1,2)[4]                    : 1044.042
##  ARIMA(1,1,0)(1,1,0)[4]                    : 1046.119
##  ARIMA(1,1,0)(1,1,1)[4]                    : Inf
##  ARIMA(1,1,0)(1,1,2)[4]                    : 1040.29
##  ARIMA(1,1,0)(2,1,0)[4]                    : 1051.862
##  ARIMA(1,1,0)(2,1,1)[4]                    : Inf
##  ARIMA(1,1,0)(2,1,2)[4]                    : Inf
##  ARIMA(1,1,1)(0,1,0)[4]                    : 993.9869
##  ARIMA(1,1,1)(0,1,1)[4]                    : 996.0927
##  ARIMA(1,1,1)(0,1,2)[4]                    : 998.0513
##  ARIMA(1,1,1)(1,1,0)[4]                    : 999.5489
##  ARIMA(1,1,1)(1,1,1)[4]                    : 1001.476
##  ARIMA(1,1,1)(1,1,2)[4]                    : 1003.639
##  ARIMA(1,1,1)(2,1,0)[4]                    : 1005.205
##  ARIMA(1,1,1)(2,1,1)[4]                    : Inf
##  ARIMA(1,1,2)(0,1,0)[4]                    : 994.2836
##  ARIMA(1,1,2)(0,1,1)[4]                    : 996.4936
##  ARIMA(1,1,2)(0,1,2)[4]                    : 998.6107
##  ARIMA(1,1,2)(1,1,0)[4]                    : Inf
##  ARIMA(1,1,2)(1,1,1)[4]                    : 1001.837
##  ARIMA(1,1,2)(2,1,0)[4]                    : 1005.879
##  ARIMA(1,1,3)(0,1,0)[4]                    : Inf
##  ARIMA(1,1,3)(0,1,1)[4]                    : Inf
##  ARIMA(1,1,3)(1,1,0)[4]                    : Inf
##  ARIMA(2,1,0)(0,1,0)[4]                    : 1017.687
##  ARIMA(2,1,0)(0,1,1)[4]                    : 1019.851
##  ARIMA(2,1,0)(0,1,2)[4]                    : 1022.045
##  ARIMA(2,1,0)(1,1,0)[4]                    : 1023.777
##  ARIMA(2,1,0)(1,1,1)[4]                    : 1025.988
##  ARIMA(2,1,0)(1,1,2)[4]                    : Inf
##  ARIMA(2,1,0)(2,1,0)[4]                    : 1030.223
##  ARIMA(2,1,0)(2,1,1)[4]                    : Inf
##  ARIMA(2,1,1)(0,1,0)[4]                    : 992.0569
##  ARIMA(2,1,1)(0,1,1)[4]                    : 993.3738
##  ARIMA(2,1,1)(0,1,2)[4]                    : 995.6026
##  ARIMA(2,1,1)(1,1,0)[4]                    : 997.0855
##  ARIMA(2,1,1)(1,1,1)[4]                    : 999.3362
##  ARIMA(2,1,1)(2,1,0)[4]                    : 1003.471
##  ARIMA(2,1,2)(0,1,0)[4]                    : Inf
##  ARIMA(2,1,2)(0,1,1)[4]                    : 994.6148
##  ARIMA(2,1,2)(1,1,0)[4]                    : 992.4116
##  ARIMA(2,1,3)(0,1,0)[4]                    : Inf
##  ARIMA(3,1,0)(0,1,0)[4]                    : 1012.752
##  ARIMA(3,1,0)(0,1,1)[4]                    : 990.4821
##  ARIMA(3,1,0)(0,1,2)[4]                    : 991.402
##  ARIMA(3,1,0)(1,1,0)[4]                    : 1007.507
##  ARIMA(3,1,0)(1,1,1)[4]                    : 994.738
##  ARIMA(3,1,0)(2,1,0)[4]                    : 1005.787
##  ARIMA(3,1,1)(0,1,0)[4]                    : 995.5411
##  ARIMA(3,1,1)(0,1,1)[4]                    : 988.7248
##  ARIMA(3,1,1)(1,1,0)[4]                    : 998.8104
##  ARIMA(3,1,2)(0,1,0)[4]                    : Inf
fit.arima # AR(3),MA(1),sma(1)
## Series: u 
## ARIMA(3,1,1)(0,1,1)[4]                    
## 
## Coefficients:
##           ar1      ar2      ar3      ma1     sma1
##       -0.6938  -0.9083  -0.6588  -0.2470  -0.7296
## s.e.   0.1070   0.0691   0.1151   0.1289   0.1080
## 
## sigma^2 estimated as 1061:  log likelihood=-506.42
## AIC=1024.84   AICc=1025.72   BIC=1040.65
# もちろん、自分で次数の設定もできる
# arima(u,order=c(3,1,1),seasonal = list(order=c(0,1,1))) -> fit.arima.own

# frequery を持つtimeseriesオブジェクトだとSARIMA(p,d,q)(pp,dd,qq)としてくれる。

forecast(fit.arima,level=c(95),h=8) -> predict.fc
plot(predict.fc)

(predict.fc)
##         Point Forecast     Lo 95     Hi 95
## 1987 Q1      1197.6804 1133.8501 1261.5106
## 1987 Q2       675.7573  611.8153  739.6993
## 1987 Q3       368.1837  303.0241  433.3432
## 1987 Q4       824.8829  758.7539  891.0118
## 1988 Q1      1235.5669 1141.8586 1329.2752
## 1988 Q2       724.7930  630.1863  819.3997
## 1988 Q3       399.2647  303.3632  495.1662
## 1988 Q4       861.0579  763.7638  958.3520
# SのないARIMAモデルの場合

library("magrittr")

u %>%
  ts %>%
  auto.arima(stepwise = F) -> fit.arima2
fit.arima2 # arima(u,order=c(2,1,0)) -> fit.arima.own
## Series: . 
## ARIMA(2,1,0) with drift         
## 
## Coefficients:
##           ar1      ar2   drift
##       -0.0244  -0.9771  5.4433
## s.e.   0.0220   0.0160  2.5178
## 
## sigma^2 estimated as 2667:  log likelihood=-571.07
## AIC=1150.15   AICc=1150.54   BIC=1160.84
fit.arima2 %T>%
  summary %>%
  forecast(h=8) %>% plot
## Series: . 
## ARIMA(2,1,0) with drift         
## 
## Coefficients:
##           ar1      ar2   drift
##       -0.0244  -0.9771  5.4433
## s.e.   0.0220   0.0160  2.5178
## 
## sigma^2 estimated as 2667:  log likelihood=-571.07
## AIC=1150.15   AICc=1150.54   BIC=1160.84
## 
## Training set error measures:
##                     ME     RMSE      MAE       MPE     MAPE      MASE
## Training set -0.150833 51.15932 36.94186 -3.126375 13.07156 0.2103359
##                    ACF1
## Training set -0.6919714