Modelos de Volatilidad

1.Primero se tiene que instalar los paquetes correspondientes

#options(scipen=999)
#pkges<-c("pdfetch","tseries","tidyverse","forecast")
#install.packages(pkges)
#lapply(pkges,library,character.only=T)

2.Luego se importa la data de YAHHO finance, en este caso se importara la data del indice de NASDAQ y se guardara como NASDAQdata.mo.

library(pdfetch)
NASDAQdata.mo<- pdfetch_YAHOO("^IXIC",interval = '1d')
tsNASDAQ500 <- NASDAQdata.mo[,4]
ts.plot(tsNASDAQ500,main="PRECIOS DE CIERRE DE NASDAQ500",xlab="Datos Diarios",ylab="Precio de Cierre")

Analizando la grafica se puede observar que sigue una tendecia creciente y que existe una volatidad de los datos.

3.Además, viendo el grafico anterior y con las correlaciones y autocorrelaciones que se va a calcular podemos deducir que no existe una estacionariedad.

acf(tsNASDAQ500,lag.max=30)

pacf(tsNASDAQ500, lag.max=30)

La función acf calcula (y por defecto las gráficas) estimaciones de la función de autocovarianza o autocorrelación. La función pacf es la función utilizada para las autocorrelaciones parciales.

4.Para comprobar que no sigue una estacionariedad, realizaremos un test:

tseries::adf.test(tsNASDAQ500,alternative = "stationary")
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## 
##  Augmented Dickey-Fuller Test
## 
## data:  tsNASDAQ500
## Dickey-Fuller = -2.4487, Lag order = 14, p-value = 0.3884
## alternative hypothesis: stationary

Se puede observa el test de Dickey Fuller donde la hiptesis nula es que no existe estacionariedad,y en este caso el p-value= 0.3884 es mayor al 0.05 lo cual aceptamos la hipotesis nula, concluyendo que no exite estacionariedad en nuestra serie de tiempo.

5.A continuacion dado que nuestra serie de tiempo no es estacionaria, realizaremos una transformacion a los datos para trabajar con los rendimientos. Diferencia de los logaritmos:

R1 <- diff(log(tsNASDAQ500))
R1 <- na.omit(R1)
plot(R1)

Observando el grafico realizado se puede observar que los rendiemientos de NASDAQ500 son permanentamnete volatiles, pero ya exite una estacionariedad, por ello lo comprobaremos con el test:

tseries::adf.test(R1,alternative = "stationary")
## Warning in tseries::adf.test(R1, alternative = "stationary"): p-value smaller
## than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  R1
## Dickey-Fuller = -15.782, Lag order = 14, p-value = 0.01
## alternative hypothesis: stationary

Como se puede observar el p-value es menor al 0.05, por lo tantO se rechaza la H0= no existe estacionariedad.

5.Ahora analizaremos la normalidad de los retornos.

hist(R1, main="", breaks=50, freq=FALSE, col="orange")

timeDate::skewness(R1)
## [1] -0.4743403
## attr(,"method")
## [1] "moment"
timeDate::kurtosis(R1)
## [1] 9.44992
## attr(,"method")
## [1] "excess"

Calculando los parametros como la asimetria y la curtosis que es mayor a 3, podemos inferir que no es una normal.}

6.Ahora analizaremos las correlaciones y autorrelaciones para poder si se puede modelar con modelos ar o arma.

acf(R1)

pacf(R1)

Podemos observar que ex ste una correlacion tipo Ar 1 ya que sobrepasa las bandas de confianza.

7.Para ello realizamos un proceso autoregresivo de orden 1 (AR1) se puede comprobar la presencia de autocorrelacion de primera orden y quiza la heterocedasticidad.

modelo1<-arima(R1,order=c(1,0,0))
modelo1
## 
## Call:
## arima(x = R1, order = c(1, 0, 0))
## 
## Coefficients:
##           ar1  intercept
##       -0.1243      4e-04
## s.e.   0.0171      2e-04
## 
## sigma^2 estimated as 0.0001952:  log likelihood = 9610.54,  aic = -19215.09
summary(modelo1)
##           Length Class  Mode     
## coef         2   -none- numeric  
## sigma2       1   -none- numeric  
## var.coef     4   -none- numeric  
## mask         2   -none- logical  
## loglik       1   -none- numeric  
## aic          1   -none- numeric  
## arma         7   -none- numeric  
## residuals 3370   ts     numeric  
## call         3   -none- call     
## series       1   -none- character
## code         1   -none- numeric  
## n.cond       1   -none- numeric  
## nobs         1   -none- numeric  
## model       10   -none- list
  1. Graficamos los residuos del Ar(1)
