Está en la página 1de 4

Universidad de Concepción

Facultad de Matemáticas
Departamento de Estadı́stica

Primer Semestre 2021

523425 Series de Tiempo I - Ayudantı́a No 2

Aplicación a datos reales: Modelos con Tendencia y Estacionalidad


0.1. Introducción:
Muchas series son dominadas por un efecto tendencia (trend) y/o un efecto estacional (seasonal). Una
simple descomposición de un modelo aditivo es dado por:

Xt = mt + st + zt ,

donde, para el tiempo t, Xt es la serie observada, mt la tendencia, st es el efecto estacional, y zt es el


término del error que en general, es una secuencia de variables aleatorias correlacionadas con media
cero.
Si el efecto estacional tiende a incrementar cuando incrementa la tendencia, entonces un modelo mul-
tiplicativo puede ser el más apropiado:

Xt = mt · st + zt .

1. Considere el número internacional de reservas de pasajeros por mes en una lı́nea aérea en Estados
Unidos desde los periodos 1940 - 1960. Los datos se encuentran en la libreria datasets.

data(AirPassengers)
AP<-AirPassengers
start(AP); end(AP); frequency(AP)

2. Realice un análisis previo de los datos. Grafique la serie, utilice la función aggregate para visualizar la
tendencia y la funci ón boxplot para visualizar la componente estacional. Además, visualice y comente
la estructura de correlación de los datos.

ts.plot(AP, ylab="Passengers(1000’s)")
layout(1:2)
plot(aggregate(AP), ylab="")
boxplot(AP~cycle(AP))

3. Utilice las siguientes funciones y descomponga la serie para visualizar de mejor forma sus componentes.
¿Qué tipos de efectos presenta la serie? ¿efectos aditivos o multiplicativos?

plot(stl(AP,"per"))
plot(decompose((AP)))
Passanger.decom<-decompose((AP), type="mult")
plot(Passanger.decom)
Trend<-Passanger.decom$trend
Seasonal<-Passanger.decom$seasonal
ts.plot(cbind(Trend, Trend*Seasonal), lty=1:2)

523425- Series de Tiempo I 1 Prof. Guillermo Ferreira


Primer Semestre 2021
4. Para realizar predicciones se necesita extraer o modelar el efecto de tendencia y/o estacionalidad para
ası́ obtener residuos estacionarios. Para ello, se ajustará un modelo de regresión que capture el efecto
estacional a través de variables indicadoras (dummy). Comente la significancia de los parámetros. ¿El
ajuste fue bueno?. ¿Los residuos presentan autocorrelación?

library(forecast)
TIME<-time(AP)
It<-seasonaldummy(AP)
model<-lm(AP~TIME+ It)
summary(model)
ajustados<-ts(model$fitted.values, start=c(1949,1), freq=12)
plot(AP)
lines(ajustados, col=2)

5. En este segundo caso, se ajustará un modelo de regresión que capture el efecto estacional a través de
una representación armónica.
Obs: Se trabajará con el logaritmo de los datos. Comente la significancia de los parámetros. ¿El ajuste
fue bueno?. ¿Los residuos presentan autocorrelación?.

It.trig<-fourier(log(AP),2)
model2<-lm(log(AP)~TIME + It.trig)
summary(model2)
ajustados2<-ts(model2$fitted.values, start=c(1949,1), freq=12)
plot(AP)
lines(exp(ajustados2), col=2)

Obs: En un enfoque de serie de tiempo con componente estacional es usar Fourier donde el patrón
estacional se modela usando términos de Fourier mientras que las dinámicas de series de tiempo de
corto plazo son establecidas en el error. Por ejemplo, considere el siguiente modelo:
K
X
yt = α + [αk sin (2πkt/s) + βk cos (2πkt/s)] + εt
k=0

donde εt es un proceso ARMA.


6. Simular una serie de tiempo con T = 2000, p = 200 y εt un ARIMA(2, 0, 1). Utilice el siguiente código
para predecir.
1
X
yt = a + bt + [αk sin (2πkt/s) + βk cos (2πkt/s)] + εt ,
k=0

donde
εt = φεt−1 + θηt−1 + ηt ,
iid
con η ∼ N (0, 1) y el vector de parámetros es Θ = (a, b, α0 , β0 , α1 , β1 , φ, θ) = (0.01, 0.05, 0.25, −0.3, 0.75, 1.5, 0.7, 0.45).

