GRUPO CARSO (GCARSOA1.MX)

Logotipo CARSO

Grupo Carso es uno de los conglomerados diversificados más grandes e importantes de América Latina. Se encuentra conformado por cuatro sectores que se han definido como estratégicos: el sector comercial, el sector industrial, el sector de infraestructura y construcción y el sector de energía.

El Grupo tiene una importante presencia en la economía mexicana en donde se mantiene como uno de los líderes de mercado gracias a un excepcional portafolio de formatos, productos y servicios.

Desde su fundación, hace más de 35 años, Grupo Carso se ha caracterizado por su dinamismo, su innovación en procesos y tecnologías y el manejo sustentable de los recursos. Dentro de los sectores que lo constituyen se han logrado sinergias operativas, rentabilidad y se han generado flujos de efectivo constantes, lo que ha significado un historial de creación de valor a largo plazo para los accionistas.

Logotipo CARSO

GRÁFICAS DE PRECIOS DE CIERRE A NIVELES Y RENDIMIENTOS

  # Gráficas a niveles (precios de cierre)
par(mfrow=c(1,1))

  ggplot(GCARSOA1.MX, aes(x=Index, y=GCARSOA1.MX)) +
    ggtitle("Precio de Cierre GCARSOA1.MX: enero 2013 - octubre 2019") +
    geom_line(color="red1") + 
    xlab("Fecha")+
    ylab("Precio de cierre")

La gráfica de los precios de cierre a niveles, nos muestra grandes variaciones en su comportamiento, se observa que en 2017 fue donde tuvo su mayor auge, mientras que los últimos meses de 2019 son el período que más marca una tendencia bajista.

#Grafica en rendimientos
 
  
  ggplot(GCARSOA1.MX_R, aes(x=Index, y=GCARSOA1.MX_R)) +
    ggtitle("GCARSOA1.MX en rendimientos: enero 2013 - octubre 2019") +
    geom_line(color="dodgerblue4") + 
    xlab("Fecha")+
    ylab("Rendimiento")

La gráfico de los rendimientos nos muestra una serie con un comportamiento similar, a excepción del año 2017, donde puede observarse un comportamiento de alta volatilidad. Este suceso se originó por lo siguiente:

“A diciembre de 2017 Grupo Carso, que controla y opera empresas en los ramos comercial, industrial, infraestructura y energía, cerró con una deuda por 10,226 millones de pesos, lo que representó una disminución de 13% respecto al cierre de 2016”.[1]

https://expansion.mx/empresas/2018/03/13/grupo-carso-colocara-deuda-por-3-000-mdp [1]

HISTOGRAMAS Y GRÁFICAS Q-Q A NIVELES Y RENDIMIENTOS

#Histogramas y descripción de los datos


par(mfrow=c(1,3))
hist(GCARSOA1.MX, 
     main="Histograma de GCARSOA1.MX a niveles", col="red", xlab="GCARSOA1.MX puntos base de cierre",
     breaks=50, prob = TRUE)
lines(density(GCARSOA1.MX))

El histograma a niveles tiene un comportamiento un poco similar a la distribución normal.

# Histogramas en rendimientos

hist(GCARSOA1.MX_R, 
     main="Histograma de rendimientos GCARSOA1.MX", col="green", xlab="GCARSOA1.MX rendimientos", breaks=50, prob = TRUE)
lines(density(GCARSOA1.MX_R))

Mientras que el gráfico en rendimientos se ajusta más a una distribución normal.

#Gráfico QQ

par(mfrow=c(1,1))
qqnorm(GCARSOA1.MX, xlab="Cuantiles teóricos", ylab= "Muestra de cuantiles",
       main= "Gráfico Q-Q GCARSOA1.MX a niveles")
qqline(GCARSOA1.MX)

La gráfica Q-Q a niveles nos muestra que existe un conjunto de datos que no se ajustan a la distribución ideal.

#Gráfica Q-Q en rendimientos
par(mfrow=c(1,3))
qqnorm(GCARSOA1.MX_R, xlab="Cuantiles teóricos", ylab= "Muestra de cuantiles",
       main= "Gráfico Q-Q GCARSOA1.MX en rendimientos")
qqline(GCARSOA1.MX_R)

En el gráfico Q-Q en rendimientos, se observa que los datos ya se ajustan más a una distribución ideal.

