Series de Tiempo

0. Concepto

Una Serie de tiempo es una coleccion de observaciones sobre un determinado fenomeno efectuadas en momentos de tiempo sucesivo, usualmente equiespaciados.

Ejemplos de series de tiempo:

  1. Precio de acciones
  2. Niveles de inventario
  3. Rotacion de personal
  4. Ventas

1.Instalar paquetes

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

2.Crear serie de tiempo

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

#Paso 2. Agregar los valores anteriores a su tiempo correspondiente 
serie_de_tiepo <- ts(data = produccion, start = c(2020,1),frequency = 4)
serie_de_tiepo
##      Qtr1 Qtr2 Qtr3 Qtr4
## 2020   50   53   55   57
## 2021   55   60

3.Crear modelo ARIMA

# ARIMA: AutoRegressive Integrated Moving Average o Modelo Autorredresivo Integrado de Media movil
# ARIMA (p,d,q)
# p= orden de auto-regresion 
# d = Orden de integracion (diferenciacion)
# 1= Orden del promedio movil 
#¿Cuándo se usa?
# Cuando las estimaciones futuras se explican por los datos del pasado y no por variables independientes 
# Ejemplo: Tipo de cambio

modelo <- auto.arima(serie_de_tiepo,D=1)
modelo
## Series: serie_de_tiepo 
## 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_tiepo 
## 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

4. Realizar el pronostico

pronostico <- forecast(modelo, level = c(99), h=5)
pronostico
##         Point Forecast    Lo 99    Hi 99
## 2021 Q3             61 57.34813 64.65187
## 2021 Q4             63 59.34813 66.65187
## 2022 Q1             61 57.34813 64.65187
## 2022 Q2             66 62.34813 69.65187
## 2022 Q3             67 61.83547 72.16453
plot(pronostico)

Banco Mundial

0. Concepto

El Banco Munidal es un organizmo multinacional especializado en finanzas.
En R puede acceseder a sus indicadores a través de la libreria WDI.

#install.packages("WDI")
library(WDI)
#install.packages("wbstats")
library(wbstats)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.2     ✔ 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 serie de tiempo

#paso 1. Obtener los valores dependientes 
dep_data<- wb_data(country = "MX", indicator = "NY.GDP.MKTP.CD", start_date = 1973, end_date = 2022)

#Paso 2. Agregar los valores anteriores a su tiempo correspondiente 
serie_de_tiepo2 <- ts(data = dep_data$NY.GDP.MKTP.CD, start = c(1973),frequency = 1)
serie_de_tiepo2
## Time Series:
## Start = 1973 
## End = 2022 
## Frequency = 1 
##  [1] 5.528021e+10 7.200018e+10 8.800000e+10 8.887679e+10 8.191250e+10
##  [6] 1.026473e+11 1.345296e+11 2.055770e+11 2.638021e+11 1.846036e+11
## [11] 1.561675e+11 1.842312e+11 1.952414e+11 1.345561e+11 1.475426e+11
## [16] 1.816112e+11 2.214031e+11 2.612537e+11 3.131397e+11 3.631578e+11
## [21] 5.007334e+11 5.278106e+11 3.600725e+11 4.109730e+11 5.004160e+11
## [26] 5.264997e+11 6.002330e+11 7.079099e+11 7.567029e+11 7.721097e+11
## [31] 7.293350e+11 7.822429e+11 8.774769e+11 9.753834e+11 1.052697e+12
## [36] 1.109987e+12 9.000470e+11 1.057801e+12 1.180487e+12 1.201094e+12
## [41] 1.274444e+12 1.315356e+12 1.171870e+12 1.078493e+12 1.158912e+12
## [46] 1.222406e+12 1.269010e+12 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 Autorredresivo Integrado de Media movil
# ARIMA (p,d,q)
# p= orden de auto-regresion 
# d = Orden de integracion (diferenciacion)
# 1= Orden del promedio movil 
#¿Cuándo se usa?
# Cuando las estimaciones futuras se explican por los datos del pasado y no por variables independientes 
# Ejemplo: Tipo de cambio

modelo2 <- auto.arima(serie_de_tiepo2, seasonal = FALSE)
modelo2
## Series: serie_de_tiepo2 
## ARIMA(0,1,0) 
## 
## sigma^2 = 7.381e+21:  log likelihood = -1303.18
## AIC=2608.36   AICc=2608.44   BIC=2610.25
summary(modelo2)
## Series: serie_de_tiepo2 
## ARIMA(0,1,0) 
## 
## sigma^2 = 7.381e+21:  log likelihood = -1303.18
## AIC=2608.36   AICc=2608.44   BIC=2610.25
## 
## Training set error measures:
##                       ME        RMSE         MAE      MPE     MAPE     MASE
## Training set 27179245230 85046847387 67623045592 4.943879 14.05421 0.980016
##                     ACF1
## Training set -0.01519178

4. Realizar el pronostico

