SERIES DE TIEMPO UNIVARIADAS

Series de tiempo

La metodología de es una herramienta estadística que pretende estudiar un mismo fenómeno cuantitativo a través del tiempo con la finalidad de poder obtener pronósticos de forma asertiva.

Esta metodología se utiliza ampliamente en los negocios, las ciencias sociales, las ciencias biológicas, y en muchas otras disciplinas.


Definición:


Una serie de tiempo es un conjunto de observaciones sobre algún fenómeno que está indexado por el tiempo. Más formalmente, dada una sucesión de variables aleatorias \(Y_1, \cdots, Y_t\) se consideran sus respectivas realizaciones \(y_1,\cdots, y_t\). Considerando \(\{Y(\omega, t)\mid t \in \mathbb{N}\}\), siendo \(t\) la dimensión temporal y \(\omega\) el elemento de aleatoriedad. Se tienen los escenarios siguientes:

  • \(\omega\) y \(t\) varían, tenemos un proceso estocástico (Serie de tiempo).
  • \(\omega\) fijo y \(t\) variando, tenemos una serie de tiempo.
  • \(\omega\) variando y \(t\) fijo, tenemos una Variable aleatoria.
  • \(\omega\) y \(t\) fijos, tenemos un número.

Objetivos básicos del análisis

El objetivo básico generalmente es determinar un modelo que describa el patrón de las series de tiempo. Los usos para tal modelo son:

  • Describir las características importantes del patrón de series de tiempo.
  • Explicar cómo el pasado afecta el futuro o cómo dos series temporales pueden “interactuar”.
  • Para pronosticar valores futuros de la serie.
  • Posiblemente sirva como un estándar de control para una variable que mide la calidad del producto en algunas situaciones de fabricación.

Nilo

library(tseries)
library(ggplot2)
library(ggfortify)
library(dplyr)
library(plotly)
autoplot(Nile,ts.colour = "red")+
  ggtitle("Volumen Anual del Rio Nilo")+
  xlab("Tiempo")+
  ylab("Volumen \n (1X10^9 m^3)")

g<-autoplot(Nile,ts.colour = "red")+
    ggtitle("Volumen Anual del Rio Nilo")+
    xlab("Año")+
    ylab("Volumen \n (1X10^9 m^3)")
ggplotly(g)
class(Nile)
## [1] "ts"

Supuestos para la toma de datos en series temporales

  • Observaciones consecutivas están igualmente espaciadas
  • Aplicar un índice de observación en el tiempo discreto
  • Lo anterior tal vez sólo pueda lograrse de forma aproximada

Componentes de una serie temporal

  • Componente tendencia. Se puede definir como un cambio a largo plazo que se produce en la relación al nivel medio, o el cambio a largo plazo de la media. La tendencia se identifica con un movimiento suave de la serie a largo plazo

  • Componente estacional Muchas series temporales presentan cierta periodicidad o dicho de otro modo, variación de cierto período (semestral, mensual, etc.)

  • Componente aleatoria: Esta componente no responde a ningún patrón de comportamiento, sino que es el resultado de factores fortuitos o aleatorios que inciden de forma aislada en una serie de tiempo

\[X_{t}=T_{t}+E_{t}+I_{t}\]

donde:

  • \(T_{t}\): es la tendencia
  • \(E_{t}\): es la componente estacional
  • \(I_{t}\): es la componente aleatoria.

Algunos Comandos en R

Para que R trate a un conjunto de datos como serie de tiempo:

ts(data, start, end, frequency)

    - data: vector o matrix con las observaciones
    - start: tiempo de la primera observación
    - end: tiempo de la última observación
    - frequency: número de observaciones por unidad de tiempo

Conocer el tiempo de comienzo o inicio de la serie:

start(serie temporal)

Conocer el tiempo de fin de la serie:

end(serie temporal)

Conocer la frecuencia de la serie:

frequency(serie temporal)

Representación gráfica de la serie:

plot(serie temporal)

Representación numérica de la serie:

print(serie temporal)

Unidad de tiempo a la que pertenece cada observación de la serie:

cycle(serie temporal)

Obtener un subconjunto de la serie teporal (puede ser interesante por ejemplo para pintar un año y ver si presenta componente estacional):