PRUEBAS DE RAICES UNITARIAS: PRUEBA DFA, PP y KPS

#PRUEBA DFA
#A NIVELES (precio de cierre)

adf.test(GCARSOA1.MX)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  GCARSOA1.MX
## Dickey-Fuller = -2.3069, Lag order = 11, p-value = 0.4484
## alternative hypothesis: stationary

La prueba DFA nos arroja un P-value de 0.4484, por lo que la Ho no se rechaza indicando que la serie es estacionaria.

#PRUEBA PP
#A NIVELES
PP.test(GCARSOA1.MX, lshort = TRUE)
## 
##  Phillips-Perron Unit Root Test
## 
## data:  GCARSOA1.MX
## Dickey-Fuller = -2.8093, Truncation lag parameter = 8, p-value =
## 0.2357

La prueba Phillips-Perron nos arroja un P-value con resultado de 0.2357, indicando que la serie es estacionaria.

#PRUEBA DFA
# En rendimientos
adf.test(GCARSOA1.MX_R)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  GCARSOA1.MX_R
## Dickey-Fuller = -12.657, Lag order = 11, p-value = 0.01
## alternative hypothesis: stationary

La prueba DFA en rendimientos indica un P-value de 0.01, por lo que la serie no es estacionaria.

#PRUEBA PP
#EN RENDIMIENTOS
PP.test(GCARSOA1.MX_R, lshort = TRUE)
## 
##  Phillips-Perron Unit Root Test
## 
## data:  GCARSOA1.MX_R
## Dickey-Fuller = -47.005, Truncation lag parameter = 8, p-value =
## 0.01

La prueba Phillips-Perron en rendimentos nos da un P-value con valor de 0.01, indicando que la serie tiene raíz unitaria.

## PRUEBA KPSS
#A NIVELES
kpss.test(GCARSOA1.MX)
## 
##  KPSS Test for Level Stationarity
## 
## data:  GCARSOA1.MX
## KPSS Level = 1.9681, Truncation lag parameter = 8, p-value = 0.01

Para la prueba KPSS, el P-value nos da un valor de 0.01, indicando que la serie no es estacionaria.

#PRUEBA KPSS
# En rendimientos
kpss.test(GCARSOA1.MX_R)
## 
##  KPSS Test for Level Stationarity
## 
## data:  GCARSOA1.MX_R
## KPSS Level = 0.0953, Truncation lag parameter = 8, p-value = 0.1

De igual forma, podemos apreciar el P-value de la prueba KPSS en rendimientos con un valor de 0.01, que indica que la serie no es estacionaria.

PRONOSTICOS CON MODELOS ARIMA

                   ### MODELOS ARIMA ###

#Verifica los componentes de autocorrelación ACF y PACF

GCARSOA1.MX %>% diff() %>% ggtsdisplay(main="Función de Autocorrelación (MA) y Función de Autocorrelación parcial (AR)")

En el gráfico, la función de autocorrelación com la de autocorrelación parcial, nos indican una fuerte autocorrelación negativa, indicando que los valores grandes actuales se corresponden con valores pequeños en el retardo especificado.

#A continuación se estimará el modelo AUTOARIMA.

#-------------------------autoarima--------------------------#

fit1<-auto.arima(GCARSOA1.MX, seasonal=FALSE) #NOS DA EL MEJOR MODELO ARIMA SEGÚN R
fit1
## Series: GCARSOA1.MX 
## ARIMA(1,1,1) 
## 
## Coefficients:
##          ar1      ma1
##       0.5971  -0.7378
## s.e.  0.0633   0.0524
## 
## sigma^2 estimated as 1.703:  log likelihood=-2860.16
## AIC=5726.32   AICc=5726.34   BIC=5742.64
#Revisa autocorrelación en residuales y aplica prueba de Ljung Box
#H0: Los residuales se distribuyen normalmente
checkresiduals(fit1)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(1,1,1)
## Q* = 4.9649, df = 8, p-value = 0.7613
## 
## Model df: 2.   Total lags used: 10

Después de haber aplicado la prueba de Ljung Box, el P-value nos indica un valor de 0.7613, por lo que podemos decir que no se rechaza la Ho, los residuales se distribuyen normalmente y se puede corroborar con el histograma.

