Pronosticos

Author

Ana laura Hernandez Meza

Pronósticos

library(fpp2)
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo 
── Attaching packages ────────────────────────────────────────────── fpp2 2.4 ──
✔ ggplot2   3.4.0     ✔ fma       2.4  
✔ forecast  8.20      ✔ expsmooth 2.3  
library(fpp3)
── Attaching packages ──────────────────────────────────────────── fpp3 0.4.0 ──
✔ tibble      3.1.8      ✔ tsibble     1.1.3 
✔ dplyr       1.0.10     ✔ tsibbledata 0.4.1 
✔ tidyr       1.2.1      ✔ feasts      0.3.0 
✔ lubridate   1.9.0      ✔ fable       0.3.2 
── Conflicts ───────────────────────────────────────────────── fpp3_conflicts ──
✖ lubridate::date()    masks base::date()
✖ dplyr::filter()      masks stats::filter()
✖ tsibble::intersect() masks base::intersect()
✖ tsibble::interval()  masks lubridate::interval()
✖ dplyr::lag()         masks stats::lag()
✖ tsibble::setdiff()   masks base::setdiff()
✖ tsibble::union()     masks base::union()

Attaching package: 'fpp3'
The following object is masked from 'package:fpp2':

    insurance
library(tidyverse)
── Attaching packages
───────────────────────────────────────
tidyverse 1.3.2 ──
✔ readr   2.1.3     ✔ stringr 1.5.0
✔ purrr   1.0.1     ✔ forcats 0.5.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ lubridate::as.difftime() masks base::as.difftime()
✖ lubridate::date()        masks base::date()
✖ dplyr::filter()          masks stats::filter()
✖ tsibble::intersect()     masks lubridate::intersect(), base::intersect()
✖ tsibble::interval()      masks lubridate::interval()
✖ dplyr::lag()             masks stats::lag()
✖ tsibble::setdiff()       masks lubridate::setdiff(), base::setdiff()
✖ tsibble::union()         masks lubridate::union(), base::union()
library(ggplot2)
library(tsibbledata)
library(tsibble)
library(forecast)
library(fma)
library(expsmooth)
library(feasts)

1. Conseguir datos históricos sobre dos series de tiempo.

PIBperC_Mexico <- global_economy %>%
  filter(Country == "Mexico") %>%
  ggplot(aes(x = Year, y = GDP/Population)) +
  geom_line(color = "pink") +
  ggtitle("GDP of Mexico")
PIBperC_Mexico

2. Seguir los pasos del flujo de trabajo de pronóstico.

PIBperC_Mexico <- global_economy %>%
  filter(Country == "Mexico") %>%
  mutate(GDPpC = GDP/Population) %>%
  select(Country, Year, GDP, GDPpC)
PIBperC_Mexico
# A tsibble: 58 x 4 [1Y]
# Key:       Country [1]
   Country  Year         GDP GDPpC
   <fct>   <dbl>       <dbl> <dbl>
 1 Mexico   1960 13040000000  342.
 2 Mexico   1961 14160000000  359.
 3 Mexico   1962 15200000000  374.
 4 Mexico   1963 16960000000  404.
 5 Mexico   1964 20080000000  464.
 6 Mexico   1965 21840000000  489.
 7 Mexico   1966 24320000000  529.
 8 Mexico   1967 26560000000  560.
 9 Mexico   1968 29360000000  600.
10 Mexico   1969 32480000000  644.
# … with 48 more rows

3. Estimar los modelos de referencia (benchmark) que consideren adecuados para su serie.

Mexico_train <- PIBperC_Mexico %>% 
  filter_index(. ~ "2005")

Mexico_fit <- Mexico_train %>% 
  model(
    Media                = MEAN(GDPpC),
    Ingenuo              = NAIVE(GDPpC),
    `Estacional` = SNAIVE(GDPpC),
    Deriva               = RW((GDPpC) ~ drift())
  )
