For the same data set used in previous weeks, build GARCH models using either the fGarch or other packages. Compare this model to others you have produced.
Exports = read.csv("/Users/austin/Desktop/Graduate\ School\ /Boston\ College/Spring\ Semster\ 2021/Predictive\ Analytics/Discussions/Week\ 5/EXPCH.csv")
Exports$DATE = as.Date(Exports$DATE)
#mutate(DATE = ymd(DATE)) %>%
#filter(DATE < ymd("2021-02-01")) %>%
#filter(DATE > ymd("2010-12-01"))
#as.numeric(Exports$EXPCH)
head(Exports)
## DATE EXPCH
## 1 2011-01-01 8017.792
## 2 2011-02-01 8383.310
## 3 2011-03-01 9563.728
## 4 2011-04-01 8000.503
## 5 2011-05-01 7849.159
## 6 2011-06-01 7867.005
Exports.ts = ts(Exports$EXPCH, start = 2011, frequency = 12)
Exports.train = ts(Exports.ts[1:96], start = 2011, frequency = 12)
Exports.test = ts(Exports.ts[97:108], start = 2019, frequency = 12) # 12 month test set
#ARIMA
ARIMA.model = auto.arima(Exports.train)
ARIMA.forecast = forecast(ARIMA.model, h = 6)
summary(ARIMA.model)
## Series: Exports.train
## ARIMA(1,0,1)(2,1,0)[12]
##
## Coefficients:
## ar1 ma1 sar1 sar2
## 0.9043 -0.2712 -0.4521 -0.5868
## s.e. 0.0742 0.1225 0.1305 0.1086
##
## sigma^2 estimated as 446147: log likelihood=-669.5
## AIC=1349.01 AICc=1349.78 BIC=1361.16
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 14.37101 609.7452 411.1334 -0.0658889 4.065455 0.4346528
## ACF1
## Training set 0.0009948225
ARIMA.accuracy = accuracy(ARIMA.forecast, Exports.test)
print(ARIMA.accuracy)
## ME RMSE MAE MPE MAPE MASE
## Training set 14.37101 609.7452 411.1334 -0.0658889 4.065455 0.4346528
## Test set 926.94125 1072.3885 926.9413 10.3792188 10.379219 0.9799681
## ACF1 Theil's U
## Training set 0.0009948225 NA
## Test set -0.4521112429 0.7387849
#Graph the results
autoplot(Exports.ts) +
autolayer(ARIMA.forecast, series = "ARIMA Forecast") +
autolayer(Exports.test, series = "Actual Exports")
#ETS
ETS.model = ets(Exports.train)
ETS.forecast = forecast(ETS.model, h = 6)
summary(ETS.model)
## ETS(M,N,M)
##
## Call:
## ets(y = Exports.train)
##
## Smoothing parameters:
## alpha = 0.8134
## gamma = 1e-04
##
## Initial states:
## l = 9556.3797
## s = 1.1397 1.144 1.1833 0.9624 0.9553 0.9431
## 0.9443 0.9266 0.9278 1.0265 0.9156 0.9314
##
## sigma: 0.0599
##
## AIC AICc BIC
## 1676.000 1682.000 1714.465
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -17.79156 579.8764 409.1125 -0.4203422 4.153539 0.4325163
## ACF1
## Training set -0.03325864
ETS.accuracy = accuracy(ETS.forecast, Exports.test)
print(ETS.accuracy)
## ME RMSE MAE MPE MAPE MASE
## Training set -17.79156 579.8764 409.1125 -0.4203422 4.153539 0.4325163
## Test set 1078.28944 1399.8261 1195.5418 11.3572343 13.007484 1.2639343
## ACF1 Theil's U
## Training set -0.03325864 NA
## Test set -0.16782232 0.9273272
#Graph the results
autoplot(Exports.ts) +
autolayer(ETS.forecast, series = "ETS Forecast") +
autolayer(Exports.test, series = "Actual Exports")
#Garch
spec = ugarchspec()
Garch.model = ugarchfit(Exports.train, spec = spec)
## Warning in .sgarchfit(spec = spec, data = data, out.sample = out.sample, :
## ugarchfit-->waring: using less than 100 data
## points for estimation
summary(Garch.model)
## Length Class Mode
## 1 uGARCHfit S4
Garch.forecast = ugarchforecast(Garch.model, n.ahead = 6)
#Graph the results
Plot.Garch = ts(fitted(Garch.forecast), start = c(2019), frequency = 12)
autoplot(Exports.ts) +
autolayer(Plot.Garch, series = "Garch Forecast") +
autolayer(Exports.test, series = "Actual Exports")
accuracy(Plot.Garch,Exports.test)
## ME RMSE MAE MPE MAPE ACF1 Theil's U
## Test set -954.0523 1428.398 1274.983 -12.75924 15.79406 -0.2910862 0.6820167