Está en la página 1de 18

Métodos Avanzados

Lic. Juan Isaula


Octubre, 2022

Contents
1 Regresión Dinámica 2
1.1 Pronósticos con modelo de regresión dinámica . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Practica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2 Regresión Armónica Dinámica 7


2.1 Practicas: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3 Modelos TBATS 14
3.1 Datos de gasolina de EE.UU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.2 Datos del centro de llamadas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.3 Modeos TBATS para la demanda de electricidad . . . . . . . . . . . . . . . . . . . . . . . . . 16

4 Su futuro en la predicción 18

1
Contents

1 Regresión Dinámica
Hasta ahora hemos utilizado modelos de predicción que utilizan solo el historial de la serie temporal, pero no
utilice ninguna otra información. Pero a menudo hay información adicional disponible que nos ayudará a
hacer mejores predicciones. Por ejemplo, si estamos pronosticando ventas mensualmente, entonces podríamos
utilizar la inversión publicitaria del mes para mejorar nuestras predicciones, o quizás, información sobre las
actividades de la competencia. La regresión dinamica es una forma de combinar esta información con el
historial de la serie temporal en un solo modelo. Este modelo de regresión lineal parece un modelo de
regresión lineal estándar.

yt = β0 + β1 x1,t + ... + βr xr,t + et

Tiene la variable a pronósticar en el lado izquierdo y varias variables predictoras en el lado derecho. Estos
proporcionan la información externa que deseamos utilizar al realizar pronósticos. La diferencia con la
regresión ordinaria está en el término de error.
En regresión dinámica, el término de error es un ARIMA, mientras que en regresión ordinaria, el término de
error es ruido blanco. Este proceso ARIMA es donde se incorpora la información histórica sobre la serie
temporal. Veamos un ejemplo:
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(ggplot2)
library(fpp2)
## -- Attaching packages ---------------------------------------------- fpp2 2.4 --
## v fma 2.4 v expsmooth 2.3
##
autoplot(uschange[,1:2],facets = TRUE) +
xlab("Año") + ylab("") +
ggtitle("Los cambios trimestrales son el consumo de EE. UU. y el ingreso personal")

2
Los cambios trimestrales son el consumo de EE. UU. y el ingreso personal
2

Consumption
0

−1

−2

2.5

Income
0.0

−2.5

1970 1980 1990 2000 2010


Año
as dos series de tiempo muestran cambios trimestrales en el consumo de EE.UU y cambios trimestrales en el
ingreso personal de EE.UU. Es posible que deseemos pronosticar el consumo y utilizar los ingresos como
variable de predicción. Si hay caída en la renta, podríamos esperar que el consumo también cayera, y
viceversa.
Ajustar un modelo de regresión dinaámica no es mucho más difícil que ajustar un modelo ARIMA. Todavia
usamos la función auto.arima(), solo necesita un argumento más, el argumento xreg contiene una matriz de
variables predictoras que desea incluir en el modelo. En este caso, solo hay una variable predictora, el cambio
en los ingresos cuando incluye un argumento xreg, auto.arima se ajustará un modelo de regresión dinámica,
en lugar de un modelo ARIMA regular.
fit <- auto.arima(uschange[,'Consumption'],
xreg = uschange[,'Income'])

fit
## Series: uschange[, "Consumption"]
## Regression with ARIMA(1,0,2) errors
##
## Coefficients:
## ar1 ma1 ma2 intercept xreg
## 0.6922 -0.5758 0.1984 0.5990 0.2028
## s.e. 0.1159 0.1301 0.0756 0.0884 0.0461
##
## sigma^2 = 0.3219: log likelihood = -156.95
## AIC=325.91 AICc=326.37 BIC=345.29
En este caso se ha ajustado una regresión lineal a la variable de ingreso, y luego se eligió un modelo
ARIMA(1,0,2) para los errores. Como es habitual, los coeficientes ARIMA no son particularmente

3
interpretables, pero el coeficiente de regresión es interpetable. Aquí, vemos que el cambio de consumo
aumenta en 0.25 puntos porcentuales cuando los ingresos cambian en 1 punto porcentual.
En los modelos de regresión dinámica, la parte de regresión tiene el cuenta la variable predictora, mientras
que el modelo ARIMA se encarga de la dinámica de las series de tiempo a corto plazo.
Al igual que con todos los modelos de pronóstico, debemos verificar que los residuos se vean como ruido
blanco.
checkresiduals(fit)
Residuals from Regression with ARIMA(1,0,2) errors

