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 \(\textbf{serie de tiempo}\) es una secuencia de datos numéricos observados o registrados en puntos sucesivos en el tiempo, generalmente a intervalos uniformemente espaciados. Matemáticamente, una serie de tiempo se define como una colección de observaciones \((x_t)\) donde \(t\) denota el tiempo y \(x_t\) es el valor de la observación en el tiempo \(t\).
Formalmente, se puede expresar como: \[\{x_t\}_{t \in T} = \{x_t\}, \quad t \in T\] donde:
- \(\{x_t\}\) representa la serie de tiempo,
- \(t\) es el índice temporal, y
- \(T\) es el conjunto de todos los puntos en el tiempo en los cuales las observaciones se han realizado, como \(T =\{t_1, t_2, t_3, \ldots, t_n\}\).
Las series de tiempo pueden ser:
Determinísticas Una serie de tiempo es determinística si su comportamiento puede ser descrito completamente por una función matemática sin componentes aleatorias. En otras palabras, dado un modelo matemático y los valores iniciales, se puede predecir el valor futuro de la serie con exactitud.
Estocásticas sna serie de tiempo es estocástica si incluye componentes aleatorias, lo que significa que no se puede predecir con certeza el valor futuro de la serie, incluso conociendo el modelo matemático subyacente. Estas series incorporan variabilidad inherente y están sujetas a incertidumbre.
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
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)## [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:
Conocer el tiempo de fin de la serie:
Conocer la frecuencia de la serie:
Representación gráfica de la serie:
Representación numérica de la serie:
Unidad de tiempo a la que pertenece cada observación de la serie:
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):
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...)##
## Adjuntando el paquete: '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)library(readr)
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)## Warning in create_yaxis(ntss, heights = heights, turnopposite = TRUE, title =
## list(text = NULL), : Deprecated function. Use the `create_axis` function.
## 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)
## [1] "ts"
- Año y mes de inicio de la serie:
start(AP)
## [1] 1949 1
- Año y mes de finalización de la serie:
end(AP)
## [1] 1960 12
- Frecuencia de la serie:
frequency(AP)
## [1] 12
- Resumen:
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
## Time Series:
## Start = 1949
## End = 1960
## Frequency = 1
## [1] 1520 1676 2042 2364 2700 2867 3408 3939 4421 4572 5140 5714
## 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
oilfilters
library(readr)
oilfilters=rio::import("https://github.com/Wilsonsr/Series-de-Tiempo/raw/main/bases/oilfilters.dat", format=",")
oilfilters <-ts(oilfilters, start=c(1984,1), end= c(1987,7), frequency = 12 )
autoplot(oilfilters, colour = "red")## Warning in create_yaxis(ntss, heights = heights, turnopposite = TRUE, title =
## list(text = NULL), : Deprecated function. Use the `create_axis` function.
## fecha resp pm10
## 1 2023-01-01 16 34.92821
## 2 2023-01-02 36 21.60552
## 3 2023-01-03 29 22.43194
## 4 2023-01-04 23 27.94880
## 5 2023-01-05 32 27.77095
## 6 2023-01-06 18 36.90684
## fecha resp pm10
## Min. :2023-01-01 00:00:00 Min. : 12.00 Min. : 8.643
## 1st Qu.:2023-04-26 06:00:00 1st Qu.: 39.00 1st Qu.:22.479
## Median :2023-08-19 12:00:00 Median : 53.00 Median :30.069
## Mean :2023-08-19 12:00:00 Mean : 55.29 Mean :32.468
## 3rd Qu.:2023-12-12 18:00:00 3rd Qu.: 67.00 3rd Qu.:40.715
## Max. :2024-04-06 00:00:00 Max. :134.00 Max. :80.513
## Cargando paquete requerido: zoo
##
## Adjuntando el paquete: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
##
## ######################### Warning from 'xts' package ##########################
## # #
## # The dplyr lag() function breaks how base R's lag() function is supposed to #
## # work, which breaks lag(my_xts). Calls to lag(my_xts) that you type or #
## # source() into this session won't work correctly. #
## # #
## # Use stats::lag() to make sure you're not using dplyr::lag(), or you can add #
## # conflictRules('dplyr', exclude = 'lag') to your .Rprofile to stop #
## # dplyr from breaking base R's lag() function. #
## # #
## # Code in packages is not affected. It's protected by R's namespace mechanism #
## # Set `options(xts.warn_dplyr_breaks_lag = FALSE)` to suppress this warning. #
## # #
## ###############################################################################
##
## Adjuntando el paquete: 'xts'
## The following objects are masked from 'package:dplyr':
##
## first, last
## Warning: No trace type specified and no positional attributes specified
## No trace type specified:
## Based on info supplied, a 'scatter' trace seems appropriate.
## Read more about this trace type -> https://plotly.com/r/reference/#scatter
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plotly.com/r/reference/#scatter-mode
Estacionariedad (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:
## 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
## 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
## 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