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)
## 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
##
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.
file_path <- "C:/Users/Personal/OneDrive/Escritorio/SGA/Precipita.csv"
datavalencia<- read.csv(file_path)
datavalencia
## 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
View(datavalencia)
data_serie <- ts(datavalencia$DATOS, frequency=12, start=1946)
data_serie
## Jan Feb Mar Apr May Jun Jul Aug Sep
## 1946 355.065 433.574 422.422 427.278 162.592 25.799 10.764 6.012 16.088
## 1947 355.201 433.974 422.605 427.333 162.696 25.877 10.770 6.011 16.099
## 1948 355.108 434.050 422.868 427.388 162.772 25.943 10.756 6.003 16.092
## 1949 355.519 433.844 422.675 427.589 162.891 25.957 10.727 5.985 16.056
## 1950 355.499 433.857 423.005 428.151 163.050 25.946 10.686 5.958 16.029
## 1951 355.652 433.779 423.017 428.507 163.210 25.931 10.693 5.939 16.111
## 1952 355.567 433.274 422.919 428.559 163.502 25.891 10.690 5.914 16.182
## 1953 355.246 432.458 422.395 428.670 163.472 25.808 10.673 5.881 16.219
## 1954 354.779 432.083 422.033 428.235 163.197 25.716 10.649 5.857 16.230
## 1955 354.140 431.439 421.606 427.798 162.858 25.638 10.645 5.825 16.212
## 1956 353.898 430.961 421.539 427.195 162.508 25.536 10.635 5.912 16.190
## 1957 353.578 430.255 421.401 426.216 162.145 25.419 10.609 5.981 16.151
## 1958 353.352 430.374 421.402 425.828 161.945 25.300 10.625 6.037 16.087
## 1959 353.176 430.596 420.880 426.039 161.474 25.235 10.709 6.078 16.006
## 1960 353.550 431.465 421.171 426.259 161.512 25.185 10.769 6.106 15.913
## 1961 354.028 432.374 421.683 426.478 161.364 25.116 10.804 6.125 15.811
## 1962 354.445 433.141 421.632 426.384 161.273 25.100 10.826 6.132 15.801
## 1963 354.950 434.070 421.477 426.417 161.680 25.490 10.886 6.129 15.923
## 1964 355.541 434.825 421.722 426.475 161.965 25.810 10.924 6.119 16.010
## 1965 356.430 435.785 422.907 427.083 162.505 26.153 10.940 6.106 16.117
## 1966 356.819 436.881 423.726 427.365 162.928 26.420 10.939 6.084 16.186
## 1967 357.314 438.477 424.883 427.844 163.682 26.860 10.938 6.053 16.228
## 1968 357.638 440.671 425.750 428.303 164.403 27.257 10.927 6.021 16.278
## 1969 358.196 442.756 426.617 428.534 164.969 27.580 10.899 5.989 16.345
## 1970 353.053 435.732 428.664 428.606 164.453 27.398 10.438 5.838 15.943
## 1971 364.576 429.318 418.414 432.019 165.498 26.272 10.093 5.584 15.263
## 1972 355.043 434.134 430.278 440.510 166.563 25.691 9.776 5.367 15.421
## 1973 359.023 432.072 423.271 436.331 166.730 25.600 10.864 5.516 17.929
## 1974 353.696 422.164 420.776 429.712 169.925 25.026 10.613 5.364 17.749
## 1975 348.188 414.492 410.851 431.116 162.806 23.977 10.312 5.152 17.034
## 1976 344.506 423.840 414.075 418.663 157.154 23.678 10.121 5.328 16.467
## 1977 340.088 417.278 412.211 418.182 155.399 23.940 10.541 5.127 15.812
## 1978 348.575 420.448 420.058 413.935 154.804 23.282 10.422 7.826 15.716
## 1979 346.529 414.707 418.364 404.677 154.160 22.856 10.030 7.511 15.293
## 1980 348.375 432.994 421.440 417.274 157.540 22.676 10.976 7.250 14.676
## 1981 349.298 435.494 409.382 430.684 151.121 23.794 12.556 6.983 14.221
## 1982 361.798 450.585 427.578 431.110 162.346 24.090 12.088 6.736 13.868
## 1983 364.533 452.369 432.940 431.284 158.109 23.599 11.589 6.538 13.556
## 1984 363.627 450.014 420.512 424.328 159.261 24.760 11.298 6.293 15.575
## 1985 366.057 454.513 418.081 427.140 170.632 34.062 12.202 6.063 18.607
## 1986 368.541 451.434 427.117 427.747 168.244 32.850 11.776 5.882 17.946
## 1987 375.983 456.907 448.959 440.466 174.390 33.696 11.277 5.826 18.470
## 1988 365.375 460.985 441.757 433.564 172.225 32.288 10.917 5.595 17.702
## 1989 368.211 473.585 450.328 438.383 180.267 36.558 10.912 5.386 17.149
## 1990 364.775 488.934 444.836 438.393 180.274 35.977 10.686 5.304 17.382
## 1991 370.459 488.641 445.686 433.624 177.410 34.691 10.282 5.295 17.805
## 1992 239.900 281.200 473.700 430.200 153.100 23.400 0.300 2.500 7.100
## 1993 618.100 288.200 192.900 507.100 188.500 1.500 2.500 0.000 0.300
## 1994 145.300 540.100 691.300 627.300 190.000 12.900 2.800 0.600 18.900
## 1995 446.600 386.700 269.100 344.400 170.400 23.600 34.800 8.800 73.100
## 1996 236.500 204.200 365.900 284.100 240.200 12.400 5.100 2.000 13.800
## 1997 227.000 245.700 192.500 462.000 6.200 0.900 3.700 0.500 1.300
## 1998 263.500 629.500 485.000 144.700 32.800 17.100 5.900 9.200 4.000
## 1999 242.900 272.900 371.200 407.600 116.800 29.700 19.800 0.700 1.400
## 2000 535.300 490.200 592.700 320.500 141.700 8.800 7.800 67.200 13.600
## 2001 301.500 288.400 381.100 201.000 140.000 13.500 1.400 0.600 6.000
## 2002 389.000 835.300 489.100 694.400 231.900 18.700 31.800 1.500 1.100
## 2003 369.600 490.500 144.100 725.700 9.900 48.400 47.300 1.100 4.200
## 2004 636.800 782.600 827.900 440.500 409.300 30.600 1.800 1.300 6.100
## 2005 424.700 491.600 550.900 435.100 64.900 12.800 0.600 2.200 6.700
## 2006 343.700 398.200 147.100 271.300 184.600 50.300 4.900 0.900 60.000
## 2007 419.500 553.500 364.600 489.000 420.800 238.700 32.100 1.000 85.300
## 2008 423.200 383.700 625.900 441.100 115.700 6.200 2.400 1.900 3.400
## 2009 539.700 577.300 929.500 720.300 309.600 52.300 0.300 4.600 30.000
## 2010 132.000 550.700 283.300 281.700 124.600 1.300 3.000 0.500 0.800
## 2011 430.600 750.800 638.900 544.400 357.200 130.500 10.800 0.800 5.000
## 2012 289.200 826.600 324.000 438.620 180.410 23.200 5.700 3.500 22.500
## 2013 495.500 482.200 464.400 328.700 114.400 6.400 1.400 5.100 27.100
## Oct Nov Dec
## 1946 24.358 106.002 6.297
## 1947 24.370 106.049 6.303
## 1948 24.352 106.002 6.311
## 1949 24.312 105.865 6.309
## 1950 24.367 105.960 6.298
## 1951 24.472 106.200 6.279
## 1952 24.525 106.271 6.284
## 1953 24.534 106.340 6.280
## 1954 24.550 106.295 6.285
## 1955 24.559 106.157 6.280
## 1956 24.539 105.890 6.283
## 1957 24.475 105.568 6.275
## 1958 24.417 105.643 6.281
## 1959 24.327 105.796 6.283
## 1960 24.228 105.879 6.275
## 1961 24.092 105.880 6.265
## 1962 23.927 105.729 6.268
## 1963 24.074 105.830 6.260
## 1964 24.188 105.757 6.295
## 1965 24.256 105.679 6.319
## 1966 24.287 106.058 6.331
## 1967 24.457 106.421 6.374
## 1968 24.569 106.773 6.402
## 1969 24.636 107.090 6.435
## 1970 23.961 104.968 6.490
## 1971 23.432 102.844 6.256
## 1972 25.570 108.046 6.067
## 1973 26.776 111.479 5.851
## 1974 25.703 107.845 6.383
## 1975 24.733 107.852 6.193
## 1976 24.893 105.297 6.410
## 1977 24.754 103.141 6.153
## 1978 24.108 100.009 6.355
## 1979 23.064 98.487 6.092
## 1980 23.140 107.278 6.427
## 1981 22.342 109.162 6.330
## 1982 22.053 107.711 6.094
## 1983 21.108 105.911 6.042
## 1984 20.299 102.397 6.323
## 1985 27.299 108.058 6.100
## 1986 26.690 104.156 7.061
## 1987 25.751 103.953 6.850
## 1988 24.966 114.399 6.587
## 1989 28.207 114.399 7.318
## 1990 27.042 114.528 7.030
## 1991 26.114 114.049 7.164
## 1992 9.100 58.300 7.700
## 1993 11.800 56.100 1.100
## 1994 72.600 222.500 1.900
## 1995 53.300 187.000 1.100
## 1996 2.100 27.900 18.100
## 1997 3.400 108.000 2.000
## 1998 28.400 49.100 11.200
## 1999 21.700 55.700 0.500
## 2000 9.900 31.100 10.800
## 2001 0.100 65.000 0.300
## 2002 24.800 300.700 13.800
## 2003 4.800 150.600 4.200
## 2004 15.700 75.800 0.900
## 2005 0.300 66.300 4.900
## 2006 2.500 25.100 12.500
## 2007 181.300 232.600 1.200
## 2008 13.300 18.300 28.200
## 2009 5.100 99.500 2.200
## 2010 7.700 344.200 0.800
## 2011 99.500 114.411 23.400
## 2012 1.400 117.364 0.700
## 2013 5.700 103.500 10.100
plot(data_serie)
data_serie <- AirPassengers
data_serie
## 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
#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.
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.
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)
hchart(stl(data_serie, s.window='periodic'))
## Warning in create_yaxis(ntss, heights = heights, turnopposite = TRUE, title =
## list(text = NULL), : 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)
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")
#Como la variancia se ve incrementa en el tiempo se debe sacar logaritmo natural de la serie
plot(diff(log(data_serie)),xlab="Tiempo",ylab="Valores")
acf(diff(log(data_serie)), lag=35, col="2",main = "",
xlab="Lag", ylab="Valores")
pacf(diff(log(data_serie)), lag=35,col="2",main = "",
xlab="Lag",ylab="Valores")
#Augmented Dickey-Fuller test para ver no estacionaridad
#Devuelve la probabilidad de ser no estacionaria
#Si es mayor que 0.05 la serie es no estacionaria (tiene tendencia)
#Si es menor que 0.05 es estacionaria (No hay tendencia)
# library(aTSA)
aTSA::adf.test(diff(log(data_serie)))
## Augmented Dickey-Fuller Test
## alternative: stationary
##
## Type 1: no drift no trend
## lag ADF p.value
## [1,] 0 -9.61 0.01
## [2,] 1 -8.82 0.01
## [3,] 2 -7.63 0.01
## [4,] 3 -8.75 0.01
## [5,] 4 -6.79 0.01
## Type 2: with drift no trend
## lag ADF p.value
## [1,] 0 -9.63 0.01
## [2,] 1 -8.86 0.01
## [3,] 2 -7.71 0.01
## [4,] 3 -8.94 0.01
## [5,] 4 -6.98 0.01
## Type 3: with drift and trend
## lag ADF p.value
## [1,] 0 -9.60 0.01
## [2,] 1 -8.83 0.01
## [3,] 2 -7.69 0.01
## [4,] 3 -8.92 0.01
## [5,] 4 -6.95 0.01
## ----
## Note: in fact, p.value = 0.01 means p.value <= 0.01
library(forecast)
#Ajuste automático de los coeficientes
ARIMAmodel <- auto.arima(log(data_serie))
ARIMAmodel
## Series: log(data_serie)
## ARIMA(0,1,1)(0,1,1)[12]
##
## Coefficients:
## ma1 sma1
## -0.4018 -0.5569
## s.e. 0.0896 0.0731
##
## sigma^2 = 0.001371: log likelihood = 244.7
## AIC=-483.4 AICc=-483.21 BIC=-474.77
#Ajuste automático de los coeficientes
ARIMAmodel <- auto.arima(diff(log(data_serie)))
ARIMAmodel
## Series: diff(log(data_serie))
## ARIMA(0,0,1)(0,1,1)[12]
##
## Coefficients:
## ma1 sma1
## -0.4018 -0.5569
## s.e. 0.0896 0.0731
##
## sigma^2 = 0.001369: log likelihood = 244.7
## AIC=-483.39 AICc=-483.2 BIC=-474.77
Pronóstico Métodos simples Para el pronóstico de series de tiempo mediante métodos básicos, la libreria fpp2 nos brinda las siguientes funciones:
naive(), metodo de naive simple ses(), exponential smoothing meanf(), media movil snaive(), metodo naive considerando estacionalidad El argumento a colocar en estas funciones es la serie de tiempo y el valor de h. Este valor de h es la cantidad de datos que deseamos pronosticar. Por ejemplo si deseamos pronosticar 12 datos, se debe indicar h=12.
Finalmente, para verificar el ajuste del método podemos emplear las siguientes funciones:
fitted(), obtiene un ajuste con la data historica checkresiduals(), permite analizar los residuales
# elaborando el método
m1 <- snaive(data_serie, h=96)
# graficando el pronóstico
autoplot(m1)
# verificando el ajuste del método
autoplot(m1)+autolayer(fitted(m1), series="Ajuste")
## Warning: Removed 12 rows containing missing values or values outside the scale range
## (`geom_line()`).
# verificando los residuales
checkresiduals(m1)
##
## Ljung-Box test
##
## data: Residuals from Seasonal naive method
## Q* = 275.04, df = 24, p-value < 2.2e-16
##
## Model df: 0. Total lags used: 24
Método regresión Para el pronóstico de series de tiempo mediante regresión, la libreria fpp2 nos brinda la función tslm(). Esta función la emplearemos para crear una regresión de la serie de tiempo con los datos de la descomposición estacional y/o tendencia. Entonces:
Si observamos solo tendencia usaremos : tslm(data_serie ~ trend) Si observamos solo estacionalidad usaremos : tslm(data_serie ~ season) Si observamos tendencia y estacionalidad usaremos : tslm(data_serie ~ trend + season) Luego con la función forecast realizamos el pronostico. El argumento a colocar en estas funcion es la regresión y el valor de h. Este valor de h es la cantidad de datos que deseamos pronosticar.
Finalmente, para verificar el ajuste del método podemos emplear las siguientes funciones:
fitted(), obtiene pronostico con la data historica checkresiduals(), permite analizar los residuales
library(tseries)
# elaborando la regresion
regresion <- tslm(data_serie ~ trend + season)
# elaborando el pronostico
m2 <- forecast(regresion)
# graficando el pronóstico
autoplot(m2)
# verificando el ajuste del método
autoplot(m2)+autolayer(fitted(m2), series="Ajuste")
# verificando los residuales
checkresiduals(m2)
##
## Ljung-Box test
##
## data: Residuals from Linear regression model
## Q* = 348.24, df = 24, p-value < 2.2e-16
##
## Model df: 0. Total lags used: 24
Método holt winters Para el pronóstico de series de tiempo mediante holt winters, la libreria fpp2 nos brinda la función hw().
Los argumentos a colocar en esta funcion son:
La serie de tiempo El valor de h. Este valor de h es la cantidad de datos que deseamos pronosticar. El tipo de descomposición a usar para la estacionalidad. Los tipos de descomposición que acepta esta función es additive y multiplicative. Finalmente, para verificar el ajuste del método podemos emplear las siguientes funciones:
fitted(), obtiene pronostico con la data historica checkresiduals(), permite analizar los residuales
# elaborando el pronostico
m3 <- hw(data_serie, h=96, seasonal = 'multiplicative')
# graficando el pronóstico
autoplot(m3)
# verificando el ajuste del método
autoplot(m3)+autolayer(fitted(m3), series="Ajuste")
# verificando los residuales
checkresiduals(m3)
##
## Ljung-Box test
##
## data: Residuals from Holt-Winters' multiplicative method
## Q* = 40.151, df = 24, p-value = 0.0206
##
## Model df: 0. Total lags used: 24
ARIMA Para el pronóstico de series de tiempo mediante ARIMA, la libreria fpp2 nos brinda la función auto.arima().
Primero crearemos un modelo ARIMA, para ello el argumento a colocar en esta funcion es la serie de tiempo. Considerar que esta función es solo una aproximación iterativa que busca los indices de AR y MA. Pues en determinadas series de tiempo podria no encontrar los indices adecuados para un modelo ARIMA. En ese caso lo adecuado es seguir la metodología de estimación de índices ARIMA. Esta metodología no esta cubierta en esta guia.
Luego con la función forecast realizamos el pronostico. El argumento a colocar en estas funcion es el modelo ARIMA y el valor de h. Este valor de h es la cantidad de datos que deseamos pronosticar.
Finalmente, para verificar el ajuste del método podemos emplear las siguientes funciones:
fitted(), obtiene pronostico con la data historica checkresiduals(), permite analizar los residuales
# elaborando el modelo ARIMA
modelo_arima <- auto.arima(data_serie)
# elaborando el pronostico
m4 <- forecast(modelo_arima, h=96)
# graficando el pronóstico
autoplot(m4)
# verificando el ajuste del método
autoplot(m4)+autolayer(fitted(m4), series="Ajuste")
# verificando los residuales
checkresiduals(m4)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,1,1)(0,1,0)[12]
## Q* = 37.784, df = 21, p-value = 0.01366
##
## Model df: 3. Total lags used: 24
Red neuronal Para el pronóstico de series de tiempo mediante una red neuronal, la libreria fpp2 nos brinda la función nnetar().
Primero crearemos un modelo de red neuronal (neural network), para ello el argumento a colocar en esta funcion es la serie de tiempo.
Luego con la función forecast realizamos el pronostico. El argumento a colocar en estas funcion es el modelo de red neuronal y el valor de h. Este valor de h es la cantidad de datos que deseamos pronosticar.
Finalmente, para verificar el ajuste del método podemos emplear las siguientes funciones:
fitted(), obtiene pronostico con la data historica checkresiduals(), permite analizar los residuales
# elaborando el modelo de red neuronal
neural_network <- nnetar(data_serie)
# elaborando el pronostico
m5 <- forecast(neural_network, h=96)
# graficando el pronóstico
autoplot(m5)
# verificando el ajuste del método
autoplot(m5)+autolayer(fitted(m5), series="Ajuste")
## Warning: Removed 12 rows containing missing values or values outside the scale range
## (`geom_line()`).
# verificando los residuales
checkresiduals(m5)
##
## Ljung-Box test
##
## data: Residuals from NNAR(1,1,2)[12]
## Q* = 193.67, df = 24, p-value < 2.2e-16
##
## Model df: 0. Total lags used: 24
Estimación de error Para estimar los errores de pronóstico, se debe realizar con los valores ocurridos o reales. Es decir este error se mide tiempo despues de haber realizado el pronóstico.
Supongamos que los valores reales ocurridos para la Data1 son los siguientes:
Mes Valor Real
Enero 19 13487 Mayo Febrero 19 12776 Junio Marzo 19 13812 Julio Abril 19
13032 Agosto Entonces, para poder comparar nuestros datos sera necesario
almacenarlo en un objeto de serie de tiempo. Entonces:
real <- c(622, 606, 508, 461, 390, 432,462, 471)
data_real <- ts(real, frequency=12,start=1961)
La función accuracy() determina los errores de pronostico, para ello es necesario:
Indicar el modelo de pronostico, donde estará el pronóstico Indicar datos reales, donde estará los valores reales Entonces lo que realizará esta función es comparar el pronóstico de los siguientes 8 datos y el valor real. Pues estamos considerando que ya pasaron 8 meses, y nos encontramos en la etapa de evaluar el error de pronóstico de nuestros modelos.
# modelo en base a métodos simples
accuracy(m1,data_real)
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 31.77273 36.31574 32.0303 11.124393 11.24871 1.000000 0.7464603
## Test set 3.62500 140.23596 123.6250 -2.775782 24.26489 3.859626 0.6988219
## Theil's U
## Training set NA
## Test set 2.475277
# modelo en base a regresion lineal
accuracy(m2,data_real)
## ME RMSE MAE MPE MAPE MASE
## Training set 1.999781e-16 25.11363 19.77364 0.6039558 8.591515 0.6173418
## Test set -9.952652e-01 106.24590 92.63684 -3.1086876 18.289105 2.8921624
## ACF1 Theil's U
## Training set 0.7631551 NA
## Test set 0.6491973 1.800463
# modelo en base a holt winters
accuracy(m3,data_real)
## ME RMSE MAE MPE MAPE MASE
## Training set 1.256973 10.63256 7.790649 0.2182707 2.914411 0.2432275
## Test set -35.415680 150.14883 136.598759 -10.9560051 27.796830 4.2646727
## ACF1 Theil's U
## Training set 0.2135914 NA
## Test set 0.6873988 3.013635
# modelo en base a ARIMA
accuracy(m4,data_real)
## ME RMSE MAE MPE MAPE MASE
## Training set 1.34230 10.84619 7.86754 0.420698 2.800458 0.245628
## Test set -27.27284 144.07536 132.46579 -9.203000 26.842386 4.135640
## ACF1 Theil's U
## Training set -0.00124847 NA
## Test set 0.69852717 2.839455
# modelo en base a red neuronal
accuracy(m5,data_real)
## ME RMSE MAE MPE MAPE MASE
## Training set -0.003222003 14.4341 11.56672 -0.298241 4.268011 0.3611179
## Test set -47.394919155 157.0424 143.84338 -13.475238 29.603631 4.4908528
## ACF1 Theil's U
## Training set 0.5539169 NA
## Test set 0.7017837 3.272749
Entonces a partir de estos errores de pronóstico podemos determinar cual es el modelo mas adecuado. En la práctica se suelen evaluar varios modelos e incluso tomar como pronóstico un valor medio del resultados de dos o más modelos.