pronostico2 <- forecast(modelo2, level = c(95), h=5)
pronostico2
##      Point Forecast        Lo 95        Hi 95
## 2023   1.414187e+12 1.245806e+12 1.582568e+12
## 2024   1.414187e+12 1.176060e+12 1.652314e+12
## 2025   1.414187e+12 1.122543e+12 1.705832e+12
## 2026   1.414187e+12 1.077425e+12 1.750949e+12
## 2027   1.414187e+12 1.037676e+12 1.790699e+12
plot(pronostico2)

LS0tCnRpdGxlOiAiU2VyaWVzIGRlIHRpZW1wbyIKYXV0aG9yOiAiRW5yaXF1ZSBkZSBaYXZhbGEgLSBBMDA4MjgyODEiCmRhdGU6ICIyMDIzLTEwLTAyIgpvdXRwdXQ6IAogIGh0bWxfZG9jdW1lbnQ6CiAgICB0b2M6IFRSVUUKICAgIHRvY19mbG9hdDogVFJVRSAKICAgIGNvZGVfZG93bmxvYWQ6IFRSVUUKICAgIHRoZW1lOiAic2ltcGxleCIKICAgIGhpZ2hsaWdodDogIm1vbm9jaHJvbWUiCi0tLQoKCiMgPHNwYW4gc3R5bGU9ICJjb2xvcjpvcmFuZ2U7Ij5TZXJpZXMgZGUgVGllbXBvPC9zcGFuPgoKIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjpvcmFuZ2U7Ij4wLiBDb25jZXB0bzwvc3Bhbj4KVW5hICoqU2VyaWUgZGUgdGllbXBvKiogZXMgdW5hIGNvbGVjY2lvbiBkZSBvYnNlcnZhY2lvbmVzIHNvYnJlIHVuIGRldGVybWluYWRvIGZlbm9tZW5vIGVmZWN0dWFkYXMgZW4gbW9tZW50b3MgZGUgdGllbXBvIHN1Y2VzaXZvLCB1c3VhbG1lbnRlIGVxdWllc3BhY2lhZG9zLgoKRWplbXBsb3MgZGUgc2VyaWVzIGRlIHRpZW1wbzoKCjEuIFByZWNpbyBkZSBhY2Npb25lcyAKMi4gTml2ZWxlcyBkZSBpbnZlbnRhcmlvIAozLiBSb3RhY2lvbiBkZSBwZXJzb25hbAo0LiBWZW50YXMKCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6b3JhbmdlOyI+MS5JbnN0YWxhciBwYXF1ZXRlczwvc3Bhbj4KCmBgYHtyfQojaW5zdGFsbC5wYWNrYWdlcygiZm9yZWNhc3QiKQpsaWJyYXJ5KGZvcmVjYXN0KQoKYGBgCgoKIyMgPHNwYW4gc3R5bGU9ICJjb2xvcjpvcmFuZ2U7Ij4yLkNyZWFyIHNlcmllIGRlIHRpZW1wbzwvc3Bhbj4KCmBgYHtyfQojcGFzbyAxLiBPYnRlbmVyIGxvcyB2YWxvcmVzIGRlcGVuZGllbnRlcyAKcHJvZHVjY2lvbiA8LSBjKDUwLDUzLDU1LDU3LDU1LDYwKQoKI1Bhc28gMi4gQWdyZWdhciBsb3MgdmFsb3JlcyBhbnRlcmlvcmVzIGEgc3UgdGllbXBvIGNvcnJlc3BvbmRpZW50ZSAKc2VyaWVfZGVfdGllcG8gPC0gdHMoZGF0YSA9IHByb2R1Y2Npb24sIHN0YXJ0ID0gYygyMDIwLDEpLGZyZXF1ZW5jeSA9IDQpCnNlcmllX2RlX3RpZXBvCmBgYAoKCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6b3JhbmdlOyI+My5DcmVhciBtb2RlbG8gQVJJTUE8L3NwYW4+CmBgYHtyfQojIEFSSU1BOiBBdXRvUmVncmVzc2l2ZSBJbnRlZ3JhdGVkIE1vdmluZyBBdmVyYWdlIG8gTW9kZWxvIEF1dG9ycmVkcmVzaXZvIEludGVncmFkbyBkZSBNZWRpYSBtb3ZpbAojIEFSSU1BIChwLGQscSkKIyBwPSBvcmRlbiBkZSBhdXRvLXJlZ3Jlc2lvbiAKIyBkID0gT3JkZW4gZGUgaW50ZWdyYWNpb24gKGRpZmVyZW5jaWFjaW9uKQojIDE9IE9yZGVuIGRlbCBwcm9tZWRpbyBtb3ZpbCAKI8K/Q3XDoW5kbyBzZSB1c2E/CiMgQ3VhbmRvIGxhcyBlc3RpbWFjaW9uZXMgZnV0dXJhcyBzZSBleHBsaWNhbiBwb3IgbG9zIGRhdG9zIGRlbCBwYXNhZG8geSBubyBwb3IgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzIAojIEVqZW1wbG86IFRpcG8gZGUgY2FtYmlvCgptb2RlbG8gPC0gYXV0by5hcmltYShzZXJpZV9kZV90aWVwbyxEPTEpCm1vZGVsbwpzdW1tYXJ5KG1vZGVsbykKYGBgCgojIyA8c3BhbiBzdHlsZT0gImNvbG9yOm9yYW5nZTsiPjQuIFJlYWxpemFyIGVsIHByb25vc3RpY288L3NwYW4+CmBgYHtyfQpwcm9ub3N0aWNvIDwtIGZvcmVjYXN0KG1vZGVsbywgbGV2ZWwgPSBjKDk5KSwgaD01KQpwcm9ub3N0aWNvCnBsb3QocHJvbm9zdGljbykKYGBgCgoKIyA8c3BhbiBzdHlsZT0gImNvbG9yOm9yYW5nZTsiPkJhbmNvIE11bmRpYWw8L3NwYW4+CgojIyA8c3BhbiBzdHlsZT0gImNvbG9yOm9yYW5nZTsiPjAuIENvbmNlcHRvPC9zcGFuPgpFbCBCYW5jbyBNdW5pZGFsIGVzIHVuIG9yZ2FuaXptbyBtdWx0aW5hY2lvbmFsIGVzcGVjaWFsaXphZG8gZW4gZmluYW56YXMuICAKRW4gUiBwdWVkZSBhY2Nlc2VkZXIgYSBzdXMgaW5kaWNhZG9yZXMgYSB0cmF2w6lzIGRlIGxhIGxpYnJlcmlhIFdESS4gIAoKYGBge3J9CiNpbnN0YWxsLnBhY2thZ2VzKCJXREkiKQpsaWJyYXJ5KFdESSkKI2luc3RhbGwucGFja2FnZXMoIndic3RhdHMiKQpsaWJyYXJ5KHdic3RhdHMpCmxpYnJhcnkodGlkeXZlcnNlKQpgYGAKCgojIyA8c3BhbiBzdHlsZT0gImNvbG9yOm9yYW5nZTsiPjIuQ3JlYXIgc2VyaWUgZGUgdGllbXBvPC9zcGFuPgoKYGBge3J9CiNwYXNvIDEuIE9idGVuZXIgbG9zIHZhbG9yZXMgZGVwZW5kaWVudGVzIApkZXBfZGF0YTwtIHdiX2RhdGEoY291bnRyeSA9ICJNWCIsIGluZGljYXRvciA9ICJOWS5HRFAuTUtUUC5DRCIsIHN0YXJ0X2RhdGUgPSAxOTczLCBlbmRfZGF0ZSA9IDIwMjIpCgojUGFzbyAyLiBBZ3JlZ2FyIGxvcyB2YWxvcmVzIGFudGVyaW9yZXMgYSBzdSB0aWVtcG8gY29ycmVzcG9uZGllbnRlIApzZXJpZV9kZV90aWVwbzIgPC0gdHMoZGF0YSA9IGRlcF9kYXRhJE5ZLkdEUC5NS1RQLkNELCBzdGFydCA9IGMoMTk3MyksZnJlcXVlbmN5ID0gMSkKc2VyaWVfZGVfdGllcG8yCmBgYAoKCiMjIDxzcGFuIHN0eWxlPSAiY29sb3I6b3JhbmdlOyI+My5DcmVhciBtb2RlbG8gQVJJTUE8L3NwYW4+CmBgYHtyfQojIEFSSU1BOiBBdXRvUmVncmVzc2l2ZSBJbnRlZ3JhdGVkIE1vdmluZyBBdmVyYWdlIG8gTW9kZWxvIEF1dG9ycmVkcmVzaXZvIEludGVncmFkbyBkZSBNZWRpYSBtb3ZpbAojIEFSSU1BIChwLGQscSkKIyBwPSBvcmRlbiBkZSBhdXRvLXJlZ3Jlc2lvbiAKIyBkID0gT3JkZW4gZGUgaW50ZWdyYWNpb24gKGRpZmVyZW5jaWFjaW9uKQojIDE9IE9yZGVuIGRlbCBwcm9tZWRpbyBtb3ZpbCAKI8K/Q3XDoW5kbyBzZSB1c2E/CiMgQ3VhbmRvIGxhcyBlc3RpbWFjaW9uZXMgZnV0dXJhcyBzZSBleHBsaWNhbiBwb3IgbG9zIGRhdG9zIGRlbCBwYXNhZG8geSBubyBwb3IgdmFyaWFibGVzIGluZGVwZW5kaWVudGVzIAojIEVqZW1wbG86IFRpcG8gZGUgY2FtYmlvCgptb2RlbG8yIDwtIGF1dG8uYXJpbWEoc2VyaWVfZGVfdGllcG8yLCBzZWFzb25hbCA9IEZBTFNFKQptb2RlbG8yCnN1bW1hcnkobW9kZWxvMikKYGBgCgojIyA8c3BhbiBzdHlsZT0gImNvbG9yOm9yYW5nZTsiPjQuIFJlYWxpemFyIGVsIHByb25vc3RpY288L3NwYW4+CmBgYHtyfQpwcm9ub3N0aWNvMiA8LSBmb3JlY2FzdChtb2RlbG8yLCBsZXZlbCA9IGMoOTUpLCBoPTUpCnByb25vc3RpY28yCnBsb3QocHJvbm9zdGljbzIpCmBgYAoK