ts.plot(modelo1$residuals,sub="Residuales del modelo AR(1)", xlab="Tiempo",ylab="Residuales")

9.Para observar si existe heterocedasticidad tenemos que realizar el test de White

Residuos<-modelo1$residuals
tseries::white.test(Residuos)
## 
##  White Neural Network Test
## 
## data:  Residuos
## X-squared = 66.558, df = 2, p-value = 3.553e-15

En este caso se puede observar que el p-value es menor al 0.05, por lo tanto se rechaza la H0=homocedastacidad, concluyendo que existe heterocedasticidad y autorrelacion.

10.Ahpra es necesario realizar un ARCH, para observar si existe heterocedasticidad en la serie.

ts.arch <- tseries::garch(R1,c(0,1))
## 
##  ***** ESTIMATION WITH ANALYTICAL GRADIENT ***** 
## 
## 
##      I     INITIAL X(I)        D(I)
## 
##      1     1.884093e-04     1.000e+00
##      2     5.000000e-02     1.000e+00
## 
##     IT   NF      F         RELDF    PRELDF    RELDX   STPPAR   D*STEP   NPRELDF
##      0    1 -1.282e+04
##      1    7 -1.282e+04  7.02e-04  8.82e-04  1.2e-04  8.5e+10  1.2e-05  3.77e+07
##      2    8 -1.283e+04  2.74e-04  3.19e-04  1.2e-04  2.3e+00  1.2e-05  9.32e+01
##      3   16 -1.289e+04  4.74e-03  7.95e-03  4.0e-01  2.0e+00  6.7e-02  9.05e+01
##      4   18 -1.290e+04  8.32e-04  1.62e-03  1.0e-01  9.6e-01  2.7e-02  2.34e-03
##      5   20 -1.292e+04  1.38e-03  9.20e-04  1.3e-01  0.0e+00  4.4e-02  9.20e-04
##      6   21 -1.293e+04  6.70e-04  5.61e-04  1.3e-01  0.0e+00  5.8e-02  5.61e-04
##      7   22 -1.293e+04  1.93e-04  1.38e-04  6.0e-02  0.0e+00  3.2e-02  1.38e-04
##      8   23 -1.293e+04  5.02e-05  4.25e-05  4.1e-02  0.0e+00  2.4e-02  4.25e-05
##      9   24 -1.293e+04  2.63e-06  2.37e-06  1.1e-02  0.0e+00  6.7e-03  2.37e-06
##     10   25 -1.293e+04  3.84e-08  3.73e-08  1.5e-03  0.0e+00  9.0e-04  3.73e-08
##     11   26 -1.293e+04  3.18e-11  3.17e-11  4.3e-05  0.0e+00  2.7e-05  3.17e-11
## 
##  ***** RELATIVE FUNCTION CONVERGENCE *****
## 
##  FUNCTION    -1.292936e+04   RELDX        4.329e-05
##  FUNC. EVALS      26         GRAD. EVALS      12
##  PRELDF       3.165e-11      NPRELDF      3.165e-11
## 
##      I      FINAL X(I)        D(I)          G(I)
## 
##      1    1.336806e-04     1.000e+00     4.915e-01
##      2    3.096865e-01     1.000e+00    -8.657e-05
summary(ts.arch)
## 
## Call:
## tseries::garch(x = R1, order = c(0, 1))
## 
## Model:
## GARCH(0,1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -8.27148 -0.37633  0.07849  0.54540  9.57337 
## 
## Coefficient(s):
##     Estimate  Std. Error  t value Pr(>|t|)    
## a0 1.337e-04   1.653e-06    80.89   <2e-16 ***
## a1 3.097e-01   1.856e-02    16.69   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Diagnostic Tests:
##  Jarque Bera Test
## 
## data:  Residuals
## X-squared = 9607.9, df = 2, p-value < 2.2e-16
## 
## 
##  Box-Ljung test
## 
## data:  Squared.Residuals
## X-squared = 1.4447, df = 1, p-value = 0.2294