window(serie temporal, start, end)
    - start: tiempo de la primera observación
    - end: tiempo de la última observación

Extraer las subseries estacionales de la serie y pintarlas todas juntas (es interesante para ver la componente estacional)(lo ideal es usarlas sin la componente tendecia):

monthplot(serie temporal, phase)

    - phase: indica la estación a la que corresponde cada muestra
boxplot(formula, serie temporal)

    - formula: fórmula que indica la serie temporal y su división en ciclos (es decir, a que estación o ciclo corresponde cada muestra)

Agregación de los datos de la serie temporal (puede ser interesante por ejemplo para cambiar la frecuencia de anual a trimestral)(siempre que los datos sean agregables):

aggregate(serie temporal, FUN, nfrequency)

    -FUN: función con la que se computa la agregación (mean)
    -nfrequency: nuevo número de observaciones por unidad de tiempo (12->mensual, 4->trimestral, 1->anual...)
library(readxl)
library(TSstudio)
library(highcharter)
## Highcharts (www.highcharts.com) is a Highsoft software product which is
## not free for commercial and Governmental use
library(rio)
## 
## Attaching package: 'rio'
## The following object is masked from 'package:plotly':
## 
##     export
df=rio::import("https://github.com/Wilsonsr/Series-de-Tiempo/raw/main/bases/IPC.xlsx")
#df <- read_excel("IPC.xlsx")
IPC=ts(df[,2], start = c(2000,1),  frequency = 12)
plot(IPC)

ts_plot(IPC)
autoplot(IPC)

hchart(IPC)
library(readr)
#amazon=read_csv("AMZN.csv")
amazon=rio::import("https://github.com/Wilsonsr/Series-de-Tiempo/raw/main/bases/AMZN.csv")
amazon=ts(amazon[,5], start=c(1997,06,01), frequency = 12)
hchart(amazon)
autoplot(AirPassengers, ts.colour = "blue")

autoplot(stl(AirPassengers, s.window = "periodic"), ts.colour="blue")

library(highcharter)
hchart(stl(AirPassengers, s.window='periodic'))
## Warning: Deprecated function. Use the `create_axis` function.
AP = AirPassengers
# Observamos los datos
print(AP)
##      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

Observamos la clase de la variable AP class(AP)

class(AP)
## [1] "ts"
  • Año y mes de inicio de la serie: start(AP)
start(AP)
## [1] 1949    1
  • Año y mes de finalización de la serie: end(AP)
end(AP)
## [1] 1960   12
  • Frecuencia de la serie: frequency(AP)
print(frequency(AP))
## [1] 12
  • Resumen: summary(AP)
summary(AP)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   104.0   180.0   265.5   280.3   360.5   622.0
  • Gráfico básico de la serie
plot(AP, ylab = "Número de pasajeros x 1000")

aggregate(AP)
## Time Series:
## Start = 1949 
## End = 1960 
## Frequency = 1 
##  [1] 1520 1676 2042 2364 2700 2867 3408 3939 4421 4572 5140 5714
cycle(AP)
##      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1949   1   2   3   4   5   6   7   8   9  10  11  12
## 1950   1   2   3   4   5   6   7   8   9  10  11  12
## 1951   1   2   3   4   5   6   7   8   9  10  11  12
## 1952   1   2   3   4   5   6   7   8   9  10  11  12
## 1953   1   2   3   4   5   6   7   8   9  10  11  12
## 1954   1   2   3   4   5   6   7   8   9  10  11  12
## 1955   1   2   3   4   5   6   7   8   9  10  11  12
## 1956   1   2   3   4   5   6   7   8   9  10  11  12
## 1957   1   2   3   4   5   6   7   8   9  10  11  12
## 1958   1   2   3   4   5   6   7   8   9  10  11  12
## 1959   1   2   3   4   5   6   7   8   9  10  11  12
## 1960   1   2   3   4   5   6   7   8   9  10  11  12
boxplot(AirPassengers ~ cycle(AirPassengers))

ts_seasonal(AirPassengers, type = "all")

oilfilters

library(readr)
#oilfilters <- read_csv("oilfilters.dat")
oilfilters=rio::import("https://github.com/Wilsonsr/Series-de-Tiempo/raw/main/bases/oilfilters.dat")
oilfilters <-ts(oilfilters,  start=1984, end= c(1987,7), frequency = 12  )
autoplot(oilfilters, colour = "red")

