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.4.2      ✔ fma       2.5   
## ✔ forecast  8.22.0     ✔ expsmooth 2.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
## 
library(forecast)
library(foreign)
## Warning: package 'foreign' was built under R version 4.3.2
library(tseries)
## Warning: package 'tseries' was built under R version 4.3.3
library(xts)
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
library(astsa)
## Warning: package 'astsa' was built under R version 4.3.2
## 
## Attaching package: 'astsa'
## The following objects are masked from 'package:fma':
## 
##     chicken, sales
## The following object is masked from 'package:forecast':
## 
##     gas
## The following object is masked from 'package:fpp2':
## 
##     oil
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.

#data_serie <- ts(data_serie$Serie, frequency=12, start=2004)
file_path <- "C:/Users/alter/OneDrive/Escritorio/Precipitacion/DatosPrecipitacion.csv" 
datavalencia<- read.csv(file_path)
datavalencia
##      DATOS
## 1   132.10
## 2   105.50
## 3    91.32
## 4   178.20
## 5   150.70
## 6   213.80
## 7   110.50
## 8   131.70
## 9   124.50
## 10  129.20
## 11  164.90
## 12  187.40
## 13  196.10
## 14  149.70
## 15  125.40
## 16  226.50
## 17  172.30
## 18  129.80
## 19  138.10
## 20   87.61
## 21  125.70
## 22  166.70
## 23  299.40
## 24  171.60
## 25  145.40
## 26  186.63
## 27  158.20
## 28  216.63
## 29  182.20
## 30   87.78
## 31  108.24
## 32   78.62
## 33   94.51
## 34  158.30
## 35  170.61
## 36   99.91
## 37   90.96
## 38  267.02
## 39  154.00
## 40  235.74
## 41  168.22
## 42  146.60
## 43  134.70
## 44   89.44
## 45   47.18
## 46   90.63
## 47   72.13
## 48  114.90
## 49  113.40
## 50  185.90
## 51  197.70
## 52  219.50
## 53  125.90
## 54  100.30
## 55  126.20
## 56   78.58
## 57  101.60
## 58  173.10
## 59  152.80
## 60   84.49
## 61  149.30
## 62  172.60
## 63  101.30
## 64  226.90
## 65  144.60
## 66  112.20
## 67   86.05
## 68   74.32
## 69   89.04
## 70  156.50
## 71  137.70
## 72  181.10
## 73  146.44
## 74  274.80
## 75  167.48
## 76  233.50
## 77  162.90
## 78  151.60
## 79   89.39
## 80   88.13
## 81   97.61
## 82  116.20
## 83  211.40
## 84  211.20
## 85  262.70
## 86  287.60
## 87  242.60
## 88  239.30
## 89  195.50
## 90  169.40
## 91  167.40
## 92  128.30
## 93  202.80
## 94  186.70
## 95  181.60
## 96  153.60
## 97  273.10
## 98  200.70
## 99  188.20
## 100 179.90
## 101 158.40
## 102 121.80
## 103 110.60
## 104  69.49
## 105  74.98
## 106 123.70
## 107 162.50
## 108 233.40
## 109 109.20
## 110 124.50
## 111  99.16
## 112 163.20
## 113 170.40
## 114 194.30
## 115 121.50
## 116 114.50
## 117 105.90
## 118 128.60
## 119 133.30
## 120 148.80
## 121 194.00
## 122 271.20
## 123 295.20
## 124 258.67
## 125 166.24
## 126 130.30
## 127 150.10
## 128  90.43
## 129  97.60
## 130 180.10
## 131 262.10
## 132 283.80
## 133 237.70
## 134 294.20
## 135 237.10
## 136 169.80
## 137 219.40
## 138 209.80
## 139 227.10
## 140 123.70
## 141  97.65
## 142 187.60
## 143 177.50
## 144 182.10
## 145 215.30
## 146 207.60
## 147 195.90
## 148 280.80
## 149 176.20
## 150 143.00
## 151 160.80
## 152  95.25
## 153  77.66
## 154  72.33
## 155 141.00
## 156 165.00
## 157 125.80
## 158 133.30
## 159 178.40
## 160 163.80
## 161 157.40
## 162 138.20
## 163 114.10
## 164 104.80
## 165 100.80
## 166 167.70
## 167  78.21
## 168 131.90
## 169 235.29
## 170 184.24
## 171  76.06
## 172 297.42
## 173 205.42
## 174  22.46
## 175  53.82
## 176 108.43
## 177 371.96
## 178 194.71
## 179 135.28
## 180 171.92
## 181 168.76
## 182 184.24
## 183 171.85
## 184 204.13
## 185 204.10
## 186 165.80
## 187  97.13
## 188  85.12
## 189 150.90
## 190 133.20
## 191  96.27
## 192  99.44
## 193 154.90
## 194 278.00
## 195 171.20
## 196 193.20
## 197 164.40
## 198 130.00
## 199  93.65
## 200  64.59
## 201 122.46
## 202 104.70
## 203 136.09
## 204 122.30
## 205 129.00
## 206 131.60
## 207 135.20
## 208 206.70
## 209 149.60
## 210 122.90
## 211 111.89
## 212  91.45
## 213 161.55
## 214 156.72
## 215 183.99
## 216 129.00
## 217 105.13
## 218 246.30
## 219 165.85
## 220 184.17
## 221 134.41
## 222 141.52
## 223 129.65
## 224  66.81
## 225  77.10
## 226 138.30
## 227 160.80
## 228 106.30
## 229 139.80
## 230 126.80
## 231 130.30
## 232 146.00
## 233 140.40
## 234  99.37
## 235  72.74
## 236  83.04
## 237  59.01
## 238  82.57
## 239 127.30
## 240 128.50
## 241 119.00
## 242 142.90
## 243 166.10
## 244 184.74
## 245 135.54
## 246 114.89
## 247 101.82
## 248  83.90
## 249  99.60
## 250 106.07
## 251 184.59
## 252 133.52
## 253 152.90
## 254 243.95
## 255 145.06
## 256 238.81
## 257 231.50
## 258 170.39
## 259 112.40
## 260 104.00
## 261  90.40
## 262 124.80
## 263 141.60
## 264 169.10
## 265 170.02
## 266 165.09
## 267 205.90
## 268 184.77
## 269 146.86
## 270 173.29
## 271 136.56
## 272  78.30
## 273 109.46
## 274 106.71
## 275  85.48
## 276  67.40
## 277 133.40
## 278 145.20
## 279 158.90
## 280 147.50
## 281 166.50
## 282 121.00
## 283 111.60
## 284 113.20
## 285  80.92
## 286 121.00
## 287 114.14
## 288 144.72
## 289 184.07
## 290 194.16
## 291 134.56
## 292 192.50
## 293 171.00
## 294 164.50
## 295 187.70
## 296  86.74
## 297 115.70
## 298 116.10
## 299 274.90
## 300 229.80
## 301 335.60
## 302 224.40
## 303 190.10
## 304 249.11
## 305 160.40
## 306 132.80
## 307 151.70
## 308  99.71
## 309 101.00
## 310 111.31
## 311 120.59
## 312 157.59
## 313 168.76
## 314 184.24
## 315 142.50
## 316 205.47
## 317 117.80
## 318  65.30
## 319  88.50
## 320  94.82
## 321  75.37
## 322 149.50
## 323  89.23
## 324  61.20
## 325 116.80
## 326 184.24
## 327 171.85
## 328 205.47
## 329 164.85
## 330 134.64
## 331 117.10
## 332  85.45
## 333  99.93
## 334 131.12
## 335 146.09
## 336 154.28
## 337 168.76
## 338  93.50
## 339  80.10
## 340  89.20
## 341  47.20
## 342  54.20
## 343 117.10
## 344  31.40
## 345  99.93
## 346 131.12
## 347 146.09
## 348 154.28
## 349 168.76
## 350 121.00
## 351 157.90
## 352 110.70
## 353  70.70
## 354  56.90
## 355  88.28
## 356  66.22
## 357  94.94
## 358 206.30
## 359 146.80
## 360 114.80
## 361  95.97
## 362  81.77
## 363 171.85
## 364 205.47
## 365 164.85
## 366 134.64
## 367 117.10
## 368  95.61
## 369  95.00
## 370  72.70
## 371  76.00
## 372 263.50
## 373  96.90
## 374 184.24
## 375 171.85
## 376 205.47
## 377 164.85
## 378 134.64
## 379 107.55
## 380  92.37
## 381  70.48
## 382 160.68
## 383 146.09
## 384 154.28
## 385 180.30
## 386 255.30
## 387 279.20
## 388 262.90
## 389 266.90
## 390 168.40
## 391 143.60
## 392  90.05
## 393  71.11
## 394  85.09
## 395  73.32
## 396 108.00
## 397 261.00
## 398 173.10
## 399 197.30
## 400 132.00
## 401 161.90
## 402 131.40
## 403 117.10
## 404  40.15
## 405  54.57
## 406  82.84
## 407  64.80
## 408 107.60
## 409  61.50
## 410 184.24
## 411 171.85
## 412 205.47
## 413 164.85
## 414 134.64
## 415 117.10
## 416  85.45
## 417  99.93
## 418 131.12
## 419 146.09
## 420 154.28
## 421 168.76
## 422 184.24
## 423 171.85
## 424 205.47
## 425 164.85
## 426 134.64
## 427  95.90
## 428  44.40
## 429  99.93
## 430 131.12
## 431 146.09
## 432 154.28
## 433 239.90
## 434 281.20
## 435 473.70
## 436 430.20
## 437 153.10
## 438  23.40
## 439   0.30
## 440   2.50
## 441   7.70
## 442   7.10
## 443   9.10
## 444  58.30
## 445 618.10
## 446 288.20
## 447 192.90
## 448 507.10
## 449 188.50
## 450   1.50
## 451   2.50
## 452   0.00
## 453   1.10
## 454   0.30
## 455  11.80
## 456  56.10
## 457 145.30
## 458 540.10
## 459 691.30
## 460 627.30
## 461 190.00
## 462  12.90
## 463   2.80
## 464   0.60
## 465   1.90
## 466  18.90
## 467  72.60
## 468 222.50
## 469 446.60
## 470 386.70
## 471 269.10
## 472 344.40
## 473 170.40
## 474  23.60
## 475  34.80
## 476   8.80
## 477   1.10
## 478  73.10
## 479  53.30
## 480 187.00
## 481 236.50
## 482 204.20
## 483 365.90
## 484 284.10
## 485 240.20
## 486  12.40
## 487   5.10
## 488   2.00
## 489  18.10
## 490  13.80
## 491   2.10
## 492  27.90
## 493 227.00
## 494 245.70
## 495 192.50
## 496 462.00
## 497   6.20
## 498   0.90
## 499   3.70
## 500   0.50
## 501   2.00
## 502   1.30
## 503   3.40
## 504 108.00
## 505 263.50
## 506 629.50
## 507 485.00
## 508 144.70
## 509  32.80
## 510  17.10
## 511   5.90
## 512   9.20
## 513  11.20
## 514   4.00
## 515  28.40
## 516  49.10
## 517 242.90
## 518 272.90
## 519 371.20
## 520 407.60
## 521 116.80
## 522  29.70
## 523  19.80
## 524   0.70
## 525   0.50
## 526   1.40
## 527  21.70
## 528  55.70
## 529 535.30
## 530 490.20
## 531 592.70
## 532 320.50
## 533 141.70
## 534   8.80
## 535   7.80
## 536  67.20
## 537  10.80
## 538  13.60
## 539   9.90
## 540  31.10
## 541 301.50
## 542 288.40
## 543 381.10
## 544 201.00
## 545 140.00
## 546  13.50
## 547   1.40
## 548   0.60
## 549   0.30
## 550   6.00
## 551   0.10
## 552  65.00
## 553 389.00
## 554 835.30
## 555 489.10
## 556 694.40
## 557 231.90
## 558  18.70
## 559  31.80
## 560   1.50
## 561  13.80
## 562   1.10
## 563  24.80
## 564 300.70
## 565 369.60
## 566 490.50
## 567 144.10
## 568 725.70
## 569   9.90
## 570  48.40
## 571  47.30
## 572   1.10
## 573   4.20
## 574   4.20
## 575   4.80
## 576 150.60
## 577 636.80
## 578 782.60
## 579 827.90
## 580 440.50
## 581 409.30
## 582  30.60
## 583   1.80
## 584   1.30
## 585   0.90
## 586   6.10
## 587  15.70
## 588  75.80
## 589 424.70
## 590 491.60
## 591 550.90
## 592 435.10
## 593  64.90
## 594  12.80
## 595   0.60
## 596   2.20
## 597   4.90
## 598   6.70
## 599   0.30
## 600  66.30
## 601 343.70
## 602 398.20
## 603 147.10
## 604 271.30
## 605 184.60
## 606  50.30
## 607   4.90
## 608   0.90
## 609  12.50
## 610  60.00
## 611   2.50
## 612  25.10
## 613 419.50
## 614 553.50
## 615 364.60
## 616 489.00
## 617 420.80
## 618 238.70
## 619  32.10
## 620   1.00
## 621   1.20
## 622  85.30
## 623 181.30
## 624 232.60
## 625 423.20
## 626 383.70
## 627 625.90
## 628 441.10
## 629 115.70
## 630   6.20
## 631   2.40
## 632   1.90
## 633  28.20
## 634   3.40
## 635  13.30
## 636  18.30
## 637 539.70
## 638 577.30
## 639 929.50
## 640 720.30
## 641 309.60
## 642  52.30
## 643   0.30
## 644   4.60
## 645   2.20
## 646  30.00
## 647   5.10
## 648  99.50
## 649 132.00
## 650 550.70
## 651 283.30
## 652 281.70
## 653 124.60
## 654   1.30
## 655   3.00
## 656   0.50
## 657   0.80
## 658   0.80
## 659   7.70
## 660 344.20
## 661 430.60
## 662 750.80
## 663 638.90
## 664 544.40
## 665 357.20
## 666 130.50
## 667  10.80
## 668   0.80
## 669  23.40
## 670   5.00
## 671  99.50
## 672 138.34
## 673 289.20
## 674 826.60
## 675 324.00
## 676 286.10
## 677 168.88
## 678  23.20
## 679   5.70
## 680   3.50
## 681   0.70
## 682  22.50
## 683   1.40
## 684 103.50
View(datavalencia)


