Serie de tiempo seleccionada: Índice de Precios al Consumidor - IPC. índice y variación mensual, año corrido y anual del IPC sin alimentos (Enero de 2014 a Diciembre de 2023)
Periodo para entrenamiento del modelo (Train): 2014-2022
Periodo para prueba del modelo (test): 2023
Fuente: Departamento Nacional de Estadísticas - DANE
library(readxl)
datos <- read_excel("Taller2_Yesenia_Castro_Cely.xlsx", sheet = "train")
x <- datos
x <- ts(x, start = c(2014,1), end = c(2022,12), frequency=12)
x
## Jan Feb Mar Apr May Jun Jul
## 2014 80.89064 81.44025 81.69391 81.98985 82.16601 82.34921 82.40558
## 2015 83.47661 84.22351 84.51945 84.80834 85.21702 85.41432 85.68912
## 2016 88.10598 89.17700 89.76184 89.90981 90.38895 90.81172 91.05130
## 2017 92.73534 93.78523 94.36302 94.94786 95.22266 95.46223 95.41291
## 2018 97.01240 97.91432 98.18912 98.56257 98.88670 99.09808 99.14741
## 2019 100.46000 101.10000 101.44000 101.84000 102.10000 102.27000 102.41000
## 2020 103.82000 104.47000 104.75000 104.55000 104.14000 103.70000 103.86000
## 2021 104.74000 105.45000 105.86000 106.18000 106.34000 106.50000 106.83000
## 2022 109.43000 110.83000 111.47000 112.48000 113.25000 113.78000 114.61000
## Aug Sep Oct Nov Dec
## 2014 82.53241 82.63106 82.82835 82.96223 83.22999
## 2015 85.99915 86.41488 86.76015 87.15474 87.52818
## 2016 91.24154 91.53044 91.65727 91.78410 92.02368
## 2017 95.63134 95.84977 95.96956 96.18799 96.63191
## 2018 99.29538 99.40812 99.59837 99.74634 100.00000
## 2019 102.54000 102.73000 102.87000 103.09000 103.45000
## 2020 103.94000 104.34000 104.33000 104.13000 104.52000
## 2021 107.17000 107.50000 107.32000 107.64000 108.12000
## 2022 115.56000 116.45000 117.14000 117.84000 118.92000
class(x)
## [1] "ts"
plot(x,
main = "Serie de tiempo",
xlab = "Años",
ylab = "IPC sin alimentos",
type = "l",
col="blue")
cv_d1 <- abs(sd(x[13:108]-x[1:96]) /
mean(x[13:108]-x[1:96]))
cv_d1
## [1] 0.4707364
cv_c1 <- abs(sd(x[13:108]/x[1:96]) /
mean(x[13:108]/x[1:96]))
cv_c1
## [1] 0.01773113
cbind(cv_d1,cv_c1)
## cv_d1 cv_c1
## [1,] 0.4707364 0.01773113
if(cv_d1 < cv_c1) {
"se elige el esquema aditivo"
} else {
"se elige el esquema multiplicativo"
}
## [1] "se elige el esquema multiplicativo"
Respuesta: La serie de tiempo del IPC sin alimentos es “multiplicativa”, dado que los cocientes de variación de las diferencias (cv_d) son mayores que los cocientes de variación de los cocientes estacionales (cv_c).
IPC_SA.descompuesto<-decompose(x, type="multiplicative")
plot(IPC_SA.descompuesto)
a <- IPC_SA.descompuesto$trend[10]
b <- IPC_SA.descompuesto$seasonal[10]
c <- IPC_SA.descompuesto$random[10]
a*b*c
## [1] 82.82835
hw<- HoltWinters(x, seasonal = "multiplicative")
plot(hw)
Alfa <- hw$alpha
Alfa
## alpha
## 0.939714
Beta <- hw$beta
Beta
## beta
## 0.2788751
Gamma <- hw$gamma
Gamma
## gamma
## 1
hw$fitted
## xhat level trend season
## Jan 2015 82.00301 81.98553 0.274846847 0.9968713
## Feb 2015 84.51636 83.64948 0.662233762 1.0024272
## Mar 2015 84.82164 84.03718 0.585673861 1.0023491
## Apr 2015 85.01243 84.33955 0.506665112 1.0019590
## May 2015 85.34478 84.65481 0.453286826 1.0027810
## Jun 2015 85.48855 84.98837 0.419900110 1.0009399
## Jul 2015 85.86618 85.33858 0.400464802 1.0014828
## Aug 2015 85.95344 85.57291 0.354133366 1.0003073
## Sep 2015 86.22187 85.96998 0.366108570 0.9986770
## Oct 2015 86.78035 86.51771 0.416756065 0.9982272
## Nov 2015 87.05666 86.91545 0.411452776 0.9969054
## Dec 2015 87.59940 87.41935 0.437235085 0.9970727
## Jan 2016 88.02568 87.78946 0.418516469 0.9979333
## Feb 2016 88.91990 88.28359 0.439601745 1.0022171
## Mar 2016 89.66193 88.96426 0.506829328 1.0021331
## Apr 2016 90.26113 89.56477 0.532955011 1.0018137
## May 2016 90.45193 89.76818 0.441052930 1.0026904
## Jun 2016 90.65519 90.15021 0.424593806 1.0008875
## Jul 2016 91.31119 90.72177 0.465580061 1.0013580
## Aug 2016 91.37202 90.94346 0.397564032 1.0003393
## Sep 2016 91.47300 91.21846 0.363383676 0.9988115
## Oct 2016 91.84993 91.63588 0.378454538 0.9982132
## Nov 2016 91.88188 91.83297 0.327875787 0.9969731
## Dec 2016 92.09595 92.06869 0.302174216 0.9970238
## Jan 2017 92.39965 92.30274 0.283177856 0.9979882
## Feb 2017 93.49639 92.90201 0.371327448 1.0023914
## Mar 2017 94.19777 93.54412 0.446842161 1.0022003
## Apr 2017 94.78527 94.14591 0.490052883 1.0015777
## May 2017 95.57353 94.78850 0.532593089 1.0026483
## Jun 2017 95.52776 94.99225 0.440885481 1.0009915
## Jul 2017 95.90894 95.37162 0.423730935 1.0011858
## Aug 2017 95.64787 95.32977 0.293892994 1.0002531
## Sep 2017 95.78736 95.60814 0.289563027 0.9988493
## Oct 2017 96.07819 95.95643 0.305939488 0.9980867
## Nov 2017 96.13942 96.16009 0.277416435 0.9969090
## Dec 2017 96.48089 96.48329 0.290185531 0.9969766
## Jan 2018 97.07124 96.91582 0.329879931 0.9982060
## Feb 2018 97.75606 97.19031 0.314433642 1.0025775
## Mar 2018 98.23490 97.65308 0.355800483 1.0023061
## Apr 2018 98.47506 97.96596 0.343831808 1.0016812
## May 2018 98.99816 98.39188 0.366725533 1.0024256
## Jun 2018 99.08576 98.65412 0.337586803 1.0009501
## Jul 2018 99.43073 99.00328 0.340813339 1.0008721
## Aug 2018 99.36882 99.07808 0.266630369 1.0002427
## Sep 2018 99.41249 99.27571 0.247388008 0.9988885
## Oct 2018 99.56756 99.51899 0.246241918 0.9980186
## Nov 2018 99.74236 99.79424 0.254329715 0.9969394
## Dec 2018 100.01385 100.05232 0.255376091 0.9970706
## Jan 2019 100.36233 100.29464 0.251736337 0.9981695
## Feb 2019 101.18568 100.63833 0.277378958 1.0026752
## Mar 2019 101.32067 100.83541 0.254985605 1.0022780
## Apr 2019 101.66452 101.20227 0.286185268 1.0017348
## May 2019 102.22560 101.65308 0.332093416 1.0023575
## Jun 2019 102.26451 101.86742 0.299256509 1.0009576
## Jul 2019 102.54422 102.17183 0.300693258 1.0006997
## Aug 2019 102.63235 102.34648 0.265543426 1.0001981
## Sep 2019 102.65211 102.52526 0.241346894 0.9988859
## Oct 2019 102.89930 102.83988 0.261780774 0.9980372
## Nov 2019 103.01216 103.07408 0.254087721 0.9969418
## Dec 2019 103.37150 103.40153 0.274548725 0.9970622
## Jan 2020 103.86088 103.75006 0.295180107 0.9982280
## Feb 2020 104.56487 104.00676 0.284449104 1.0026240
## Mar 2020 104.70733 104.20229 0.259652266 1.0023490
## Apr 2020 104.96542 104.50195 0.270807859 1.0018388
## May 2020 104.78393 104.38310 0.162142363 1.0022831
## Jun 2020 104.03515 103.94151 -0.006224481 1.0009608
## Jul 2020 103.59092 103.62064 -0.093969551 1.0006206
## Aug 2020 103.77079 103.77937 -0.023498375 1.0001438
## Sep 2020 103.82465 103.91486 0.020839154 0.9989315
## Oct 2020 104.36949 104.42050 0.156038203 0.9980201
## Nov 2020 104.36963 104.53936 0.145669057 0.9969872
## Dec 2020 104.23950 104.45917 0.082682126 0.9971078
## Jan 2021 104.77413 104.80621 0.156405208 0.9982043
## Feb 2021 105.34788 104.93048 0.147444299 1.0025691
## Mar 2021 105.59784 105.17364 0.174137967 1.0023737
## Apr 2021 106.00545 105.59355 0.242677854 1.0015989
## May 2021 106.49131 105.99999 0.288346807 1.0019097
## Jun 2021 106.47667 106.14642 0.248768669 1.0007658
## Jul 2021 106.75485 106.41709 0.254878241 1.0007769
## Aug 2021 107.04299 106.74254 0.274557246 1.0002419
## Sep 2021 107.36143 107.13642 0.307834743 0.9992291
## Oct 2021 107.70263 107.57458 0.344177710 0.9979973
## Nov 2021 107.46247 107.55847 0.243703044 0.9968489
## Dec 2021 107.96426 107.96952 0.290373085 0.9972692
## Jan 2022 108.54056 108.40665 0.331298486 0.9981847
## Feb 2022 110.42951 109.57529 0.564812314 1.0026276
## Mar 2022 111.46551 110.51546 0.669490892 1.0025233
## Apr 2022 112.04979 111.18916 0.670664886 1.0016982
## May 2022 113.25280 112.26342 0.783216725 1.0018237
## Jun 2022 113.91517 113.04401 0.782483674 1.0007791
## Jul 2022 114.54043 113.69957 0.747088451 1.0008194
## Aug 2022 115.31341 114.51198 0.765304613 1.0003134
## Sep 2022 116.25819 115.50893 0.829906150 0.9993067
## Oct 2022 117.13913 116.51922 0.880208410 0.9977829
## Nov 2022 117.91968 117.40024 0.880435616 0.9969480
## Dec 2022 118.75023 118.20557 0.859490515 0.9973558
hw$seasonal
## [1] "multiplicative"
Tabla <- data.frame(cbind(hw$x[13:108], hw$fitted))
Tabla
## hw.x.13.108. hw.fitted.xhat hw.fitted.level hw.fitted.trend hw.fitted.season
## 1 83.47661 82.00301 81.98553 0.274846847 0.9968713
## 2 84.22351 84.51636 83.64948 0.662233762 1.0024272
## 3 84.51945 84.82164 84.03718 0.585673861 1.0023491
## 4 84.80834 85.01243 84.33955 0.506665112 1.0019590
## 5 85.21702 85.34478 84.65481 0.453286826 1.0027810
## 6 85.41432 85.48855 84.98837 0.419900110 1.0009399
## 7 85.68912 85.86618 85.33858 0.400464802 1.0014828
## 8 85.99915 85.95344 85.57291 0.354133366 1.0003073
## 9 86.41488 86.22187 85.96998 0.366108570 0.9986770
## 10 86.76015 86.78035 86.51771 0.416756065 0.9982272
## 11 87.15474 87.05666 86.91545 0.411452776 0.9969054
## 12 87.52818 87.59940 87.41935 0.437235085 0.9970727
## 13 88.10598 88.02568 87.78946 0.418516469 0.9979333
## 14 89.17700 88.91990 88.28359 0.439601745 1.0022171
## 15 89.76184 89.66193 88.96426 0.506829328 1.0021331
## 16 89.90981 90.26113 89.56477 0.532955011 1.0018137
## 17 90.38895 90.45193 89.76818 0.441052930 1.0026904
## 18 90.81172 90.65519 90.15021 0.424593806 1.0008875
## 19 91.05130 91.31119 90.72177 0.465580061 1.0013580
## 20 91.24154 91.37202 90.94346 0.397564032 1.0003393
## 21 91.53044 91.47300 91.21846 0.363383676 0.9988115
## 22 91.65727 91.84993 91.63588 0.378454538 0.9982132
## 23 91.78410 91.88188 91.83297 0.327875787 0.9969731
## 24 92.02368 92.09595 92.06869 0.302174216 0.9970238
## 25 92.73534 92.39965 92.30274 0.283177856 0.9979882
## 26 93.78523 93.49639 92.90201 0.371327448 1.0023914
## 27 94.36302 94.19777 93.54412 0.446842161 1.0022003
## 28 94.94786 94.78527 94.14591 0.490052883 1.0015777
## 29 95.22266 95.57353 94.78850 0.532593089 1.0026483
## 30 95.46223 95.52776 94.99225 0.440885481 1.0009915
## 31 95.41291 95.90894 95.37162 0.423730935 1.0011858
## 32 95.63134 95.64787 95.32977 0.293892994 1.0002531
## 33 95.84977 95.78736 95.60814 0.289563027 0.9988493
## 34 95.96956 96.07819 95.95643 0.305939488 0.9980867
## 35 96.18799 96.13942 96.16009 0.277416435 0.9969090
## 36 96.63191 96.48089 96.48329 0.290185531 0.9969766
## 37 97.01240 97.07124 96.91582 0.329879931 0.9982060
## 38 97.91432 97.75606 97.19031 0.314433642 1.0025775
## 39 98.18912 98.23490 97.65308 0.355800483 1.0023061
## 40 98.56257 98.47506 97.96596 0.343831808 1.0016812
## 41 98.88670 98.99816 98.39188 0.366725533 1.0024256
## 42 99.09808 99.08576 98.65412 0.337586803 1.0009501
## 43 99.14741 99.43073 99.00328 0.340813339 1.0008721
## 44 99.29538 99.36882 99.07808 0.266630369 1.0002427
## 45 99.40812 99.41249 99.27571 0.247388008 0.9988885
## 46 99.59837 99.56756 99.51899 0.246241918 0.9980186
## 47 99.74634 99.74236 99.79424 0.254329715 0.9969394
## 48 100.00000 100.01385 100.05232 0.255376091 0.9970706
## 49 100.46000 100.36233 100.29464 0.251736337 0.9981695
## 50 101.10000 101.18568 100.63833 0.277378958 1.0026752
## 51 101.44000 101.32067 100.83541 0.254985605 1.0022780
## 52 101.84000 101.66452 101.20227 0.286185268 1.0017348
## 53 102.10000 102.22560 101.65308 0.332093416 1.0023575
## 54 102.27000 102.26451 101.86742 0.299256509 1.0009576
## 55 102.41000 102.54422 102.17183 0.300693258 1.0006997
## 56 102.54000 102.63235 102.34648 0.265543426 1.0001981
## 57 102.73000 102.65211 102.52526 0.241346894 0.9988859
## 58 102.87000 102.89930 102.83988 0.261780774 0.9980372
## 59 103.09000 103.01216 103.07408 0.254087721 0.9969418
## 60 103.45000 103.37150 103.40153 0.274548725 0.9970622
## 61 103.82000 103.86088 103.75006 0.295180107 0.9982280
## 62 104.47000 104.56487 104.00676 0.284449104 1.0026240
## 63 104.75000 104.70733 104.20229 0.259652266 1.0023490
## 64 104.55000 104.96542 104.50195 0.270807859 1.0018388
## 65 104.14000 104.78393 104.38310 0.162142363 1.0022831
## 66 103.70000 104.03515 103.94151 -0.006224481 1.0009608
## 67 103.86000 103.59092 103.62064 -0.093969551 1.0006206
## 68 103.94000 103.77079 103.77937 -0.023498375 1.0001438
## 69 104.34000 103.82465 103.91486 0.020839154 0.9989315
## 70 104.33000 104.36949 104.42050 0.156038203 0.9980201
## 71 104.13000 104.36963 104.53936 0.145669057 0.9969872
## 72 104.52000 104.23950 104.45917 0.082682126 0.9971078
## 73 104.74000 104.77413 104.80621 0.156405208 0.9982043
## 74 105.45000 105.34788 104.93048 0.147444299 1.0025691
## 75 105.86000 105.59784 105.17364 0.174137967 1.0023737
## 76 106.18000 106.00545 105.59355 0.242677854 1.0015989
## 77 106.34000 106.49131 105.99999 0.288346807 1.0019097
## 78 106.50000 106.47667 106.14642 0.248768669 1.0007658
## 79 106.83000 106.75485 106.41709 0.254878241 1.0007769
## 80 107.17000 107.04299 106.74254 0.274557246 1.0002419
## 81 107.50000 107.36143 107.13642 0.307834743 0.9992291
## 82 107.32000 107.70263 107.57458 0.344177710 0.9979973
## 83 107.64000 107.46247 107.55847 0.243703044 0.9968489
## 84 108.12000 107.96426 107.96952 0.290373085 0.9972692
## 85 109.43000 108.54056 108.40665 0.331298486 0.9981847
## 86 110.83000 110.42951 109.57529 0.564812314 1.0026276
## 87 111.47000 111.46551 110.51546 0.669490892 1.0025233
## 88 112.48000 112.04979 111.18916 0.670664886 1.0016982
## 89 113.25000 113.25280 112.26342 0.783216725 1.0018237
## 90 113.78000 113.91517 113.04401 0.782483674 1.0007791
## 91 114.61000 114.54043 113.69957 0.747088451 1.0008194
## 92 115.56000 115.31341 114.51198 0.765304613 1.0003134
## 93 116.45000 116.25819 115.50893 0.829906150 0.9993067
## 94 117.14000 117.13913 116.51922 0.880208410 0.9977829
## 95 117.84000 117.91968 117.40024 0.880435616 0.9969480
## 96 118.92000 118.75023 118.20557 0.859490515 0.9973558
forecast <- predict(hw, n.ahead = 12, prediction.interval = T, level = 0.95)
plot(hw, forecast)
forecast
## fit upr lwr
## Jan 2023 119.9698 120.4874 119.4523
## Feb 2023 121.3777 122.1888 120.5665
## Mar 2023 122.2453 123.3557 121.1349
## Apr 2023 123.0784 124.5033 121.6535
## May 2023 123.9710 125.7287 122.2134
## Jun 2023 124.7378 126.8443 122.6313
## Jul 2023 125.6612 128.1366 123.1858
## Aug 2023 126.5137 129.3739 123.6535
## Sep 2023 127.2863 130.5459 124.0267
## Oct 2023 127.9817 131.6541 124.3093
## Nov 2023 128.7706 132.8734 124.6678
## Dec 2023 129.7414 134.3020 125.1809
# Cargar los datos del año 10 de la serie
datos <- read_excel("Taller2_Yesenia_Castro_Cely.xlsx", sheet = "test")
x_test <- datos
ipc_real <- ts(x_test, start = c(1,1), end = c(1,12), frequency=12)
ipc_real
## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov
## 1 120.84 122.86 124.20 125.43 126.37 127.00 127.73 128.49 129.12 129.45 130.35
## Dec
## 1 131.21
# Crear tabla con pronósticos
predicion <- data.frame(forecast)
# Crear tabla comparativa
prueba <- data.frame(cbind(ipc_real, predicion$fit))
prueba
## ipc_real predicion.fit
## 1 120.84 119.9698
## 2 122.86 121.3777
## 3 124.20 122.2453
## 4 125.43 123.0784
## 5 126.37 123.9710
## 6 127.00 124.7378
## 7 127.73 125.6612
## 8 128.49 126.5137
## 9 129.12 127.2863
## 10 129.45 127.9817
## 11 130.35 128.7706
## 12 131.21 129.7414
# Calcular la diferencia entre valor real y valor pronosticado
prueba["diferencia"]<-(prueba$ipc_real - prueba$predicion.fit)
prueba["diferencia porcentual"]<-(prueba$diferencia / prueba$ipc_real)
prueba
## ipc_real predicion.fit diferencia diferencia porcentual
## 1 120.84 119.9698 0.8701633 0.007200954
## 2 122.86 121.3777 1.4823077 0.012065015
## 3 124.20 122.2453 1.9546959 0.015738293
## 4 125.43 123.0784 2.3515934 0.018748253
## 5 126.37 123.9710 2.3989885 0.018983845
## 6 127.00 124.7378 2.2622057 0.017812643
## 7 127.73 125.6612 2.0688089 0.016196734
## 8 128.49 126.5137 1.9762754 0.015380772
## 9 129.12 127.2863 1.8337387 0.014201818
## 10 129.45 127.9817 1.4683072 0.011342659
## 11 130.35 128.7706 1.5793610 0.012116310
## 12 131.21 129.7414 1.4685596 0.011192437
plot(prueba$ipc_real,
main = "Serie de tiempo - 2023",
xlab = "Meses",
ylab = "IPC sin alimentos",
xlim = c(1,12),
type = "l",
col="blue")
lines(prueba$predicion.fit, col=("red"))
axis(1, at = 1:12, labels = 1:12)
legend("topleft",
legend = c("IPC real", "Predicción"),
col = c("blue", "red"),
lty = 1,
cex = 0.8)
MSE <- mean(((Tabla$hw.x.13.108.-Tabla$hw.fitted.xhat)^2))
MSE
## [1] 0.06962263
El error cuadrado medio es 0.06962
sqrt(MSE)
## [1] 0.263861
La Raíz del Error Cuadrado Medio (RMSE) es 0.2638