GRUPO CARSO (GCARSOA1.MX)
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.
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.