Series de Tiempo

0. Concepto

Una serie de tiempo es una colección de observaciones sobre un determinaod fenómeno efectuadas en momentos de tiempo sucesivos, usualmente equiespaciados.

Ejemplos de series de tiempo son:

  1. Precio de acciones
  2. Niveles de inventario
  3. Rotación de personal
  4. Ventas
  5. Participación del mercado

1. Instalar paquetes y llamar librerias

#install.packages("forecast")
library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo

2. Crear la serie del tiempo

# Paso 1. Obtener los valores dependientes.
produccion <- c(50, 53, 55, 57, 55, 60)

#Paso 2. Agregar a los valores anteriores su tiempo correspondiente.
serie_de_tiempo <- ts(data=produccion, start = c(2020, 1), frequency=4)

serie_de_tiempo
##      Qtr1 Qtr2 Qtr3 Qtr4
## 2020   50   53   55   57
## 2021   55   60

3. Crear modelo ARIMA

# ARIMA: AutoRegressive Integrated Moving Average o Modelo Autorregresivo Integrado de Media Móvil

# ARIMA (p, d, q)
# p = orden de auto-regresión
# d = orden de integración (o diferenciación=)
# q = orden del promedio móvil

# ¿Cuáando se usa?
# Cuando las estimaciones futuras se explican por los datos del paado y no por variables independientes.
# Ejemplo: Tipo de Cambio

modelo <- auto.arima(serie_de_tiempo)
modelo
## Series: serie_de_tiempo 
## ARIMA(0,1,0) 
## 
## sigma^2 = 9.2:  log likelihood = -12.64
## AIC=27.29   AICc=28.62   BIC=26.89
summary(modelo)
## Series: serie_de_tiempo 
## ARIMA(0,1,0) 
## 
## sigma^2 = 9.2:  log likelihood = -12.64
## AIC=27.29   AICc=28.62   BIC=26.89
## 
## Training set error measures:
##                 ME    RMSE      MAE      MPE     MAPE      MASE       ACF1
## Training set 1.675 2.76895 2.341667 2.933747 4.145868 0.3902778 -0.5152989

4. Realizar el pronóstico

pronostico <- forecast(modelo, level= c(95), h=5)
pronostico
##         Point Forecast    Lo 95    Hi 95
## 2021 Q3             60 54.05497 65.94503
## 2021 Q4             60 51.59246 68.40754
## 2022 Q1             60 49.70291 70.29709
## 2022 Q2             60 48.10995 71.89005
## 2022 Q3             60 46.70652 73.29348
plot(pronostico)

Banco Mundial

0. Concepto

El banco mundial (WB) es un organismo multinacional especializado en finanzas. En R se puede acceder a sus indicadores a través de la librería WDI.

1. Instalar paquetes y llamar librerias

#install.packages("WDI")
library(WDI)
#install.packages("wbstats")
library(wbstats)
#install.packages("tidyverse")
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.3     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.3     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.2     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

2. Crear la serie del tiempo

# Paso 1. Obtener lso valores dependientes.
gdp_data <- wb_data(country = "Mx", indicator = "NY.GDP.MKTP.CD", start_date = 1937, end_date = 2022)

#Paso 2. Agregar a los valores anteriores su tiempo correspondiente.
serie_de_tiempo_mx <- ts(data=gdp_data$NY.GDP.MKTP.CD, start =c(1973,1),frequency=1)