Ahora mostraremos un gráfico del pronóstico.

#Gráfico del pronóstico
fit1 %>% forecast(h=12) %>% autoplot(200)

El precio que nos arroja este pronóstico para el 09 de Octubre del 2019 es de 57.37363 pesos.

Se muestra el gráfico para comprobar estabilidad y estacionariedad del modelo con raíces invertidas.

autoplot(fit1, title = "Raices invertidas sobre AR y MA")

Podemos verificar estacionariedad y estabilidad, debido a que el punto no sale de los límites de la circunferencia.

Este modelo nos da el siguiente criterio de información.

#Muestra criterio de información
fit1[["aic"]]
## [1] 5726.323

#A continuación se estimarán las dos propuestas de ARIMA, buscando una mejor estimación que la propuesta por el AUTOARIMA.

###El modelo que se propone es un ARIMA (4,1,4), arrojando los siguientes resultados

fit_pro1 = arima(GCARSOA1.MX, order=c(4,1,4))
fit_pro1
## 
## Call:
## arima(x = GCARSOA1.MX, order = c(4, 1, 4))
## 
## Coefficients:
##           ar1     ar2     ar3      ar4     ma1      ma2      ma3     ma4
##       -0.4973  0.4582  0.4230  -0.3897  0.3715  -0.6078  -0.5021  0.4206
## s.e.   0.4853  0.5099  0.0941   0.2655  0.4916   0.4406   0.1148  0.3458
## 
## sigma^2 estimated as 1.686:  log likelihood = -2853.16,  aic = 5724.31
checkresiduals(fit_pro1)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(4,1,4)
## Q* = 2.9429, df = 3, p-value = 0.4005
## 
## Model df: 8.   Total lags used: 11

El resultado de la prueba Ljung-Box nos da un P-value de 0.4005, entonces no se rechaza la Ho, los residuales se distribuyen normalmente y se puede corroborar con el histograma.

Gráfica del pronóstico

fit_pro1 %>% forecast(h=12) %>% autoplot(200)

forecast(fit_pro1, h=12)
##      Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 1700       57.30472 55.64050 58.96893 54.75951 59.84992
## 1701       57.42541 55.21494 59.63589 54.04479 60.80604
## 1702       57.34975 54.78024 59.91927 53.42002 61.27948
## 1703       57.36479 54.54783 60.18175 53.05662 61.67296
## 1704       57.38744 54.35287 60.42202 52.74646 62.02843
## 1705       57.30403 54.07946 60.52859 52.37248 62.23558
## 1706       57.39174 53.98855 60.79493 52.18701 62.59647
## 1707       57.31362 53.73041 60.89683 51.83357 62.79367
## 1708       57.34855 53.60093 61.09618 51.61705 63.08005
## 1709       57.36499 53.44820 61.28179 51.37477 63.35521
## 1710       57.30560 53.23109 61.38010 51.07418 63.53701
## 1711       57.38789 53.16058 61.61519 50.92278 63.85299
autoplot(fit_pro1, title = "Raices invertidas sobre AR y MA")

Podemos verificar estacionariedad y estabilidad, aunque hay algunos puntos al límite de la circunferencia siguen dentro de lo permitido.

#Muestra criterio de información
fit_pro1[["aic"]]
## [1] 5724.311

El criterio de información nos arroja un valor de 5724.311, siendo este más bajo que el de el AUTOARIMA.

El precio de cierre para el 09 de octubre del 2019 en este pronóstico es de 57.30472 pesos.

Se estima la segunda propuesta de modelo ARIMA

El modelo que se propone es un ARIMA (5,1,6), arrojando los siguientes resultados

fit_pro2 = arima(GCARSOA1.MX, order=c(5,1,6))
fit_pro2
## 
## Call:
## arima(x = GCARSOA1.MX, order = c(5, 1, 6))
## 
## Coefficients:
##           ar1      ar2      ar3      ar4     ar5     ma1     ma2     ma3
##       -0.3077  -0.1380  -0.5082  -0.6546  0.3569  0.1846  0.0031  0.3814
## s.e.   0.1603   0.1029   0.0733   0.0939  0.1424  0.1608  0.0769  0.0620
##          ma4      ma5      ma6
##       0.5410  -0.5299  -0.0779
## s.e.  0.0801   0.1233   0.0414
## 
## sigma^2 estimated as 1.683:  log likelihood = -2851.36,  aic = 5726.71
checkresiduals(fit_pro2)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(5,1,6)
## Q* = 4.1943, df = 3, p-value = 0.2412
## 
## Model df: 11.   Total lags used: 14

