Identificación de la serie económica

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

Cargar los datos

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")

Establecer si la serie es aditiva o multiplicativa

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).

Descomponer la serie multiplicativa

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

Aplicación Holt-Winters con valores óptimos de alfa, beta y gamma

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

Pronosticar el año siguiente

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

Comparar los resultados

# 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)

Calcular el Error Cuadrado Medio

MSE <- mean(((Tabla$hw.x.13.108.-Tabla$hw.fitted.xhat)^2))
MSE
## [1] 0.06962263

El error cuadrado medio es 0.06962

Calcular la Raíz del Error Cuadrado Medio (RMSE)

sqrt(MSE)
## [1] 0.263861

La Raíz del Error Cuadrado Medio (RMSE) es 0.2638

Establecer cinco (5) conclusiones

  1. La serie de tiempo del índice de precios al consumidor 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).
  2. La prueba de descomposición de la serie permite identificar los componentes de la serie (tendencia, estacionalidad y aleatorio/residuos).
  3. El Error cuadrado Medio (MSE) es de 0.0696 y la Raíz del error cuadrado medio (RMSE) es 0.2638, los dos valores son relativamente bajos, lo que generalmente indica un buen ajuste del modelo a los datos.
  4. El buen ajuste del modelo multiplicativo de Holt - Winters sugiere que la serie en el período analizado tiene una tendencia y estacionalidad multiplicativas bien definidas.
  5. Al realizar la validación de los valores pronosticados por el modelo comparándolos con los valores reales del IPC sin alimentos del año 2023 se encuentran diferencias menores al 2% para cada uno de los meses. Esto sugiere que el modelo de Holt-Winters es muy preciso y ha capturado bien los patrones de la serie.