Serie temporal PIB trimestral
#carga del archivo fuente
library(dplyr)
library(tidyr)
library(forecast)
library(TSstudio)
library(readxl)
PIB_trimestral<- read_excel("C:/Users/liizm/documents/econometria/PIB trimestral.xlsx",col_names = FALSE,col_types = c("skip", "numeric"), skip = 6)
PIB_trimestral.ts <- ts(data = PIB_trimestral,
start = c(2009, 1),
frequency = 4)
PIB_trimestral.ts %>%
autoplot(main = "PIB trimestral precios corrientes SLV 2009-2021",
xlab = "Años/Trimestres",
ylab = "Indice")

library(forecast)
library(TSstudio)
Yt <-PIB_trimestral.ts
ts_plot(Yt,Xtitle = "Años/Trimestres")
Estimacion de modelo HW
library(forecast)
ModeloHW<-HoltWinters(x = Yt,
seasonal = "multiplicative",
optim.start = c(0.9,0.9,0.9))
ModeloHW
## Holt-Winters exponential smoothing with trend and multiplicative seasonal component.
##
## Call:
## HoltWinters(x = Yt, seasonal = "multiplicative", optim.start = c(0.9, 0.9, 0.9))
##
## Smoothing parameters:
## alpha: 0.8742302
## beta : 0
## gamma: 0
##
## Coefficients:
## [,1]
## a 7429.8128051
## b 48.3963750
## s1 0.9751646
## s2 1.0058150
## s3 0.9783521
## s4 1.0406683
PronosticosHW<-forecast(object = ModeloHW,h = 4,level = c(0.95))
PronosticosHW
## Point Forecast Lo 95 Hi 95
## 2022 Q1 7292.485 6847.413 7737.557
## 2022 Q2 7570.373 6930.977 8209.768
## 2022 Q3 7411.019 6646.235 8175.804
## 2022 Q4 7933.429 7119.875 8746.982
Gráfico de la serie original y del pronóstico.
PronosticosHW %>% autoplot()

Orden de integración de la serie
library(kableExtra)
library(magrittr)
d<-ndiffs(Yt)
D<-nsdiffs(Yt)
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
|
Gráfico de la serie diferenciada
Yt %>%
diff(lag = 4,diffences=D) %>%
diff(diffences=d) %>%
ts_plot(title = "Yt estacionaria")
Valores para (p,q) & (P,Q)
Yt %>%
diff(lag = 4,diffences=D) %>%
diff(diffences=d) %>%
ts_cor(lag.max = 12)
Estimación del modelo Sarima usando la líbreria forecast
library(forecast)
library(ggthemes)
modelo_estimado <- Yt %>%
Arima(order = c(0, 1, 0),
seasonal = c(1, 1, 1))
summary(modelo_estimado)
## Series: .
## ARIMA(0,1,0)(1,1,1)[4]
##
## Coefficients:
## sar1 sma1
## -0.3980 -0.4550
## s.e. 0.3732 0.3688
##
## sigma^2 = 77377: log likelihood = -331.67
## AIC=669.34 AICc=669.9 BIC=674.89
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 6.530071 258.7683 120.9372 -0.004468918 2.054645 0.3680668
## ACF1
## Training set -0.09806694
modelo_estimado %>% autoplot(type="both")+theme_solarized()