−1

−2

1970 1980 1990 2000 2010

30
0.1

20
ACF

df$y

0.0

10
−0.1
0
4 8 12 16 20 24 −2 −1 0 1 2
Lag residuals
##
## Ljung-Box test
##
## data: Residuals from Regression with ARIMA(1,0,2) errors
## Q* = 5.8916, df = 5, p-value = 0.3169
##
## Model df: 3. Total lags used: 8
Note que la prueba de Ljung-Box aquí tiene un valor p por encima de 0.05, lo que significa que estos residuos
se ven como ruido blanco.

1.1 Pronósticos con modelo de regresión dinámica


Para pronósticar con un modelo de regresión dinámica, necesitamos proporcinar valores futuros de los
predictores.
fcast <- forecast(fit, xreg = rep(0.8,8))
autoplot(fcast) +
xlab('Año') + ylab('Cambio Porcentual')

4
Forecasts from Regression with ARIMA(1,0,2) errors

1
Cambio Porcentual

−1

−2

1970 1980 1990 2000 2010 2020


Año
O podemos pronósticarlos en un modelo separado, o podemos hacer pronósticos de escenarios observamos el
efecto de diferentes valores del predictor en los pronósticos. Los valores futuros de los predictores deben
pasarse a la función de pronóstico utilizando el argumento xreg, al igual que los valores pasados se
incluyeron en la función auto.arima.
En este ejemplo, hemos asumido que los cambios futuros en los ingresos serán 0.8 puntos porcentuales por
trimestre durante los proximos 8 trimestres.

1.2 Practica
1.2.1 Predicción de ventas teniendo en cuenta los gastos de publicidad
La función auto.arima se ajustará a un modeo de regresión dinámica con errores ARIMA. El único cambio
en la forma en que lo usó anteriormente es que ahora usará el argumento xreg que contiene una matriz de
variables de regresión.
En este ejercicio, modelará datos de ventas con regresión contra gastos de publicidad, con un error ARMA
para tener en cuenta cualquier correlación serial en los errores de regresión. Los datos advert comprenden
24 meses de gastos de ventas y publicidad para una empresa de repuestos para automóviles.
# Gráfiquemos la serie de ambas variables
autoplot(advert, facets = TRUE)

5
25

20

15

advert
10

5
advert

90

sales
85

80

0 5 10 15 20 25
Time
# Ajustamos el modelo ARIMA
fit <- auto.arima(advert[, "sales"], xreg = advert[, "advert"], stationary = TRUE)

# Consultamos el modelo. Aumento de las ventas por cada unidad aumento de la publicidad
salesincrease <- coefficients(fit)[3]

# Ajuste de pronóstico y guardamos en fc


fc <- forecast(fit, xreg = rep(10, 6))

# Trazar fc con etiquetas x e y


autoplot(fc) + xlab("Month") + ylab("Sales")

6
Forecasts from Regression with ARIMA(1,0,0) errors

90
Sales

85

80

0 10 20 30
Month
La regresión dinámica le permite incluir otra información externa en su pronóstico.

2 Regresión Armónica Dinámica


Un tipo de regresión dinámica particularmente útil se llama regresión armómica dinámica. Esto usa
términos de Fourier
2πkt 2πkt
sk (t) = sin( ), ck (t) = cos( )
m m
para manejar la estacionalidad. Fourier fue un matemático Francés que demostró que una serie de términos
de sin y cos de las frecuencias correctas puede aproximar cualquier función periódica. Podemos usarlos para
patrones estacionales cuando pronósticamos. Los términos de Fourier vienen en pares formados por un seno y
un coseno. La frecuencia de estos términos se denominan frecuencias armónicas y aumentan con k. Estos
términos de Fourier son predictores en nuestro modelo de regresión dinámica.

k
X
yt = β0 + [αk sk (t) + γk ck (t)] + et
k=1

Cuantos más términos incluyamos en el modelo, más complicado será nuestro patrón estacional. Elijamos K
mayúscula para controlar cuántos términos se incluyen. Los valores αk y γk son coeficientes en nuestro
modelo de regresión, porque la estacionalidad está siendo modelada por términos de Fourier, normalmente
utilizamos un modelo ARIMA no estacional para el error. Una diferencia importante entre manejar la
estacionalidad de esta manera y usar un modelo ARIMA estacional, es que los términos de Fourier asumen
que el patrón estacional no cambia con el tiempo, mientras que un modelo ARIMA estacional permite que el
patrón estacional evolucione con el tiempo.
El modelo puede incluir otras variables predictoras además de los términos de Fourier. Solo necesitan
agregarse a la matriz xreg. Todo el proceso está mayormente automatizado. Lo único que debe hacer usted

