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 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.
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 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)
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=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 <-ts(oilfilters, start=1984, end= c(1987,7), frequency = 12 )
autoplot(oilfilters, colour = "red")autoplot(stl(oilfilters, s.window = "periodic"))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))plot(diff(AirPassengers, lag =12))