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