# load the packages
library(forecast)
library(xts)
library(TTR)
library(tseries)
# load in data
require(quantmod)
G <- new.env()
getSymbols("GOOG", env = G, src = "yahoo",
           from = as.Date("2013-04-09"), to = as.Date("2018-04-10"),return.class='ts')
[1] "GOOG"
g<-G$GOOG
head(g)
Time Series:
Start = 1 
End = 6 
Frequency = 1 
  GOOG.Open GOOG.High GOOG.Low GOOG.Close GOOG.Volume GOOG.Adjusted
1  386.3020  390.4117 385.1115   387.3730     4330700      387.3730
2  389.9982  394.6956 386.5511   393.6146     3971900      393.6146
3  394.9596  395.0692 390.5661   393.7192     4072500      393.7192
4  394.5163  394.5710 390.0032   393.5499     3285500      393.5499
5  391.5075  397.0119 387.0592   389.5050     4924500      389.5050
6  391.8263  396.5138 390.4963   395.2037     3496900      395.2037
colnames(g)
[1] "GOOG.Open"     "GOOG.High"     "GOOG.Low"      "GOOG.Close"    "GOOG.Volume"  
[6] "GOOG.Adjusted"
#plot intial series

plot(g)


#decompose
plot(decompose(ts(g[,"GOOG.Adjusted"],frequency = 252)))

#forecast data

library(tseries)
g.adj.train<-g[2:1250,c(5)]
g.adj.test<-g[1251:1260,c(5)]

vol.train<-g[1:1249,6]
vol.test<-g[1251:1260,6]

model1<-auto.arima(g.adj.train)
model2<-auto.arima(g.adj.train,xreg = vol.train)
model3<-garch(g.adj.train)

 ***** ESTIMATION WITH ANALYTICAL GRADIENT ***** 

     I     INITIAL X(I)        D(I)

     1     2.152237e+12     1.000e+00
     2     5.000000e-02     1.000e+00
     3     5.000000e-02     1.000e+00

    IT   NF      F         RELDF    PRELDF    RELDX   STPPAR   D*STEP   NPRELDF
     0    1  1.935e+04
     1    2  1.895e+04  2.06e-02  2.64e-01  2.3e-13  5.1e+03  1.0e+00  6.76e+02
     2    4  1.893e+04  1.09e-03  1.05e-03  1.1e-14  5.8e+00  5.0e-02  3.42e+00
     3    6  1.889e+04  1.75e-03  1.72e-03  2.1e-14  2.0e+00  1.0e-01  2.52e-02
     4    8  1.889e+04  2.84e-04  2.84e-04  4.2e-15  1.4e+01  2.0e-02  9.13e-03
     5   10  1.888e+04  5.06e-04  5.06e-04  8.5e-15  2.6e+00  4.0e-02  3.89e-03
     6   11  1.888e+04 -5.30e+05  7.64e-04  1.7e-14  3.8e+00  8.0e-02  2.07e-03

 ***** FALSE CONVERGENCE *****

 FUNCTION     1.887894e+04   RELDX        1.688e-14
 FUNC. EVALS      11         GRAD. EVALS       6
 PRELDF       7.641e-04      NPRELDF      2.074e-03

     I      FINAL X(I)        D(I)          G(I)

     1    2.152237e+12     1.000e+00     3.838e-11
     2    9.533306e-01     1.000e+00     9.177e+01
     3    3.107434e-02     1.000e+00     1.994e+02
singular information
library(rugarch)
spec <- ugarchspec(mean.model=list(armaOrder=c(1,1)), distribution="std")
model4 <- ugarchfit(spec=spec, data=g.adj.train)

rugarch-->warning: failed to invert hessian
library(fGarch)
library(betategarch)
model5<-tegarch(g.adj.train)
#summary of models
summary(model1)
Series: g.adj.train 
ARIMA(1,1,3) 

Coefficients:
         ar1      ma1      ma2     ma3
      0.7082  -1.1391  -0.0051  0.1636
s.e.  0.0869   0.0943   0.0555  0.0544