Ahora para corregir la heterocedastididad proponemos un modelo garch lo cual tenga una varianza constante y se pueda predecir.

ts.garch <-tseries::garch(R1,c(2,1))
## 
##  ***** ESTIMATION WITH ANALYTICAL GRADIENT ***** 
## 
## 
##      I     INITIAL X(I)        D(I)
## 
##      1     1.685768e-04     1.000e+00
##      2     5.000000e-02     1.000e+00
##      3     5.000000e-02     1.000e+00
##      4     5.000000e-02     1.000e+00
## 
##     IT   NF      F         RELDF    PRELDF    RELDX   STPPAR   D*STEP   NPRELDF
##      0    1 -1.283e+04
##      1    7 -1.284e+04  8.80e-04  1.06e-03  1.1e-04  1.2e+11  1.1e-05  6.21e+07
##      2    8 -1.285e+04  4.37e-04  4.86e-04  1.1e-04  2.8e+00  1.1e-05  1.52e+02
##      3    9 -1.285e+04  2.53e-05  3.08e-05  1.0e-04  2.0e+00  1.1e-05  1.46e+02
##      4   10 -1.285e+04  2.60e-06  2.62e-06  1.1e-04  2.0e+00  1.1e-05  1.45e+02
##      5   18 -1.297e+04  9.16e-03  1.52e-02  5.0e-01  2.0e+00  1.0e-01  1.44e+02
##      6   20 -1.309e+04  9.54e-03  8.32e-03  2.4e-01  2.0e+00  1.0e-01  4.56e+01
##      7   22 -1.336e+04  2.02e-02  1.92e-02  3.5e-01  2.0e+00  2.0e-01  7.86e+03
##      8   24 -1.341e+04  3.73e-03  4.04e-03  4.9e-02  2.0e+00  4.1e-02  8.83e+05
##      9   25 -1.344e+04  2.41e-03  6.71e-03  8.4e-02  2.0e+00  8.2e-02  6.80e+02
##     10   31 -1.347e+04  1.63e-03  2.14e-03  5.2e-06  4.5e+00  4.0e-06  3.66e+00
##     11   32 -1.347e+04  2.48e-05  6.49e-05  4.9e-06  2.0e+00  4.0e-06  8.25e-02
##     12   33 -1.347e+04  1.63e-05  1.77e-05  4.7e-06  2.0e+00  4.0e-06  3.81e-02
##     13   34 -1.347e+04  8.95e-08  1.00e-07  4.8e-06  2.0e+00  4.0e-06  4.06e-02
##     14   41 -1.347e+04  3.27e-05  6.42e-05  1.9e-02  2.0e+00  1.6e-02  4.07e-02
##     15   43 -1.347e+04  6.25e-05  9.53e-05  6.4e-02  2.0e+00  6.5e-02  1.85e-02
##     16   44 -1.347e+04  2.83e-04  1.47e-04  2.1e-02  0.0e+00  2.0e-02  1.47e-04
##     17   46 -1.348e+04  9.57e-04  9.57e-04  8.1e-02  9.6e-04  8.0e-02  1.73e-03
##     18   47 -1.349e+04  4.01e-04  4.60e-04  7.6e-02  7.8e-01  8.0e-02  7.43e-04
##     19   48 -1.349e+04  1.51e-04  1.55e-04  6.8e-02  5.7e-01  8.0e-02  1.88e-04
##     20   50 -1.349e+04  1.56e-04  1.23e-04  1.2e-01  0.0e+00  1.8e-01  1.23e-04
##     21   52 -1.350e+04  1.74e-04  1.64e-04  9.3e-02  0.0e+00  1.8e-01  2.49e-04
##     22   54 -1.350e+04  1.66e-05  1.67e-05  8.4e-03  1.9e+00  1.8e-02  3.87e-04
##     23   56 -1.350e+04  3.01e-05  3.01e-05  1.6e-02  1.2e+00  3.6e-02  3.99e-04
##     24   58 -1.350e+04  5.65e-06  5.65e-06  3.2e-03  2.0e+00  7.3e-03  4.47e-04
##     25   60 -1.350e+04  1.12e-05  1.13e-05  6.4e-03  1.7e+00  1.5e-02  4.51e-04
##     26   62 -1.350e+04  2.20e-06  2.20e-06  1.3e-03  2.0e+00  2.9e-03  4.56e-04
##     27   64 -1.350e+04  4.51e-06  4.52e-06  2.5e-03  1.9e+00  5.8e-03  4.94e-04
##     28   66 -1.350e+04  8.66e-06  8.68e-06  5.0e-03  1.8e+00  1.2e-02  4.86e-04
##     29   68 -1.350e+04  1.75e-06  1.76e-06  1.0e-03  2.0e+00  2.3e-03  4.49e-04
##     30   70 -1.350e+04  3.45e-07  3.46e-07  2.0e-04  2.0e+00  4.7e-04  4.35e-04
##     31   72 -1.350e+04  6.98e-08  6.99e-08  4.0e-05  2.0e+00  9.3e-05  4.29e-04
##     32   74 -1.350e+04  1.39e-07  1.39e-07  8.0e-05  2.0e+00  1.9e-04  4.28e-04
##     33   76 -1.350e+04  2.78e-07  2.79e-07  1.6e-04  2.0e+00  3.7e-04  4.28e-04
##     34   78 -1.350e+04  5.55e-08  5.56e-08  3.2e-05  2.0e+00  7.4e-05  4.28e-04
##     35   81 -1.350e+04  1.12e-09  1.11e-09  6.4e-07  2.0e+00  1.5e-06  4.28e-04
##     36   84 -1.350e+04  8.88e-09  8.90e-09  5.1e-06  2.0e+00  1.2e-05  4.27e-04
##     37   87 -1.350e+04  1.85e-10  1.78e-10  1.0e-07  2.0e+00  2.4e-07  4.27e-04
##     38   89 -1.350e+04  2.81e-11  3.56e-11  2.0e-08  2.0e+00  4.8e-08  4.27e-04
##     39   91 -1.350e+04  7.86e-11  7.12e-11  4.1e-08  2.0e+00  9.5e-08  4.27e-04
##     40   93 -1.350e+04  6.76e-12  1.43e-11  8.2e-09  2.0e+00  1.9e-08  4.27e-04
##     41   95 -1.350e+04  3.60e-11  2.85e-11  1.6e-08  2.0e+00  3.8e-08  4.27e-04
##     42  103 -1.350e+04 -2.12e-14  2.52e-16  1.7e-14  3.0e+02  4.4e-14  4.27e-04
## 
##  ***** FALSE CONVERGENCE *****
## 
##  FUNCTION    -1.349699e+04   RELDX        1.736e-14
##  FUNC. EVALS     103         GRAD. EVALS      42
##  PRELDF       2.524e-16      NPRELDF      4.275e-04
## 
##      I      FINAL X(I)        D(I)          G(I)
## 
##      1    3.851534e-06     1.000e+00     5.349e+01
##      2    1.157245e-01     1.000e+00    -4.021e+01
##      3    8.592865e-01     1.000e+00     1.707e+01
##      4    4.084748e-08     1.000e+00     3.673e+01
## Warning in tseries::garch(R1, c(2, 1)): singular information
summary(ts.garch)
## 
## Call:
## tseries::garch(x = R1, order = c(2, 1))
## 
## Model:
## GARCH(2,1)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -5.55848 -0.45448  0.09484  0.65382  3.53922 
## 
## Coefficient(s):
##     Estimate  Std. Error  t value Pr(>|t|)
## a0 3.852e-06          NA       NA       NA
## a1 1.157e-01          NA       NA       NA
## b1 8.593e-01          NA       NA       NA
## b2 4.085e-08          NA       NA       NA
## 
## Diagnostic Tests:
##  Jarque Bera Test
## 
## data:  Residuals
## X-squared = 476.17, df = 2, p-value < 2.2e-16
## 
## 
##  Box-Ljung test
## 
## data:  Squared.Residuals
## X-squared = 0.64573, df = 1, p-value = 0.4216
Residuosgarch<-ts.garch$residuals

Graficamos:

hhat <- ts(ts.garch$fitted.values[-1,1]^2,start = c(2007,3),frequency = 365.25)
plot.ts(hhat)

Podemos observar que se corrigio la heterocedasticidad y tenemos un mejor modelo para realizar predicciones