Charter Communications
chtr = read.csv("CHTR.csv")
library(fpp)
## Loading required package: forecast
## Warning: package 'forecast' was built under R version 3.3.2
## Loading required package: fma
## Warning: package 'fma' was built under R version 3.3.2
## Loading required package: expsmooth
## Loading required package: lmtest
## Warning: package 'lmtest' was built under R version 3.3.2
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 3.3.2
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: tseries
## Warning: package 'tseries' was built under R version 3.3.2
library(forecast)
library(xts)
## Warning: package 'xts' was built under R version 3.3.2
library(tseries)
str(chtr)
## 'data.frame': 1259 obs. of 7 variables:
## $ Date : Factor w/ 1259 levels "2013-04-10","2013-04-11",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ Open : num 104 104 104 104 104 ...
## $ High : num 105 105 105 104 105 ...
## $ Low : num 103 103 104 103 103 ...
## $ Close : num 104 105 105 103 105 ...
## $ Adj.Close: num 104 105 105 103 105 ...
## $ Volume : int 767200 489600 526300 425100 492300 491100 962200 663900 681500 619400 ...
head(chtr)
## Date Open High Low Close Adj.Close Volume
## 1 2013-04-10 104.46 104.84 102.97 103.67 103.67 767200
## 2 2013-04-11 103.77 104.84 103.29 104.84 104.84 489600
## 3 2013-04-12 104.19 105.47 104.19 105.06 105.06 526300
## 4 2013-04-15 104.26 104.26 102.89 103.08 103.08 425100
## 5 2013-04-16 104.24 105.20 102.95 104.91 104.91 492300
## 6 2013-04-17 104.64 105.39 103.22 104.03 104.03 491100
tail (chtr)
## Date Open High Low Close Adj.Close Volume
## 1254 2018-04-02 308.91 310.60 298.67 303.87 303.87 1753000
## 1255 2018-04-03 305.51 312.37 303.79 306.37 306.37 1706800
## 1256 2018-04-04 304.38 312.47 302.05 311.69 311.69 1857100
## 1257 2018-04-05 312.50 317.64 311.94 317.02 317.02 875500
## 1258 2018-04-06 314.88 316.08 308.47 310.67 310.67 1235000
## 1259 2018-04-09 311.88 319.74 310.67 316.51 316.51 1144000
chtr.ts<-ts(chtr$Adj.Close, frequency=252, start=c(2013,71))
plot(chtr.ts)

train = chtr[2:1008,]
test = chtr[1009:1259,]
train.ts<-ts(train$Adj.Close, frequency=252, start=c(2013,71))
plot(train.ts)

test.ts<-ts(test$Adj.Close, frequency=252, start=c(2017,71))
plot(test.ts)

vol.train <- as.numeric(chtr$Volume[1:1007])
vol.test <- as.numeric(chtr$Volume[1008:1259])
Arima with regressor
myarima1 =auto.arima(train.ts, xreg = vol.train)
myarima1
## Series: train.ts
## Regression with ARIMA(1,1,2) errors
##
## Coefficients:
## ar1 ma1 ma2 drift xreg
## 0.6887 -0.7243 -0.0539 0.2237 0
## s.e. 0.0991 0.1013 0.0344 0.0000 0
##
## sigma^2 estimated as 9.451: log likelihood=-2554.76
## AIC=5121.52 AICc=5121.61 BIC=5151
predict.myarima1 <- forecast(myarima1, xreg = vol.test)
acc.myarima1 <- accuracy(predict.myarima1, test.ts)
plot(predict.myarima1)

Arima without regressor
myarima2 =auto.arima(train.ts)
myarima2
## Series: train.ts
## ARIMA(0,1,3) with drift
##
## Coefficients:
## ma1 ma2 ma3 drift
## -0.0329 -0.0612 -0.1057 0.2249
## s.e. 0.0315 0.0322 0.0329 0.0775
##
## sigma^2 estimated as 9.452: log likelihood=-2555.34
## AIC=5120.69 AICc=5120.75 BIC=5145.26
predict.myarima2 <- forecast(myarima2)
acc.myarima2 <- accuracy(predict.myarima2, test.ts)
plot(predict.myarima2)

ETS without regressor
myets <- ets(train.ts, model = "ZZZ")
## Warning in ets(train.ts, model = "ZZZ"): I can't handle data with frequency
## greater than 24. Seasonality will be ignored. Try stlf() if you need
## seasonal forecasts.
ets.predict <- forecast(myets)
ets.acc <- accuracy(ets.predict, test.ts)
plot(ets.predict)

