Caso de estudio 5

Luis Ochoa, Cinthia Alejandra Felix Corral, Rafael Soqui, Omar Cortez

23/3/2022

library(pacman)
p_load("DT","xfun", "readr","tidyr", "dplyr","prettydoc", "stringr","vembedr", "xfun", "ggplot2", "lubridate", "plotly","readr","corrplot","scales","anytime", "tidyverse", "lubridate", "forecast", "TTR", "MLmetrics", "tseries", "fpp", "TSstudio", "xfun")
library(readxl)

Introducción

Una serie de tiempo es una secuencia de datos u observaciones, medidos en determinados momentos y ordenados cronológicamente. Visualmente, es una curva que evoluciona en el tiempo. Una serie de tiempo es un conjunto de observaciones sobre los valores que toma una variable (cuantitativa) a través del tiempo.

Imágen

Eleccion de datos

El caso de estudio a analizar es sobre el consumo anual de gas per capita en Mexico. En México se consumen cerca de 190 millones de litros de gasolina todos los días, convirtiendo al país en el cuarto consumidor más grande del mundo.

options(readr.show_col_types = FALSE)
Petroleo <- read_csv("per-capita-gas.csv")
anyNA(Petroleo)
## [1] FALSE

Analisis de los datos

Estos datos nos informan sobre las ventas de la demanda mensual de gasolina en millones de galones de Ontario entre 1980 y 2019, y compararán algunos modelos y modelos de evaluación.

petroleo <- ts(Petroleo [,4],  start = 1966, end = 2019, frequency = 2)
  petroleo
## Time Series:
## Start = c(1966, 1) 
## End = c(2019, 1) 
## Frequency = 2 
##   [1] 1827.734 1869.804 1558.833 1622.732 1951.559 1935.664 1951.816 2025.594
##   [9] 2179.285 2227.942 2204.242 2104.030 2163.173 2652.280 3140.385 3291.234
##  [17] 3483.630 3658.321 3688.653 3612.283 3622.899 3156.250 3147.013 3138.996
##  [25] 3010.410 3194.732 3301.970 3243.125 3196.224 3338.993 3348.162 3357.952
##  [33] 3322.808 3485.366 3466.267 3631.277 3608.303 4038.831 4317.909 4594.743
##  [41] 4972.631 5419.146 5224.961 5414.125 5794.641 5788.663 6120.277 6280.491
##  [49] 6546.924 6551.328 6629.272 6732.189 6894.989 6939.833 7106.940 1827.734
##  [57] 1869.804 1558.833 1622.732 1951.559 1935.664 1951.816 2025.594 2179.285
##  [65] 2227.942 2204.242 2104.030 2163.173 2652.280 3140.385 3291.234 3483.630
##  [73] 3658.321 3688.653 3612.283 3622.899 3156.250 3147.013 3138.996 3010.410
##  [81] 3194.732 3301.970 3243.125 3196.224 3338.993 3348.162 3357.952 3322.808
##  [89] 3485.366 3466.267 3631.277 3608.303 4038.831 4317.909 4594.743 4972.631
##  [97] 5419.146 5224.961 5414.125 5794.641 5788.663 6120.277 6280.491 6546.924
## [105] 6551.328 6629.272 6732.189
  autoplot(petroleo)

Descomponer una serie de tiempo en sus partes principales

Este proceso indetificara los diversos componentes exsistentes de una serie de tiempo estos componentes nos pueden ayudar a calcular un modelo y asi intentar predecir el comportamiento a futuro de la variable se usara un suavizado exponencial.

petroleo_dc <- petroleo %>%
  decompose(type="multiplicative") %>%
  autoplot()
petroleo_dc

### Validacion cruzada

La validación cruzada (CV) es una técnica popular para ajustar hiperparámetros y producir medidas sólidas del rendimiento del modelo.

test_petroleo <- tail(petroleo, 11) #20% para pruebas

train_petroleo<- head(petroleo, length(Petroleo)-11) #80% para entrenamiento

Ajuste del modelo

Para ajustar el modelo se usara el metodo Holt-Winters el cual es una ampliación perfeccionada del enfoque de la suavización exponencial, mientras que el procedimiento de suavización proporciona una impresión general, movimientos a largo plazo en la información y permite la elaboración de pronósticos a corto plazo.

petroleo_ses <- HoltWinters(train_petroleo, seasonal = "multiplicative",)
petroleo_ses
## Holt-Winters exponential smoothing with trend and multiplicative seasonal component.
## 
## Call:
## HoltWinters(x = train_petroleo, seasonal = "multiplicative")
## 
## Smoothing parameters:
##  alpha: 0.8816109
##  beta : 0.02962765
##  gamma: 0.9834448
## 
## Coefficients:
##           [,1]
## a  5524.651719
## b    53.505580
## s1    1.061975
## s2    1.048709

Forecasting

petroleo_forecast <- forecast(object = petroleo_ses, h=36)