autoplot(stl(oilfilters, s.window = "periodic"))

Tempdub

Temperatura promedio mensual (en grados Fahrenheit) registrada en Dubuque 1/1964 - 12/1975

#tempdub <- read_csv("tempdub.dat")
tempdub=rio::import("https://github.com/Wilsonsr/Series-de-Tiempo/raw/main/bases/tempdub.dat")
## Ambiguous file format ('.dat'), but attempting 'data.table::fread("/tmp/RtmpKzQWUi/file19b554d1260.dat")'
tempdub<-ts(tempdub, start=1964,end= 1976,frequency = 12)
plot(tempdub)

autoplot(tempdub, colour = "blue")

a<-autoplot(tempdub, ts.colour = "green")+
    xlab("Tiempo")+
    ylab("Temperatura")
  
ggplotly(a)
autoplot(stl(tempdub, s.window = "periodic"))

plot(decompose(tempdub))

boxplot(tempdub ~ cycle(tempdub))

Con el paquete highcharter

library(highcharter)
hchart(tempdub)%>%hc_add_theme(hc_theme_darkunica())
hchart(stl(tempdub, s.window = "periodic"))
## Warning: Deprecated function. Use the `create_axis` function.

Estacionaria (descriptiva)

una serie es estacionaria cuando es estable a lo largo del tiempo, es decir, cuando la media y varianza son constantes en el tiempo. Esto se refleja gráficamente en que los valores de la serie tienden a oscilar alrededor de una media constante y la variabilidad con respecto a esa media también permanece constante en el tiempo.

No estacionarias.- Son series en las cuales la tendencia y/o variabilidad cambian en el tiempo.

Eliminación de tendencia: Una forma sencilla de eliminar una tendencia aproximadamente lineal es diferenciar la serie, es decir, considerar la serie de diferencias entre una observación y la anterior en lugar de la serie original. Si \(x_t\) es una serie contenida en \(x\), para calcular \(∇x_t=x_t−x_{t−1}\) con R se escribe:

autoplot(AirPassengers)

autoplot(log(AirPassengers))

autoplot(diff(AirPassengers))

autoplot(diff(log(AirPassengers)))

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
diff(AirPassengers)
##       Jan  Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec
## 1949         6   14   -3   -8   14   13    0  -12  -17  -15   14
## 1950   -3   11   15   -6  -10   24   21    0  -12  -25  -19   26
## 1951    5    5   28  -15    9    6   21    0  -15  -22  -16   20
## 1952    5    9   13  -12    2   35   12   12  -33  -18  -19   22
## 1953    2    0   40   -1   -6   14   21    8  -35  -26  -31   21
## 1954    3  -16   47   -8    7   30   38   -9  -34  -30  -26   26
## 1955   13   -9   34    2    1   45   49  -17  -35  -38  -37   41
## 1956    6   -7   40   -4    5   56   39   -8  -50  -49  -35   35
## 1957    9  -14   55   -8    7   67   43    2  -63  -57  -42   31
## 1958    4  -22   44  -14   15   72   56   14 -101  -45  -49   27
## 1959   23  -18   64  -10   24   52   76   11  -96  -56  -45   43
## 1960   12  -26   28   42   11   63   87  -16  -98  -47  -71   42
diff(AirPassengers, lag = 12)
##      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1950   3   8   9   6   4  14  22  22  22  14  10  22
## 1951  30  24  37  28  47  29  29  29  26  29  32  26
## 1952  26  30  15  18  11  40  31  43  25  29  26  28
## 1953  25  16  43  54  46  25  34  30  28  20   8   7
## 1954   8  -8  -1  -8   5  21  38  21  22  18  23  28
## 1955  38  45  32  42  36  51  62  54  53  45  34  49
## 1956  42  44  50  44  48  59  49  58  43  32  34  28
## 1957  31  24  39  35  37  48  52  62  49  41  34  30
## 1958  25  17   6   0   8  13  26  38   0  12   5   1
## 1959  20  24  44  48  57  37  57  54  59  48  52  68
## 1960  57  49  13  65  52  63  74  47  45  54  28  27
autoplot(diff(diff(AirPassengers), lag = 12))

plot(diff(AirPassengers, lag =12))