Para comenzar cargamos la serie de tiempo

Colcap <- read_excel("Colcap.xlsx", sheet = "Colcap",col_types=c("date","numeric"))
fechas=as.Date(Colcap$Fecha)
colcap=xts(Colcap$ValorCOLCAP,order.by = fechas)
plot(colcap)

A continuacion presentamos los retornos

retornos=diff(log(colcap))[2:length(colcap)]
plot(retornos)

Dado que esta serie fue diferenciada y transformada por logaritmo (definicion de retornos) podemos afirmar que esta serie es estacionaria, ahora ajustaremos un modelo ARMA como primera medida.

Primero veremos su funcin de autocorrelacion y autocorrelacion parcial.

acf(retornos, lag=sqrt(length(retornos)))

pacf(retornos,lag=sqrt(length(retornos)))

Dado que la funcion de autocorrelacion y autocorrelacion parcial decidimos que a lo mas es un ARMA(3,4) a continuacion ajustaremos un modelo por medio de la funcion auto.arima con el mejor .

modelo=auto.arima(retornos,max.p =3 ,max.q = 4, start.p = 0, start.q = 0, ic="aic")
coeftest(modelo)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value  Pr(>|z|)    
## ar1  1.259120   0.220683  5.7056 1.160e-08 ***
## ar2 -0.726117   0.233336 -3.1119  0.001859 ** 
## ar3  0.010325   0.039906  0.2587  0.795843    
## ma1 -1.163300   0.219597 -5.2974 1.174e-07 ***
## ma2  0.640592   0.200908  3.1885  0.001430 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El modelo que nos presenta es un ARMA(3,2) donde \(\phi_{3}\) no es significativo.

modelo1=arima(retornos, order=c(2,0,2), include.mean = FALSE)
coeftest(modelo1)
## 
## z test of coefficients:
## 
##     Estimate Std. Error z value Pr(>|z|)  
## ar1 -0.59871    0.27161 -2.2043  0.02750 *
## ar2  0.21884    0.12662  1.7283  0.08394 .
## ma1  0.70018    0.27204  2.5738  0.01006 *
## ma2 -0.13713    0.12309 -1.1141  0.26525  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Ahora quitaremos la componente \(\theta_2\).

modelo2=arima(retornos, order=c(2,0,1), include.mean = FALSE)
coeftest(modelo2)
## 
## z test of coefficients:
## 
##      Estimate Std. Error z value  Pr(>|z|)    
## ar1  0.842050   0.184273  4.5696 4.887e-06 ***
## ar2 -0.087263   0.026094 -3.3442 0.0008253 ***
## ma1 -0.739621   0.183650 -4.0274 5.641e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Dado que el modelo ya se ajusto y todos sus parametros son significativos procedemos a un analisis de residuales.

residuales=modelo2$residuals
plot(residuales)

acf(residuales,ci.type="ma",lag.max = sqrt(length(residuales)))

pacf(residuales,lag.max = sqrt(length(residuales)))

Dado que no existe estructura de correlacion entramos a probar si existe evidencia de volatilidad:

arch.test(modelo2)
## ARCH heteroscedasticity test for residuals 
## alternative: heteroscedastic 
## 
## Portmanteau-Q test: 
##      order   PQ p.value
## [1,]     4 1195       0
## [2,]     8 1486       0
## [3,]    12 1720       0
## [4,]    16 1874       0
## [5,]    20 1970       0
## [6,]    24 1999       0
## Lagrange-Multiplier test: 
##      order   LM p.value
## [1,]     4 1100       0
## [2,]     8  469       0
## [3,]    12  289       0
## [4,]    16  207       0
## [5,]    20  163       0
## [6,]    24  133       0

Dado que todos los P-valores en todos los ordenes dieron exactamente 0 podemos rechazar la hipotesis nula de homocedasticidad, por tanto el modelo es heterocedastico y por tanto hay que modelar la volatilidad.

res <- residuales^2
plot(res,type='l')

acf(res,ci.type="ma",lag.max = sqrt(length(residuales)))

pacf(res,lag.max = sqrt(length(residuales)))

Se puede ver una alta correlacion hasta 12 en ambos asi que ajustaremos un auto.arima con p=12 y q=12.

mod=auto.arima(res,max.p =12 ,max.q =12, start.p = 0, start.q = 0, ic="aic")
coeftest(mod)
## 
## z test of coefficients:
## 
##      Estimate Std. Error  z value  Pr(>|z|)    
## ar1 -0.767625   0.178928  -4.2901 1.786e-05 ***
## ar2 -0.143960   0.069476  -2.0721   0.03826 *  
## ar3 -0.897861   0.056891 -15.7820 < 2.2e-16 ***
## ar4 -0.336255   0.105723  -3.1805   0.00147 ** 
## ar5  0.294241   0.042248   6.9646 3.293e-12 ***
## ma1  0.300789   0.180191   1.6693   0.09506 .  
## ma2 -0.485088   0.090707  -5.3479 8.899e-08 ***
## ma3  0.519856   0.052074   9.9830 < 2.2e-16 ***
## ma4 -0.318924   0.076851  -4.1499 3.327e-05 ***
## ma5 -0.719362   0.120316  -5.9790 2.246e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

