SERIES DE TIEMPO UNIVARIADAS
objetivo: Aprender y aplicar métodos estadísticos para el análisis de los datos que se han observado a lo largo del tiempo.
Desafío en este curso es dar cuenta de la correlación entre las mediciones que están cerca en el tiempo. Los temas cubiertos en este curso incluyen métodos para:
Modelado de datos de series temporales univariantes con modelos autorregresivos y de media móvil (denominados modelos ARIMA, a veces llamados modelos Box Jenkins).
Herramientas para la identificación del modelo, la estimación del modelo y la evaluación de la idoneidad del modelo.
Usar un modelo para pronosticar y determinar intervalos de predicción para pronósticos.
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.
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 tiempoConocer 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ónExtraer 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 muestraboxplot(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
df <- read_excel("IPC.xlsx")
IPC=ts(df[,2], start = c(2000,1), frequency = 12)
plot(IPC)ts_plot(IPC)## Warning: `arrange_()` was deprecated in dplyr 0.7.0.
## Please use `arrange()` instead.
## See vignette('programming') for more help
autoplot(IPC)hchart(IPC)## Warning: `as_data_frame()` was deprecated in tibble 2.0.0.
## Please use `as_tibble()` instead.
## The signature and semantics have changed, see `?as_tibble`.
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: `data_frame()` was deprecated in tibble 1.1.0.
## Please use `tibble()` instead.
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))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")##
## ── Column specification ────────────────────────────────────────────────────────
## cols(
## tempdub = col_double()
## )
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"))Larain
Serie Anual de Precipitaciones en los Ángeles
larain <- read_csv("larain.dat")
larain<-ts(larain,start=1778 , end=1982, frequency = 12)
autoplot(larain, ts.colour = "red", ts.linetype = "dashed")autoplot(stl(larain, s.window = "periodic"))hchart(larain)%>%hc_add_theme(hc_theme_538())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))