7
mismo es seleccionar K. Comience con K igual a 1 y aumente lentamente hasta que el valor de AIC deje de
disminuir. K no puede ser más de la mitad del periodo estacional. La ventaja de usar términos de Fourier, en
comparación con otros enfoques para modelar la estacionalidad, es que pueden manejar la estacionalidad
cuando el periodo estacional m es muy grande. Por ejemplo, con datos semanales donde m es
aproximadamente 52, datos diarios donde m podría ser 365 si hay estacionalidad anual y datos subdiarios
donde podria ser incluso mayor.

2.1 Practicas:
2.1.1 Predicción con datos semanales
Con datos semanales, es difícil manejar la estacionalidad usando modelos ETS o ARIMA ya que la duración
de la temporada es demaciado grande (aproximadamente 52). En su lugar, puede usar regresión armonica
que usa senos y cosenos para modelar la estacionalidad.
La función fourier() facilita la generación de los armómicos necesarios. Cuanto mayor sea el orden (K), más
ondulatorio se permite que sea el patrón estacional. Con K=1, es una curva sinusoidal simple. Puede
seleccionar el valor de K minimizando el valor AIC. Como vio anteriormente, fourier toma una serie de
tiempo requerida, la cantidad requerida de términos de Fourier para generar y la cantidad opcional de filas
que necesita para pronosticar.
Los datos gasoline comprenden datos semanales sobre productos terminados de gasolina para motores de
EE.UU. En este ejercicio, ajustará una regresión armónica a este conjunto de datos y pronosticará los
proximos 3 años.
# Establecer regresores armonicos de orden 13
harmonics <- fourier(gasoline, K = 13)

# Ajustar modelo de regresion con errores ARIMA


fit <- auto.arima(gasoline, xreg = harmonics, seasonal = FALSE)

# Pronostico proximos 3 años


newharmonics <- fourier(gasoline, K = 13, h = 156)
fc <- forecast(fit, xreg = newharmonics)

# Trazar pronosticos fc
autoplot(fc)

8
Forecasts from Regression with ARIMA(0,1,2) errors

10

9
gasoline

1990 2000 2010 2020


Time

2.1.2 Regresión armónica para estacionalidad multiple


Las regresiones armónicas también son útiles cuando las series temporales tienen multiples patrones
estacionales. Por ejemplo, taylor contiene la demanda de electricidad cada media hora en Inglaterra y Gales
durante meses del año 2000. Los periodos estacionales son 48 (estacionalidad diaria) y 7x48 = 336
(estacionalidad semanal). No hay suficientes datos para considerar la estacionalidad anual.
auto.arima() llevaría mucho tiempo ajustar una serie de tiempo larga como esta, por lo que ajustará un
modelo de regresión estándar con términos de Fourier utilizando la función tslm(). Esto es muy similar a
lm() pero está diseñado para menejar series de tiempo. Con estacionalidad múltiple, debe especificar el
orden K para cada uno de los periodos estacionales.
tslm() es una función recientemente introducida.
# Ajuste un regresion armonica de orden 10 para tipo de estacionalidad
fit <- tslm(taylor ~ fourier(taylor, K = c(10, 10)))

# Pronostique con 20 dias habiles de anticipacion


fc <- forecast(fit, newdata = data.frame(fourier(taylor, K = c(10, 10), h = 20 * 48)))

# Graficar los pronosticos


autoplot(fc)

9
Forecasts from Linear regression model
40000

35000

30000
taylor

25000

20000

4 8 12 16
Time
# Comprobar los residuos de ajuste
checkresiduals(fit)

10
Residuals from Linear regression model

2000

−2000

2 4 6 8 10 12

1.0
300

0.5 200
ACF

df$y
100
0.0

0
0 336 672 1008 −2000 0 2000
Lag residuals
##
## Breusch-Godfrey test for serial correlation of order up to 672
##
## data: Residuals from Linear regression model
## LM test = 3938.9, df = 672, p-value < 2.2e-16
Note que los residuos del modelo ajustado no superan las pruebas, pero los pronósticos son bastante buenos.