sigma^2 estimated as 1.112e+12:  log likelihood=-19077.58
AIC=38165.16   AICc=38165.21   BIC=38190.81

Training set error measures:
                    ME    RMSE      MAE       MPE     MAPE      MASE          ACF1
Training set -32566.24 1052338 591144.3 -78.41694 93.36122 0.9082335 -0.0002833764
summary(model2)
Series: g.adj.train 
Regression with ARIMA(1,1,3) errors 

Coefficients:
         ar1      ma1      ma2     ma3       xreg
      0.7083  -1.1381  -0.0046  0.1626  -1519.020
s.e.  0.0884   0.0959   0.0559  0.0549   1718.368

sigma^2 estimated as 1.112e+12:  log likelihood=-19077.18
AIC=38166.36   AICc=38166.43   BIC=38197.14

Training set error measures:
                    ME    RMSE      MAE       MPE     MAPE     MASE         ACF1
Training set -19459.22 1052009 587784.8 -77.86337 93.29667 0.903072 0.0005447871
summary(model3)

Call:
garch(x = g.adj.train)

Model:
GARCH(1,1)

Residuals:
     Min       1Q   Median       3Q      Max 
0.002453 0.599683 0.734997 0.916380 3.405541 

Coefficient(s):
    Estimate  Std. Error  t value Pr(>|t|)
a0 2.152e+12          NA       NA       NA
a1 9.533e-01          NA       NA       NA
b1 3.107e-02          NA       NA       NA

Diagnostic Tests:
    Jarque Bera Test

data:  Residuals
X-squared = 4835.6, df = 2, p-value < 2.2e-16


    Box-Ljung test

data:  Squared.Residuals
X-squared = 15.207, df = 1, p-value = 9.633e-05
summary(model4)
   Length     Class      Mode 
        1 uGARCHfit        S4 
summary(model5)
$date
[1] "Tue Apr 14 13:38:31 2020"

$par
     omega       phi1     kappa1  kappastar         df       skew 
17.1412403  0.8672831  0.5397874  0.4074460  2.0461096  0.4808988 

$objective
[1] -19424.9

$convergence
[1] 1

$iterations
[1] 44

$evaluations
function gradient 
     105      277 

$message
[1] "false convergence (8)"
plot(sqrt(252) * model4@fit$sigma, type='l')

#plotting forcasts
f1<-forecast(model1, h=10)
f2<-forecast(model2, h=10, xreg = vol.test)
#f3<-forecast(model3, h=10) error with code
#f4<-forecast(model4, h=10) error with code
f5<-predict.tegarch(model5, n.ahead = 10)


#results
accuracy(f1, g.adj.test)
                    ME      RMSE      MAE       MPE     MAPE      MASE
Training set -32566.24 1052338.3 591144.3 -78.41694 93.36122 0.9082335
Test set     534241.32  782428.8 667192.8  16.56620 25.73113 1.0250743
                      ACF1
Training set -0.0002833764
Test set                NA
accuracy(f2, g.adj.test)
                    ME      RMSE      MAE       MPE     MAPE      MASE         ACF1
Training set -19459.22 1052009.1 587784.8 -77.86337 93.29667 0.9030720 0.0005447871
Test set     427527.44  714692.1 630401.6  11.78301 25.26772 0.9685484           NA
accuracy(ts(f5), g.adj.test)
                ME      RMSE      MAE       MPE     MAPE
