Daniel RG

12/6/2020

Series: Brazil Economic Activity Indicator, Industrial Production, Retail Trade and Farming Economic Activity.

Source: Accessed through Haver Analytics

library(fpp2)
library(ggplot2)
library(ggthemes)
library(tidyverse)
library(kableExtra)
library(quantmod)
library(vars)

For this assignment we’ll take a look at Brazil’s Economic Activity Indicator, a monthly measure of economic activity, as well as possible explanatory variables including Industrial production, retail sales and Farming economic activity.

The data is monthly, with the series starting in 2003 and end in September 2020.

brazildata <- read.csv("F:/MSAE/2020fall_PredictiveAnalytics/Bra_data.csv")

EAI <- ts(brazildata[,2],start=c(2003,1),end=c(2020,9),frequency=12)
IP <- ts(brazildata[,3],start=c(2003,1),end=c(2020,9),frequency=12)
RS <- ts(brazildata[,4],start=c(2003,1),end=c(2020,9),frequency=12)
FARM <- ts(brazildata[,5],start=c(2003,1),end=c(2020,9),frequency=12)

autoplot(EAI, series = "Total EAI") +  ylab("Index") + ggtitle("Brazil: Economic Activity; Index, Jan 2013 = 100")

# 

A quick glance at the data shows some seasonality patterns, with an upward trend through 2015. Post-2015 trend is slightly negative.

autoplot(EAI, series = "Total EAI") + autolayer(IP, series = "Industrial Production") +
  autolayer(RS, series = "Retail Sales") + autolayer(FARM, series = "Farm Activity") +
  ylab("Index") + ggtitle("Brazil: Economic Activity; Index, Jan 2013 = 100")

The other series showcase more clear seasonal patterns, including holiday shopping (retail sales) and carnival (dips in Industrial production). All series roughly follow the trends in Economic Activity (upward through 2015, slight decline afterwards).

Decomposition

Since the EAI variation does not increase with time, then an additive model is appropriate.

autoplot(decompose(EAI, type = "additive"))

The residuals are roughly random, with the exception of big economic slowdowns (2008-2009 Financial Crisis, COVID crisis in 2020), so no transformation is needed. The analysis might be improved by running the models over the differences, log differences or a Box Cox transformation, but we will leave this out of this analysis for now.

The dataset will be split into a train dataset (2003 - 2018) and a validation dataset (2019). Given the severe shock of COVID, I’ll leave 2020 out of the sample.

EAItrain <- EAI[1:192]
EAItest <- EAI[193:204]
EAItrain <- ts(EAItrain, start=c(2003,1),end=c(2018,12), frequency=12)
EAItest <- ts(EAItest, start=c(2019,1), end=c(2019,12), frequency=12)

IPtrain <- IP[1:192]
IPtest <- IP[199:204]
IPtrain <- ts(IPtrain, start=c(2003,1),end=c(2018,12), frequency=12)
IPtest <- ts(IPtest, start=c(2019,1), end=c(2019,12), frequency=12)

RStrain <- RS[1:192]
RStest <- RS[193:204]
RStrain <- ts(RStrain, start=c(2003,1),end=c(2018,12), frequency=12)
RStest <- ts(RStest, start=c(2019,1), end=c(2019,12), frequency=12)

FARMtrain <- FARM[1:192]
FARMtest <- FARM[193:204]
FARMtrain <- ts(FARMtrain, start=c(2003,1),end=c(2018,12), frequency=12)
FARMtest <- ts(FARMtest, start=c(2019,1), end=c(2019,12), frequency=12)

Model 1: Holt - Winter Additive

hwf <- hw(EAItrain, seasonal = "additive", h=12)
autoplot(hwf, series = "HW Forecast") + autolayer(EAItest, series = "Actual Observations") + autolayer(hwf$fitted, series = "Fitted Values") +
  ggtitle("Holt-Winter Projections and Actual") + ylab("Value")