2.1.3 Predicción de Reservas de llamadas


Otra serie temporal con múltiples períodos estacionales es calls, que contiene 20 días consecutivos de datos
de volumen de llamadas de 5 minutos para un gran bancon norteamericano. Hay 169 períodos de 5 minutos
en un día laboral, por lo que la frecuencia estacional semanal es 5 x 169 = 845. La estacionalidad semanal es
relativamente débil, por lo que aquí solo modelará la estacionalidad diaria.
Los residuos en este caso aún fallan en las pruebas de ruido blanco, pero sus autocorrelaciones son pequeñas,
aunque significativas. Esto se debe a que la serie es muy larga. A menudo, no es realista tener residuos que
pasen las pruebas para series tan largas. El efecto de las correlaciones restantes en los pronósticos será
insignificante.
# Trazar los datos de las llamadas
autoplot(calls)

11
400

300
calls

200

100

0
0 10 20 30
Time
# Configurar la matriz xreg
xreg <- fourier(calls, K = c(10, 0))

# Ajustar un modelo de regresion


fit <- auto.arima(calls, xreg = xreg, seasonal = FALSE, stationary = TRUE)

# Comprobar los residuos


checkresiduals(fit)

12
Residuals from Regression with ARIMA(5,0,1) errors
150
100
50
0
−50
−100

0 10 20 30

0.08 1000

750
0.04
ACF

df$y
500

0.00
250

0
−0.04
0 845 1690 2535 −100 −50 0 50 100 150
Lag residuals
##
## Ljung-Box test
##
## data: Residuals from Regression with ARIMA(5,0,1) errors
## Q* = 6846.8, df = 1684, p-value < 2.2e-16
##
## Model df: 6. Total lags used: 1690
# Trazar pronosticos para 10 dias habiles por delante
fc <- forecast(fit, xreg = fourier(calls, c(10, 0), h = 10*169))
autoplot(fc)

13
Forecasts from Regression with ARIMA(5,0,1) errors

400

300
calls

200

100

0
0 10 20 30
Time
Ahora ha adquirido mucha experiencia en el uso de técnicas de pronóstico complejas.

3 Modelos TBATS
Un modelo TBATS combina muchos de los componentes de los modelos que ya hemos utilizado en un solo
marco automatizado.
Incluye términos trigonométricos para la estacionalidad. Estos son similares a los términos de Fourier que
usamos en la regresión armónica. Excepto que aquí la estacionalidad puede cambiar con el tiempo. Incluye
una transformación de Box-Cox. Tiene errores ARMA como una regresión dinámica. Tiene términos de nivel
y tendencia, similar a un modelo ETS. Y todo está automatizado. El número de términos similares a Fourier,
la transformación de Box-Cox, el error ARMA. Todo esto los hace muy convenientes, pero también algo
peligrosos ya que a veces las opciones automáticas no son tan buenas. Veamos algunos ejemplos.

3.1 Datos de gasolina de EE.UU


gasoline %>% tbats() %>% forecast() %>%
autoplot() +
xlab('Año') + ylab('Barriles por dia')

14
Forecasts from TBATS(1, {0,0}, −, {<52.18,12>})
10

9
Barriles por dia

1990 2000 2010 2020


Año
Esta serie de tiempo es el total semanal de gasolina de motor suministrada en EE.UU. Vea lo fácil que es
usar la función tbats. Simplemente pase la serie de tiempo a la función tbats el resultado a la función de
pronóstico. El título en el gráfico muestra las elecciones quese han hecho. El primer 1 es el parámetro de
Box-Cox, lo que significa que no se requerió ninguna transformación. La siguiente parte es el error ARMA:
0,0 significa que p es igual a 0 y q es igual a 0, por lo que se utilizó un error de ruido blanco simple. La
tercera parte es el parámetro de amortiguamiento de la tendencia. Un guión significa que no hay
amortiguación. Así que esto es bastante simple hasta ahora: sin transformación, sin error ARMA y sin
amortiguación. La última parte te habla de los términos de Fourier. el periodo estacional es 52.18, el número
de semanas en un año, y se seleccionaron 14 términos similares a Fourier. Las predicciones parecen buenas,
aunque quizás sean un poco bajas.

3.2 Datos del centro de llamadas


