Ejemplo de Pronóstico con modelos SARIMA

Importación de datos

library(readxl)
PIB_trim <- read_excel("E:/Clases UES/Econometria/2024/SARIMA_HW/PIB_trim.xlsx", 
    sheet = "Table", col_types = c("skip", 
        "numeric"), skip = 5)
names(PIB_trim)<-c("PIB_trim")

convertir en objeto de Serie Temporal (ts)

PIB_trim.ts<-ts(data = PIB_trim$PIB_trim,start = c(2009,1),frequency = 4) |> print()
##         Qtr1    Qtr2    Qtr3    Qtr4
## 2009 4227.33 4436.39 4312.85 4625.05
## 2010 4375.00 4579.71 4498.45 4994.77
## 2011 4727.87 5163.09 5032.40 5360.43
## 2012 5176.52 5401.29 5225.97 5582.38
## 2013 5208.33 5550.62 5428.02 5803.99
## 2014 5434.08 5701.62 5589.75 5868.02
## 2015 5617.57 5870.22 5828.24 6122.21
## 2016 5695.11 6181.81 5962.28 6352.22
## 2017 5934.20 6271.01 6150.91 6623.07
## 2018 6159.12 6529.22 6480.41 6852.10
## 2019 6401.11 6713.27 6691.85 7074.90
## 2020 6462.10 5378.00 6118.58 6962.52
## 2021 6736.65 7203.03 7236.93 7866.54

1. Cálculo automático del modelo ARIMA

library(forecast)
library(TSstudio)
PIB_trim.arima.automatico<-auto.arima(y = PIB_trim.ts)
summary(PIB_trim.arima.automatico)
## Series: PIB_trim.ts 
## ARIMA(1,0,0)(2,1,0)[4] with drift 
## 
## Coefficients:
##          ar1     sar1     sar2    drift
##       0.5874  -0.8878  -0.3696  53.5077
## s.e.  0.1216   0.1435   0.2155   9.6501
## 
## sigma^2 = 62491:  log likelihood = -332.83
## AIC=675.66   AICc=677.09   BIC=685.02
## 
## Training set error measures:
##                    ME     RMSE      MAE        MPE     MAPE      MASE
## Training set 1.201582 229.9509 105.3609 -0.0516886 1.814615 0.3266292
##                    ACF1
## Training set 0.04733266

1.1. Pronóstico usando el modelo automático

library(forecast)

#Tabla

pronostico.arima.automatico<-forecast(object = PIB_trim.arima.automatico,h = 4,level = c(.95)) |> print()
##         Point Forecast    Lo 95    Hi 95
## 2022 Q1       7190.474 6700.516 7680.431
## 2022 Q2       6698.563 6130.341 7266.786
## 2022 Q3       7020.812 6427.981 7613.642
## 2022 Q4       7636.634 7035.547 8237.721
#Gráfica

PIB_trim.arima.automatico |> forecast(h = 4,level = c(.95)) |> autoplot()

2. Cálculo “manual” del modelo

Calcular las Diferencias:

library(kableExtra)
d<-ndiffs(PIB_trim.ts)
D<-nsdiffs(PIB_trim.ts)
ordenes_integracion<-c(d,D)
names(ordenes_integracion)<-c("d","D")
ordenes_integracion %>% kable(caption = "Ordenes de Integración")  |>  kable_material()
Ordenes de Integración
x
d 1
D 1
library(TSstudio)
PIB_trim.ts_diff<-PIB_trim.ts |>  
  diff(lag = 4,diffences=D) |> 
  diff(diffences=d)
PIB_trim.ts_diff |> 
  ts_cor(lag.max = 3*4)

Lectura del Correlograma:

Parte regular p=0, q=0 Parte estacional P=2,Q=0

library(forecast)
PIB_trim.arima.manual<-Arima(y = PIB_trim.ts,order = c(0,1,0), seasonal = c(2,1,0)) |> print()
## Series: PIB_trim.ts 
## ARIMA(0,1,0)(2,1,0)[4] 
## 
## Coefficients:
##          sar1     sar2
##       -0.8752  -0.3604
## s.e.   0.1439   0.2166
## 
## sigma^2 = 75962:  log likelihood = -331.39
## AIC=668.77   AICc=669.33   BIC=674.32

2.1. Pronóstico usando el modelo manual

library(forecast)

#Tabla

pronostico.arima.manual<-forecast(object = PIB_trim.arima.manual,h = 4,level = c(0.95)) |> print()
##         Point Forecast    Lo 95    Hi 95
## 2022 Q1       7360.342 6820.153 7900.532
## 2022 Q2       6972.921 6208.978 7736.865
## 2022 Q3       7350.701 6415.065 8286.337
## 2022 Q4       8001.800 6921.421 9082.180
#Gráfica

PIB_trim.arima.manual |> forecast(h = 4,level = c(.95)) |> autoplot()