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.

Economía y Marketing

  • Proyecciones del empleo y desempleo.
  • Evolución del índice de precios de la leche.
  • Beneficios netos mensuales de cierta entidad bancaria.
  • Índices del precio del petróleo.

Demografía

  • Número de habitantes por año.
  • Tasa de mortalidad infantil por año.

Medioambiente

  • Evolución horaria de niveles de óxido de azufre y de niveles de óxido de nitrógeno en una ciudad durante una serie de años.
  • Lluvia recogida diariamente en una localidad.
  • Temperatura media mensual.
  • Medición diaria del contenido en residuos tóxicos en un río.

Algunos trabajos en series de tiempo


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.

Los datos clásicos de la aerolínea Box & Jenkins. Totales mensuales de pasajeros de aerolíneas internacionales, 1949 a 1960.

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)
df <- read_excel("IPC.xlsx") # CARGAR los datos
IPC=ts(df[,2], start = c(2000,1),  frequency = 12)
plot(IPC)

ts_plot(IPC)
autoplot(IPC)

hchart(IPC) %>% hc_add_theme(hc_theme_economist()) %>% hc_title(text="IPC", align="center") %>% hc_xAxis(title = list(text = "Tiempo")) %>% hc_yAxis(title = list(text = "IPC"))
#library(readr)
#amazon=read_csv("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")
ts_heatmap(AirPassengers)

oilfilters

library(readr)
oilfilters <- read_csv("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")
## Rows: 144 Columns: 1
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## dbl (1): tempdub
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
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(diff(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(diff(AirPassengers), lag = 12)
##      Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 1950       5   1  -3  -2  10   8   0   0  -8  -4  12
## 1951   8  -6  13  -9  19 -18   0   0  -3   3   3  -6
## 1952   0   4 -15   3  -7  29  -9  12 -18   4  -3   2
## 1953  -3  -9  27  11  -8 -21   9  -4  -2  -8 -12  -1
## 1954   1 -16   7  -7  13  16  17 -17   1  -4   5   5
## 1955  10   7 -13  10  -6  15  11  -8  -1  -8 -11  15
## 1956  -7   2   6  -6   4  11 -10   9 -15 -11   2  -6
## 1957   3  -7  15  -4   2  11   4  10 -13  -8  -7  -4
## 1958  -5  -8 -11  -6   8   5  13  12 -38  12  -7  -4
## 1959  19   4  20   4   9 -20  20  -3   5 -11   4  16
## 1960 -11  -8 -36  52 -13  11  11 -27  -2   9 -26  -1
autoplot(diff(diff(AirPassengers), lag = 12))