calls %>% window(start = 20) %>% tbats() %>% forecast() %>%
autoplot() + xlab('Semanas') + ylab('Llamadas')

15
Forecasts from TBATS(0.574, {0,0}, 0.987, {<169,6>, <845,3>})
2000

1500
Llamadas

1000

500

20 25 30 35
Semanas
Este ejemplo es el volumen de llamadas cada 5 minutos a un banco norteamericano. La función tbats es la
lenta para series de tiempo muy largas, por lo que solo estoy usando los últimos meses de datos. De todos
modos, más datos no supondrían una gran diferencia para los pronósticos.
Aquí, el parámetro de trasnformación de Box-Cox es 0.571, tan cerca de una raíz cuadrada. No hay término
ARMA ni parámetro de amortiguación. Los términos similares a Fourier están en dos grupos porque hay dos
tipos de estacionalidad. Hay 169 períodos de 5 minutos en una jornada laboral y 845 períodos en una semana
laboral de 5 días. Se incluyen 6 pares de términos para la estacionalidad diaria y 4 pares de términos para la
estacionalidad semanal. En este caso, los intervalos de predicción parecen un poco amplios, pero los
pronósticos se ven bien.
En resumen, un modelo TBATS es muy general y maneja una amplia gamma de series de tiempo. Es
especialmente útil para datos con grandes períodos estacionales y múltiples períodos estacionales. Como dije
anteriormente, tbats es convenientemente automático, pero a veces la automatización no es perfecta. Lo he
usado en muchas series de tiempo diferentes y parece que los intervalos de predicción suelen ser demaciado
amplios, aunque los pronósticos puntuales pueden parecer correctos. La automatización también hace que
todo sea bastante lento, especialmente en periodos de tiempo prolongados, porque necesita probar muchas
formas diferentes de armar el modelo.

3.3 Modeos TBATS para la demanda de electricidad


Como vio en las secciones previas, un modelo TBATS es un tipo de especial de modelo de serie temporal.
Puede ser muy lento de estimar, especialmente con varias series de tiempo estacionales, por lo que en este
ejercicio lo probará en una serie más simple para ahorrar tiempo. Analicemos los elementos de un modelo
TBATS en TBATS(1, {0,0},-,{<51.18, 14>}), uno de los títulos de gráficos vistos anteriormente:

16
Componente Sentido
1 Parámetro de transformación BoxCox
{0,0} error ARMA
- Parámetro de amortiguación
{<51.18, 14>} Período estacional, términos de Fourier

Los datos gas contienen la producción mensual de gas de Australia. Una gráfica de los datos muestra que la
varianza ha cambiado mucho con el tiempo, por lo que necesita una transformación. La estacionalidad
también ha cambiado de forma con el tiempo, y hay una fuerte tendencia. Esto la convierte en una serie
ideal para probar la función tbats() que está diseñada para manejar estas características.
# Trazar los datos gas
autoplot(gas)

60000

40000
gas

20000

0
1960 1970 1980 1990
Time
# Ajustar un modelo TBATS a los datos de gas
fit <- tbats(gas)

# Pronostico de la serie para los proximos 5 años


fc <- forecast(fit, h = 12*5)

# Plot del pronostico


autoplot(fc)

17
Forecasts from TBATS(0.082, {0,0}, 0.992, {<12,5>})
100000

75000
gas

50000

25000

0
1960 1970 1980 1990 2000
Time
# Registre el parametro BoxCox y el orden de los terminos
# de Fourier
lambda <- 0.082
K <- 5

4 Su futuro en la predicción
A este punto usted ha finalizado el curso de predicción con R. !Bien hecho¡ Hemos cubierto mucho material,
pero estoy seguro de que sabe que en realidad solo hemos arañado la superficie de los modelos de pronóstico.
su futuro en la predicción requerirá que practique con los métodos que hemos cubierto y que aprendera más
sobre estos métodos y otros enfoques de la predición a medida que adquiera más experiencia.
Como mencioné al comienzo de este curso, tengo un libro de texto en línea que cubre todo el material de este
curso con más detalle, así como algunos otros enfoques para la predicción. Ese sería un buen lugar para
comenzar a desarrollar aún más su pronóstico.
Pero probablemente la mejor manera de aprender en esta etapa es practicar pronósticos con muchas series de
tiempo diferentes, usando muchos métodos diferentes. Con el tiempo desarrollará una intuición de lo que
funciona bien en diferentes contextos.

18

También podría gustarte