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).
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)
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)
| 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
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)
| 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
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)
| 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
For this set of models, I’ll use EAI, industrial production, retail sales and farming activity.
v1 <- VARselect(c(EAItrain, IPtrain, RStrain, FARMtrain), lag.max = 12)
v1 %>% kable(caption = "VAR Select Lag Selection") %>% kable_classic(full_width = T)
|
|
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)
| 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 |
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()
| 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.