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

Importación de datos

CREDICORP.mo <- pdfetch::pdfetch_YAHOO("BAP",interval = '1d')  #DATOS DE CREDICORP
credicorp <- CREDICORP.mo[,4]
ts_credicorp<-ts(credicorp)
plot(ts_credicorp,main="PRECIOS DE CIERRE DE CREDICORP",xlab="Datos Diarios",ylab="Precio de Cierre")

Comenzamos notando la notable volatiliadd de los datos ademas de de una tendencia creciente y que no es estacionaria en su media, por lo que realizaremos un test:

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

Como se puede notar en el test hecho la serie no es estacionaria debido a que se acepta la hipotesis nula de no estacionariedad, por ello le haremos una transformación para trabajar con los rendimientos y esto es la diferencia de los logarimos como se vera a continuación:

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

Como hace notar el grafico la serie es estacionaria para ello realizamos el mismo 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 = -14.245, Lag order = 14, p-value = 0.01
## alternative hypothesis: stationary

Ahora veremos las caracteristicas de la serie de retornos

hist(R1, main="", breaks=60, freq=FALSE, col="grey")

timeDate::kurtosis(R1)
## [1] 10.43548
## attr(,"method")
## [1] "excess"

Veamos la distribución de los rendimientos con respecto a la normalidad, para ello usaremos una grafica QQ:

qqnorm(R1)
qqline(R1, col="red")

Ahora procederemos a analizar la autocorrelación de los datos para indicarnos si se puede modelar con modelos ar o arma:

acf(R1)

pacf(R1)

Como se puede observar, hay una correlacion tipo Ar1 que sale a la vista y aun no es del todo claro si tienden a cero despues del primer rezago se realizaran dos modelos uno con el AR1 y otro derivado de la funcion autoarima

modelo.1<-arima(credicorp,order = c(1,0,0))
summary(modelo.1)
##           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 3368   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
forecast::auto.arima(credicorp,ic="aic",trace=T)
## 
##  Fitting models using approximations to speed things up...
## 
##  ARIMA(2,1,2) with drift         : 15114.61
##  ARIMA(0,1,0) with drift         : 15112.63
##  ARIMA(1,1,0) with drift         : 15108.02
##  ARIMA(0,1,1) with drift         : 15107.21
##  ARIMA(0,1,0)                    : 15111.12
##  ARIMA(1,1,1) with drift         : 15109.94
##  ARIMA(0,1,2) with drift         : 15109.09
##  ARIMA(1,1,2) with drift         : 15111.96
##  ARIMA(0,1,1)                    : 15105.75
##  ARIMA(1,1,1)                    : 15108.58
##  ARIMA(0,1,2)                    : 15107.62
##  ARIMA(1,1,0)                    : 15106.57
##  ARIMA(1,1,2)                    : 15110.51
## 
##  Now re-fitting the best model(s) without approximations...
## 
##  ARIMA(0,1,1)                    : 15107.4
## 
##  Best model: ARIMA(0,1,1)
## Series: credicorp 
## ARIMA(0,1,1) 
## 
## Coefficients:
##           ma1
##       -0.0465
## s.e.   0.0171
## 
## sigma^2 estimated as 5.197:  log likelihood=-7551.7
## AIC=15107.4   AICc=15107.41   BIC=15119.65
modelo.2<-arima(credicorp,order = c(0,1,1))
summary(modelo.2)
## 
## Call:
## arima(x = credicorp, order = c(0, 1, 1))
## 
## Coefficients:
##           ma1
##       -0.0465
## s.e.   0.0171
## 
## sigma^2 estimated as 5.196:  log likelihood = -7551.7,  aic = 15107.4
## 
## Training set error measures:
##                      ME     RMSE      MAE      MPE     MAPE      MASE
## Training set 0.02893354 2.279076 1.566282 0.016841 1.346329 0.9992839
##                       ACF1
## Training set -0.0004656868

Describiendo los residuos:

residuos.1<-modelo.1$residuals
plot(residuos.1)

residuos.2<-modelo.2$residuals
plot(residuos.2)

Aplicamos el test de white a los residuos para detectar heterocedasticidad:

tseries::white.test(residuos.1)
## 
##  White Neural Network Test
## 
## data:  residuos.1
## X-squared = 25.973, df = 2, p-value = 2.291e-06
tseries::white.test(residuos.2)
## 
##  White Neural Network Test
## 
## data:  residuos.2
## X-squared = 16.913, df = 2, p-value = 0.0002125

Debido a la presencia de heterocedasticidad modelaremos un modelo arch

ts.arch <- tseries::garch(R1,c(0,1))
## 
##  ***** ESTIMATION WITH ANALYTICAL GRADIENT ***** 
## 
## 
##      I     INITIAL X(I)        D(I)
## 
##      1     3.701036e-04     1.000e+00
##      2     5.000000e-02     1.000e+00
## 
##     IT   NF      F         RELDF    PRELDF    RELDX   STPPAR   D*STEP   NPRELDF
##      0    1 -1.164e+04
##      1    7 -1.165e+04  7.46e-04  1.19e-03  3.3e-04  1.3e+10  3.3e-05  7.78e+06
##      2    8 -1.165e+04  2.80e-05  3.53e-05  3.1e-04  2.0e+00  3.3e-05  8.41e+01
##      3   15 -1.171e+04  4.83e-03  6.96e-03  3.7e-01  2.0e+00  5.8e-02  8.30e+01
##      4   21 -1.171e+04  5.49e-05  1.49e-04  5.7e-05  9.4e+00  1.2e-05  4.22e-03
##      5   22 -1.171e+04  5.64e-06  5.34e-06  5.5e-05  2.0e+00  1.2e-05  2.19e-03
##      6   30 -1.175e+04  3.12e-03  2.18e-03  2.5e-01  0.0e+00  7.4e-02  2.18e-03
##      7   31 -1.177e+04  1.58e-03  1.09e-03  1.7e-01  0.0e+00  7.3e-02  1.09e-03
##      8   32 -1.177e+04  7.46e-04  5.47e-04  1.2e-01  0.0e+00  7.1e-02  5.47e-04
##      9   33 -1.178e+04  2.00e-04  1.56e-04  7.0e-02  0.0e+00  4.9e-02  1.56e-04
##     10   34 -1.178e+04  2.75e-05  2.37e-05  2.9e-02  0.0e+00  2.2e-02  2.37e-05
##     11   35 -1.178e+04  1.07e-06  1.05e-06  6.8e-03  0.0e+00  5.5e-03  1.05e-06
##     12   36 -1.178e+04  1.71e-08  2.29e-08  3.3e-04  0.0e+00  2.7e-04  2.29e-08
##     13   37 -1.178e+04  1.19e-09  1.19e-09  3.5e-05  0.0e+00  2.8e-05  1.19e-09
##     14   38 -1.178e+04  2.01e-15  2.67e-15  1.8e-07  0.0e+00  1.5e-07  2.67e-15
## 
##  ***** RELATIVE FUNCTION CONVERGENCE *****
## 
##  FUNCTION    -1.177703e+04   RELDX        1.841e-07
##  FUNC. EVALS      38         GRAD. EVALS      15
##  PRELDF       2.669e-15      NPRELDF      2.669e-15
## 
##      I      FINAL X(I)        D(I)          G(I)
## 
##      1    2.444440e-04     1.000e+00     5.782e-04
##      2    4.033392e-01     1.000e+00    -1.052e-06

Visualizando los errores

residuos.3<-ts.arch$residuals
plot(residuos.3)