A8U1

Germám Gómez López - Jorge Alan Retamoza Flores - Erick Abraham Bernal Amparano

3/24/2022

Análisis de series de tiempo PIB per capita.

PIB per cápita (Producto Interno Bruto per cápita) Representa la cantidad de dinero que le correspondería a cada habitante del país si se repartiera a todos por igual el PIB generado en un año. Se utiliza internacionalmente para conocer y comparar el crecimiento económico de un país, ya que la calidad de vida de la población generalmente mejora cuando el PIB per cápita aumenta.

PIB

Importación.

Importación de paquetes.

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)

Importación de datos.

options(readr.show_col_types = FALSE)
pib <- read_csv("datap.csv")
anyNA(pib)
## [1] FALSE

Esto nos dice que no se tiene ningún valor faltante

Analisís de datos.

pib <- ts(pib [,4],  start = 1950, end = 2017, frequency = 2)
pib
## Time Series:
## Start = c(1950, 1) 
## End = c(2017, 1) 
## Frequency = 2 
##   [1]  2828.073  2869.721  2919.593  2968.102  3024.677  3075.035  3117.837
##   [8]  3180.887  3252.176  3271.419  3375.402  3443.783  3389.669  3433.816
##  [15]  3397.300  3353.970  3437.673  3410.001  3261.627  3469.745  3340.427
##  [22]  2982.105  2716.703  3178.147  3650.188  3979.472  4407.568  4113.308
##  [29]  4522.602  4794.858  4818.568  5008.402  5107.840  5311.281  5472.711
##  [36]  5920.555  6443.931  6951.492  7811.686  8451.798  9544.740 10014.001
##  [43] 10402.636  9945.857 10452.353 11228.951 11217.450 11941.197  9434.980
##  [50]  8153.288  4560.330  5098.907  5185.519  5480.411  4694.435  5159.384
##  [57]  5618.487  6007.547  6697.282  6197.527  6846.156  7195.126  8678.414
##  [64]  9031.526  8864.611  9740.560 10575.263 10787.376 10503.760 11225.376
##  [71] 11345.661 11589.453 11708.018 11823.618 10090.532  9060.934  7980.478
##  [78]  8055.163  8278.196  7880.678  7626.954  7126.484  7023.889  7217.167
##  [85]  7472.641  7121.588  7289.631  7458.228  8211.653  8151.637  8314.150
##  [92]  8976.724  9332.838 10519.467 11446.060 11688.284 12315.764 11063.543
##  [99] 12590.226 13181.396 13462.519 13293.017 12953.315 12077.444 12193.961
## [106] 12323.576  3696.229  3860.392  3722.593  3886.728  3806.768  3471.749
## [113]  3282.665  3333.054  2943.399  2891.840  2837.161  2723.483  2644.716
## [120]  2557.972  2706.485  2707.129  2339.076  2559.411  2349.709  2433.427
## [127]  2576.755  2319.741  2644.687  2204.787  2274.400  1972.116  2445.835
## [134]  2437.008  2494.233

La siguiente serie de tiempo muestra la inflación del PIB per cápita desde 1960 a 2017

autoplot(pib)

Descomposición de la serie de tiempo.

La descomposición de una serie de tiempo es un proceso que identifica y calcula las diversas componentes existentes en una serie temporal, así como la forma en que estas se relacionan entre sí. Se utiliza para identificar componentes, reensamblando las partes para construir un pronóstico. Con lo mencionado se realizará la descomposición para poder conocer los componentes de la serie de tiempo y como es que estos mismos se relacionan.

pib_dc <- pib %>%
decompose(type="multiplicative") %>%
autoplot()
pib_dc

Validación cruzada

La validación cruzada es una técnica para evaluar modelos de ML mediante el entrenamiento de varios modelos de ML en subconjuntos de los datos de entrada disponibles y evaluarlos con el subconjunto complementario de los datos.

test_pib <- tail(pib, 11) #20% para pruebas

train_pib <- head(pib, length(pib)-11) #80% para entrenamiento

Ajuste del modelo con Holt-Winters.

Se usará el metodo Holt-Winters para el ajuste del modelo.

pib_ses <- HoltWinters(train_pib, seasonal = "multiplicative",)
pib_ses
## Holt-Winters exponential smoothing with trend and multiplicative seasonal component.
## 
## Call:
## HoltWinters(x = train_pib, seasonal = "multiplicative")
## 
## Smoothing parameters:
##  alpha: 0.9946699
##  beta : 0
##  gamma: 1
## 
## Coefficients:
##            [,1]
## a  2559.5926237
## b    47.4755000
## s1    0.9849252
## s2    0.9999292

Forecasting

pib_forecast <- forecast(object = pib_ses, h=11)

Visualizando resultados

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

Evaluar la precisión del modelo

eval_ses <- accuracy(pib_forecast, test_pib)
eval_ses
##                      ME      RMSE      MAE        MPE      MAPE      MASE
## Training set  -49.91982 1013.2884 470.5937  -2.361405  7.948343 0.5923445
## Test set     -443.44740  510.7114 443.4474 -19.461200 19.461200 0.5581750
##                    ACF1 Theil's U
## Training set 0.08377029        NA
## Test set     0.30993098  1.933502

De acuerdo con la prueba de precision el modelo tiene un error medio de: 19.4%

Utilizando el modelo SARIMA o ARIMA

Los modelos SARIMA captan el comportamiento puramente estacional de una serie, en forma similar, como hemos visto, se realiza para la componente regular o no estacional. Una serie con influencia solamente por la componente estacional puede ser descrito por un modelo SARIMA (P,D,Q)

Empezaremos haciendo una prueba al conjunto de datos

adf.test(pib)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  pib
## Dickey-Fuller = -2.3371, Lag order = 5, p-value = 0.4362
## alternative hypothesis: stationary

Deacuerdo con el valor de P, los datos son estacionarios porque son mayores a 0.05

Analisis de ajuste

pib_diff <- pib %>%
  diff(lag=12) %>%
  diff(lag=1)

pib_diff %>%
  autoplot()

Analizando la serie de tiempo por medio de un modelo ARIMA

pib_auto <- auto.arima(y = train_pib, seasonal = T)
summary(pib_auto)
## Series: train_pib 
## ARIMA(0,1,0) 
## 
## sigma^2 = 1016635:  log likelihood = -1025.2
## AIC=2052.4   AICc=2052.43   BIC=2055.21
## 
## Training set error measures:
##                     ME     RMSE      MAE       MPE     MAPE      MASE
## Training set -2.143817 1004.209 475.2896 -1.412397 7.977964 0.5982553
##                    ACF1
## Training set 0.07855183

Mediante el modelo ARIMA se obtuvo un menor porcentaje de error, el cual fue del 7.9%.

Datos reales vs SARIMA

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

Analisis de los cambios diferenciales en la serie de tiempo

tsdisplay(pib_diff)

Conclusion

Podemos darnos cuenta el como el PIB per cápita es ajustado por los precios que se imponen a través del tiempo (Inflación) y el como es que va variando a través de los años. Esto por distintos factores como lo son: exceso de demanda, por costos, devaluación, guerras, factores sociales, etc.

Descargas

Descargar este código

xfun::embed_file("A8U1.Rmd")

Download A8U1.Rmd

Descargar datos

xfun::embed_file("datap.csv")

Download datap.csv