El resultado de la prueba Ljung-Box nos da un P-value de 0.2412, entonces no se rechaza la Ho, los residuales se distribuyen normalmente y se puede corroborar con el histograma.

Gráfica del pronóstico y datos pronosticados.

fit_pro2 %>% forecast(h=12) %>% autoplot(200)

forecast(fit_pro2, h=12)
##      Point Forecast    Lo 80    Hi 80    Lo 95    Hi 95
## 1700       57.35538 55.69295 59.01781 54.81291 59.89785
## 1701       57.53740 55.32635 59.74845 54.15589 60.91891
## 1702       57.46245 54.89929 60.02562 53.54243 61.38248
## 1703       57.45954 54.64458 60.27451 53.15443 61.76466
## 1704       57.40487 54.36711 60.44263 52.75902 62.05073
## 1705       57.30747 54.07831 60.53663 52.36890 62.24604
## 1706       57.46048 54.05455 60.86642 52.25155 62.66942
## 1707       57.42978 53.84011 61.01946 51.93985 62.91972
## 1708       57.50236 53.74487 61.25986 51.75577 63.24895
## 1709       57.45076 53.52426 61.37726 51.44570 63.45582
## 1710       57.33730 53.25981 61.41480 51.10131 63.57329
## 1711       57.41715 53.19853 61.63577 50.96533 63.86897
autoplot(fit_pro2, title = "Raices invertidas sobre AR y MA")

Podemos verificar estacionariedad y estabilidad, a pesar de que gran parte de los puntos estan al límite de la circunferencia, están dentro de lo permitido.

#Muestra criterio de información
fit_pro2[["aic"]]
## [1] 5726.711

El criterio de información tiene un valor muy aproximado al del AUTOARIMA, teniendo una pequeña variación. Por lo que se determina que la primera propuesta que es el ARIMA(4,1,4) es la mejor. El precio de cierre del 09 de octubre de 2019 obtenido por este modelo es de 57.3553 pesos.

COMPARACIÓN DE MODELOS ARIMA

Fecha Modelo Precio Real Precio estimado Criterio de información
09-oct-2019 AUTOARIMA (1,1,1) $57.04 $57.37363 5726.323
09-oct-2019 ARIMA(4,1,4) $57.04 $57.30472 5724.31
09-oct-2019 ARIMA(5,1,6) $57.04 $57.35538 5726.71

El mejor modelo ARIMA fue el (4,1,4), dando los mejores resultados tanto en criterio de información como en diferencial, con un valor de -0.26.

MODELOS ARIMA CON COMPONENTE ESTACIONAL (SARIMA)

#—– ARIMAS ESTACIONALES——#

#Modelo original

fit_pro1 = arima(GCARSOA1.MX, order=c(4,1,4))
fit_pro1
## 
## Call:
## arima(x = GCARSOA1.MX, order = c(4, 1, 4))
## 
## Coefficients:
##           ar1     ar2     ar3      ar4     ma1      ma2      ma3     ma4
##       -0.4973  0.4582  0.4230  -0.3897  0.3715  -0.6078  -0.5021  0.4206
## s.e.   0.4853  0.5099  0.0941   0.2655  0.4916   0.4406   0.1148  0.3458
## 
## sigma^2 estimated as 1.686:  log likelihood = -2853.16,  aic = 5724.31

Estos son los resultados del mejor modelo estimado.

#Modelo ARIMA ESTACIONAL

GCARSOA1.MX2<-getSymbols('^MXX', from="2013-01-01", to="2019-10-01", auto.assign =F ,src='yahoo',periodicity="monthly") [,4] #Mantiene solo el precio de cierre
#Prueba KPSS
kpss.test(GCARSOA1.MX2)
## 
##  KPSS Test for Level Stationarity
## 
## data:  GCARSOA1.MX2
## KPSS Level = 0.82812, Truncation lag parameter = 3, p-value = 0.01

Esta prueba nos arroja un valor p de 0.01, indicando que se rechaza la HO, entonces la serie no es estacionaria, lo podemos comprobar con el siguiente gráfico.