data_serie <- ts(datavalencia$DATOS, frequency=12, start=1966)
data_serie
##         Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct
## 1966 132.10 105.50  91.32 178.20 150.70 213.80 110.50 131.70 124.50 129.20
## 1967 196.10 149.70 125.40 226.50 172.30 129.80 138.10  87.61 125.70 166.70
## 1968 145.40 186.63 158.20 216.63 182.20  87.78 108.24  78.62  94.51 158.30
## 1969  90.96 267.02 154.00 235.74 168.22 146.60 134.70  89.44  47.18  90.63
## 1970 113.40 185.90 197.70 219.50 125.90 100.30 126.20  78.58 101.60 173.10
## 1971 149.30 172.60 101.30 226.90 144.60 112.20  86.05  74.32  89.04 156.50
## 1972 146.44 274.80 167.48 233.50 162.90 151.60  89.39  88.13  97.61 116.20
## 1973 262.70 287.60 242.60 239.30 195.50 169.40 167.40 128.30 202.80 186.70
## 1974 273.10 200.70 188.20 179.90 158.40 121.80 110.60  69.49  74.98 123.70
## 1975 109.20 124.50  99.16 163.20 170.40 194.30 121.50 114.50 105.90 128.60
## 1976 194.00 271.20 295.20 258.67 166.24 130.30 150.10  90.43  97.60 180.10
## 1977 237.70 294.20 237.10 169.80 219.40 209.80 227.10 123.70  97.65 187.60
## 1978 215.30 207.60 195.90 280.80 176.20 143.00 160.80  95.25  77.66  72.33
## 1979 125.80 133.30 178.40 163.80 157.40 138.20 114.10 104.80 100.80 167.70
## 1980 235.29 184.24  76.06 297.42 205.42  22.46  53.82 108.43 371.96 194.71
## 1981 168.76 184.24 171.85 204.13 204.10 165.80  97.13  85.12 150.90 133.20
## 1982 154.90 278.00 171.20 193.20 164.40 130.00  93.65  64.59 122.46 104.70
## 1983 129.00 131.60 135.20 206.70 149.60 122.90 111.89  91.45 161.55 156.72
## 1984 105.13 246.30 165.85 184.17 134.41 141.52 129.65  66.81  77.10 138.30
## 1985 139.80 126.80 130.30 146.00 140.40  99.37  72.74  83.04  59.01  82.57
## 1986 119.00 142.90 166.10 184.74 135.54 114.89 101.82  83.90  99.60 106.07
## 1987 152.90 243.95 145.06 238.81 231.50 170.39 112.40 104.00  90.40 124.80
## 1988 170.02 165.09 205.90 184.77 146.86 173.29 136.56  78.30 109.46 106.71
## 1989 133.40 145.20 158.90 147.50 166.50 121.00 111.60 113.20  80.92 121.00
## 1990 184.07 194.16 134.56 192.50 171.00 164.50 187.70  86.74 115.70 116.10
## 1991 335.60 224.40 190.10 249.11 160.40 132.80 151.70  99.71 101.00 111.31
## 1992 168.76 184.24 142.50 205.47 117.80  65.30  88.50  94.82  75.37 149.50
## 1993 116.80 184.24 171.85 205.47 164.85 134.64 117.10  85.45  99.93 131.12
## 1994 168.76  93.50  80.10  89.20  47.20  54.20 117.10  31.40  99.93 131.12
## 1995 168.76 121.00 157.90 110.70  70.70  56.90  88.28  66.22  94.94 206.30
## 1996  95.97  81.77 171.85 205.47 164.85 134.64 117.10  95.61  95.00  72.70
## 1997  96.90 184.24 171.85 205.47 164.85 134.64 107.55  92.37  70.48 160.68
## 1998 180.30 255.30 279.20 262.90 266.90 168.40 143.60  90.05  71.11  85.09
## 1999 261.00 173.10 197.30 132.00 161.90 131.40 117.10  40.15  54.57  82.84
## 2000  61.50 184.24 171.85 205.47 164.85 134.64 117.10  85.45  99.93 131.12
## 2001 168.76 184.24 171.85 205.47 164.85 134.64  95.90  44.40  99.93 131.12
## 2002 239.90 281.20 473.70 430.20 153.10  23.40   0.30   2.50   7.70   7.10
## 2003 618.10 288.20 192.90 507.10 188.50   1.50   2.50   0.00   1.10   0.30
## 2004 145.30 540.10 691.30 627.30 190.00  12.90   2.80   0.60   1.90  18.90
## 2005 446.60 386.70 269.10 344.40 170.40  23.60  34.80   8.80   1.10  73.10
## 2006 236.50 204.20 365.90 284.10 240.20  12.40   5.10   2.00  18.10  13.80
## 2007 227.00 245.70 192.50 462.00   6.20   0.90   3.70   0.50   2.00   1.30
## 2008 263.50 629.50 485.00 144.70  32.80  17.10   5.90   9.20  11.20   4.00
## 2009 242.90 272.90 371.20 407.60 116.80  29.70  19.80   0.70   0.50   1.40
## 2010 535.30 490.20 592.70 320.50 141.70   8.80   7.80  67.20  10.80  13.60
## 2011 301.50 288.40 381.10 201.00 140.00  13.50   1.40   0.60   0.30   6.00
## 2012 389.00 835.30 489.10 694.40 231.90  18.70  31.80   1.50  13.80   1.10
## 2013 369.60 490.50 144.10 725.70   9.90  48.40  47.30   1.10   4.20   4.20
## 2014 636.80 782.60 827.90 440.50 409.30  30.60   1.80   1.30   0.90   6.10
## 2015 424.70 491.60 550.90 435.10  64.90  12.80   0.60   2.20   4.90   6.70
## 2016 343.70 398.20 147.10 271.30 184.60  50.30   4.90   0.90  12.50  60.00
## 2017 419.50 553.50 364.60 489.00 420.80 238.70  32.10   1.00   1.20  85.30
## 2018 423.20 383.70 625.90 441.10 115.70   6.20   2.40   1.90  28.20   3.40
## 2019 539.70 577.30 929.50 720.30 309.60  52.30   0.30   4.60   2.20  30.00
## 2020 132.00 550.70 283.30 281.70 124.60   1.30   3.00   0.50   0.80   0.80
## 2021 430.60 750.80 638.90 544.40 357.20 130.50  10.80   0.80  23.40   5.00
## 2022 289.20 826.60 324.00 286.10 168.88  23.20   5.70   3.50   0.70  22.50
##         Nov    Dec
## 1966 164.90 187.40
## 1967 299.40 171.60
## 1968 170.61  99.91
## 1969  72.13 114.90
## 1970 152.80  84.49
## 1971 137.70 181.10
## 1972 211.40 211.20
## 1973 181.60 153.60
## 1974 162.50 233.40
## 1975 133.30 148.80
## 1976 262.10 283.80
## 1977 177.50 182.10
## 1978 141.00 165.00
## 1979  78.21 131.90
## 1980 135.28 171.92
## 1981  96.27  99.44
## 1982 136.09 122.30
## 1983 183.99 129.00
## 1984 160.80 106.30
## 1985 127.30 128.50
## 1986 184.59 133.52
## 1987 141.60 169.10
## 1988  85.48  67.40
## 1989 114.14 144.72
## 1990 274.90 229.80
## 1991 120.59 157.59
## 1992  89.23  61.20
## 1993 146.09 154.28
## 1994 146.09 154.28
## 1995 146.80 114.80
## 1996  76.00 263.50
## 1997 146.09 154.28
## 1998  73.32 108.00
## 1999  64.80 107.60
## 2000 146.09 154.28
## 2001 146.09 154.28
## 2002   9.10  58.30
## 2003  11.80  56.10
## 2004  72.60 222.50
## 2005  53.30 187.00
## 2006   2.10  27.90
## 2007   3.40 108.00
## 2008  28.40  49.10
## 2009  21.70  55.70
## 2010   9.90  31.10
## 2011   0.10  65.00
## 2012  24.80 300.70
## 2013   4.80 150.60
## 2014  15.70  75.80
## 2015   0.30  66.30
## 2016   2.50  25.10
## 2017 181.30 232.60
## 2018  13.30  18.30
## 2019   5.10  99.50
## 2020   7.70 344.20
## 2021  99.50 138.34
## 2022   1.40 103.50
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)
## 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 (`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")

#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 (`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 (`geom_line()`).

# verificando los residuales
checkresiduals(m5)

## 
##  Ljung-Box test
## 
## data:  Residuals from NNAR(1,1,2)[12]
## Q* = 196.77, 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.002163032  14.44859  11.5629  -0.2930664  4.26158 0.3609987
## Test set     -47.251214118 157.26990 144.0537 -13.4501122 29.64088 4.4974200
##                   ACF1 Theil's U
## Training set 0.5615217        NA
## Test set     0.7019748  3.276162

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.