summary(hwf)
## 
## Forecast method: Holt-Winters' additive method
## 
## Model Information:
## Holt-Winters' additive method 
## 
## Call:
##  hw(y = EAItrain, h = 12, seasonal = "additive") 
## 
##   Smoothing parameters:
##     alpha = 0.5584 
##     beta  = 0.0135 
##     gamma = 2e-04 
## 
##   Initial states:
##     l = 105.3993 
##     b = 0.2856 
##     s = -2.4509 -0.4798 2.1377 0.2793 4.0682 4.0482
##            -0.701 0.2293 0.3027 4.9928 -6.1689 -6.2577
## 
##   sigma:  2.2861
## 
##      AIC     AICc      BIC 
## 1344.235 1347.752 1399.612 
## 
## Error measures:
##                       ME     RMSE      MAE         MPE    MAPE      MASE
## Training set -0.09678284 2.188731 1.677772 -0.07320445 1.25483 0.3321991
##                     ACF1
## Training set -0.06299547
## 
## Forecasts:
##          Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## Jan 2019       137.8034 134.8738 140.7331 133.3229 142.2840
## Feb 2019       137.9270 134.5520 141.3020 132.7654 143.0886
## Mar 2019       149.1226 145.3368 152.9084 143.3328 154.9124
## Apr 2019       144.4679 140.2952 148.6405 138.0863 150.8494
## May 2019       144.4282 139.8862 148.9703 137.4817 151.3748
## Jun 2019       143.5328 138.6345 148.4311 136.0415 151.0242
## Jul 2019       148.3164 143.0720 153.5608 140.2958 156.3370
## Aug 2019       148.3711 142.7887 153.9535 139.8336 156.9087
## Sep 2019       144.6163 138.7023 150.5304 135.5716 153.6611
## Oct 2019       146.5092 140.2686 152.7498 136.9650 156.0533
## Nov 2019       143.9262 137.3632 150.4892 133.8890 153.9635
## Dec 2019       141.9896 135.1075 148.8717 131.4643 152.5149
kable(round(accuracy(hwf,EAItest),2), caption = "Holt-Winter (Additive)") %>% 
  kable_classic(full_width = F)
Holt-Winter (Additive)
ME RMSE MAE MPE MAPE MASE ACF1 Theil’s U
Training set -0.10 2.19 1.68 -0.07 1.25 0.33 -0.06 NA
Test set -0.06 1.98 1.40 -0.04 0.98 0.28 -0.05 0.53
checkresiduals(hwf)

## 
##  Ljung-Box test
## 
## data:  Residuals from Holt-Winters' additive method
## Q* = 83.957, df = 8, p-value = 7.772e-15
## 
## Model df: 16.   Total lags used: 24

Model 2: ETS

etsm <- ets(EAItrain, model = "ZZZ")
etsf <- forecast(etsm, h=12)

autoplot(etsf, series = "ETS Model") + autolayer(EAItest, series = "Actual Observations") + autolayer(etsm$fitted, series = "Fitted Values") +
  ggtitle("ETS Model Projections and Actual") + ylab("Value")

summary(etsm) 
## ETS(M,Ad,M) 
## 
## Call:
##  ets(y = EAItrain, model = "ZZZ") 
## 
##   Smoothing parameters:
##     alpha = 0.5609 
##     beta  = 0.0021 
##     gamma = 1e-04 
##     phi   = 0.98 
## 
##   Initial states:
##     l = 102.5789 
##     b = 0.5511 
##     s = 0.9807 0.9973 1.0153 1.0021 1.0313 1.0318
##            0.9968 1.0019 1.0014 1.0359 0.9531 0.9524
## 
##   sigma:  0.0168
## 
##      AIC     AICc      BIC 
## 1339.776 1343.730 1398.411 
## 
## Training set error measures:
##                     ME     RMSE      MAE        MPE     MAPE      MASE
## Training set 0.1176252 2.177061 1.696975 0.07635131 1.268382 0.3360015
##                   ACF1
## Training set -0.057523
kable(round(accuracy(etsf,EAItest),2), caption = "ETS Model") %>% 
  kable_classic(full_width = F)
ETS Model
ME RMSE MAE MPE MAPE MASE ACF1 Theil’s U
Training set 0.12 2.18 1.70 0.08 1.27 0.34 -0.06 NA
Test set -0.05 2.17 1.59 -0.04 1.11 0.31 -0.02 0.58
checkresiduals(etsf)

## 
##  Ljung-Box test
## 
## data:  Residuals from ETS(M,Ad,M)
## Q* = 75.005, df = 7, p-value = 1.431e-13
## 
## Model df: 17.   Total lags used: 24

Model 3: Auto Arima

aam <- auto.arima(EAItrain)
aamf <- forecast(aam, h=12)

autoplot(aamf, series = "ETS Model") + autolayer(EAItest, series = "Actual Observations") + autolayer(aam$fitted, series = "Fitted Values") +
  ggtitle("Auto Arima Model Projections and Actual") + ylab("Value")

summary(aam)
## Series: EAItrain 
## ARIMA(2,1,2)(2,1,2)[12] 
## 
## Coefficients:
##           ar1      ar2     ma1     ma2     sar1    sar2    sma1     sma2
##       -0.9003  -0.6457  0.4278  0.3788  -0.6807  0.0543  0.0022  -0.7851
## s.e.   0.1506   0.1247  0.1832  0.1351   0.2911  0.1592  0.2926   0.3068
## 
## sigma^2 estimated as 4.929:  log likelihood=-401.46
## AIC=820.93   AICc=821.99   BIC=849.61
## 
## Training set error measures:
##                      ME     RMSE      MAE         MPE     MAPE      MASE
## Training set -0.1172659 2.095148 1.575299 -0.09063405 1.161426 0.3119096
##                     ACF1
## Training set -0.01418491
kable(round(accuracy(aamf,EAItest),2), caption = "Auto Arima Model") %>% 
  kable_classic(full_width = F)