serie_de_tiempo_mx
## Time Series:
## Start = 1973 
## End = 2035 
## Frequency = 1 
##  [1] 1.304000e+10 1.416000e+10 1.520000e+10 1.696000e+10 2.008000e+10
##  [6] 2.184000e+10 2.432000e+10 2.656000e+10 2.936000e+10 3.248000e+10
## [11] 3.552000e+10 3.920000e+10 4.519992e+10 5.528021e+10 7.200018e+10
## [16] 8.800000e+10 8.887679e+10 8.191250e+10 1.026473e+11 1.345296e+11
## [21] 2.055770e+11 2.638021e+11 1.846036e+11 1.561675e+11 1.842312e+11
## [26] 1.952414e+11 1.345561e+11 1.475426e+11 1.816112e+11 2.214031e+11
## [31] 2.612537e+11 3.131397e+11 3.631578e+11 5.007334e+11 5.278106e+11
## [36] 3.600725e+11 4.109730e+11 5.004160e+11 5.264997e+11 6.002330e+11
## [41] 7.079099e+11 7.567029e+11 7.721097e+11 7.293350e+11 7.822429e+11
## [46] 8.774769e+11 9.753834e+11 1.052697e+12 1.109987e+12 9.000470e+11
## [51] 1.057801e+12 1.180487e+12 1.201094e+12 1.274444e+12 1.315356e+12
## [56] 1.171870e+12 1.078493e+12 1.158912e+12 1.222406e+12 1.269010e+12
## [61] 1.090515e+12 1.272839e+12 1.414187e+12
## attr(,"label")
## [1] GDP (current US$)

3. Crear modelo ARIMA

# ARIMA: AutoRegressive Integrated Moving Average o Modelo Autorregresivo Integrado de Media Móvil

# ARIMA (p, d, q)
# p = orden de auto-regresión
# d = orden de integración (o diferenciación=)
# q = orden del promedio móvil

# ¿Cuáando se usa?
# Cuando las estimaciones futuras se explican por los datos del paado y no por variables independientes.
# Ejemplo: Tipo de Cambio

modelo_mx <- auto.arima(serie_de_tiempo, D=1)
modelo_mx 
## Series: serie_de_tiempo 
## 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)
## Series: serie_de_tiempo 
## ARIMA(0,1,0) 
## 
## sigma^2 = 9.2:  log likelihood = -12.64
## AIC=27.29   AICc=28.62   BIC=26.89
## 
## Training set error measures:
##                 ME    RMSE      MAE      MPE     MAPE      MASE       ACF1
## Training set 1.675 2.76895 2.341667 2.933747 4.145868 0.3902778 -0.5152989

4. Realizar el pronóstico

pronostico_mx <- forecast(modelo, level = c(95), h=5)
pronostico_mx
##         Point Forecast    Lo 95    Hi 95
## 2021 Q3             60 54.05497 65.94503
## 2021 Q4             60 51.59246 68.40754
## 2022 Q1             60 49.70291 70.29709
## 2022 Q2             60 48.10995 71.89005
## 2022 Q3             60 46.70652 73.29348
plot(pronostico_mx)