GARCH
library(fGarch)
## Warning: package 'fGarch' was built under R version 3.3.2
## Loading required package: timeDate
## Loading required package: timeSeries
## Warning: package 'timeSeries' was built under R version 3.3.2
##
## Attaching package: 'timeSeries'
## The following object is masked from 'package:zoo':
##
## time<-
## Loading required package: fBasics
## Warning: package 'fBasics' was built under R version 3.3.2
mygarch = garch(train.ts)
##
## ***** ESTIMATION WITH ANALYTICAL GRADIENT *****
##
##
## I INITIAL X(I) D(I)
##
## 1 2.873654e+03 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 7.691e+03
## 1 2 5.727e+03 2.55e-01 3.15e+00 1.7e-04 2.4e+04 1.0e+00 3.83e+04
## 2 4 5.719e+03 1.44e-03 1.28e-03 8.6e-06 2.0e+00 5.0e-02 2.06e+00
## 3 5 5.706e+03 2.19e-03 2.17e-03 1.4e-05 2.9e+00 1.0e-01 6.34e-03
## 4 6 5.703e+03 5.26e-04 9.16e-04 3.4e-05 1.6e+00 2.0e-01 1.27e-03
## 5 8 5.703e+03 6.91e-05 7.58e-05 2.6e-06 2.5e+00 2.0e-02 1.61e-04
## 6 10 5.703e+03 2.09e-05 1.22e-05 8.7e-06 0.0e+00 6.7e-02 1.22e-05
## 7 12 5.703e+03 5.81e-06 5.74e-06 3.0e-06 1.6e+00 2.3e-02 3.51e-05
## 8 14 5.703e+03 8.60e-06 8.31e-06 6.2e-06 8.6e-01 4.7e-02 3.26e-05
## 9 17 5.703e+03 6.27e-07 6.09e-07 1.4e-07 4.9e+00 9.3e-04 2.38e-05
## 10 19 5.703e+03 1.14e-06 1.14e-06 6.0e-07 2.0e+00 3.8e-03 2.57e-05
## 11 21 5.703e+03 1.58e-07 1.58e-07 1.2e-07 1.4e+01 7.6e-04 2.51e-05
## 12 23 5.703e+03 3.06e-07 3.06e-07 2.1e-07 9.7e+00 1.5e-03 2.52e-05
## 13 25 5.703e+03 6.13e-08 6.13e-08 3.9e-08 5.3e+02 3.0e-04 2.69e-05
## 14 27 5.703e+03 1.22e-07 1.22e-07 7.7e-08 1.1e+02 6.1e-04 3.47e-05
## 15 29 5.703e+03 2.44e-07 2.44e-07 1.5e-07 6.8e+01 1.2e-03 3.47e-05
## 16 31 5.703e+03 4.87e-08 4.87e-08 3.0e-08 1.4e+03 2.4e-04 3.46e-05
## 17 34 5.703e+03 9.74e-10 9.74e-10 6.0e-10 7.1e+04 4.9e-06 3.46e-05
## 18 36 5.703e+03 1.95e-09 1.95e-09 1.2e-09 8.9e+03 9.8e-06 3.46e-05
## 19 38 5.703e+03 3.90e-10 3.90e-10 2.4e-10 1.8e+05 2.0e-06 3.46e-05
## 20 41 5.703e+03 3.12e-09 3.12e-09 1.9e-09 5.6e+03 1.6e-05 3.46e-05
## 21 45 5.703e+03 6.23e-12 6.23e-12 3.8e-12 1.1e+07 3.1e-08 3.46e-05
## 22 47 5.703e+03 1.25e-11 1.25e-11 7.7e-12 1.4e+06 6.2e-08 3.46e-05
## 23 49 5.703e+03 2.49e-12 2.49e-12 1.5e-12 2.8e+07 1.2e-08 3.46e-05
## 24 51 5.703e+03 4.99e-13 4.99e-13 3.1e-13 1.4e+08 2.5e-09 3.46e-05
## 25 53 5.703e+03 9.98e-13 9.97e-13 6.1e-13 1.7e+07 5.0e-09 3.46e-05
## 26 55 5.703e+03 2.00e-13 1.99e-13 1.2e-13 3.5e+08 1.0e-09 3.46e-05
## 27 57 5.703e+03 3.98e-13 3.99e-13 2.5e-13 4.3e+07 2.0e-09 3.46e-05
## 28 59 5.703e+03 7.96e-13 7.98e-13 4.9e-13 2.2e+07 4.0e-09 3.46e-05
## 29 61 5.703e+03 1.62e-13 1.60e-13 9.8e-14 4.3e+08 8.0e-10 3.46e-05
## 30 63 5.703e+03 3.11e-14 3.19e-14 2.0e-14 2.2e+09 1.6e-10 3.46e-05
## 31 65 5.703e+03 6.70e-15 6.38e-15 3.9e-15 1.1e+10 3.2e-11 3.46e-05
## 32 67 5.703e+03 1.31e-14 1.28e-14 7.9e-15 1.4e+09 6.4e-11 3.46e-05
## 33 69 5.703e+03 2.46e-14 2.55e-14 1.6e-14 6.8e+08 1.3e-10 3.46e-05
## 34 71 5.703e+03 5.26e-15 5.11e-15 3.1e-15 1.4e+10 2.6e-11 3.46e-05
## 35 72 5.703e+03 -1.75e+06 1.02e-14 6.3e-15 6.8e+09 5.1e-11 3.46e-05
##
## ***** FALSE CONVERGENCE *****
##
## FUNCTION 5.702695e+03 RELDX 6.297e-15
## FUNC. EVALS 72 GRAD. EVALS 35
## PRELDF 1.021e-14 NPRELDF 3.461e-05
##
## I FINAL X(I) D(I) G(I)
##
## 1 2.873653e+03 1.000e+00 4.760e-04
## 2 8.985643e-01 1.000e+00 -8.059e-01
## 3 2.576169e-11 1.000e+00 8.048e-01
attach(train)
mygarch.fit = garchFit(formula=~arma(1,1)+garch(1,1),cond.dist="QML", trace=FALSE)
coef(mygarch)
## a0 a1 b1
## 2.873653e+03 8.985643e-01 2.576169e-11
summary(mygarch.fit)
##
## Title:
## GARCH Modelling
##
## Call:
## garchFit(formula = ~arma(1, 1) + garch(1, 1), cond.dist = "QML",
## trace = FALSE)
##
## Mean and Variance Equation:
## data ~ arma(1, 1) + garch(1, 1)
## <environment: 0x7fbba9cdf778>
## [data = fGarch::dem2gbp]
##
## Conditional Distribution:
## QMLE
##
## Coefficient(s):
## mu ar1 ma1 omega alpha1 beta1
## -0.0084167 -0.3720781 0.4276325 0.0115033 0.1600215 0.7960826
##
## Std. Errors:
## robust
##
## Error Analysis:
## Estimate Std. Error t value Pr(>|t|)
## mu -0.008417 0.012844 -0.655 0.51227
## ar1 -0.372078 0.266003 -1.399 0.16188
## ma1 0.427633 0.259258 1.649 0.09906 .
## omega 0.011503 0.006302 1.825 0.06795 .
## alpha1 0.160021 0.051089 3.132 0.00173 **
## beta1 0.796083 0.068302 11.655 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Log Likelihood:
## -1103.902 normalized: -0.5592208
##
## Description:
## Wed Apr 18 21:59:03 2018 by user:
##
##
## Standardised Residuals Tests:
## Statistic p-Value
## Jarque-Bera Test R Chi^2 1033.149 0
## Shapiro-Wilk Test R W 0.962933 0
## Ljung-Box Test R Q(10) 4.673801 0.9118769
## Ljung-Box Test R Q(15) 11.52113 0.7148543
## Ljung-Box Test R Q(20) 13.89329 0.8358651
## Ljung-Box Test R^2 Q(10) 8.375681 0.5921918
## Ljung-Box Test R^2 Q(15) 15.01545 0.450305
## Ljung-Box Test R^2 Q(20) 16.34771 0.6948322
## LM Arch Test R TR^2 9.01369 0.7017607
##
## Information Criterion Statistics:
## AIC BIC SIC HQIC
## 1.124521 1.141505 1.124502 1.130761
#garch.predict <- forecast(mygarch.fit)
#garch.acc <- accuracy(garch.predict, test.ts)
#plot(garch.predict)
## I got the error "Error in x - fits : non-numeric argument to binary operator" when I tried to forecast garch. I need to play around with this more.
fcast.garch<-predict(mygarch.fit,n.ahead=251)
RMSE.garch<-sqrt(sum((fcast.garch$meanForecast-test.ts[1:251])^2)/251)
Compare
acc.myarima1
## ME RMSE MAE MPE MAPE
## Training set 0.001207996 3.065058 2.096424 -0.04298087 1.165657
## Test set -10.207768582 30.187306 23.275671 -3.36967048 6.763478
## MASE ACF1 Theil's U
## Training set 0.04442067 0.001908886 NA
## Test set 0.49318301 0.969077055 5.246303
acc.myarima2
## ME RMSE MAE MPE MAPE
## Training set -9.171029e-06 3.066837 2.105121 -0.03992221 1.172393
## Test set -1.082702e+01 30.451394 23.512305 -3.54804269 6.838512
## MASE ACF1 Theil's U
## Training set 0.04460493 0.002285429 NA
## Test set 0.49819699 0.969127781 5.300099
ets.acc
## ME RMSE MAE MPE MAPE
## Training set 0.01730157 3.087903 2.098406 -0.02292449 1.166998
## Test set -8.58837916 29.121723 22.416759 -2.90289217 6.499033
## MASE ACF1 Theil's U
## Training set 0.04446266 -0.0213918 NA
## Test set 0.47498371 0.9684166 5.038832
##garch.acc
RMSE.garch
## [1] 349.462