Auto Arima Model
ME RMSE MAE MPE MAPE MASE ACF1 Theil’s U
Training set -0.12 2.10 1.58 -0.09 1.16 0.31 -0.01 NA
Test set -0.75 1.99 1.49 -0.52 1.03 0.29 -0.16 0.54
checkresiduals(aamf)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(2,1,2)(2,1,2)[12]
## Q* = 22.471, df = 16, p-value = 0.1286
## 
## Model df: 8.   Total lags used: 24

Models with Multiple Variables

For this set of models, I’ll use EAI, industrial production, retail sales and farming activity.

Model 4: VAR

v1 <- VARselect(c(EAItrain, IPtrain, RStrain, FARMtrain), lag.max = 12) 
v1 %>% kable(caption = "VAR Select Lag Selection") %>% kable_classic(full_width = T)
VAR Select Lag Selection
x
AIC(n) 12
HQ(n) 12
SC(n) 12
FPE(n) 12
1 2 3 4 5 6 7 8 9 10 11 12
AIC(n) 5.043506 4.963609 4.914393 4.909694 4.901808 4.898016 4.866480 4.869112 4.860353 4.861645 4.817623 4.699151
HQ(n) 5.048222 4.970683 4.923825 4.921484 4.915956 4.914522 4.885344 4.890333 4.883933 4.887583 4.845919 4.729805
SC(n) 5.055749 4.981974 4.938880 4.940303 4.938539 4.940868 4.915454 4.924207 4.921570 4.928985 4.891084 4.778734
FPE(n) 155.012528 143.109351 136.236602 135.597970 134.532858 134.023693 129.863067 130.205361 129.069939 129.236920 123.671158 109.854283

Var select has 12 lags. I used a 12-month maximum lag.

library(car)

data.ts <- ts(data.frame(EAItrain, IPtrain, RStrain, FARMtrain), start=c(2003,1),end=c(2018,12),frequency=12)

var1 <- VAR(data.ts, p=12)