LS0tCnRpdGxlOiAiU2VyaWVzIGRlIFRpZW1wbyIKYXV0aG9yOiAiSmVzw7pzIFRhbWV6IC0gQTAxMTc3Njk0IgpkYXRlOiAiMjAyMy0xMC0wMiIKb3V0cHV0OgogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IFRSVUUKICAgIHRvY19mbG9hdHQ6IFRSVUUKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIHRoZWVlOiAiYm9vdHN0cmFwIgogICAgaGlnaGxpZ2h0OiAiZXNwcmVzc28iCi0tLQoKIyA8c3BhbiBzdHlsZT0iY29sb3I6IG9yYW5nZTsiPlNlcmllcyBkZSBUaWVtcG8gPC9zcGFuPgoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij4wLiBDb25jZXB0byA8L3NwYW4+ClVuYSAqKnNlcmllIGRlIHRpZW1wbyoqIGVzIHVuYSBjb2xlY2Npw7NuIGRlIG9ic2VydmFjaW9uZXMgc29icmUgdW4gZGV0ZXJtaW5hb2QgZmVuw7NtZW5vIGVmZWN0dWFkYXMgZW4gbW9tZW50b3MgZGUgdGllbXBvIHN1Y2VzaXZvcywgdXN1YWxtZW50ZSBlcXVpZXNwYWNpYWRvcy4KCkVqZW1wbG9zIGRlIHNlcmllcyBkZSB0aWVtcG8gc29uOiAKCjEuIFByZWNpbyBkZSBhY2Npb25lcwoyLiBOaXZlbGVzIGRlIGludmVudGFyaW8KMy4gUm90YWNpw7NuIGRlIHBlcnNvbmFsCjQuIFZlbnRhcwo1LiBQYXJ0aWNpcGFjacOzbiBkZWwgbWVyY2FkbwoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij4xLiBJbnN0YWxhciBwYXF1ZXRlcyB5IGxsYW1hciBsaWJyZXJpYXMgPC9zcGFuPgpgYGB7cn0KI2luc3RhbGwucGFja2FnZXMoImZvcmVjYXN0IikKbGlicmFyeShmb3JlY2FzdCkKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IG9yYW5nZTsiPjIuIENyZWFyIGxhIHNlcmllIGRlbCB0aWVtcG8gPC9zcGFuPgpgYGB7cn0KIyBQYXNvIDEuIE9idGVuZXIgbG9zIHZhbG9yZXMgZGVwZW5kaWVudGVzLgpwcm9kdWNjaW9uIDwtIGMoNTAsIDUzLCA1NSwgNTcsIDU1LCA2MCkKCiNQYXNvIDIuIEFncmVnYXIgYSBsb3MgdmFsb3JlcyBhbnRlcmlvcmVzIHN1IHRpZW1wbyBjb3JyZXNwb25kaWVudGUuCnNlcmllX2RlX3RpZW1wbyA8LSB0cyhkYXRhPXByb2R1Y2Npb24sIHN0YXJ0ID0gYygyMDIwLCAxKSwgZnJlcXVlbmN5PTQpCgpzZXJpZV9kZV90aWVtcG8KYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IG9yYW5nZTsiPjMuIENyZWFyIG1vZGVsbyBBUklNQSA8L3NwYW4+CmBgYHtyfQojIEFSSU1BOiBBdXRvUmVncmVzc2l2ZSBJbnRlZ3JhdGVkIE1vdmluZyBBdmVyYWdlIG8gTW9kZWxvIEF1dG9ycmVncmVzaXZvIEludGVncmFkbyBkZSBNZWRpYSBNw7N2aWwKCiMgQVJJTUEgKHAsIGQsIHEpCiMgcCA9IG9yZGVuIGRlIGF1dG8tcmVncmVzacOzbgojIGQgPSBvcmRlbiBkZSBpbnRlZ3JhY2nDs24gKG8gZGlmZXJlbmNpYWNpw7NuPSkKIyBxID0gb3JkZW4gZGVsIHByb21lZGlvIG3Ds3ZpbAoKIyDCv0N1w6FhbmRvIHNlIHVzYT8KIyBDdWFuZG8gbGFzIGVzdGltYWNpb25lcyBmdXR1cmFzIHNlIGV4cGxpY2FuIHBvciBsb3MgZGF0b3MgZGVsIHBhYWRvIHkgbm8gcG9yIHZhcmlhYmxlcyBpbmRlcGVuZGllbnRlcy4KIyBFamVtcGxvOiBUaXBvIGRlIENhbWJpbwoKbW9kZWxvIDwtIGF1dG8uYXJpbWEoc2VyaWVfZGVfdGllbXBvKQptb2RlbG8Kc3VtbWFyeShtb2RlbG8pCmBgYAoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij40LiBSZWFsaXphciBlbCBwcm9uw7NzdGljbyA8L3NwYW4+CmBgYHtyfQpwcm9ub3N0aWNvIDwtIGZvcmVjYXN0KG1vZGVsbywgbGV2ZWw9IGMoOTUpLCBoPTUpCnByb25vc3RpY28KcGxvdChwcm9ub3N0aWNvKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+IEJhbmNvIE11bmRpYWwgPC9zcGFuPgoKIyMgPHNwYW4gc3R5bGU9ImNvbG9yOiBvcmFuZ2U7Ij4wLiBDb25jZXB0byA8L3NwYW4+CkVsICoqYmFuY28gbXVuZGlhbCoqIChXQikgZXMgdW4gb3JnYW5pc21vIG11bHRpbmFjaW9uYWwgZXNwZWNpYWxpemFkbyBlbiBmaW5hbnphcy4gCkVuIFIgc2UgcHVlZGUgYWNjZWRlciBhIHN1cyBpbmRpY2Fkb3JlcyBhIHRyYXbDqXMgZGUgbGEgbGlicmVyw61hIFdESS4gCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IG9yYW5nZTsiPjEuIEluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcmlhcyA8L3NwYW4+CgpgYGB7cn0KI2luc3RhbGwucGFja2FnZXMoIldESSIpCmxpYnJhcnkoV0RJKQojaW5zdGFsbC5wYWNrYWdlcygid2JzdGF0cyIpCmxpYnJhcnkod2JzdGF0cykKI2luc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIpCmxpYnJhcnkodGlkeXZlcnNlKQpgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+Mi4gQ3JlYXIgbGEgc2VyaWUgZGVsIHRpZW1wbyA8L3NwYW4+CmBgYHtyfQojIFBhc28gMS4gT2J0ZW5lciBsc28gdmFsb3JlcyBkZXBlbmRpZW50ZXMuCmdkcF9kYXRhIDwtIHdiX2RhdGEoY291bnRyeSA9ICJNeCIsIGluZGljYXRvciA9ICJOWS5HRFAuTUtUUC5DRCIsIHN0YXJ0X2RhdGUgPSAxOTM3LCBlbmRfZGF0ZSA9IDIwMjIpCgojUGFzbyAyLiBBZ3JlZ2FyIGEgbG9zIHZhbG9yZXMgYW50ZXJpb3JlcyBzdSB0aWVtcG8gY29ycmVzcG9uZGllbnRlLgpzZXJpZV9kZV90aWVtcG9fbXggPC0gdHMoZGF0YT1nZHBfZGF0YSROWS5HRFAuTUtUUC5DRCwgc3RhcnQgPWMoMTk3MywxKSxmcmVxdWVuY3k9MSkKCnNlcmllX2RlX3RpZW1wb19teApgYGAKCiMjIDxzcGFuIHN0eWxlPSJjb2xvcjogb3JhbmdlOyI+My4gQ3JlYXIgbW9kZWxvIEFSSU1BIDwvc3Bhbj4KYGBge3J9CiMgQVJJTUE6IEF1dG9SZWdyZXNzaXZlIEludGVncmF0ZWQgTW92aW5nIEF2ZXJhZ2UgbyBNb2RlbG8gQXV0b3JyZWdyZXNpdm8gSW50ZWdyYWRvIGRlIE1lZGlhIE3Ds3ZpbAoKIyBBUklNQSAocCwgZCwgcSkKIyBwID0gb3JkZW4gZGUgYXV0by1yZWdyZXNpw7NuCiMgZCA9IG9yZGVuIGRlIGludGVncmFjacOzbiAobyBkaWZlcmVuY2lhY2nDs249KQojIHEgPSBvcmRlbiBkZWwgcHJvbWVkaW8gbcOzdmlsCgojIMK/Q3XDoWFuZG8gc2UgdXNhPwojIEN1YW5kbyBsYXMgZXN0aW1hY2lvbmVzIGZ1dHVyYXMgc2UgZXhwbGljYW4gcG9yIGxvcyBkYXRvcyBkZWwgcGFhZG8geSBubyBwb3IgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzLgojIEVqZW1wbG86IFRpcG8gZGUgQ2FtYmlvCgptb2RlbG9fbXggPC0gYXV0by5hcmltYShzZXJpZV9kZV90aWVtcG8sIEQ9MSkKbW9kZWxvX214IApzdW1tYXJ5KG1vZGVsbykKYGBgCgojIyA8c3BhbiBzdHlsZT0iY29sb3I6IG9yYW5nZTsiPjQuIFJlYWxpemFyIGVsIHByb27Ds3N0aWNvIDwvc3Bhbj4KYGBge3J9CnByb25vc3RpY29fbXggPC0gZm9yZWNhc3QobW9kZWxvLCBsZXZlbCA9IGMoOTUpLCBoPTUpCnByb25vc3RpY29fbXgKcGxvdChwcm9ub3N0aWNvX214KQpgYGA=