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
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