autoplot(GCARSOA1.MX2)

Podemos observar que el comportamiento de esta serie tiene una gran variación con respecto a su media.

#Tomo componente estacional anual (12 meses)

diff12 = diff(GCARSOA1.MX2,12)
Acf(diff12, 48)

Estos son los valores del modelo SARIMA (4,1,4,1,1,1,12)

sarima1 = arima(GCARSOA1.MX2, order = c(4,1,4), seasonal = list(order = c(1,1,1), period = 12))
sarima1
## 
## Call:
## arima(x = GCARSOA1.MX2, order = c(4, 1, 4), seasonal = list(order = c(1, 1, 
##     1), period = 12))
## 
## Coefficients:
##           ar1     ar2      ar3      ar4     ma1      ma2     ma3     ma4
##       -0.3457  0.9286  -0.4303  -0.8477  0.2635  -1.1508  0.3919  0.8070
## s.e.   0.2214  0.1464   0.1262   0.1911  0.4015   0.2647  0.3040  0.4008
##         sar1     sma1
##       0.5187  -0.9947
## s.e.  0.1925   1.2347
## 
## sigma^2 estimated as 1919428:  log likelihood = -598.53,  aic = 1219.06

Podemos observar un criterio de información considerablemente más pequeño al modelo original.

#VALORES PRONOSTICADOS

#Para obtener los valores pronosticados
predict(sarima1, n.ahead=20) 
## $pred
## Time Series:
## Start = 82 
## End = 101 
## Frequency = 1 
##  [1] 40946.02 39294.80 40194.22 40788.19 39431.41 39015.58 39621.42
##  [8] 38215.35 39223.41 38740.62 40208.09 40607.74 38739.27 36982.19
## [15] 36993.66 37115.81 35746.17 36192.69 37056.71 36476.19
## 
## $se
## Time Series:
## Start = 82 
## End = 101 
## Frequency = 1 
##  [1] 1487.808 1988.001 2263.570 2461.562 2573.428 2748.915 2908.811
##  [8] 3201.673 3446.363 3751.361 3938.411 4113.086 4501.902 4834.233
## [15] 5083.309 5355.430 5607.099 5923.637 6233.854 6565.972
autoplot(sarima1, title = "Raices invertidas sobre AR y MA")

El gráfico nos muestra que podemos verificar estacionariedad y estabilidad, aunque hay algunos puntos al límite de la circunferencia siguen dentro de lo permitido.

checkresiduals(sarima1)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(4,1,4)(1,1,1)[12]
## Q* = 3.7138, df = 3, p-value = 0.2941
## 
## Model df: 10.   Total lags used: 13

El comportamiento de los residuales sigue una distribución normal, mientras que en el correlograma no se rebasa en ningún momento el límite. La prueba de Ljung-Box nos confirma la normalidad con un valor p de 0.2941, aceptando la HO.

#Gráfica del pronóstico

sarima1%>% forecast(h=20) %>% autoplot()

#Muestra criterio de información
sarima1[["aic"]]
## [1] 1219.061

El criterio de información es de 1219.061, considerablemente más bajo al del mejor modelo ARIMA normal.

## Validación del modelo

validacion<- forecast(sarima1)

val1 <- data.frame(data=as.matrix(fitted(validacion)), date=time(fitted(validacion)))
#Ajuste del modelo


autoplot(validacion) + geom_line(data = val1,
                                 aes(date,data),
                                 col = "orangered")

Se observa que el comportamiento de las dos series a través del tiempo es similar, demostrando ser un buen modelo.

accuracy(validacion)
##                   ME     RMSE      MAE        MPE     MAPE      MASE
## Training set 48.8266 1269.537 936.5971 0.08642073 2.088489 0.7883322
##                     ACF1
## Training set -0.01000571

#CONCLUSIÓN La estimación del modelo normal ARIMA(4,1,4) resultó dar mejores resultados a comparación del modelo AUTOARIMA (1,1,1). A partir del mejor modelo ARIMA se realizo un modelo ARIMA con componente estacional (SARIMA), el cual fue estimado y obtuvimos mejores resultados con respecto al anterior modelo utilizado.

En el gráfico del pronóstico se observa un comportamiento similar en las dos series, siendo este un buen pronóstico.