# install.packages("forecast")
library(forecast)
# install.packages("readxl")
library(readxl)
Una Serie de tiempo es una colección de observaciones sobre un determinado fenómeno efectuadas en momentos de tiempo sucesivos, usualmente equiespaciados.
Ejemplo de series de tiempo: 1. Precio de acciones 2. Niveles de inventario 3. Rotación personal 4. Ventas 5. PIB(GDP)
Ejemplo: Los siguentes datos de producción trimestral inician en el primer trimestre de 2020. Se busca pronosticar la producción de los sigueintes 5 trimestres.
produccion <- c(50,53,55,57,55,60)
# En "start" el primer argumento es el perido, y el segundo la cantidad de periodos en 1 año.
st_produccion <- ts(data=produccion, start = c(2020,1),
frequency = 4) # En este caso, la serie de tiempo inicia en 2020 en el 1° mes.
# st_produccion <- ts(data=produccion, start = c(2020,1),
# frequency = 12) # En este caso, la serie de tiempo inicia en 2020 en el 1° mes.
# st_produccion <- ts(data=produccion, start = c(2020,8),
# frequency = 12) # En este caso, la serie de tiempo inicia en 2020 en el 8° mes.
ARIMA significa modelo autoregresivo integrado de promedio movil, en ingles
modelo_produccion <- auto.arima(st_produccion, D = 1) # D: Diferenciación Estacional
modelo_produccion
## Series: st_produccion
## ARIMA(0,0,0)(0,1,0)[4] with drift
##
## Coefficients:
## drift
## 1.5000
## s.e. 0.1768
##
## sigma^2 = 2.01: log likelihood = -2.84
## AIC=9.68 AICc=-2.32 BIC=7.06
summary(modelo_produccion)
## Series: st_produccion
## ARIMA(0,0,0)(0,1,0)[4] with drift
##
## Coefficients:
## drift
## 1.5000
## s.e. 0.1768
##
## sigma^2 = 2.01: log likelihood = -2.84
## AIC=9.68 AICc=-2.32 BIC=7.06
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.03333332 0.5787923 0.3666667 0.03685269 0.6429133 0.06111111
## ACF1
## Training set -0.5073047
# Al comparar modelos, seleccionamos el que tenga el menor MAPE (Porcentaje de Error Promedio Absoluto)
pronostico_producción <- forecast(modelo_produccion, level = c(95), h=5)
# Si no nos dicen otra cosa, el nivel de confiabilidad es 95%. Los periodo a pronosticar es h.
pronostico_producción
## Point Forecast Lo 95 Hi 95
## 2021 Q3 61 58.22127 63.77873
## 2021 Q4 63 60.22127 65.77873
## 2022 Q1 61 58.22127 63.77873
## 2022 Q2 66 63.22127 68.77873
## 2022 Q3 67 63.07028 70.92972
plot(pronostico_producción)
En equipos de 2 o 3, seleccionar un estado de México, obtener los datos historicos de su población, generar un pronostico hasta 2050
Comparar contra los datos de la CONAPO y escribir conlusiones(¿por qué la diferencia del pronóstico?)
# Datos de población del municipio de Aguascalientes: años 2000, 2005, 2010, 2015, 2020, 2024
poblacion <- c(944285, 1065416, 1184996, 1312544, 1425607, 1530185)
st_poblacion <- ts(data = poblacion, start = c(2000), frequency = 1) # Serie anual
## <span style="color:blue;"> Generar el pronóstico </span>
pronostico_poblacion <- forecast(st_poblacion, level = c(95), h = 5) # Hasta 2050 (2024 + 26 años)
pronostico_poblacion
## Point Forecast Lo 95 Hi 95
## 2006 1647224 1549317 1745130
## 2007 1763815 1625174 1902456
## 2008 1880406 1708351 2052461
## 2009 1996997 1795110 2198885
## 2010 2113588 1883989 2343187
plot(pronostico_poblacion, main = "Pronóstico población Aguascalientes hasta 2050")
## Crear modelo ARIMA
modelo_poblacion <- auto.arima(st_poblacion, D = 1)
modelo_poblacion
## Series: st_poblacion
## ARIMA(0,1,0) with drift
##
## Coefficients:
## drift
## 117180.000
## s.e. 3490.753
##
## sigma^2 = 76327505: log likelihood = -51.91
## AIC=107.82 AICc=113.82 BIC=107.03
summary(modelo_poblacion)
## Series: st_poblacion
## ARIMA(0,1,0) with drift
##
## Coefficients:
## drift
## 117180.000
## s.e. 3490.753
##
## sigma^2 = 76327505: log likelihood = -51.91
## AIC=107.82 AICc=113.82 BIC=107.03
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 137.8508 7133.373 5710.851 0.05642175 0.427205 0.04873571
## ACF1
## Training set 0.1476909
pronostico_poblacion <- forecast(st_poblacion, level = c(95), h = 5) # Hasta 2050 (2024 + 26 años)
pronostico_poblacion
## Point Forecast Lo 95 Hi 95
## 2006 1647224 1549317 1745130
## 2007 1763815 1625174 1902456
## 2008 1880406 1708351 2052461
## 2009 1996997 1795110 2198885
## 2010 2113588 1883989 2343187
plot(pronostico_poblacion, main = "Pronóstico población Aguascalientes hasta 2050")
Agregar una pestaña en la aplicacción de Shiny con el ejercicio México rumbo al 2050. En el menú se debe seleccionar la cantidad de años a pronosticar.
ventas <- read_excel("C:\\Users\\macha\\Downloads\\Ventas_Históricas_Lechitas.xlsx")
str(ventas)
## tibble [36 × 1] (S3: tbl_df/tbl/data.frame)
## $ Ventas: num [1:36] 25521 23740 26254 25868 27073 ...
st_ventas <- ts(data=ventas, start=c(2017, 1), frequency = 12)
modelo_ventas <- auto.arima(st_ventas)
modelo_ventas
## Series: st_ventas
## ARIMA(1,0,0)(1,1,0)[12] with drift
##
## Coefficients:
## ar1 sar1 drift
## 0.6383 -0.5517 288.8979
## s.e. 0.1551 0.2047 14.5026
##
## sigma^2 = 202701: log likelihood = -181.5
## AIC=371 AICc=373.11 BIC=375.72
summary(modelo_ventas)
## Series: st_ventas
## ARIMA(1,0,0)(1,1,0)[12] with drift
##
## Coefficients:
## ar1 sar1 drift
## 0.6383 -0.5517 288.8979
## s.e. 0.1551 0.2047 14.5026
##
## sigma^2 = 202701: log likelihood = -181.5
## AIC=371 AICc=373.11 BIC=375.72
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 25.22158 343.864 227.17 0.08059932 0.7069542 0.06491044 0.2081026
pronostico_ventas <- forecast(modelo_ventas, level= c(95), h=12)
pronostico_ventas
## Point Forecast Lo 95 Hi 95
## Jan 2020 35498.90 34616.48 36381.32
## Feb 2020 34202.17 33155.28 35249.05
## Mar 2020 36703.01 35596.10 37809.92
## Apr 2020 36271.90 35141.44 37402.36
## May 2020 37121.98 35982.07 38261.90
## Jun 2020 37102.65 35958.90 38246.40
## Jul 2020 37151.04 36005.73 38296.34
## Aug 2020 38564.64 37418.70 39710.58
## Sep 2020 38755.22 37609.03 39901.42
## Oct 2020 39779.02 38632.72 40925.32
## Nov 2020 38741.63 37595.28 39887.97
## Dec 2020 38645.86 37499.50 39792.22
plot(pronostico_ventas)