Warning: 1 error encountered for Estacional
[1] Non-seasonal model specification provided, use RW() or provide a different lag specification.
Mexico_aug <- augment(Mexico_fit)
Mexico_aug
# A tsibble: 184 x 7 [1Y]
# Key:       Country, .model [4]
   Country .model  Year GDPpC .fitted .resid .innov
   <fct>   <chr>  <dbl> <dbl>   <dbl>  <dbl>  <dbl>
 1 Mexico  Media   1960  342.   2872. -2530. -2530.
 2 Mexico  Media   1961  359.   2872. -2512. -2512.
 3 Mexico  Media   1962  374.   2872. -2498. -2498.
 4 Mexico  Media   1963  404.   2872. -2467. -2467.
 5 Mexico  Media   1964  464.   2872. -2408. -2408.
 6 Mexico  Media   1965  489.   2872. -2382. -2382.
 7 Mexico  Media   1966  529.   2872. -2343. -2343.
 8 Mexico  Media   1967  560.   2872. -2312. -2312.
 9 Mexico  Media   1968  600.   2872. -2271. -2271.
10 Mexico  Media   1969  644.   2872. -2228. -2228.
# … with 174 more rows

4. Realicen el diagnóstico de residuales e interpreten los resultados.

residuo <- function(modelo = "Media"){
  Mexico_fit %>% 
    select(modelo) %>% 
    gg_tsresiduals() +
    ggtitle(paste("Diagnóstico de residuales para el modelo", modelo))
}

residuo("Media")
Warning: Using an external vector in selections was deprecated in tidyselect 1.1.0.
ℹ Please use `all_of()` or `any_of()` instead.
  # Was:
  data %>% select(modelo)

  # Now:
  data %>% select(all_of(modelo))

See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.

residuo("Ingenuo")
Warning: Removed 1 row containing missing values (`geom_line()`).
Warning: Removed 1 rows containing missing values (`geom_point()`).
Warning: Removed 1 rows containing non-finite values (`stat_bin()`).

residuo("Deriva")
Warning: Removed 1 row containing missing values (`geom_line()`).
Warning: Removed 1 rows containing missing values (`geom_point()`).
Warning: Removed 1 rows containing non-finite values (`stat_bin()`).

5. Ejecuten un pronóstico (ustedes deciden el horizonte de pronóstico) y definan si utilizar el método bootstrap o no y justifiquen su decisión.

Mexico_fc <- Mexico_fit %>% 
  forecast(h = "12 years")

Mexico_fc
# A fable: 48 x 5 [1Y]
# Key:     Country, .model [4]
   Country .model  Year            GDPpC .mean
   <fct>   <chr>  <dbl>           <dist> <dbl>
 1 Mexico  Media   2006 N(2872, 5737828) 2872.
 2 Mexico  Media   2007 N(2872, 5737828) 2872.
 3 Mexico  Media   2008 N(2872, 5737828) 2872.
 4 Mexico  Media   2009 N(2872, 5737828) 2872.
 5 Mexico  Media   2010 N(2872, 5737828) 2872.
 6 Mexico  Media   2011 N(2872, 5737828) 2872.
 7 Mexico  Media   2012 N(2872, 5737828) 2872.
 8 Mexico  Media   2013 N(2872, 5737828) 2872.
 9 Mexico  Media   2014 N(2872, 5737828) 2872.
10 Mexico  Media   2015 N(2872, 5737828) 2872.
# … with 38 more rows
Mexico_fc %>% 
  autoplot(Mexico_train %>% drop_na(), level = NULL)
Warning: Removed 12 rows containing missing values (`()`).

Mexico_fc %>% 
  autoplot(PIBperC_Mexico %>% drop_na(), level = NULL)
Warning: Removed 12 rows containing missing values (`()`).

accuracy(Mexico_fit)
# A tibble: 4 × 11
  Country .model     .type          ME  RMSE   MAE     MPE  MAPE    MASE   RMSSE
  <fct>   <chr>      <chr>       <dbl> <dbl> <dbl>   <dbl> <dbl>   <dbl>   <dbl>
1 Mexico  Media      Train…  -2.33e-13 2344. 1981. -140.   173.    5.03    4.12 
2 Mexico  Ingenuo    Train…   1.72e+ 2  569.  394.    5.51  13.7   1       1    
3 Mexico  Estacional Train… NaN         NaN   NaN   NaN    NaN   NaN     NaN    
4 Mexico  Deriva     Train…  -6.82e-14  542.  358.   -8.10  17.1   0.908   0.953
# … with 1 more variable: ACF1 <dbl>
Mexico_fc %>% 
  accuracy(PIBperC_Mexico)