summary(var1)
## 
## VAR Estimation Results:
## ========================= 
## Endogenous variables: EAItrain, IPtrain, RStrain, FARMtrain 
## Deterministic variables: const 
## Sample size: 180 
## Log Likelihood: -1728.062 
## Roots of the characteristic polynomial:
## 1.001 1.001 0.999 0.999 0.9965 0.9965 0.9962 0.9962 0.9906 0.9906 0.9883 0.9883 0.9857 0.9837 0.9552 0.9552 0.9508 0.9508 0.9481 0.9481 0.9298 0.9298 0.9242 0.9242 0.9193 0.9193 0.9189 0.9189 0.9163 0.8912 0.8912 0.8857 0.8857 0.8795 0.8754 0.8754 0.873 0.873 0.8626 0.8626 0.8507 0.8507 0.8151 0.8151 0.7722 0.7223 0.7223 0.5957
## Call:
## VAR(y = data.ts, p = 12)
## 
## 
## Estimation results for equation EAItrain: 
## ========================================= 
## EAItrain = EAItrain.l1 + IPtrain.l1 + RStrain.l1 + FARMtrain.l1 + EAItrain.l2 + IPtrain.l2 + RStrain.l2 + FARMtrain.l2 + EAItrain.l3 + IPtrain.l3 + RStrain.l3 + FARMtrain.l3 + EAItrain.l4 + IPtrain.l4 + RStrain.l4 + FARMtrain.l4 + EAItrain.l5 + IPtrain.l5 + RStrain.l5 + FARMtrain.l5 + EAItrain.l6 + IPtrain.l6 + RStrain.l6 + FARMtrain.l6 + EAItrain.l7 + IPtrain.l7 + RStrain.l7 + FARMtrain.l7 + EAItrain.l8 + IPtrain.l8 + RStrain.l8 + FARMtrain.l8 + EAItrain.l9 + IPtrain.l9 + RStrain.l9 + FARMtrain.l9 + EAItrain.l10 + IPtrain.l10 + RStrain.l10 + FARMtrain.l10 + EAItrain.l11 + IPtrain.l11 + RStrain.l11 + FARMtrain.l11 + EAItrain.l12 + IPtrain.l12 + RStrain.l12 + FARMtrain.l12 + const 
## 
##                Estimate Std. Error t value Pr(>|t|)    
## EAItrain.l1    0.580047   0.180130   3.220 0.001616 ** 
## IPtrain.l1    -0.059118   0.094827  -0.623 0.534088    
## RStrain.l1    -0.025817   0.031737  -0.813 0.417421    
## FARMtrain.l1   0.084361   0.044848   1.881 0.062183 .  
## EAItrain.l2    0.159331   0.195258   0.816 0.415982    
## IPtrain.l2     0.167044   0.101731   1.642 0.102986    
## RStrain.l2    -0.011182   0.033573  -0.333 0.739608    
## FARMtrain.l2  -0.062721   0.056481  -1.110 0.268826    
## EAItrain.l3    0.139985   0.193850   0.722 0.471501    
## IPtrain.l3    -0.104631   0.103076  -1.015 0.311934    
## RStrain.l3     0.136191   0.031123   4.376 2.45e-05 ***
## FARMtrain.l3  -0.040740   0.057781  -0.705 0.482012    
## EAItrain.l4   -0.104084   0.194581  -0.535 0.593616    
## IPtrain.l4     0.064773   0.103313   0.627 0.531779    
## RStrain.l4    -0.055937   0.031364  -1.783 0.076826 .  
## FARMtrain.l4  -0.002543   0.059177  -0.043 0.965788    
## EAItrain.l5   -0.164560   0.192637  -0.854 0.394526    
## IPtrain.l5     0.046286   0.102715   0.451 0.653005    
## RStrain.l5     0.051598   0.030629   1.685 0.094443 .  
## FARMtrain.l5   0.049280   0.056566   0.871 0.385241    
## EAItrain.l6   -0.320271   0.195047  -1.642 0.102983    
## IPtrain.l6     0.101619   0.104763   0.970 0.333839    
## RStrain.l6    -0.023695   0.030853  -0.768 0.443867    
## FARMtrain.l6  -0.035902   0.054800  -0.655 0.513518    
## EAItrain.l7    0.141393   0.196761   0.719 0.473666    
## IPtrain.l7    -0.176741   0.105690  -1.672 0.096860 .  
## RStrain.l7     0.021942   0.030997   0.708 0.480282    
## FARMtrain.l7   0.033382   0.054992   0.607 0.544879    
## EAItrain.l8    0.289877   0.198104   1.463 0.145793    
## IPtrain.l8    -0.078789   0.108146  -0.729 0.467583    
## RStrain.l8    -0.002669   0.030261  -0.088 0.929862    
## FARMtrain.l8  -0.025540   0.054323  -0.470 0.639035    
## EAItrain.l9    0.229707   0.202751   1.133 0.259303    
## IPtrain.l9     0.052826   0.108725   0.486 0.627872    
## RStrain.l9    -0.005075   0.030710  -0.165 0.868993    
## FARMtrain.l9  -0.029942   0.054832  -0.546 0.585954    
## EAItrain.l10  -0.524699   0.194259  -2.701 0.007827 ** 
## IPtrain.l10    0.137179   0.107164   1.280 0.202778    
## RStrain.l10    0.076486   0.030181   2.534 0.012447 *  
## FARMtrain.l10  0.065687   0.054054   1.215 0.226471    
## EAItrain.l11  -0.138583   0.197642  -0.701 0.484434    
## IPtrain.l11    0.101443   0.107763   0.941 0.348257    
## RStrain.l11   -0.027466   0.031385  -0.875 0.383110    
## FARMtrain.l11 -0.002722   0.054166  -0.050 0.959996    
## EAItrain.l12   0.650409   0.188017   3.459 0.000731 ***
## IPtrain.l12   -0.252807   0.097060  -2.605 0.010260 *  
## RStrain.l12   -0.112409   0.029479  -3.813 0.000210 ***
## FARMtrain.l12 -0.071854   0.042584  -1.687 0.093920 .  
## const         10.192588   7.185117   1.419 0.158399    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 2.354 on 131 degrees of freedom
## Multiple R-Squared: 0.9775,  Adjusted R-squared: 0.9692 
## F-statistic: 118.5 on 48 and 131 DF,  p-value: < 2.2e-16 
## 
## 
## Estimation results for equation IPtrain: 
## ======================================== 
## IPtrain = EAItrain.l1 + IPtrain.l1 + RStrain.l1 + FARMtrain.l1 + EAItrain.l2 + IPtrain.l2 + RStrain.l2 + FARMtrain.l2 + EAItrain.l3 + IPtrain.l3 + RStrain.l3 + FARMtrain.l3 + EAItrain.l4 + IPtrain.l4 + RStrain.l4 + FARMtrain.l4 + EAItrain.l5 + IPtrain.l5 + RStrain.l5 + FARMtrain.l5 + EAItrain.l6 + IPtrain.l6 + RStrain.l6 + FARMtrain.l6 + EAItrain.l7 + IPtrain.l7 + RStrain.l7 + FARMtrain.l7 + EAItrain.l8 + IPtrain.l8 + RStrain.l8 + FARMtrain.l8 + EAItrain.l9 + IPtrain.l9 + RStrain.l9 + FARMtrain.l9 + EAItrain.l10 + IPtrain.l10 + RStrain.l10 + FARMtrain.l10 + EAItrain.l11 + IPtrain.l11 + RStrain.l11 + FARMtrain.l11 + EAItrain.l12 + IPtrain.l12 + RStrain.l12 + FARMtrain.l12 + const 
## 
##                 Estimate Std. Error t value Pr(>|t|)    
## EAItrain.l1    0.5673882  0.2945724   1.926 0.056253 .  
## IPtrain.l1     0.2214621  0.1550745   1.428 0.155642    
## RStrain.l1    -0.0607763  0.0519005  -1.171 0.243718    
## FARMtrain.l1   0.0596797  0.0733407   0.814 0.417275    
## EAItrain.l2    0.2023535  0.3193121   0.634 0.527371    
## IPtrain.l2     0.2800905  0.1663640   1.684 0.094640 .  
## RStrain.l2    -0.0352692  0.0549029  -0.642 0.521741    
## FARMtrain.l2   0.0043386  0.0923647   0.047 0.962607    
## EAItrain.l3    0.0608219  0.3170094   0.192 0.848148    
## IPtrain.l3    -0.0481802  0.1685635  -0.286 0.775461    
## RStrain.l3     0.1800494  0.0508960   3.538 0.000559 ***
## FARMtrain.l3  -0.1046755  0.0944909  -1.108 0.269985    
## EAItrain.l4   -0.2459550  0.3182051  -0.773 0.440948    
## IPtrain.l4     0.0354765  0.1689517   0.210 0.834010    
## RStrain.l4    -0.1189412  0.0512910  -2.319 0.021946 *  
## FARMtrain.l4   0.0499710  0.0967736   0.516 0.606467    
## EAItrain.l5   -0.2250166  0.3150250  -0.714 0.476324    
## IPtrain.l5     0.0294197  0.1679738   0.175 0.861237    
## RStrain.l5     0.1163055  0.0500879   2.322 0.021774 *  
## FARMtrain.l5   0.0349552  0.0925036   0.378 0.706132    
## EAItrain.l6   -0.4167167  0.3189662  -1.306 0.193685    
## IPtrain.l6     0.1915077  0.1713231   1.118 0.265691    
## RStrain.l6    -0.0395425  0.0504555  -0.784 0.434624    
## FARMtrain.l6  -0.0921526  0.0896165  -1.028 0.305704    
## EAItrain.l7    0.3069326  0.3217706   0.954 0.341898    
## IPtrain.l7    -0.3502444  0.1728386  -2.026 0.044751 *  
## RStrain.l7     0.0720571  0.0506901   1.422 0.157541    
## FARMtrain.l7   0.0445061  0.0899304   0.495 0.621503    
## EAItrain.l8    0.1373863  0.3239666   0.424 0.672206    
## IPtrain.l8    -0.0295908  0.1768547  -0.167 0.867379    
## RStrain.l8     0.0408988  0.0494865   0.826 0.410044    
## FARMtrain.l8  -0.0742098  0.0888364  -0.835 0.405040    
## EAItrain.l9    0.3019670  0.3315651   0.911 0.364109    
## IPtrain.l9     0.0453658  0.1778020   0.255 0.799009    
## RStrain.l9     0.0009769  0.0502204   0.019 0.984510    
## FARMtrain.l9  -0.0419329  0.0896692  -0.468 0.640819    
## EAItrain.l10  -0.6682137  0.3176785  -2.103 0.037341 *  
## IPtrain.l10    0.1552071  0.1752489   0.886 0.377435    
## RStrain.l10    0.1397705  0.0493564   2.832 0.005359 ** 
## FARMtrain.l10  0.0824862  0.0883967   0.933 0.352466    
## EAItrain.l11  -0.2351624  0.3232103  -0.728 0.468167    
## IPtrain.l11    0.0728353  0.1762284   0.413 0.680062    
## RStrain.l11   -0.0378033  0.0513247  -0.737 0.462712    
## FARMtrain.l11  0.0117515  0.0885802   0.133 0.894662    
## EAItrain.l12   0.3589218  0.3074705   1.167 0.245195    
## IPtrain.l12    0.1161873  0.1587256   0.732 0.465475    
## RStrain.l12   -0.2445993  0.0482077  -5.074 1.31e-06 ***
## FARMtrain.l12 -0.0981871  0.0696394  -1.410 0.160928    
## const         28.7931215 11.7500611   2.450 0.015586 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 3.849 on 131 degrees of freedom
## Multiple R-Squared: 0.9281,  Adjusted R-squared: 0.9017 
## F-statistic:  35.2 on 48 and 131 DF,  p-value: < 2.2e-16 
## 
## 
## Estimation results for equation RStrain: 
## ======================================== 
## RStrain = EAItrain.l1 + IPtrain.l1 + RStrain.l1 + FARMtrain.l1 + EAItrain.l2 + IPtrain.l2 + RStrain.l2 + FARMtrain.l2 + EAItrain.l3 + IPtrain.l3 + RStrain.l3 + FARMtrain.l3 + EAItrain.l4 + IPtrain.l4 + RStrain.l4 + FARMtrain.l4 + EAItrain.l5 + IPtrain.l5 + RStrain.l5 + FARMtrain.l5 + EAItrain.l6 + IPtrain.l6 + RStrain.l6 + FARMtrain.l6 + EAItrain.l7 + IPtrain.l7 + RStrain.l7 + FARMtrain.l7 + EAItrain.l8 + IPtrain.l8 + RStrain.l8 + FARMtrain.l8 + EAItrain.l9 + IPtrain.l9 + RStrain.l9 + FARMtrain.l9 + EAItrain.l10 + IPtrain.l10 + RStrain.l10 + FARMtrain.l10 + EAItrain.l11 + IPtrain.l11 + RStrain.l11 + FARMtrain.l11 + EAItrain.l12 + IPtrain.l12 + RStrain.l12 + FARMtrain.l12 + const 
## 
##                 Estimate Std. Error t value Pr(>|t|)    
## EAItrain.l1     0.183471   0.552212   0.332  0.74023    
## IPtrain.l1      0.051572   0.290706   0.177  0.85947    
## RStrain.l1      0.294280   0.097294   3.025  0.00300 ** 
## FARMtrain.l1    0.424718   0.137486   3.089  0.00245 ** 
## EAItrain.l2    -0.201844   0.598590  -0.337  0.73651    
## IPtrain.l2      0.599383   0.311870   1.922  0.05679 .  
## RStrain.l2      0.080766   0.102922   0.785  0.43403    
## FARMtrain.l2   -0.534526   0.173149  -3.087  0.00247 ** 
## EAItrain.l3     0.469705   0.594273   0.790  0.43073    
## IPtrain.l3     -0.472541   0.315993  -1.495  0.13721    
## RStrain.l3      0.398770   0.095411   4.180 5.30e-05 ***
## FARMtrain.l3    0.291910   0.177135   1.648  0.10176    
## EAItrain.l4    -0.105957   0.596515  -0.178  0.85929    
## IPtrain.l4      0.051937   0.316721   0.164  0.87000    
## RStrain.l4      0.017110   0.096151   0.178  0.85904    
## FARMtrain.l4   -0.156522   0.181414  -0.863  0.38983    
## EAItrain.l5     0.079876   0.590553   0.135  0.89262    
## IPtrain.l5     -0.055716   0.314888  -0.177  0.85983    
## RStrain.l5      0.159486   0.093896   1.699  0.09178 .  
## FARMtrain.l5   -0.064592   0.173409  -0.372  0.71014    
## EAItrain.l6    -0.970392   0.597941  -1.623  0.10702    
## IPtrain.l6     -0.167657   0.321166  -0.522  0.60253    
## RStrain.l6      0.082399   0.094585   0.871  0.38526    
## FARMtrain.l6    0.040139   0.167997   0.239  0.81154    
## EAItrain.l7     0.522286   0.603199   0.866  0.38815    
## IPtrain.l7     -0.046949   0.324007  -0.145  0.88501    
## RStrain.l7     -0.114213   0.095025  -1.202  0.23156    
## FARMtrain.l7    0.024155   0.168586   0.143  0.88629    
## EAItrain.l8     1.333324   0.607315   2.195  0.02989 *  
## IPtrain.l8     -0.659284   0.331536  -1.989  0.04883 *  
## RStrain.l8     -0.160250   0.092769  -1.727  0.08645 .  
## FARMtrain.l8    0.145557   0.166535   0.874  0.38370    
## EAItrain.l9     0.879352   0.621560   1.415  0.15951    
## IPtrain.l9      0.231546   0.333312   0.695  0.48848    
## RStrain.l9      0.008239   0.094144   0.088  0.93040    
## FARMtrain.l9   -0.253414   0.168096  -1.508  0.13408    
## EAItrain.l10   -0.996561   0.595527  -1.673  0.09663 .  
## IPtrain.l10    -0.031298   0.328526  -0.095  0.92425    
## RStrain.l10    -0.147789   0.092525  -1.597  0.11261    
## FARMtrain.l10   0.256695   0.165710   1.549  0.12378    
## EAItrain.l11   -0.935839   0.605897  -1.545  0.12487    
## IPtrain.l11     0.605122   0.330362   1.832  0.06927 .  
## RStrain.l11    -0.058197   0.096215  -0.605  0.54631    
## FARMtrain.l11   0.037602   0.166054   0.226  0.82121    
## EAItrain.l12   -0.514487   0.576391  -0.893  0.37371    
## IPtrain.l12     0.155999   0.297551   0.524  0.60097    
## RStrain.l12     0.416737   0.090371   4.611 9.39e-06 ***
## FARMtrain.l12  -0.047065   0.130548  -0.361  0.71904    
## const         -15.213326  22.026932  -0.691  0.49100    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 7.215 on 131 degrees of freedom
## Multiple R-Squared: 0.9766,  Adjusted R-squared: 0.9681 
## F-statistic: 114.1 on 48 and 131 DF,  p-value: < 2.2e-16 
## 
## 
## Estimation results for equation FARMtrain: 
## ========================================== 
## FARMtrain = EAItrain.l1 + IPtrain.l1 + RStrain.l1 + FARMtrain.l1 + EAItrain.l2 + IPtrain.l2 + RStrain.l2 + FARMtrain.l2 + EAItrain.l3 + IPtrain.l3 + RStrain.l3 + FARMtrain.l3 + EAItrain.l4 + IPtrain.l4 + RStrain.l4 + FARMtrain.l4 + EAItrain.l5 + IPtrain.l5 + RStrain.l5 + FARMtrain.l5 + EAItrain.l6 + IPtrain.l6 + RStrain.l6 + FARMtrain.l6 + EAItrain.l7 + IPtrain.l7 + RStrain.l7 + FARMtrain.l7 + EAItrain.l8 + IPtrain.l8 + RStrain.l8 + FARMtrain.l8 + EAItrain.l9 + IPtrain.l9 + RStrain.l9 + FARMtrain.l9 + EAItrain.l10 + IPtrain.l10 + RStrain.l10 + FARMtrain.l10 + EAItrain.l11 + IPtrain.l11 + RStrain.l11 + FARMtrain.l11 + EAItrain.l12 + IPtrain.l12 + RStrain.l12 + FARMtrain.l12 + const 
## 
##                 Estimate Std. Error t value Pr(>|t|)    
## EAItrain.l1    0.5577035  0.3474295   1.605   0.1109    
## IPtrain.l1    -0.2989330  0.1829005  -1.634   0.1046    
## RStrain.l1     0.0098916  0.0612134   0.162   0.8719    
## FARMtrain.l1   0.7659484  0.0865008   8.855 5.09e-15 ***
## EAItrain.l2    0.2280825  0.3766085   0.606   0.5458    
## IPtrain.l2     0.0515628  0.1962158   0.263   0.7931    
## RStrain.l2    -0.0292400  0.0647545  -0.452   0.6523    
## FARMtrain.l2   0.0029052  0.1089384   0.027   0.9788    
## EAItrain.l3   -0.1713785  0.3738926  -0.458   0.6475    
## IPtrain.l3     0.0005124  0.1988101   0.003   0.9979    
## RStrain.l3    -0.0075989  0.0600286  -0.127   0.8995    
## FARMtrain.l3  -0.2204668  0.1114461  -1.978   0.0500 .  
## EAItrain.l4    0.1892489  0.3753029   0.504   0.6149    
## IPtrain.l4    -0.0529804  0.1992679  -0.266   0.7908    
## RStrain.l4    -0.0507273  0.0604945  -0.839   0.4033    
## FARMtrain.l4   0.0480082  0.1141384   0.421   0.6747    
## EAItrain.l5    0.1090680  0.3715521   0.294   0.7696    
## IPtrain.l5     0.0836849  0.1981145   0.422   0.6734    
## RStrain.l5    -0.0698657  0.0590755  -1.183   0.2391    
## FARMtrain.l5   0.1838052  0.1091022   1.685   0.0944 .  
## EAItrain.l6   -0.3554232  0.3762005  -0.945   0.3465    
## IPtrain.l6     0.1516171  0.2020648   0.750   0.4544    
## RStrain.l6     0.0861427  0.0595090   1.448   0.1501    
## FARMtrain.l6  -0.0589704  0.1056970  -0.558   0.5779    
## EAItrain.l7   -0.8727784  0.3795082  -2.300   0.0230 *  
## IPtrain.l7     0.2963285  0.2038522   1.454   0.1484    
## RStrain.l7     0.0992288  0.0597858   1.660   0.0994 .  
## FARMtrain.l7   0.0209989  0.1060673   0.198   0.8434    
## EAItrain.l8    0.6191040  0.3820982   1.620   0.1076    
## IPtrain.l8    -0.4702311  0.2085890  -2.254   0.0258 *  
## RStrain.l8    -0.1026081  0.0583662  -1.758   0.0811 .  
## FARMtrain.l8   0.0254624  0.1047769   0.243   0.8084    
## EAItrain.l9    0.3237342  0.3910602   0.828   0.4093    
## IPtrain.l9    -0.0512628  0.2097063  -0.244   0.8073    
## RStrain.l9     0.0032148  0.0592318   0.054   0.9568    
## FARMtrain.l9   0.0486212  0.1057592   0.460   0.6465    
## EAItrain.l10  -0.2669031  0.3746817  -0.712   0.4775    
## IPtrain.l10    0.0681567  0.2066950   0.330   0.7421    
## RStrain.l10    0.0942243  0.0582128   1.619   0.1079    
## FARMtrain.l10 -0.0942179  0.1042583  -0.904   0.3678    
## EAItrain.l11   0.3996021  0.3812062   1.048   0.2965    
## IPtrain.l11   -0.2816977  0.2078503  -1.355   0.1777    
## RStrain.l11    0.0101529  0.0605343   0.168   0.8671    
## FARMtrain.l11  0.2355060  0.1044748   2.254   0.0258 *  
## EAItrain.l12  -0.1718384  0.3626421  -0.474   0.6364    
## IPtrain.l12    0.1338408  0.1872068   0.715   0.4759    
## RStrain.l12   -0.1223865  0.0568580  -2.152   0.0332 *  
## FARMtrain.l12 -0.1389470  0.0821352  -1.692   0.0931 .  
## const          5.4975877 13.8584557   0.397   0.6922    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 4.539 on 131 degrees of freedom
## Multiple R-Squared: 0.9562,  Adjusted R-squared: 0.9402 
## F-statistic: 59.63 on 48 and 131 DF,  p-value: < 2.2e-16 
## 
## 
## 
## Covariance matrix of residuals:
##           EAItrain IPtrain RStrain FARMtrain
## EAItrain     5.539   8.013   11.69     1.850
## IPtrain      8.013  14.814   14.80     1.834
## RStrain     11.687  14.801   52.06     2.900
## FARMtrain    1.850   1.834    2.90    20.607
## 
## Correlation matrix of residuals:
##           EAItrain IPtrain RStrain FARMtrain
## EAItrain    1.0000  0.8846 0.68823   0.17312
## IPtrain     0.8846  1.0000 0.53298   0.10497
## RStrain     0.6882  0.5330 1.00000   0.08855
## FARMtrain   0.1731  0.1050 0.08855   1.00000
serial.test(var1, lags.pt=12, type="PT.asymptotic")
## 
##  Portmanteau Test (asymptotic)
## 
## data:  Residuals of VAR object var1
## Chi-squared = 158.27, df = 0, p-value < 2.2e-16
causality(var1, cause = c("IPtrain", "RStrain", "FARMtrain"))
## $Granger
## 
##  Granger causality H0: IPtrain RStrain FARMtrain do not Granger-cause
##  EAItrain
## 
## data:  VAR object var1
## F-Test = 3.0123, df1 = 36, df2 = 524, p-value = 3.5e-08
## 
## 
## $Instant
## 
##  H0: No instantaneous causality between: IPtrain RStrain FARMtrain and
##  EAItrain
## 
## data:  VAR object var1
## Chi-squared = 82.869, df = 3, p-value < 2.2e-16
gghistogram(residuals(var1)) + ggtitle("Histogram of Residuals in VAR Model")

