AnÔlisis y pronóstico de series de tiempo con R

Introducción

En este documento se explica lo relacionado al pronóstico de series de tiempo. Lo cual comprende:

Elaborando la serie de tiempo en R AnÔlisis de la serie de tiempo Pronóstico de la serie de tiempo Estimación de errores de pronóstico Para el anÔlisis de series de tiempo en R, existen una gran variedad de librerias. En este tutorial se emplea la libreria fpp2, la cual contiene contiene:

La libreria forecast, que contiene funciones de pronóstico La libreria ggplot2, que contiene funciones para grĆ”ficos Esta libreria se instala y se carga mediante install.packages(ā€œfpp2ā€)y library(fpp2) respectivamente.

Elaborando la serie de tiempo en R Cargando librerias y datos Recordemos que se puede leer datos directamente desde una API, SQL u otros medios. Para este tutorial empleo la lectura de datos desde Excel. Entonces para ello emplearemos las siguientes funciones:

La función head() nos muestra los primeros datos de nuestra tabla de datos

library(fpp2)
## Warning: package 'fpp2' was built under R version 4.3.3
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## ── Attaching packages ────────────────────────────────────────────── fpp2 2.5 ──
## āœ” ggplot2   3.5.1      āœ” fma       2.5   
## āœ” forecast  8.22.0     āœ” expsmooth 2.3
## Warning: package 'ggplot2' was built under R version 4.3.3
## Warning: package 'forecast' was built under R version 4.3.3
## Warning: package 'fma' was built under R version 4.3.3
## Warning: package 'expsmooth' was built under R version 4.3.3
## 
AirPassengers
##      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1949 112 118 132 129 121 135 148 148 136 119 104 118
## 1950 115 126 141 135 125 149 170 170 158 133 114 140
## 1951 145 150 178 163 172 178 199 199 184 162 146 166
## 1952 171 180 193 181 183 218 230 242 209 191 172 194
## 1953 196 196 236 235 229 243 264 272 237 211 180 201
## 1954 204 188 235 227 234 264 302 293 259 229 203 229
## 1955 242 233 267 269 270 315 364 347 312 274 237 278
## 1956 284 277 317 313 318 374 413 405 355 306 271 306
## 1957 315 301 356 348 355 422 465 467 404 347 305 336
## 1958 340 318 362 348 363 435 491 505 404 359 310 337
## 1959 360 342 406 396 420 472 548 559 463 407 362 405
## 1960 417 391 419 461 472 535 622 606 508 461 390 432

Creando el objeto de serie de tiempo La serie de tiempo se debe almacenar en el objeto ts empleando la función ts(). El empleo de esta función es de la siguiente forma : serie <- ts(data, frequency= ,start=). Donde el primer agumento es un vector de datos. Luego los dos siguientes argumentos se indican de acuerdo a la siguiente tabla.

Frecuencia frequency= start=
Anual 1 2000
Trimestral 4 c(2000,2)
Mensual 12 c(2000,9)
Diario 7 o 365.25 1 o c(2000,234)
Semanal 52.18 c(2000,23)
Horario 24 o 168 o 8766 1
Cada 30 min 48 o 336 o 17532 1

En el siguiente fragmento de código definimos el objeto de la serie de tiempo y lo almacenaremos en data_serie.AnÔlisis de la serie de tiempo Para el anÔlisis de datos, esta libreria fpp2 nos permite emplear las siguientes funciones:

autoplot(), para graficar la serie de tiempo ggseasonplot(), para graficar la estacionalidad de una serie de tiempo ggsubseriesplot(), para graficar subseries ggAcf(), para graficar la autocorrelación decompose(), permite realizar una descomposición de estacionalidad y tendencia. Grafico de la serie de tiempo Para el grÔfico simple de la serie de tiempo empleamos la funcion autoplot(). Donde solo se requiere ingresar el objeto de la serie de tiempo.