t2<-ts(start =c(2010,1), end = c(2018,12),fr=12 )


Time<-time(t2)
length(Time)

Trend<-0.01+0.05*Time
S_t<- 0.25*sin(2*pi*0*Time/12) + -0.3*cos(2*pi*0*Time/12) + 0.75*sin(2*pi*Time/12)
+ 1.5*cos(2*pi*Time/12)
e<-arima.sim(n=108,list(order=c(1,0,1), ar=0.7, ma=-0.45), sd=1)
ee<-ts(e, start = c(2010,1), end=c(2018,12), fr=12)

523425- Series de Tiempo I 2 Prof. Guillermo Ferreira


Primer Semestre 2021
Y=Trend + S_t + ee
plot(Y)
xxreg=as.tarix(data.frame(Trend, fourier(S_t,2)))
x<-Arima(Y, order=c(1,0,1), xreg=xxreg, include.mean = TRUE)
summary(x)

#### Prediction

t<-ts(start=c(2019,1), end=c(2023,12),fr=12 )
Time2<-time(t)
length(Time2)
Trend2<-0.05*Time2
length(Trend2)
xxreg2<-as.matrix(data.frame(Trend2, fourier(S_t,2, h=60)))
fcast<-forecast(x, h=60, xreg=xxreg2)
plot(fcast)

0.2. Predicciones
7. Realice una predicción de 2 años del número internacional de reservas de pasajeros por mes.

TTP.F<-fourierf(log(AP), 2, 24)
t2<-(ts(start=1961, end=c(1962,12), fr=12))
TIME2<-time(t2)
data_Pred<-data.frame(TIME=TIME2, It.trig=I(TTP.F))
prons.vt<-ts(predict(model2, data_Pred),start=1961, fr=12)
ts.plot(AP,exp(prons.vt), lty=1:2)

8. Ajuste un modelo ARMA(3, 3) a los residuos y verifique los parámetros significativos. Posteriormente,
analize el correlograma de los residuos con las funciones acf() y tsdiag(modelo).

modelo1<-arima(res2, order=c(3,0,3))
test.sig<-abs(modelo1$coef/sqrt(diag(modelo1$var.coef)))

9. Observe y compare la nueva predicción y los datos estimados con los obtenidos anteriormente.

prediccion_modelo_error<-(predict(modelo1,n.ahead=24)) # PREDICCION DEL ERROR


prediccion_error<-ts(prediccion_modelo_error$pred,start= 1961, fr=12)
prediccion_final<- prons.vt + prediccion_error # PREDICCION FINAL
ts.plot(AP,exp(prediccion_final),col=1:2)
ajustados3<-ts(res2-modelo1$res,start=c(1949,1), fr=12)
ajuste_final<-ajustados2 + ajustados3
plot(AP,main="modelo final estimado")
lines(exp(ajuste_final),col=2)

523425- Series de Tiempo I 3 Prof. Guillermo Ferreira


Primer Semestre 2021
10. Trabajaremos con la base Nivel de lago Huron utilizada en la clase anterior. Se puede suavizar la curva
mediante una transformación o filtro de la serie utilizando:
Suavizamiento por Media Móvil.
Sea q un entero no negativo y considere el promedio móvil de dos lados
q
1 X
Wt = Xt−j
2 q + 1 j=−q

del proceso Xt .
Suponiendo que la tendencia mt es aproximdamente lineal en el intervalo [t − q, t + q] y que la media
del error es cercana a cero.
El promedio móvil nos proporciona las estimaciones

q
1 X
m̂t = Xt−j , q + 1 ≤ t ≤ n − q.
2 q + 1 j=−q

Ejemplo, si q = 2 el promedio móvil es dado por:


1
m̂t = [xt−2 + xt−1 + xt + xt+1 + xt+2 ]
5
Ejemplo en R.

data(LakeHuron)
plot(x, type = ’p’, ylab = "", main = "Level Lake Huron")
q <- 5
lines( filter(x, rep(1/q,q)), col = ’red’,lwd = 3 )

Es útil pensar que {m̂t } es un proceso obtenido a partir de la aplicación de un filtro lineal a {Xt } de
la forma
X∞
m̂t = aj Xt−j ,
j=−∞

con pesos aj = (2 q + 1)−1 para −q ≤ j ≤ q.

523425- Series de Tiempo I 4 Prof. Guillermo Ferreira


Primer Semestre 2021

También podría gustarte