Test set -96150626 107822888 96150626 -4779.993 4779.993
LS0tCnRpdGxlOiAiRGlzc2N1c3Npb24gV2VlayA1IgpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sKLS0tCmBgYHtyfQojIGxvYWQgdGhlIHBhY2thZ2VzCmxpYnJhcnkoZm9yZWNhc3QpCmxpYnJhcnkoeHRzKQpsaWJyYXJ5KFRUUikKbGlicmFyeSh0c2VyaWVzKQpgYGAKCgpgYGB7cn0KIyBsb2FkIGluIGRhdGEKcmVxdWlyZShxdWFudG1vZCkKRyA8LSBuZXcuZW52KCkKZ2V0U3ltYm9scygiR09PRyIsIGVudiA9IEcsIHNyYyA9ICJ5YWhvbyIsCiAgICAgICAgICAgZnJvbSA9IGFzLkRhdGUoIjIwMTMtMDQtMDkiKSwgdG8gPSBhcy5EYXRlKCIyMDE4LTA0LTEwIikscmV0dXJuLmNsYXNzPSd0cycpCgoKZzwtRyRHT09HCmhlYWQoZykKY29sbmFtZXMoZykKYGBgCgoKYGBge3J9CiNwbG90IGludGlhbCBzZXJpZXMKCnBsb3QoZykKCiNkZWNvbXBvc2UKcGxvdChkZWNvbXBvc2UodHMoZ1ssIkdPT0cuQWRqdXN0ZWQiXSxmcmVxdWVuY3kgPSAyNTIpKSkKYGBgCgoKYGBge3J9CiNmb3JlY2FzdCBkYXRhCgpsaWJyYXJ5KHRzZXJpZXMpCmcuYWRqLnRyYWluPC1nWzI6MTI1MCxjKDUpXQpnLmFkai50ZXN0PC1nWzEyNTE6MTI2MCxjKDUpXQoKdm9sLnRyYWluPC1nWzE6MTI0OSw2XQp2b2wudGVzdDwtZ1sxMjUxOjEyNjAsNl0KCm1vZGVsMTwtYXV0by5hcmltYShnLmFkai50cmFpbikKbW9kZWwyPC1hdXRvLmFyaW1hKGcuYWRqLnRyYWluLHhyZWcgPSB2b2wudHJhaW4pCm1vZGVsMzwtZ2FyY2goZy5hZGoudHJhaW4pCgpsaWJyYXJ5KHJ1Z2FyY2gpCnNwZWMgPC0gdWdhcmNoc3BlYyhtZWFuLm1vZGVsPWxpc3QoYXJtYU9yZGVyPWMoMSwxKSksIGRpc3RyaWJ1dGlvbj0ic3RkIikKbW9kZWw0IDwtIHVnYXJjaGZpdChzcGVjPXNwZWMsIGRhdGE9Zy5hZGoudHJhaW4pCgoKbGlicmFyeShmR2FyY2gpCmxpYnJhcnkoYmV0YXRlZ2FyY2gpCm1vZGVsNTwtdGVnYXJjaChnLmFkai50cmFpbikKYGBgCgoKYGBge3J9CiNzdW1tYXJ5IG9mIG1vZGVscwpzdW1tYXJ5KG1vZGVsMSkKc3VtbWFyeShtb2RlbDIpCnN1bW1hcnkobW9kZWwzKQpzdW1tYXJ5KG1vZGVsNCkKc3VtbWFyeShtb2RlbDUpCgoKcGxvdChzcXJ0KDI1MikgKiBtb2RlbDRAZml0JHNpZ21hLCB0eXBlPSdsJykKYGBgCgoKYGBge3J9CiNwbG90dGluZyBmb3JjYXN0cwpmMTwtZm9yZWNhc3QobW9kZWwxLCBoPTEwKQpmMjwtZm9yZWNhc3QobW9kZWwyLCBoPTEwLCB4cmVnID0gdm9sLnRlc3QpCiNmMzwtZm9yZWNhc3QobW9kZWwzLCBoPTEwKSBlcnJvciB3aXRoIGNvZGUKI2Y0PC1mb3JlY2FzdChtb2RlbDQsIGg9MTApIGVycm9yIHdpdGggY29kZQpmNTwtcHJlZGljdC50ZWdhcmNoKG1vZGVsNSwgbi5haGVhZCA9IDEwKQoKCiNyZXN1bHRzCmFjY3VyYWN5KGYxLCBnLmFkai50ZXN0KQphY2N1cmFjeShmMiwgZy5hZGoudGVzdCkKYWNjdXJhY3kodHMoZjUpLCBnLmFkai50ZXN0KQoKYGBgCgo=