file_path <- "C:/PRACTICAS ARCGIS/Arcgispro/PRECI/DATOSPRE.CSV"
datamocache<- read.csv(file_path)
datamocache
##       DATOS
## 1   355.065
## 2   433.574
## 3   422.422
## 4   427.278
## 5   162.592
## 6    25.799
## 7    10.764
## 8     6.012
## 9    16.088
## 10   24.358
## 11  106.002
## 12    6.297
## 13  355.201
## 14  433.974
## 15  422.605
## 16  427.333
## 17  162.696
## 18   25.877
## 19   10.770
## 20    6.011
## 21   16.099
## 22   24.370
## 23  106.049
## 24    6.303
## 25  355.108
## 26  434.050
## 27  422.868
## 28  427.388
## 29  162.772
## 30   25.943
## 31   10.756
## 32    6.003
## 33   16.092
## 34   24.352
## 35  106.002
## 36    6.311
## 37  355.519
## 38  433.844
## 39  422.675
## 40  427.589
## 41  162.891
## 42   25.957
## 43   10.727
## 44    5.985
## 45   16.056
## 46   24.312
## 47  105.865
## 48    6.309
## 49  355.499
## 50  433.857
## 51  423.005
## 52  428.151
## 53  163.050
## 54   25.946
## 55   10.686
## 56    5.958
## 57   16.029
## 58   24.367
## 59  105.960
## 60    6.298
## 61  355.652
## 62  433.779
## 63  423.017
## 64  428.507
## 65  163.210
## 66   25.931
## 67   10.693
## 68    5.939
## 69   16.111
## 70   24.472
## 71  106.200
## 72    6.279
## 73  355.567
## 74  433.274
## 75  422.919
## 76  428.559
## 77  163.502
## 78   25.891
## 79   10.690
## 80    5.914
## 81   16.182
## 82   24.525
## 83  106.271
## 84    6.284
## 85  355.246
## 86  432.458
## 87  422.395
## 88  428.670
## 89  163.472
## 90   25.808
## 91   10.673
## 92    5.881
## 93   16.219
## 94   24.534
## 95  106.340
## 96    6.280
## 97  354.779
## 98  432.083
## 99  422.033
## 100 428.235
## 101 163.197
## 102  25.716
## 103  10.649
## 104   5.857
## 105  16.230
## 106  24.550
## 107 106.295
## 108   6.285
## 109 354.140
## 110 431.439
## 111 421.606
## 112 427.798
## 113 162.858
## 114  25.638
## 115  10.645
## 116   5.825
## 117  16.212
## 118  24.559
## 119 106.157
## 120   6.280
## 121 353.898
## 122 430.961
## 123 421.539
## 124 427.195
## 125 162.508
## 126  25.536
## 127  10.635
## 128   5.912
## 129  16.190
## 130  24.539
## 131 105.890
## 132   6.283
## 133 353.578
## 134 430.255
## 135 421.401
## 136 426.216
## 137 162.145
## 138  25.419
## 139  10.609
## 140   5.981
## 141  16.151
## 142  24.475
## 143 105.568
## 144   6.275
## 145 353.352
## 146 430.374
## 147 421.402
## 148 425.828
## 149 161.945
## 150  25.300
## 151  10.625
## 152   6.037
## 153  16.087
## 154  24.417
## 155 105.643
## 156   6.281
## 157 353.176
## 158 430.596
## 159 420.880
## 160 426.039
## 161 161.474
## 162  25.235
## 163  10.709
## 164   6.078
## 165  16.006
## 166  24.327
## 167 105.796
## 168   6.283
## 169 353.550
## 170 431.465
## 171 421.171
## 172 426.259
## 173 161.512
## 174  25.185
## 175  10.769
## 176   6.106
## 177  15.913
## 178  24.228
## 179 105.879
## 180   6.275
## 181 354.028
## 182 432.374
## 183 421.683
## 184 426.478
## 185 161.364
## 186  25.116
## 187  10.804
## 188   6.125
## 189  15.811
## 190  24.092
## 191 105.880
## 192   6.265
## 193 354.445
## 194 433.141
## 195 421.632
## 196 426.384
## 197 161.273
## 198  25.100
## 199  10.826
## 200   6.132
## 201  15.801
## 202  23.927
## 203 105.729
## 204   6.268
## 205 354.950
## 206 434.070
## 207 421.477
## 208 426.417
## 209 161.680
## 210  25.490
## 211  10.886
## 212   6.129
## 213  15.923
## 214  24.074
## 215 105.830
## 216   6.260
## 217 355.541
## 218 434.825
## 219 421.722
## 220 426.475
## 221 161.965
## 222  25.810
## 223  10.924
## 224   6.119
## 225  16.010
## 226  24.188
## 227 105.757
## 228   6.295
## 229 356.430
## 230 435.785
## 231 422.907
## 232 427.083
## 233 162.505
## 234  26.153
## 235  10.940
## 236   6.106
## 237  16.117
## 238  24.256
## 239 105.679
## 240   6.319
## 241 356.819
## 242 436.881
## 243 423.726
## 244 427.365
## 245 162.928
## 246  26.420
## 247  10.939
## 248   6.084
## 249  16.186
## 250  24.287
## 251 106.058
## 252   6.331
## 253 357.314
## 254 438.477
## 255 424.883
## 256 427.844
## 257 163.682
## 258  26.860
## 259  10.938
## 260   6.053
## 261  16.228
## 262  24.457
## 263 106.421
## 264   6.374
## 265 357.638
## 266 440.671
## 267 425.750
## 268 428.303
## 269 164.403
## 270  27.257
## 271  10.927
## 272   6.021
## 273  16.278
## 274  24.569
## 275 106.773
## 276   6.402
## 277 358.196
## 278 442.756
## 279 426.617
## 280 428.534
## 281 164.969
## 282  27.580
## 283  10.899
## 284   5.989
## 285  16.345
## 286  24.636
## 287 107.090
## 288   6.435
## 289 353.053
## 290 435.732
## 291 428.664
## 292 428.606
## 293 164.453
## 294  27.398
## 295  10.438
## 296   5.838
## 297  15.943
## 298  23.961
## 299 104.968
## 300   6.490
## 301 364.576
## 302 429.318
## 303 418.414
## 304 432.019
## 305 165.498
## 306  26.272
## 307  10.093
## 308   5.584
## 309  15.263
## 310  23.432
## 311 102.844
## 312   6.256
## 313 355.043
## 314 434.134
## 315 430.278
## 316 440.510
## 317 166.563
## 318  25.691
## 319   9.776
## 320   5.367
## 321  15.421
## 322  25.570
## 323 108.046
## 324   6.067
## 325 359.023
## 326 432.072
## 327 423.271
## 328 436.331
## 329 166.730
## 330  25.600
## 331  10.864
## 332   5.516
## 333  17.929
## 334  26.776
## 335 111.479
## 336   5.851
## 337 353.696
## 338 422.164
## 339 420.776
## 340 429.712
## 341 169.925
## 342  25.026
## 343  10.613
## 344   5.364
## 345  17.749
## 346  25.703
## 347 107.845
## 348   6.383
## 349 348.188
## 350 414.492
## 351 410.851
## 352 431.116
## 353 162.806
## 354  23.977
## 355  10.312
## 356   5.152
## 357  17.034
## 358  24.733
## 359 107.852
## 360   6.193
## 361 344.506
## 362 423.840
## 363 414.075
## 364 418.663
## 365 157.154
## 366  23.678
## 367  10.121
## 368   5.328
## 369  16.467
## 370  24.893
## 371 105.297
## 372   6.410
## 373 340.088
## 374 417.278
## 375 412.211
## 376 418.182
## 377 155.399
## 378  23.940
## 379  10.541
## 380   5.127
## 381  15.812
## 382  24.754
## 383 103.141
## 384   6.153
## 385 348.575
## 386 420.448
## 387 420.058
## 388 413.935
## 389 154.804
## 390  23.282
## 391  10.422
## 392   7.826
## 393  15.716
## 394  24.108
## 395 100.009
## 396   6.355
## 397 346.529
## 398 414.707
## 399 418.364
## 400 404.677
## 401 154.160
## 402  22.856
## 403  10.030
## 404   7.511
## 405  15.293
## 406  23.064
## 407  98.487
## 408   6.092
## 409 348.375
## 410 432.994
## 411 421.440
## 412 417.274
## 413 157.540
## 414  22.676
## 415  10.976
## 416   7.250
## 417  14.676
## 418  23.140
## 419 107.278
## 420   6.427
## 421 349.298
## 422 435.494
## 423 409.382
## 424 430.684
## 425 151.121
## 426  23.794
## 427  12.556
## 428   6.983
## 429  14.221
## 430  22.342
## 431 109.162
## 432   6.330
## 433 361.798
## 434 450.585
## 435 427.578
## 436 431.110
## 437 162.346
## 438  24.090
## 439  12.088
## 440   6.736
## 441  13.868
## 442  22.053
## 443 107.711
## 444   6.094
## 445 364.533
## 446 452.369
## 447 432.940
## 448 431.284
## 449 158.109
## 450  23.599
## 451  11.589
## 452   6.538
## 453  13.556
## 454  21.108
## 455 105.911
## 456   6.042
## 457 363.627
## 458 450.014
## 459 420.512
## 460 424.328
## 461 159.261
## 462  24.760
## 463  11.298
## 464   6.293
## 465  15.575
## 466  20.299
## 467 102.397
## 468   6.323
## 469 366.057
## 470 454.513
## 471 418.081
## 472 427.140
## 473 170.632
## 474  34.062
## 475  12.202
## 476   6.063
## 477  18.607
## 478  27.299
## 479 108.058
## 480   6.100
## 481 368.541
## 482 451.434
## 483 427.117
## 484 427.747
## 485 168.244
## 486  32.850
## 487  11.776
## 488   5.882
## 489  17.946
## 490  26.690
## 491 104.156
## 492   7.061
## 493 375.983
## 494 456.907
## 495 448.959
## 496 440.466
## 497 174.390
## 498  33.696
## 499  11.277
## 500   5.826
## 501  18.470
## 502  25.751
## 503 103.953
## 504   6.850
## 505 365.375
## 506 460.985
## 507 441.757
## 508 433.564
## 509 172.225
## 510  32.288
## 511  10.917
## 512   5.595
## 513  17.702
## 514  24.966
## 515 114.399
## 516   6.587
## 517 368.211
## 518 473.585
## 519 450.328
## 520 438.383
## 521 180.267
## 522  36.558
## 523  10.912
## 524   5.386
## 525  17.149
## 526  28.207
## 527 114.399
## 528   7.318
## 529 364.775
## 530 488.934
## 531 444.836
## 532 438.393
## 533 180.274
## 534  35.977
## 535  10.686
## 536   5.304
## 537  17.382
## 538  27.042
## 539 114.528
## 540   7.030
## 541 370.459
## 542 488.641
## 543 445.686
## 544 433.624
## 545 177.410
## 546  34.691
## 547  10.282
## 548   5.295
## 549  17.805
## 550  26.114
## 551 114.049
## 552   7.164
## 553 239.900
## 554 281.200
## 555 473.700
## 556 430.200
## 557 153.100
## 558  23.400
## 559   0.300
## 560   2.500
## 561   7.100
## 562   9.100
## 563  58.300
## 564   7.700
## 565 618.100
## 566 288.200
## 567 192.900
## 568 507.100
## 569 188.500
## 570   1.500
## 571   2.500
## 572   0.000
## 573   0.300
## 574  11.800
## 575  56.100
## 576   1.100
## 577 145.300
## 578 540.100
## 579 691.300
## 580 627.300
## 581 190.000
## 582  12.900
## 583   2.800
## 584   0.600
## 585  18.900
## 586  72.600
## 587 222.500
## 588   1.900
## 589 446.600
## 590 386.700
## 591 269.100
## 592 344.400
## 593 170.400
## 594  23.600
## 595  34.800
## 596   8.800
## 597  73.100
## 598  53.300
## 599 187.000
## 600   1.100
## 601 236.500
## 602 204.200
## 603 365.900
## 604 284.100
## 605 240.200
## 606  12.400
## 607   5.100
## 608   2.000
## 609  13.800
## 610   2.100
## 611  27.900
## 612  18.100
## 613 227.000
## 614 245.700
## 615 192.500
## 616 462.000
## 617   6.200
## 618   0.900
## 619   3.700
## 620   0.500
## 621   1.300
## 622   3.400
## 623 108.000
## 624   2.000
## 625 263.500
## 626 629.500
## 627 485.000
## 628 144.700
## 629  32.800
## 630  17.100
## 631   5.900
## 632   9.200
## 633   4.000
## 634  28.400
## 635  49.100
## 636  11.200
## 637 242.900
## 638 272.900
## 639 371.200
## 640 407.600
## 641 116.800
## 642  29.700
## 643  19.800
## 644   0.700
## 645   1.400
## 646  21.700
## 647  55.700
## 648   0.500
## 649 535.300
## 650 490.200
## 651 592.700
## 652 320.500
## 653 141.700
## 654   8.800
## 655   7.800
## 656  67.200
## 657  13.600
## 658   9.900
## 659  31.100
## 660  10.800
## 661 301.500
## 662 288.400
## 663 381.100
## 664 201.000
## 665 140.000
## 666  13.500
## 667   1.400
## 668   0.600
## 669   6.000
## 670   0.100
## 671  65.000
## 672   0.300
## 673 389.000
## 674 835.300
## 675 489.100
## 676 694.400
## 677 231.900
## 678  18.700
## 679  31.800
## 680   1.500
## 681   1.100
## 682  24.800
## 683 300.700
## 684  13.800
## 685 369.600
## 686 490.500
## 687 144.100
## 688 725.700
## 689   9.900
## 690  48.400
## 691  47.300
## 692   1.100
## 693   4.200
## 694   4.800
## 695 150.600
## 696   4.200
## 697 636.800
## 698 782.600
## 699 827.900
## 700 440.500
## 701 409.300
## 702  30.600
## 703   1.800
## 704   1.300
## 705   6.100
## 706  15.700
## 707  75.800
## 708   0.900
## 709 424.700
## 710 491.600
## 711 550.900
## 712 435.100
## 713  64.900
## 714  12.800
## 715   0.600
## 716   2.200
## 717   6.700
## 718   0.300
## 719  66.300
## 720   4.900
## 721 343.700
## 722 398.200
## 723 147.100
## 724 271.300
## 725 184.600
## 726  50.300
## 727   4.900
## 728   0.900
## 729  60.000
## 730   2.500
## 731  25.100
## 732  12.500
## 733 419.500
## 734 553.500
## 735 364.600
## 736 489.000
## 737 420.800
## 738 238.700
## 739  32.100
## 740   1.000
## 741  85.300
## 742 181.300
## 743 232.600
## 744   1.200
## 745 423.200
## 746 383.700
## 747 625.900
## 748 441.100
## 749 115.700
## 750   6.200
## 751   2.400
## 752   1.900
## 753   3.400
## 754  13.300
## 755  18.300
## 756  28.200
## 757 539.700
## 758 577.300
## 759 929.500
## 760 720.300
## 761 309.600
## 762  52.300
## 763   0.300
## 764   4.600
## 765  30.000
## 766   5.100
## 767  99.500
## 768   2.200
## 769 132.000
## 770 550.700
## 771 283.300
## 772 281.700
## 773 124.600
## 774   1.300
## 775   3.000
## 776   0.500
## 777   0.800
## 778   7.700
## 779 344.200
## 780   0.800
## 781 430.600
## 782 750.800
## 783 638.900
## 784 544.400
## 785 357.200
## 786 130.500
## 787  10.800
## 788   0.800
## 789   5.000
## 790  99.500
## 791 114.411
## 792  23.400
## 793 289.200
## 794 826.600
## 795 324.000
## 796 438.620
## 797 180.410
## 798  23.200
## 799   5.700
## 800   3.500
## 801  22.500
## 802   1.400
## 803 117.364
## 804   0.700
## 805 495.500
## 806 482.200
## 807 464.400
## 808 328.700
## 809 114.400
## 810   6.400
## 811   1.400
## 812   5.100
## 813  27.100
## 814   5.700
## 815 103.500
## 816  10.100
data_serie <- ts(datamocache$DATOS, frequency=12, start=1946)
plot(data_serie)