Visualizando datos

petroleo %>%
  autoplot(series = "actual") +
  autolayer(petroleo_forecast$fitted, series = "train") +
  autolayer(petroleo_forecast$mean, series = "test") +
  theme_minimal()
## Warning: Removed 2 row(s) containing missing values (geom_path).

### Evaluar la precision del metodo

eval_ses <- accuracy(petroleo_forecast, test_petroleo)
eval_ses
##                     ME     RMSE      MAE       MPE     MAPE      MASE
## Training set  65.63503 600.6860 256.0958 0.4846444 9.732754 0.6919930
## Test set     316.74587 383.6369 355.3753 4.8123574 5.479686 0.9602547
##                    ACF1 Theil's U
## Training set 0.07629012        NA
## Test set     0.30045228  1.997562

Donde:

  • RMSE=Error cuadrático medio es una métrica que nos dice qué tan lejos están nuestros valores predichos de nuestros valores observados en un análisis de regresión, en promedio. se puede interpretar como la desviación estándar de la varianza inexplicada, y tiene la propiedad útil de estar en las mismas unidades que la variable de respuesta. Los valores más bajos de RMSE indican un mejor ajuste. RMSE es una buena medida de la precisión con que el modelo predice la respuesta, y es el criterio más importante para ajustar si el propósito principal del modelo es la predicción.

  • MAE= Error absoluto medio: Es el promedio de la diferencia absoluta entre el valor observado y los valores predichos. El error absoluto medio o MAE es un puntaje lineal, lo que significa que todas las diferencias individuales se ponderán por igual en el promedio. Por ejemplo, la diferencia entre 10 y 0 será el doble de la diferencia entre 5 y 0.

  • MAPE= El error porcentual absoluto medio (MAPE) expresa la exactitud como un porcentaje del error. Debido a que el MAPE es un porcentaje, puede ser más fácil de entender que otros estadísticos de medición de exactitud. Por ejemplo, si el MAPE es 5, en promedio, el pronóstico está errado en un 5%

  • MASE= Error de escala absoluta de media entre el pronostico y el resultado : es el resultado eventual de los datos de muestra de las series de tiempo un despliegue de celdas unidimensional (e.g. fila o columna).

El modelo como se pudo apreciar en el grafico no es capaz de predecir el comportamiento de la variable, este tiene un error medio de 5.47%

Utilizando el metodo ARIMA

Para hacer frente a la estacionalidad, los procesos ARIMA han sido generalizados, estableciendo los modelos SARIMA (Seasonal Autoregressive Integrated Moving Average Model). son los enfoques más utilizados para el pronóstico de series de tiempo. Estos modelos son útiles para describir los datos autocorrelacionados. La autocorrelación es una característica típica de las series de tiempo, en las que los valores medidos a lo largo del tiempo se correlacionan con otros valores de la serie. Otras características relevantes en una serie temporal son la tendencia , la estacionalidad y el ciclo

adf.test(petroleo)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  petroleo
## Dickey-Fuller = -2.1574, Lag order = 4, p-value = 0.5114
## alternative hypothesis: stationary

Nos podemos dar cuenta que el valor p es mayor a 0.05 por lo tanto los datos son estacionarios

Analisis de ajuste

petroleo_diff <- petroleo %>%
  diff(lag=12) %>%
  diff(lag=1)

petroleo_diff %>%
  autoplot()

Analizando la serie de tiempo por medio de un modelo ARIMA

petroleo_auto <- auto.arima(y = train_petroleo, seasonal = T)
summary(petroleo_auto)
## Series: train_petroleo 
## ARIMA(1,0,0) with non-zero mean 
## 
## Coefficients:
##          ar1       mean
##       0.9262  3614.8028
## s.e.  0.0378   680.8768
## 
## sigma^2 = 322309:  log likelihood = -776.02
## AIC=1558.04   AICc=1558.29   BIC=1565.86
## 
## Training set error measures:
##                    ME     RMSE      MAE       MPE     MAPE      MASE       ACF1
## Training set 27.70493 562.0165 240.9164 -2.177291 8.398076 0.6509769 0.04933432

Con un modelo ARIMA el modelo mejoro de sobremanera, aunque tiene un error superior al 5 porciento se podria decir que el modelo es capaz de predecir vagamente el comportamiento de la variable con respecto al tiempo.

train_petroleo %>%
  autoplot(series= "actual") +
  autolayer (petroleo_auto$fitted, series = "SARIMA auto") +
  theme_minimal()

Analisis de los cambios diferenciales en la serie de tiempo

tsdisplay(petroleo_diff)

Conclusion

Se logró obtener un modelo desarrollado capaz de predecir el comportamiento de la variable de consumo de gas per capita. Se utilizaron los métodos sARIMA O ARIMA del cual se obtuvo resultados con factibilidad y congruencia. # Codigo

xfun::embed_file("Caso de estudio 5.Rmd")

Download Caso de estudio 5.Rmd