ahora ajustaremos el modelo ARMA+GARCH.

modelosp5_1=garchFit(garch~arma(2,1)+garch(5,5),data=residuales,trace=F,include.mean = FALSE)
## Warning in sqrt(diag(fit$cvar)): Se han producido NaNs
summary(modelosp5_1)
## 
## Title:
##  GARCH Modelling 
## 
## Call:
##  garchFit(formula = garch ~ arma(2, 1) + garch(5, 5), data = residuales, 
##     include.mean = FALSE, trace = F) 
## 
## Mean and Variance Equation:
##  data ~ arma(2, 1) + garch(5, 5)
## <environment: 0x000000001df73b80>
##  [data = residuales]
## 
## Conditional Distribution:
##  norm 
## 
## Coefficient(s):
##         ar1          ar2          ma1        omega       alpha1  
##  5.9989e-01   1.4602e-02  -6.0624e-01   5.3867e-06   1.5864e-01  
##      alpha2       alpha3       alpha4       alpha5        beta1  
##  4.9759e-02   1.0000e-08   1.0000e-08   1.0000e-08   6.0409e-01  
##       beta2        beta3        beta4        beta5  
##  1.0000e-08   1.0000e-08   1.0000e-08   1.3618e-01  
## 
## Std. Errors:
##  based on Hessian 
## 
## Error Analysis:
##          Estimate  Std. Error  t value Pr(>|t|)    
## ar1     5.999e-01   1.175e-01    5.106 3.29e-07 ***
## ar2     1.460e-02   2.152e-02    0.679    0.497    
## ma1    -6.062e-01   1.170e-01   -5.184 2.17e-07 ***
## omega   5.387e-06          NA       NA       NA    
## alpha1  1.586e-01   2.195e-02    7.228 4.92e-13 ***
## alpha2  4.976e-02   1.122e-01    0.444    0.657    
## alpha3  1.000e-08          NA       NA       NA    
## alpha4  1.000e-08   1.196e-01    0.000    1.000    
## alpha5  1.000e-08   7.069e-02    0.000    1.000    
## beta1   6.041e-01   8.555e-01    0.706    0.480    
## beta2   1.000e-08   7.781e-01    0.000    1.000    
## beta3   1.000e-08          NA       NA       NA    
## beta4   1.000e-08   6.852e-01    0.000    1.000    
## beta5   1.362e-01   3.450e-01    0.395    0.693    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Log Likelihood:
##  8954.959    normalized:  3.300759 
## 
## Description:
##  Fri Apr 24 12:26:01 2020 by user: edisonduvan 
## 
## 
## Standardised Residuals Tests:
##                                 Statistic p-Value     
##  Jarque-Bera Test   R    Chi^2  751.2317  0           
##  Shapiro-Wilk Test  R    W      0.9769415 0           
##  Ljung-Box Test     R    Q(10)  13.3206   0.2062948   
##  Ljung-Box Test     R    Q(15)  14.96094  0.4542345   
##  Ljung-Box Test     R    Q(20)  22.43903  0.3171703   
##  Ljung-Box Test     R^2  Q(10)  70.80817  3.094758e-11
##  Ljung-Box Test     R^2  Q(15)  72.02754  1.939908e-09
##  Ljung-Box Test     R^2  Q(20)  73.01429  5.821152e-08
##  LM Arch Test       R    TR^2   6.99188   0.8581497   
## 
## Information Criterion Statistics:
##       AIC       BIC       SIC      HQIC 
## -6.591197 -6.560721 -6.591250 -6.580179

ahora sus predicciones

prediccion=predict(n.ahead=5,modelosp5_1)
## Warning in a_vec[i] <- ar[1:min(u2, i - 1)] * a_vec[(i - 1):(i - u2)] + :
## número de items para para sustituir no es un múltiplo de la longitud del
## reemplazo

## Warning in a_vec[i] <- ar[1:min(u2, i - 1)] * a_vec[(i - 1):(i - u2)] + :
## número de items para para sustituir no es un múltiplo de la longitud del
## reemplazo
predict(n.ahead=5,modelosp5_1,plot=TRUE)
## Warning in a_vec[i] <- ar[1:min(u2, i - 1)] * a_vec[(i - 1):(i - u2)] + :
## número de items para para sustituir no es un múltiplo de la longitud del
## reemplazo

## Warning in a_vec[i] <- ar[1:min(u2, i - 1)] * a_vec[(i - 1):(i - u2)] + :
## número de items para para sustituir no es un múltiplo de la longitud del
## reemplazo

##    meanForecast   meanError standardDeviation lowerInterval upperInterval
## 1 -4.486047e-05 0.006690745       0.006690745   -0.01315848    0.01306876
## 2  5.193726e-05 0.007043634       0.007043506   -0.01375333    0.01385721
## 3  3.050177e-05 0.007332725       0.007332233   -0.01434137    0.01440238
## 4  1.905623e-05 0.007464064       0.007463406   -0.01461024    0.01464835
## 5  1.187711e-05 0.007531123       0.007530375   -0.01474885    0.01477261