ALSEA es el operador de restaurantes líder en América Latina y España, con marcas de reconocimineto global delntro de los segmentos de comida rápida, cafeterías, comida casual, fast casual y restaurante familiar.
Cuenta con un portafolio multimarcas integrado por Domino´s Pizza, Starbucks, The Cheesecake Factory, Vips, Vips Smart, El Portón, Arcies, Foster´s Hollywood, LAVACA, Cañas y Tapas, Gino´s, TGI Fridays y wagamama. La compañia opera cerca de 4.500 unidades y cuenta con más de 85,000 colaboradores en México, España, Argentina, Colombia, Chile, Francia, Portugal, Holanda, Bélgica, Luxemburgo, Uruguay, Brasil y Andorra. htttp://www.alsea.net/somos-alsea
—————————————————————————————————————————————————————————————————– —————————————————————————————————————————————————————————————————–
PRECIO DE CIERRE
par(mfrow=c(1,1))
ggplot(ALSEA.MX, aes(x=Index, y=ALSEA.MX)) +
ggtitle("Precio de Cierre ALSEA.MX: enero 2013 - agosto 2019") +
geom_line(color="gold1") +
xlab("Fecha")+
ylab("Precio de cierre")
Podemos observar que hay una tendencia “oso” que significa que va a la baja; a partir del año 2014 se ven un par de double top combinados con un rising wedge, manteniendo un precio por encima de 60, es decir, en un nivel alto basandonos desde el 2013, pero desde inicios del 2019 hay una recesión economica que afecta directamente a todos, sin embargo, como lo mencionan en el economista, las estrategias aplicadas por Alsea han traido beneficios en el trimestre, donde se espera que siga creciendo, ya que venia de un castigo muy severo pero hay buenas expectativas de seguir a la alza.
PRECIO DE CIERRE EN RENDIMIENTOS
ggplot(ALSEA.MX_R, aes(x=Index, y=ALSEA.MX_R)) +
ggtitle("ALSEA.MX en rendimientos: enero 2013 - agosto 2019") +
geom_line(color="gold1") +
xlab("Fecha")+
ylab("Rendimiento")
Existe una mayor cantidad de clusters de volatilidad en el año 2018, basandonos en las noticias de la incorporacion de Vips España a Alsea, al igual que la planeación de abrir 270 nuevas sucursales en el mismo año, por lo cual las desviaciones estandar de los precios generan movimientos más abruptos en este periodo. Podemos observar clusters de volatilidad en 2013 derivados de las decisiones en el año, principalmente de la diversificación de su oferta en México, ya que fue un año record de adquisiciones para Alasea. Al igual que tener la operación total de Starbucks Mx.
https://www.dineroenimagen.com/2013-12-18/30400
https://www.fortuneenespanol.com/finanzas/alsea-planea-270-tiendas-2018/
—————————————————————————————————————————————————————————————————– —————————————————————————————————————————————————————————————————–
HISTOGRAMA A NIVELES
par(mfrow=c(1,1))
hist(ALSEA.MX,
main="Histograma de ALSEA.MX a niveles", col="gold1", xlab="ALSEA.MX puntos base de cierre",
breaks=50, prob = TRUE)
lines(density(ALSEA.MX))
Podemos observar una distribución no normal, ya que dentro de la distribución de todos los números, existen muchos valores que son bajos o altos y por ello, el promedio no está justo al medio de toda la distribución.
https://statssos.net/2014/12/02/ese-momento-donde-la-distribucion-no-es-normal-y-nos-aterrorizamos/
HISTOGRAMA EN RENDIMIENTOS
hist(ALSEA.MX_R,
main="Histograma de rendimientos ALSEA.MX", col="gold1", xlab="ALSEA.MX rendimientos", breaks=50, prob = TRUE)
lines(density(ALSEA.MX_R))
Podemos notar quela distribución es normal, la montaña o distribución es perfectamente simétrica donde los valores más frecuentes, el promedio y la mediana están todas al medio.
https://statssos.net/2014/12/02/ese-momento-donde-la-distribucion-no-es-normal-y-nos-aterrorizamos/
—————————————————————————————————————————————————————————————————–
GRAFICO Q-Q A NIVELES
par(mfrow=c(1,1))
qqnorm(ALSEA.MX, xlab="Cuantiles teóricos", ylab= "Muestra de cuantiles",
main= "Gráfico Q-Q ALSEA.MX a niveles")
qqline(ALSEA.MX)
Podemos evalua que las observaciones no se ajustan a la normal ya que se encuentran fuera de la linea de referencia normal y existen varios datos fuera de 3 desviaciones estandar por lo cual el nivel de confianza no es apto para realiza un analisis a niveles.
Q-Q EN RENDIMIENTOS
par(mfrow=c(1,1))
qqnorm(ALSEA.MX_R, xlab="Cuantiles teóricos", ylab= "Muestra de cuantiles",
main= "Gráfico Q-Q ALSEA.MX en rendimientos")
qqline(ALSEA.MX_R)
Utilizando los datos en rendimientos podemos observar que se ajustan a la normal. Y son muy rezgados los residuos que se salen del nivel de confianza de 95%, es decir que, se pueden realizar un buen analisis con los datos ajustados.
—————————————————————————————————————————————————————————————————– —————————————————————————————————————————————————————————————————–
DFA A NIVELES
adf.test(ALSEA.MX)
##
## Augmented Dickey-Fuller Test
##
## data: ALSEA.MX
## Dickey-Fuller = -0.62401, Lag order = 11, p-value = 0.9762
## alternative hypothesis: stationary
Nos da como resultado 0.9762 > 0.05 y esto significa que no rechazo la hipotesis nula en que la serie tiene raiz unitaria a niveles con la prueba DFA.
PP A NIVELES
PP.test(ALSEA.MX, lshort = TRUE)
##
## Phillips-Perron Unit Root Test
##
## data: ALSEA.MX
## Dickey-Fuller = -0.80188, Truncation lag parameter = 8, p-value =
## 0.9614
Nos da como resultado 0.9614 > 0.05 y esto significa que no rechazo la hipotesis nula en que la serie tiene raiz unitaria a niveles con la puebra PP.
—————————————————————————————————————————————————————————————————–
DFA EN RENDIMIENTOS
adf.test(ALSEA.MX_R)
##
## Augmented Dickey-Fuller Test
##
## data: ALSEA.MX_R
## Dickey-Fuller = -12.124, Lag order = 11, p-value = 0.01
## alternative hypothesis: stationary
Nos da como resultado 0.01 < 0.05 y esto significa que rechazo la hipotesis nula en que la serie tiene raiz unitaria en rendimientos en la prueba DFA.
PP EN RENDIMIENTOS
PP.test(ALSEA.MX_R, lshort = TRUE)
##
## Phillips-Perron Unit Root Test
##
## data: ALSEA.MX_R
## Dickey-Fuller = -37.956, Truncation lag parameter = 8, p-value =
## 0.01
Nos da como resultado 0.01 < 0.05 y esto significa que rechazo la hipotesis nula en que la serie tiene raiz unitaria en rendimientos con la prueba PP.
—————————————————————————————————————————————————————————————————–
KPSS A NIVELES
kpss.test(ALSEA.MX)
##
## KPSS Test for Level Stationarity
##
## data: ALSEA.MX
## KPSS Level = 9.3901, Truncation lag parameter = 8, p-value = 0.01
Nos da como resultado 0.01 < 0.05 y esto significa que rechazo la hipotesis nula de que la serie es estacionaria.
KPSS EN RENDIMIENTOS
kpss.test(ALSEA.MX_R)
##
## KPSS Test for Level Stationarity
##
## data: ALSEA.MX_R
## KPSS Level = 0.56451, Truncation lag parameter = 8, p-value =
## 0.02714
Nos da como resultado que 0.01 < 0.05 y esto significa que también rechazo la hipotesis nula de que la serie es estacionaria en rendimientos.
—————————————————————————————————————————————————————————————————– —————————————————————————————————————————————————————————————————–
Verificación de los componentes de autocorrelacion de AFC y PAFC
ALSEA.MX %>% diff() %>% ggtsdisplay(main="Función de Autocorrelación (MA) y Función de Autocorrelación parcial ")
## Warning: Removed 1 rows containing missing values (geom_point).
fit1 <-auto.arima(ALSEA.MX, seasonal=FALSE) #NOS DA EL MEJOR MODELO ARIMA SEGÚN R
fit1
## Series: ALSEA.MX
## ARIMA(0,1,3)
##
## Coefficients:
## ma1 ma2 ma3
## 0.0543 -0.0023 -0.0784
## s.e. 0.0246 0.0253 0.0249
##
## sigma^2 estimated as 0.6649: log likelihood=-2003.07
## AIC=4014.14 AICc=4014.17 BIC=4035.78
#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(0,1,3)
## Q* = 4.5877, df = 7, p-value = 0.7101
##
## Model df: 3. Total lags used: 10
podemos ver que….
Gráfico del autoarima
fit1 %>% forecast(h=20) %>% autoplot(200)
podemos ver que….
Valores del autoarima
forecast(fit1, h=20)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 1652 39.02081 37.97581 40.06581 37.42262 40.61901
## 1653 38.97493 37.45642 40.49343 36.65258 41.29728
## 1654 38.92946 37.05477 40.80415 36.06237 41.79655
## 1655 38.92946 36.79646 41.06247 35.66731 42.19162
## 1656 38.92946 36.56621 41.29272 35.31517 42.54376
## 1657 38.92946 36.35648 41.50245 34.99442 42.86451
## 1658 38.92946 36.16260 41.69632 34.69792 43.16101
## 1659 38.92946 35.98145 41.87748 34.42087 43.43806
## 1660 38.92946 35.81080 42.04812 34.15988 43.69904
## 1661 38.92946 35.64902 42.20991 33.91246 43.94647
## 1662 38.92946 35.49485 42.36408 33.67668 44.18225
## 1663 38.92946 35.34731 42.51162 33.45103 44.40790
## 1664 38.92946 35.20561 42.65332 33.23432 44.62461
## 1665 38.92946 35.06911 42.78982 33.02556 44.83337
## 1666 38.92946 34.93727 42.92166 32.82393 45.03500
## 1667 38.92946 34.80965 43.04928 32.62875 45.23018
## 1668 38.92946 34.68586 43.17307 32.43944 45.41949
## 1669 38.92946 34.56559 43.29334 32.25549 45.60344
## 1670 38.92946 34.44854 43.41039 32.07648 45.78245
## 1671 38.92946 34.33447 43.52446 31.90203 45.95690
Comprobación de la estacionalidad y estacionariedad con raiz invertida y el criterio de información
autoplot(fit1, title = "Raices invertidas sobre AR y MA")
fit1[["aic"]]
## [1] 4014.143
Podemos ver que….
—————————————————————————————————————————————————————————————————–
fit_propuesta1 = arima(ALSEA.MX, order=c(1,1,3))
fit_propuesta1
##
## Call:
## arima(x = ALSEA.MX, order = c(1, 1, 3))
##
## Coefficients:
## ar1 ma1 ma2 ma3
## 0.2769 -0.2204 -0.0178 -0.0793
## s.e. 0.2416 0.2407 0.0286 0.0256
##
## sigma^2 estimated as 0.6632: log likelihood = -2002.49, aic = 4014.99
checkresiduals(fit_propuesta1)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(1,1,3)
## Q* = 3.6043, df = 6, p-value = 0.73
##
## Model df: 4. Total lags used: 10
El modelo cuenta con residuos que se salen del límite de correlación del modelo, por lo cual, no seria un modelo apropiado para la toma de decisiones y lo descartamos por ese problema que presentan los datos.
La prueba Ljunge-Box es 0.82292 > 0.05 por lo cual,
fit_propuesta1 %>% forecast(h=20) %>% autoplot(200)
forecast(fit_propuesta1, h=20)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 1652 38.96397 37.92029 40.00766 37.36779 40.56015
## 1653 38.88009 37.36185 40.39834 36.55814 41.20205
## 1654 38.81130 36.93624 40.68637 35.94364 41.67896
## 1655 38.79226 36.65917 40.92535 35.52998 42.05453
## 1656 38.78699 36.43372 41.14025 35.18798 42.38599
## 1657 38.78553 36.23348 41.33757 34.88250 42.68855
## 1658 38.78512 36.04933 41.52092 34.60108 42.96916
## 1659 38.78501 35.87722 41.69280 34.33793 43.23209
## 1660 38.78498 35.71486 41.85509 34.08964 43.48032
## 1661 38.78497 35.56070 42.00924 33.85387 43.71607
## 1662 38.78497 35.41359 42.15635 33.62888 43.94105
## 1663 38.78497 35.27263 42.29730 33.41331 44.15662
## 1664 38.78497 35.13712 42.43281 33.20607 44.36387
## 1665 38.78497 35.00647 42.56347 33.00625 44.56368
## 1666 38.78497 34.88018 42.68975 32.81311 44.75682
## 1667 38.78497 34.75785 42.81208 32.62603 44.94390
## 1668 38.78497 34.63914 42.93080 32.44446 45.12547
## 1669 38.78497 34.52372 43.04621 32.26796 45.30198
## 1670 38.78497 34.41135 43.15858 32.09610 45.47383
## 1671 38.78497 34.30180 43.26813 31.92856 45.64138
autoplot(fit_propuesta1, title = "Raices invertidas sobre AR y MA")
Podemos ver que los residuos se encuentran dentro del límite de la estabilidad y estacionariedad, por lo cual es un buen modelo en este punto.
Al igual que la gráfica no presenta un pronostico confiable que nos de un resultado optimo a futuro, ya que no marca ninguna subida, ni ninguna gabaja, unicamente una lateral con pequeños movimientos.
fit_propuesta1[["aic"]]
## [1] 4014.99
El criterio de información nos dice que es 4014.99
—————————————————————————————————————————————————————————————————–
fit_propuesta2 = arima(ALSEA.MX, order=c(2,1,4))
fit_propuesta2
##
## Call:
## arima(x = ALSEA.MX, order = c(2, 1, 4))
##
## Coefficients:
## ar1 ar2 ma1 ma2 ma3 ma4
## -0.7718 0.0681 0.8305 -0.0286 -0.0850 -0.0919
## s.e. 0.2837 0.2682 0.2827 0.2829 0.0346 0.0243
##
## sigma^2 estimated as 0.6619: log likelihood = -2000.82, aic = 4015.65
checkresiduals(fit_propuesta2)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,1,4)
## Q* = 0.78922, df = 4, p-value = 0.9399
##
## Model df: 6. Total lags used: 10
El modelo cuenta con todos los residuos dentro del limite correlacional, por lo cual deducimos que es un excelente modelo ara la toma de decisiones, ya que tambien los mismos residuos se comportan de forma normal dentro, por lo cual será el utilizado para el sarima.
La prueba Ljunge-Box es 0.9399 > 0.05 por lo cual …
fit_propuesta2 %>% forecast(h=20) %>% autoplot(200)
forecast(fit_propuesta2, h=20)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## 1652 38.92018 37.87756 39.96281 37.32562 40.51474
## 1653 38.90660 37.38815 40.42504 36.58434 41.22886
## 1654 38.80571 36.93197 40.67946 35.94007 41.67136
## 1655 38.83145 36.69900 40.96389 35.57015 42.09274
## 1656 38.80471 36.45644 41.15298 35.21335 42.39608
## 1657 38.82710 36.27293 41.38126 34.92084 42.73336
## 1658 38.80800 36.07017 41.54583 34.62084 42.99515
## 1659 38.82426 35.90889 41.73964 34.36558 43.28295
## 1660 38.81041 35.73209 41.88873 34.10252 43.51830
## 1661 38.82221 35.58559 42.05883 33.87222 43.77220
## 1662 38.81216 35.42752 42.19679 33.63581 43.98851
## 1663 38.82072 35.29191 42.34953 33.42387 44.21757
## 1664 38.81343 35.14805 42.47881 33.20772 44.41914
## 1665 38.81964 35.02101 42.61827 33.01013 44.62915
## 1666 38.81435 34.88829 42.74040 32.80997 44.81873
## 1667 38.81886 34.76830 42.86941 32.62407 45.01365
## 1668 38.81502 34.64457 42.98546 32.43688 45.19316
## 1669 38.81829 34.53056 43.10601 32.26078 45.37579
## 1670 38.81550 34.41424 43.21676 32.08435 45.54665
## 1671 38.81787 34.30542 43.33033 31.91667 45.71908
autoplot(fit_propuesta2, title = "Raices invertidas sobre AR y MA")
Podemos ver que la gráfica no nos muestra una visual muy clara, sin embargo con los datos obtenidos podremos hacer una proyección mas certera.
Los residuos se encuentran dentro del circulo de estabilidad y estacionariedad, por lo cual comprueba que es un buen modelo.
fit_propuesta2[["aic"]]
## [1] 4015.649
El criterio de información nos dice que es 4015.640, y aun que es un poco mayor que el autoarima y la propuesta1, es mucho más recomendable este modelo por todas las caracteristicas mencionadas anteriormente.
—————————————————————————————————————————————————————————————————–—————————————————————————————————————————————————————————————————–
ALSEA22222<-getSymbols('ALSEA.MX', from="2013-01-01", to="2019-08-01", auto.assign =F ,src='yahoo',periodicity="monthly") [,4] #Mantiene solo el precio de cierre
#Tomo componente estacional anual (20 meses)
diff12 = diff(ALSEA22222,20)
sarima1 = arima(ALSEA22222, order = c(2,1,4), seasonal = list(order = c(1,1,1), period = 20))
sarima1
##
## Call:
## arima(x = ALSEA22222, order = c(2, 1, 4), seasonal = list(order = c(1, 1, 1),
## period = 20))
##
## Coefficients:
## ar1 ar2 ma1 ma2 ma3 ma4 sar1 sma1
## -0.2470 0.3867 0.2970 -0.5090 0.1818 -0.0121 0.5498 -0.9917
## s.e. 0.9728 0.7079 0.9658 0.7526 0.1854 0.2103 0.2625 1.7523
##
## sigma^2 estimated as 15.85: log likelihood = -169.59, aic = 357.18
#Pronosticos en datos
predict(sarima1, n.ahead=20)
## $pred
## Time Series:
## Start = 80
## End = 99
## Frequency = 1
## [1] 38.92967 41.66049 39.36910 40.81825 44.05026 41.58353 43.02764
## [8] 40.46642 42.60246 40.31847 32.27239 32.34595 32.80025 33.89947
## [15] 31.54072 27.17883 27.81331 25.10478 24.95207 25.49456
##
## $se
## Time Series:
## Start = 80
## End = 99
## Frequency = 1
## [1] 4.366554 6.254026 7.393569 8.852420 9.887246 11.023923 11.937300
## [8] 12.879171 13.695505 14.512138 15.253227 15.983479 16.665203 17.332022
## [15] 17.965813 18.583540 19.177772 19.755672 20.316439 20.860023
#Raices invertidas AR y MA
autoplot(sarima1, title = "Raices invertidas sobre AR y MA")
#SARIMA propuesto, residuales y prueba de Ljub-Box
checkresiduals(sarima1)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,1,4)(1,1,1)[20]
## Q* = 6.868, df = 3, p-value = 0.07623
##
## Model df: 8. Total lags used: 11
#Grafica de pronostico de sarima
sarima1%>% forecast(h=20) %>% autoplot()
#AKAIKE
sarima1[["aic"]]
## [1] 357.1778
#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 = "gold1")
Podemos observar en el sarima utilizando las especificaciones de la propuesta 2, concluimos en que este modelo nos acerca más a la realidad como se ve en las graficas de pronosticos en las cuales vemos movimeintos de 20 dias mas claros visualmente en los que hay subidas y bajadas que nos van a servir para poder dar un conclusión para la toma de decisión respecto a si conviene o no comprar acciones de ALSEA con el fin de aumentar las utilidades en un futuro pronto. Los residuos se encuentran justo al limite y no hay ninguno que se salga, por lo cual, es significativamente confiable, al igual que en la correlación de datos que esta dentro de los límites, y aun que no se comporta de una forma normal, la prueba de Ljung-Box es de 0.07 por lo cual esta al límte de rechazo de la Ho en que la serie es estacionaria, y también, se observa una tendencia a la baja.
—————————————————————————————————————————————————————————————————–—————————————————————————————————————————————————————————————————–
| FECHA | PRONOSTICO1 | PRONOSTICO2 | DATO REAL | DIFERENCIAP1 | DIFERENCIAP2 |
|---|---|---|---|---|---|
| 02.09.19 | 38.96 | 38.92 | 35.81 | -0.61 | -3.15 |
| 03.09.19 | 38.88 | 38.90 | 35.90 | -0.26 | -2.98 |
| 04.09.19 | 38.81 | 38.80 | 36.25 | -0.61 | -2.56 |
| 05.09.19 | 38.79 | 38.83 | 37.07 | -0.26 | -1.72 |
| 06.09.19 | 38.78 | 38.80 | 37.13 | -0.61 | -1.65 |
| 09.09.19 | 38.78 | 38.82 | 37.22 | -0.26 | -1.56 |
| 10.09.19 | 38.78 | 38.80 | 37.24 | -0.61 | -1.54 |
| 11.09.19 | 38.78 | 38.82 | 37.43 | -0.26 | -1.35 |
| 12.09.19 | 38.78 | 38.82 | 37.61 | -0.61 | -1.17 |
| 13.09.19 | 38.78 | 38.82 | 37.65 | -0.26 | -1.13 |
| 17.09.19 | 38.78 | 38.81 | 37.46 | -0.61 | -1.32 |
| 18.09.19 | 38.78 | 38.81 | 36.95 | -0.26 | -1.83 |
| 19.09.19 | 38.78 | 38.81 | 37.48 | -0.61 | -1.30 |
| 20.09.19 | 38.78 | 38.81 | 38.01 | -0.26 | -0.77 |
| 23.09.19 | 38.78 | 38.81 | 38.15 | -0.61 | -0.63 |
| 24.09.19 | 38.78 | 38.81 | 38.20 | -0.26 | -0.58 |
| 25.09.19 | 38.78 | 38.81 | 37.53 | -0.61 | -1.25 |
| 26.09.19 | 38.78 | 38.81 | 37.48 | -0.26 | -1.30 |
| 27.09.19 | 38.78 | 38.81 | 37.63 | -0.61 | -1.15 |
| 30.09.19 | 38.78 | 38.81 | 37.11 | -0.26 | -1.67 |
Podemos observar que los datos del pronostico1 estan más cercanos a los datos reales durante todo el mes, sin embargo, haciendo enfasis en los días 10. 11 y 12, se ve como la diferencia del pronostico2 es de mas de un punto, y todos los del pronostico1 es menor a un punto de diferencial. El modelo que se utilizo no fue el mejor si hacemos una comparación real, sin embargo, el arima utilizado del pronostico2 se encuentra mejor dentro de los límites de correlación y estacionalidad y con el sarima, se ajusta todavía un poco más a la realidad.
—————————————————————————————————————————————————————————————————– —————————————————————————————————————————————————————————————————–
La postura a la que nos inclinamos es que no es un buen momento de compra de la acción si se buscan resultados a corto plazo, ya que se encuentra en constantes caidas, por lo cual, en un plazo bajo, no creemos que haya ganancias, sino perdidas. En el largo plazo consideramos que es una buena opción de compra, ya que se encuentra en sus precios más bajos desde hace 2 años, por lo cual en un lapso largo se espera una subida en el precio de cotización en la BMV, es decir, que se esperan ganancias en más de un año; el comprador debe de estar dispuesto a soportar caidas en un corto plazo para ganar en el largo plazo.