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.