#Nota: Los resultados de esta guĆ­a corresponden a Data1 del archivo excel. Sugiero que tambien practiques con las otras series de tiempo como Data2 o Data3.


autoplot(data_serie)+
        labs(title = "Serie de tiempo",       
             x = "Tiempo",
             y = "Valor",
             colour = "#00a0dc")+
        theme_bw() 

Descomposición de la serie de tiempo Para la descomposición de la serie de tiempo se emplea la función decompose(). Donde se debe indicar el objeto de la serie de tiempo y el tipo de descomposición. Los tipos de descomposición que acepta esta función es additive y multiplicative.

Aditivo: Serie=T + S + I

Multiplicativo: Serie=T x S x I

Donde:

T: Tendencia

S: Estacionalidad

I: Irregular o error

# Descomposición de la serie de tiempo. Se almacena en el objeto fit
fit <- decompose(data_serie, type='additive')
#fit <- decompose(data_serie, type='multiplicative')

# Para graficar esta descomposición volvemos a emplear la funcion autoplot, pero con el objeto fit
autoplot(fit)+
        labs(title = "Descomposicion de la serie de tiempo",                   
             x = "Tiempo",
             y = "Valor",
             colour = "Gears")+
        theme_bw()

library(highcharter)
## Warning: package 'highcharter' was built under R version 4.3.3
hchart(stl(data_serie, s.window='periodic'))
## Warning: Deprecated function. Use the `create_axis` function.