qqPlot(residuals(var1))

## [1] 483 494
f1 <- forecast(var1, h=12)

autoplot(f1$forecast$EAItrain) + autolayer(EAItest, series = "Actual Observations") + 
  autolayer(ts(var1$varresult$EAItrain$fitted.values, start=c(2004,1),end=c(2018,12),frequency=12), series = "Fitted Values") +
  ggtitle("VAR Model Projections and Actual") + ylab("Value")

kable(round(accuracy(f1$forecast$EAItrain, EAItest),2), caption = "VAR Model") %>% 
  kable_classic(full_width = F)
VAR Model
ME RMSE MAE MPE MAPE MASE ACF1 Theil’s U
Training set 0.0 2.01 1.58 -0.02 1.15 0.31 -0.04 NA
Test set 2.7 3.79 3.29 1.87 2.27 0.65 -0.27 1.01

Results

library(MuMIn)

c1 <- c("H-W (Additive)", "ETS Selection (M,Ad,M)", "ARIMA(2,1,2)(2,1,2)", "VAR")
c2 <- round(c(hwf$model$aic, etsf$model$aic, aamf$model$aic, AIC(var1)),2)
c3 <- round(c(hwf$model$aicc, etsf$model$aicc, aamf$model$aicc, AICc(var1)),2)
c4 <- round(c(hwf$model$bic, etsf$model$bic, aamf$model$bic, BIC(var1)),2)

table1 <- data.frame(c1,c2,c3,c4)
colnames(table1) <- c("Model", "AIC", "AICc", "BIC")

kable(table1, caption = "Summary Table") %>% kable_classic()
Summary Table
Model AIC AICc BIC
H-W (Additive) 1344.23 1347.75 1399.61
ETS Selection (M,Ad,M) 1339.78 1343.73 1398.41
ARIMA(2,1,2)(2,1,2) 820.93 821.99 849.61
VAR 3848.12 -694.47 4473.94

Based on the results, the ARIMA model performed best, with slightly lower error terms than the other models. Additionally, it has the lowest values of AIC and BIC.