# A tibble: 4 × 11
  .model     Country .type    ME  RMSE   MAE     MPE   MAPE   MASE  RMSSE   ACF1
  <chr>      <fct>   <chr> <dbl> <dbl> <dbl>   <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
1 Deriva     Mexico  Test   153.  940.  866.   0.987   9.37   2.20   1.65  0.423
2 Estacional Mexico  Test   NaN   NaN   NaN  NaN     NaN    NaN    NaN    NA    
3 Ingenuo    Mexico  Test  1272. 1491. 1322.  13.0    13.6    3.36   2.62  0.316
4 Media      Mexico  Test  6490. 6536. 6490.  69.1    69.1   16.5   11.5   0.316

Sí se utiliza DERIVA

Mexico_fc %>%
  filter(.model == "Deriva") %>%
  autoplot(Mexico_train %>% drop_na()) + ggtitle("Pronóstico Deriva")

Mexico_fc %>%
  filter(.model == "Deriva") %>%
  autoplot(PIBperC_Mexico %>% drop_na()) + ggtitle("Pronóstico Deriva")

Aplicando Bootstraping

fit <- Mexico_train %>%
  model(RW((GDPpC) ~ drift()))
fc <- fit %>% forecast(h = "12 years", bootstrap = TRUE)
fc
# A fable: 12 x 5 [1Y]
# Key:     Country, .model [1]
   Country .model                 Year           GDPpC  .mean
   <fct>   <chr>                 <dbl>          <dist>  <dbl>
 1 Mexico  RW((GDPpC) ~ drift())  2006 t(sample[5000])  8327.
 2 Mexico  RW((GDPpC) ~ drift())  2007 t(sample[5000])  8564.
 3 Mexico  RW((GDPpC) ~ drift())  2008 t(sample[5000])  8792.
 4 Mexico  RW((GDPpC) ~ drift())  2009 t(sample[5000])  9008.
 5 Mexico  RW((GDPpC) ~ drift())  2010 t(sample[5000])  9219.
 6 Mexico  RW((GDPpC) ~ drift())  2011 t(sample[5000])  9440.
 7 Mexico  RW((GDPpC) ~ drift())  2012 t(sample[5000])  9648.
 8 Mexico  RW((GDPpC) ~ drift())  2013 t(sample[5000])  9861.
 9 Mexico  RW((GDPpC) ~ drift())  2014 t(sample[5000]) 10094.
10 Mexico  RW((GDPpC) ~ drift())  2015 t(sample[5000]) 10313.
11 Mexico  RW((GDPpC) ~ drift())  2016 t(sample[5000]) 10523.
12 Mexico  RW((GDPpC) ~ drift())  2017 t(sample[5000]) 10746.
fc %>% autoplot(Mexico_train) 

fc %>% autoplot(PIBperC_Mexico) 

El pronóstico con el método deriva sí se asemejó a la realidad. Utilizamos el método deriva con bootstrap para trazar el pronóstico a 2030.

fit <- PIBperC_Mexico %>%
  model(RW((GDPpC) ~ drift()))
fc <- fit %>% forecast(h = "10 years", bootstrap = TRUE)
fc
# A fable: 10 x 5 [1Y]
# Key:     Country, .model [1]
   Country .model                 Year           GDPpC  .mean
   <fct>   <chr>                 <dbl>          <dist>  <dbl>
 1 Mexico  RW((GDPpC) ~ drift())  2018 t(sample[5000])  9314.
 2 Mexico  RW((GDPpC) ~ drift())  2019 t(sample[5000])  9703.
 3 Mexico  RW((GDPpC) ~ drift())  2020 t(sample[5000]) 10083.
 4 Mexico  RW((GDPpC) ~ drift())  2021 t(sample[5000]) 10485.
 5 Mexico  RW((GDPpC) ~ drift())  2022 t(sample[5000]) 10884.
 6 Mexico  RW((GDPpC) ~ drift())  2023 t(sample[5000]) 11257.
 7 Mexico  RW((GDPpC) ~ drift())  2024 t(sample[5000]) 11660.
 8 Mexico  RW((GDPpC) ~ drift())  2025 t(sample[5000]) 12058.
 9 Mexico  RW((GDPpC) ~ drift())  2026 t(sample[5000]) 12447.
10 Mexico  RW((GDPpC) ~ drift())  2027 t(sample[5000]) 12847.
fc %>% autoplot(PIBperC_Mexico)

Comparación de resultados de 2030