Grafico de la serie de tiempo con su tendencia El siguiente fragmento de código nos permite graficar la serie de tiempo con su tendencia. Notese que emplea el objeto fit en el cual guardamos previamente los valores de la descomposición. Nótese que se emplea la funcion trendcycle() para obtener los datos de tendencia del objeto fit.

autoplot(data_serie, series="Serie tiempo") + 
        autolayer(trendcycle(fit), series="Tendencia") +
        labs(title = "Serie de tiempo",      
             x = "Tiempo",
             y = "Valor"
        ) + 
        theme_bw()
## Warning: Removed 12 rows containing missing values or values outside the scale range
## (`geom_line()`).

Grafico de estacionalidad Para realizar el grÔfico de estacionalidad empleamos la función ggseasonplot. Donde el argumento es el objeto que contiene la serie de tiempo.

ggseasonplot(data_serie)

library(TSstudio)
## Warning: package 'TSstudio' was built under R version 4.3.3
ts_seasonal(data_serie, type = "all")
ts_heatmap(data_serie)
#Graficar la autocorrelacion 
acf(data_serie, lag=35, col="2",main ="",
    xlab="Lag",ylab="Valores")

#Graficar la autocorrelacion parcial
pacf(data_serie, lag=35, col="2",main ="",
     xlab="Lag",ylab="Valores")

#Como hay confirmación de tendencia se hace la diferencia (1 lag)
plot(diff(data_serie),xlab="Tiempo",ylab="Valores")

acf(diff(data_serie), lag=35, col="2",main = "",
    xlab="Lag", ylab="Valores")

pacf(diff(data_serie), lag=35,col="2",main = "",
     xlab="Lag",ylab="Valores")