Analisis de Series de TiempoAplicaciones en R - Parte I
Juan Carlos Campuzano S.
Escuela Superior Politecnica del Litoral
Semestre I 2013
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 1 / 34
Preliminares
Estas practicas utilizan los paquetes de R que acompanan a laspublicaciones ”Introductory Time Series with R”, de Cowperwait, P.yMetcalfe, A. (2009), ”Time Series Analysis with R” de Ian McLeod, HaoYu y Esam Mahdi (2012) y ”Time Series Analysis with Applications in R”de Cryer, J.y Chan, K. (2008).
Por lo tanto, se aconseja instalar los siguientes paquetes antes de empezar:
R> install.packages("TSA",dep=TRUE)
R> install.packages("RColorBrewer")
R> install.packages("latticeExtra")
R> install.packages("tseries")
El documento de ayuda del paquete TSA lo puede descargar de la siguientedireccion: http://cran.r-project.org/web/packages/TSA/TSA.pdf
Las diapositivas fueron elaboradas en Beamer con la ayuda del paqueteSASnRdisplay.
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 2 / 34
Preliminares
Preliminares
Las series de tiempo son analizadas para entender el pasado y predecirel futuro, permitiendo a los administradores o hacedores de polıticatomar decisiones informados apropiadamente.
En terminos cientıficos, el proposito del analisis de las series de tiempoes entender o modelar el mecanismo estocastico que da movimiento auna serie observada y predecir los valores futuros de la serie basado ensu historia y posiblemente de otras series o factores relacionados.
Los metodos de series de tiempo son utilizadas todos los dıas en latoma de decisiones.
Las series de tiempo tambien suelen formar la base de simulacionespor computadora.
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 3 / 34
Grafico de Series de Tiempo
Grafico de Series de Tiempo
En esta seccion el interes esta en la grafica de las series de tiempo. Dichosgraficos generalmente son el primer paso en un analisis exploratorio ypresentados en un reporte final.
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 4 / 34
Grafico de Series de Tiempo
Grafico de Series de TiempoEjemplo 1: Paseo aleatorio
Uno de los procesos mas elemental para el analisis de series de tiempo esun paseo aleatorio:
R> library(TSA)
R> data(rwalk)
R> plot(rwalk, ylab=’Paseo Aleatorio’, type=’o’)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 5 / 34
Grafico de Series de Tiempo
Grafico de Series de TiempoEjemplo 2: Precios del Trigo
Este ejemplo tiene como proposito mostrar el uso del comando plot()
con los datos del ındice de precios del trigo en Canada (Beveridge wheatprice index).
R> library(TSA)
R> data(bev)
R> plot(bev)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 6 / 34
Grafico de Series de Tiempo
Grafico de Series de TiempoEjemplo 2: Precios del Trigo
Anadiendo algunas opciones adicionales al comando plot() se puedentener mejores resultados:
R> win.graph(width=4.875, height=2.5, pointsize=8)
R> plot(bev, ylab=’indice’, xlab=’ano’, type=’o’)
R> plot(bev, ylab=’indice’, xlab=’ano’, type=’l’)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 7 / 34
Grafico de Series de Tiempo
Gafico de Series de TiempoEjemplo 3: Estacionalidades
En ocasiones un evento se repite sistematicamente a lo largo del tiempo ypara el analisis de series de tiempo, visualizar estos patrones resultasumamente util:
R> data(oilfilters); plot(oilfilters, type=’o’, ylab=’Ventas’)
R> win.graph(width=4.875, height=2.5, pointsize=8)
R> plot(oilfilters, type=’l’, ylab=’Ventas’)R> points(y=oilfilters, x=time(oilfilters), pch=as.vector(season(oilfilters)))
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 8 / 34
Grafico de Series de Tiempo
Grafico de Series de TiempoEjemplo 4: Gafico de Multiples Series de Tiempo
En otras ocasiones tambien es importante graficar multiples series detiempo:
R> www <- "http://staff.elena.aut.ac.nz/Paul-Cowpertwait/ts/cbe.dat"
R> CBE <- read.table(www, header = T)
R> CBE[1:4, ]
R> Elec.ts <- ts(CBE[, 3], start = 1958, freq = 12
R> Beer.ts <- ts(CBE[, 2], start = 1958, freq = 12)
R> Choc.ts <- ts(CBE[, 1], start = 1958, freq = 12)
R> plot(cbind(Elec.ts, Beer.ts, Choc.ts))
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 9 / 34
Grafico de Series de Tiempo
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 10 / 34
Grafico de Series de Tiempo
Grafico de Series de TiempoEjemplo 5: Agrupacion y Tendencias
Sin lugar a dudas, agrupar frecuencias y visualizar tendencias es una de losprincipales analisis graficos que se suelen realizar a las series de tiempo. Elejemplo a continuacion corresponde a observaciones sobre series detemperaturas.
En el primer paso observese la frecuencia mensual de la serie entre losperiodos inicial y final:
R> www <- "http://staff.elena.aut.ac.nz/Paul-Cowpertwait/ts/global.dat"
R> Global <- scan(www)
R> Global.ts <- ts(Global, st = c(1856, 1), end = c(2005, 12), fr = 12)
R> win.graph(width=4.875, height=2.5, pointsize=8)
R> plot(Global.ts, ylab=’Temperatura’, xlab=’periodo’)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 11 / 34
Grafico de Series de Tiempo
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 12 / 34
Grafico de Series de Tiempo
Luego, se puede proceder a agrupar las frecuencias por promediosmensuales:
R> Global.anual <- aggregate(Global.ts, FUN = mean)
R> win.graph(width=4.875, height=2.5, pointsize=8)
R> plot(Global.anual, ylab=’Temp’, xlab=’Per’)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 13 / 34
Grafico de Series de Tiempo
Finalmente, se observa que desde los ’70 existe incremento en lastemperaturas, por lo que serıa importante analizar la tendencia:
R> New.series <-window(Global.ts, start = c(1970, 1), end = c(2005, 12))
R> New.time <-time(New.series)
R> win.graph(width=4.875, height=2.5, pointsize=8)
R> plot(New.series); abline(reg=lm(New.series~New.time))
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 14 / 34
Grafico de Series de Tiempo
Grafico de Series de TiempoEjemplo 6: Descomposicion de una Serie
Si existe evidencia de una tendencia en una serie, resulta util descomponerla serie para estimar la tendencia y efectos estacionales. Se presenta unejemplo con los datos de electricidad.
R> www <- "http://staff.elena.aut.ac.nz/Paul-Cowpertwait/ts/cbe.dat"
R> CBE <- read.table(www, header = T)
R> Elec.ts <- ts(CBE[, 3], start = 1958, freq = 12)
R> win.graph(width=4.875, height=3.5, pointsize=8)
R> plot(decompose(Elec.ts))
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 15 / 34
Grafico de Series de Tiempo
Tambien se puede realizar una descomposicion multiplicativa...:
R> Elec.decom <- decompose(Elec.ts, type = "mult")
R> win.graph(width=4.875, height=3.5, pointsize=8)
R> plot(Elec.decom)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 16 / 34
Grafico de Series de Tiempo
... o superponer la tendencia y el componente estacional.
R> Trend <- Elec.decom$trend
R> Seasonal <- Elec.decom$seasonal
R> ts.plot(cbind(Trend, Trend * Seasonal), lty = 1:2)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 17 / 34
Correlacion
Funciones de autocorrelacion Procesos EstacionariosCorrelograma
El principal proposito del correlograma es detectar autocorrelaciones en lasseries de tiempo luego de haberles removido y estimado la tendencia y lavariacion estacional. El siguiente ejemplo se realiza con la serie dePasajeros que viene en el paquete R.
R> data(AirPassengers)
R> AP <- AirPassengers
R> AP.decom <- decompose(AP, "multiplicative")
R> plot(ts(AP.decom$random[7:138]))
R> acf(AP.decom$random[7:138])
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 18 / 34
Correlacion
Serie Pasajeros (estacionaria) Correlograma
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 19 / 34
Procesos ARMA
Analisis Procesos AR(p)
R> win.graph(width=4.875, height=3, pointsize=8)
R> data(ar1.s); plot(ar1.s, ylab=expression(Y[t]), type=’o’)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 20 / 34
Procesos ARMA
Correlacion entre los rezagos t y t − 1
R> win.graph(width=3, height=3, pointsize=8)R> plot(y=ar1.s,x=zlag(ar1.s),ylab=expression(Y[t]),xlab=expression(Y[t-1]), type=’p’)
R> acf(ar1.s)
Relacion entre rezagos Correlograma
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 21 / 34
Procesos ARMA
Simulacion Procesos ARMAAR(2)
Simulemos el proceso visto en clases, un AR(2) de la forma:Yt = 0.5Yt−1 + 0.3Yt−2 + εt con 100 observaciones:
R> ar.sim<-arima.sim(model=list(ar=c(.5,.3)),n=100)
R> ar.sim
La funcion de autocorrelacion simple (acf):
R> ar.acf<-acf(ar.sim,type="correlation",plot=T)
R> ar.acf
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 22 / 34
Procesos ARMA
Las graficas del proceso anterior se obtienen de:
R> win.graph(width=4.875, height=3, pointsize=8)
R> plot(ar.sim, ylab=expression(Y[t]), type=’o’)
R> ar.acf<-acf(ar.sim,type="correlation",plot=T)
R> ar.acf
Yt = 0.5Yt−1 + 0.3Yt−2 + εt Correlograma
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 23 / 34
Procesos ARMA
Ahora simulemos una variante del proceso anterior:Yt = 0.5Yt−1 − 0.3Yt−2 + εt con 100 observaciones:
R> ar.sim2<-arima.sim(model=list(ar=c(.5,-.3)),n=100)
R> ar.sim2
La funcion de autocorrelacion simple:
R> ar.acf<-acf(ar.sim2,type="correlation",plot=T)
R> ar.acf
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 24 / 34
Procesos ARMA
Las graficas del proceso anterior se obtienen de:
R> win.graph(width=4.875, height=3, pointsize=8)
R> plot(ar.sim2, ylab=expression(Y[t]), type=’o’)
R> ar.acf<-acf(ar.sim2,type="correlation",plot=T)
R> ar.acf
Yt = 0.5Yt−1 − 0.3Yt−2 + εt Correlograma
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 25 / 34
Procesos ARMA
Que sucede cuando el proceso NO ES estacionario? Simulemos el procesoYt = 0.9Yt−1 + 0.3Yt−2 + εt con 100 observaciones:
R> ar.sim3<-arima.sim(model=list(ar=c(.9,.3)),n=100)
R> ar.sim3
La funcion de autocorrelacion simple:
R> ar.acf<-acf(ar.sim3,type="correlation",plot=T)
R> ar.acf
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 26 / 34
Procesos ARMA
Las graficas del proceso anterior nos dan una pista:
R> win.graph(width=4.875, height=3, pointsize=8)
R> plot(ar.sim3, ylab=expression(Y[t]), type=’o’)
R> ar.acf<-acf(ar.sim3,type="correlation",plot=T)
R> ar.acf
Yt = 0.9Yt−1 + 0.3Yt−2 + εt Correlograma
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 27 / 34
Procesos ARMA
Simulacion Procesos ARMAMA(2)
Ahora simulemos un MA(2) de la forma: Yt = εt − 0.7εt−1 + 0.1εt−2 con100 observaciones:
R> ma.sim<-arima.sim(model=list(ma=c(-.7,.1)),n=100)
R> ma.sim
La grafica del proceso anterior se obtiene de:R> win.graph(width=4.875, height=3, pointsize=8)
R> plot(ma.sim, ylab=expression(e[t]), type=’o’)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 28 / 34
Procesos ARMA
Las funciones de autocorrelacion simple y parcial:
R> ma.acf<-acf(ma.sim,type="correlation",plot=T)
R> ma.acf
R> ma.pacf<-acf(ma.sim,type="partial",plot=T)
R> ma.pacf
Funcion de autocorrelacionsimple ACF
Funcion de autocorrelacionparcial PACF
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 29 / 34
Procesos ARMA
Simulacion Procesos ARMAARMA(2,2)
Ahora simulemos un ARMA(2,2) de la forma:Yt = 0.5Yt−1 − 0.2Yt−2 + εt − 0.4εt−1 + 0.3εt−2 con 100 observaciones:
R> arma.sim<-arima.sim(model=list(ar=c(.5,-.2),ma=c(-.4,.3)),n=100)
R> arma.sim
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 30 / 34
Procesos ARMA
El proceso anterior se verıa como:
R> require("tseries")
R> win.graph(width=4.875, height=3, pointsize=8)
R> ts.plot(arma.sim)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 31 / 34
Procesos ARMA
Las funciones de autocorrelacion simple y parcial:
R> arma.acf<-acf(arma.sim,type="correlation",plot=T)
R> arma.acf
R> arma.pacf<-acf(arma.sim,type="partial",plot=T)
R>arma.pacf
Funcion de autocorrelacionsimple ACF
Funcion de autocorrelacionparcial PACF
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 32 / 34
Procesos ARMA
Para recordar
El orden de un proceso AR(p) se analiza en la funcion deautocorrelacion parcial, pacf, mientras la estacionariedad se analizaen la funcion de autocorrelacion simple, acf.
El orden de un proceso MA(q) se analiza en la funcion deautocorrelacion simpre, acf, mientras que la invertibilidad se analizaen la funcion de autocorrelacion parcial, pacf.
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 33 / 34
Bibliografıa
Bibliografıa
Cowperwait, P., Metcalfe, A. (2009) ”Introductory Time Series withR. Springer.
A. Ian McLeod, Hao Yu, Esam Mahdi (2012) ”Time Series Analysiswith R”. Handbook of Statistics. Volume 30. Pages 661- 712.Elsevier
Cryer, J., Chan, K. (2008) ”Time Series Analysis with Applications inR”. Springer
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 34 / 34