modelo_estimado %>% check_res(lag.max = 12)
Yt_Sarima<-modelo_estimado$fitted
Yt_HW<-PronosticosHW$fitted
grafico_comparativo<-cbind(Yt,Yt_Sarima,Yt_HW)
ts_plot(grafico_comparativo)
Verificación de sobre ajuste/sub ajuste
library(tsibble)
library(feasts)
library(fable)
library(fabletools)
library(tidyr)
library(dplyr)
a<-Yt %>% as_tsibble() %>%
model(arima_original=ARIMA(value ~ pdq(0, 1, 0) + PDQ(1, 1, 1)),
arima_010_011 = ARIMA(value ~ pdq(0, 1, 0) + PDQ(0, 1, 1)),
arima_010_110 = ARIMA(value ~ pdq(0, 1, 0) + PDQ(1, 1, 0)),
arima_automatico=ARIMA(value,ic="bic",stepwise = FALSE)
)
print(a)
## # A mable: 1 x 4
## arima_original arima_010_011 arima_010_110
## <model> <model> <model>
## 1 <ARIMA(0,1,0)(1,1,1)[4]> <ARIMA(0,1,0)(0,1,1)[4]> <ARIMA(0,1,0)(1,1,0)[4]>
## # ... with 1 more variable: arima_automatico <model>
a %>% pivot_longer(everything(), names_to = "Model name",
values_to = "Orders") %>% glance() %>%
arrange(AICc) ->tabla
tabla
## # A tibble: 4 x 9
## `Model name` .model sigma2 log_lik AIC AICc BIC ar_roots ma_roots
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <list> <list>
## 1 arima_010_011 Orders 75930. -332. 668. 669. 672. <cpl [0]> <cpl [4]>
## 2 arima_010_110 Orders 78594. -333. 669. 670. 673. <cpl [4]> <cpl [0]>
## 3 arima_original Orders 77377. -332. 669. 670. 675. <cpl [4]> <cpl [4]>
## 4 arima_automatico Orders 62738. -334. 676. 677. 683. <cpl [1]> <cpl [4]>
library(forecast)
library(dplyr)
library(tsibble)
library(fable)
library(fabletools)
Yt<-Yt %>% as_tsibble() %>% rename(PIB_trimestral=value)
data.cross.validation<-Yt %>%
as_tsibble() %>%
stretch_tsibble(.init = 24,.step = 1)
TSCV<-data.cross.validation %>%
model(ARIMA(PIB_trimestral ~ pdq(0, 1, 0) + PDQ(1, 1, 1))) %>%
forecast(h=1) %>% accuracy(Yt)
print(TSCV)
## # A tibble: 1 x 10
## .model .type ME RMSE MAE MPE MAPE MASE RMSSE ACF1
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 ARIMA(PIB_trimestral ~~ Test 43.4 394. 215. 0.422 3.48 0.654 0.830 0.0397
Serie temporal hidrocarburos
#carga del archivo fuente
library(dplyr)
library(tidyr)
library(forecast)
library(TSstudio)
library(readxl)
hidrocarburos<- read_excel("C:/Users/liizm/documents/econometria/hidrocarburos.xlsx",col_names = FALSE,col_types = c("skip", "numeric"), skip = 6)
hidroc.ts <- ts(data = hidrocarburos,
start = c(2017, 1),
frequency = 12)
hidroc.ts %>%
autoplot(main = "Hidrocarburos 2017 - 2022",
xlab = "Años/Meses",
ylab = "Volumen")

library(forecast)
library(TSstudio)
Yt2 <-hidroc.ts
ts_plot(Yt2,Xtitle = "Años/Meses")
Estimacion de modelo HW
library(forecast)
ModeloHW2<-HoltWinters(x = Yt2,
seasonal = "multiplicative",
optim.start = c(0.9,0.9,0.9))
ModeloHW2
## Holt-Winters exponential smoothing with trend and multiplicative seasonal component.
##
## Call:
## HoltWinters(x = Yt2, seasonal = "multiplicative", optim.start = c(0.9, 0.9, 0.9))
##
## Smoothing parameters:
## alpha: 0.1356726
## beta : 0
## gamma: 0.4908596
##
## Coefficients:
## [,1]
## a 2.550794e+05
## b 1.239453e+03
## s1 9.784035e-01
## s2 9.249193e-01
## s3 8.986508e-01
## s4 8.789500e-01
## s5 8.949436e-01
## s6 9.477674e-01
## s7 1.050046e+00
## s8 9.488853e-01
## s9 9.671890e-01
## s10 9.777809e-01
## s11 1.117223e+00
## s12 9.485809e-01
PronosticosHW2<-forecast(object = ModeloHW2,h = 12,level = c(0.95))
PronosticosHW2
## Point Forecast Lo 95 Hi 95
## May 2022 250783.2 206916.8 294649.7
## Jun 2022 238220.6 193218.1 283223.1
## Jul 2022 232568.8 186457.9 278679.7
## Aug 2022 228559.7 181384.1 275735.2
## Sep 2022 233827.9 185312.7 282343.0
## Oct 2022 248804.2 198479.1 299129.3
## Nov 2022 276955.4 223949.1 329961.7
## Dec 2022 251449.9 199109.2 303790.5
## Jan 2023 257499.0 203752.7 311245.4
## Feb 2023 261530.9 206527.5 316534.2
## Mar 2023 300212.8 240973.3 359452.3
## Apr 2023 256072.1 221085.1 291059.1
Gráfico de la serie original y del pronóstico.
PronosticosHW2 %>% autoplot()

Orden de integración de la serie
library(kableExtra)
library(magrittr)
d2<-ndiffs(Yt2)
D2<-nsdiffs(Yt2)
ordenes_integracion2<-c(d2,D2)
names(ordenes_integracion2)<-c("d2","D2")
ordenes_integracion2 %>% kable(caption = "Ordenes de Integración 2") %>% kable_material()
Ordenes de Integración 2
|
|
x
|
|
d2
|
0
|
|
D2
|
0
|
Gráfico de la serie diferenciada
Yt2 %>%
diff(lag = 12,diffences=D2) %>%
diff(diffences=d2) %>%
ts_plot(title = "Yt2 estacionaria")
Valores para (p,q) & (P,Q)
Yt2 %>%
diff(lag = 12,diffences=D2) %>%
diff(diffences=d2) %>%
ts_cor(lag.max = 64)
Estimación del modelo Arima usando la líbreria forecast
library(forecast)
library(ggthemes)
modelo_estimado2 <- Yt2 %>%
Arima(order = c(0, 1, 0),
seasonal = c(1, 1, 1))
summary(modelo_estimado2)
## Series: .
## ARIMA(0,1,0)(1,1,1)[12]
##
## Coefficients:
## sar1 sma1
## -0.2376 -0.6941
## s.e. 0.2483 0.3848
##
## sigma^2 = 1.936e+09: log likelihood = -622.57
## AIC=1251.14 AICc=1251.65 BIC=1256.94
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 1657.922 38496.49 27289.55 0.09035022 12.73477 0.6830186
## ACF1
## Training set -0.4642396
modelo_estimado2 %>% autoplot(type="both")+theme_solarized()

modelo_estimado2 %>% check_res(lag.max = 64)
Yt_Sarima2<-modelo_estimado2$fitted
Yt_HW2<-PronosticosHW2$fitted
grafico_comparativo2<-cbind(Yt2,Yt_Sarima2,Yt_HW2)
ts_plot(grafico_comparativo2)
Verificación de sobre ajuste/sub ajuste
library(tsibble)
library(feasts)
library(fable)
library(fabletools)
library(tidyr)
library(dplyr)
a2<-Yt2 %>% as_tsibble() %>%
model(arima_original=ARIMA(value ~ pdq(0, 1, 0) + PDQ(1, 1, 1)),
arima_010_011 = ARIMA(value ~ pdq(0, 1, 0) + PDQ(0, 1, 1)),
arima_010_110 = ARIMA(value ~ pdq(0, 1, 0) + PDQ(1, 1, 0)),
arima_automatico=ARIMA(value,ic="bic",stepwise = FALSE)
)
print(a2)
## # A mable: 1 x 4
## arima_original arima_010_011 arima_010_110
## <model> <model> <model>
## 1 <ARIMA(0,1,0)(1,1,1)[12]> <ARIMA(0,1,0)(0,1,1)[12]> <ARIMA(0,1,0)(1,1,0)[12]>
## # ... with 1 more variable: arima_automatico <model>
a2 %>% pivot_longer(everything(), names_to = "Model name",
values_to = "Orders") %>% glance() %>%
arrange(AICc) ->tabla2
tabla2
## # A tibble: 4 x 9
## `Model name` .model sigma2 log_lik AIC AICc BIC ar_roots ma_roots
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <list> <list>
## 1 arima_010_011 Orders 1.65e9 -623. 1250. 1250. 1254. <cpl> <cpl>
## 2 arima_original Orders 1.94e9 -623. 1251. 1252. 1257. <cpl> <cpl>
## 3 arima_010_110 Orders 2.34e9 -624. 1253. 1253. 1257. <cpl> <cpl>
## 4 arima_automatico Orders 1.10e9 -757. 1517. 1517. 1521. <cpl> <cpl>
library(forecast)
library(dplyr)
library(tsibble)
library(fable)
library(fabletools)
Yt2<-Yt2 %>% as_tsibble() %>% rename(Hidrocarburos=value)
data.cross.validation2<-Yt2 %>%
as_tsibble() %>%
stretch_tsibble(.init = 60,.step = 1)
TSCV2<-data.cross.validation2 %>%
model(ARIMA(hidrocarburos ~ pdq(0, 1, 0) + PDQ(1, 1, 1))) %>%
forecast(h=12) %>% accuracy(Yt2)
print(TSCV2)
## # A tibble: 1 x 10
## .model .type ME RMSE MAE MPE MAPE MASE RMSSE ACF1
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 ARIMA(hidrocarburos ~ ~ Test NA NA NA NA NA NA NA -0.344
Serie temporal IPC
#carga del archivo fuente
library(dplyr)
library(tidyr)
library(forecast)
library(TSstudio)
library(readxl)
ipc<- read_excel("C:/Users/liizm/documents/econometria/IPC.xlsx",col_names = FALSE,col_types = c("skip", "numeric"), skip = 6)
ipc.ts <- ts(data = ipc,
start = c(2009, 1),
frequency = 12)
ipc.ts %>%
autoplot(main = "IPC 2009 - 2022",
xlab = "Años/Meses",
ylab = "Indice")

library(forecast)
library(TSstudio)
Yt3 <-ipc.ts
ts_plot(Yt3,Xtitle = "Años/Meses")
Estimacion de modelo HW
library(forecast)
ModeloHW3<-HoltWinters(x = Yt3,
seasonal = "multiplicative",
optim.start = c(0.9,0.9,0.9))
ModeloHW3
## Holt-Winters exponential smoothing with trend and multiplicative seasonal component.
##
## Call:
## HoltWinters(x = Yt3, seasonal = "multiplicative", optim.start = c(0.9, 0.9, 0.9))
##
## Smoothing parameters:
## alpha: 0.8353873
## beta : 0.07612657
## gamma: 1
##
## Coefficients:
## [,1]
## a 122.7690242
## b 0.4801476
## s1 1.0043291
## s2 1.0021040
## s3 0.9986014
## s4 0.9975846
## s5 0.9989586
## s6 0.9984650
## s7 0.9959074
## s8 0.9975598
## s9 1.0007205
## s10 1.0041558
## s11 1.0048925
## s12 1.0053839
PronosticosHW3<-forecast(object = ModeloHW3,h = 12,level = c(0.95))
PronosticosHW3
## Point Forecast Lo 95 Hi 95
## Jun 2022 123.7827 122.6365 124.9289
## Jul 2022 123.9896 122.4499 125.5294
## Aug 2022 124.0357 122.1459 125.9256
## Sep 2022 124.3884 122.1648 126.6120
## Oct 2022 125.0394 122.4870 127.5918
## Nov 2022 125.4570 122.5842 128.3298
## Dec 2022 125.6139 122.4280 128.7997
## Jan 2023 126.3012 122.7897 129.8128
## Feb 2023 127.1819 123.3369 131.0269
## Mar 2023 128.1007 123.9171 132.2842
## Apr 2023 128.6771 124.1616 133.1927
## May 2023 129.2228 123.9338 134.5118
Gráfico de la serie original y del pronóstico.
PronosticosHW3 %>% autoplot()

Orden de integración de la serie
library(kableExtra)
library(magrittr)
d3<-ndiffs(Yt3)
D3<-nsdiffs(Yt3)
ordenes_integracion3<-c(d3,D3)
names(ordenes_integracion2)<-c("d3","D3")
ordenes_integracion3 %>% kable(caption = "Ordenes de Integración 3") %>% kable_material()
Ordenes de Integración 3
|
x
|
|
1
|
|
0
|
Gráfico de la serie diferenciada
Yt3 %>%
diff(lag = 12,diffences=D3) %>%
diff(diffences=d3) %>%
ts_plot(title = "Yt3 estacionaria")
Valores para (p,q) & (P,Q)
Yt3 %>%
diff(lag = 12,diffences=D3) %>%
diff(diffences=d3) %>%
ts_cor(lag.max = 64)
Estimación del modelo Arima usando la líbreria forecast
library(forecast)
library(ggthemes)
modelo_estimado3 <- Yt3 %>%
Arima(order = c(0, 1, 0),
seasonal = c(1, 1, 1))
summary(modelo_estimado3)
## Series: .
## ARIMA(0,1,0)(1,1,1)[12]
##
## Coefficients:
## sar1 sma1
## 0.1112 -1.0000
## s.e. 0.0950 0.1139
##
## sigma^2 = 0.2312: log likelihood = -114.66
## AIC=235.33 AICc=235.49 BIC=244.32
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.02246671 0.4579215 0.3010507 0.01772013 0.2729747 0.1631385
## ACF1
## Training set 0.2438271
modelo_estimado3 %>% autoplot(type="both")+theme_solarized()

modelo_estimado3 %>% check_res(lag.max = 64)
Yt_Sarima3<-modelo_estimado3$fitted
Yt_HW3<-PronosticosHW3$fitted
grafico_comparativo3<-cbind(Yt3,Yt_Sarima3,Yt_HW3)
ts_plot(grafico_comparativo3)
Verificación de sobre ajuste/sub ajuste
library(tsibble)
library(feasts)
library(fable)
library(fabletools)
library(tidyr)
library(dplyr)
a3<-Yt3 %>% as_tsibble() %>%
model(arima_original=ARIMA(value ~ pdq(0, 1, 0) + PDQ(1, 1, 1)),
arima_010_011 = ARIMA(value ~ pdq(0, 1, 0) + PDQ(0, 1, 1)),
arima_010_110 = ARIMA(value ~ pdq(0, 1, 0) + PDQ(1, 1, 0)),
arima_automatico=ARIMA(value,ic="bic",stepwise = FALSE)
)
print(a3)
## # A mable: 1 x 4
## arima_original arima_010_011 arima_010_110
## <model> <model> <model>
## 1 <ARIMA(0,1,0)(1,1,1)[12]> <ARIMA(0,1,0)(0,1,1)[12]> <ARIMA(0,1,0)(1,1,0)[12]>
## # ... with 1 more variable: arima_automatico <model>
a3 %>% pivot_longer(everything(), names_to = "Model name",
values_to = "Orders") %>% glance() %>%
arrange(AICc) ->tabla3
tabla3
## # A tibble: 4 x 9
## `Model name` .model sigma2 log_lik AIC AICc BIC ar_roots ma_roots
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <list> <list>
## 1 arima_automatico Orders 0.225 -105. 223. 224. 241. <cpl [27]> <cpl [0]>
## 2 arima_010_011 Orders 0.228 -115. 235. 235. 241. <cpl [0]> <cpl [12]>
## 3 arima_original Orders 0.231 -115. 235. 235. 244. <cpl [12]> <cpl [12]>
## 4 arima_010_110 Orders 0.348 -132. 268. 268. 274. <cpl [12]> <cpl [0]>
library(forecast)
library(dplyr)
library(tsibble)
library(fable)
library(fabletools)
Yt3<-Yt3 %>% as_tsibble() %>% rename(IPC=value)
data.cross.validation3<-Yt3 %>%
as_tsibble() %>%
stretch_tsibble(.init = 24,.step = 1)
TSCV3<-data.cross.validation3 %>%
model(ARIMA(ipc ~ pdq(0, 1, 0) + PDQ(1, 1, 1))) %>%
forecast(h=1) %>% accuracy(Yt3)
print(TSCV3)
## # A tibble: 1 x 10
## .model .type ME RMSE MAE MPE MAPE MASE RMSSE ACF1
## <chr> <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 ARIMA(ipc ~ pdq(0, 1, 0~ Test NA NA NA NA NA NA NA 0.922