Series de Tiempo en R parte I (Series estacionarias)

34
An´ alisis de Series de Tiempo Aplicaciones en R - Parte I Juan Carlos Campuzano S. Escuela Superior Polit´ ecnica del Litoral Semestre I 2013 J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 1 / 34

Transcript of Series de Tiempo en R parte I (Series estacionarias)

Page 1: Series de Tiempo en R parte I (Series estacionarias)

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

Page 2: Series de Tiempo en R parte I (Series estacionarias)

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

Page 3: Series de Tiempo en R parte I (Series estacionarias)

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

Page 4: Series de Tiempo en R parte I (Series estacionarias)

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

Page 5: Series de Tiempo en R parte I (Series estacionarias)

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

Page 6: Series de Tiempo en R parte I (Series estacionarias)

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

Page 7: Series de Tiempo en R parte I (Series estacionarias)

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

Page 8: Series de Tiempo en R parte I (Series estacionarias)

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

Page 9: Series de Tiempo en R parte I (Series estacionarias)

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

Page 10: Series de Tiempo en R parte I (Series estacionarias)

Grafico de Series de Tiempo

J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 10 / 34

Page 11: Series de Tiempo en R parte I (Series estacionarias)

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

Page 12: Series de Tiempo en R parte I (Series estacionarias)

Grafico de Series de Tiempo

J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 12 / 34

Page 13: Series de Tiempo en R parte I (Series estacionarias)

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

Page 14: Series de Tiempo en R parte I (Series estacionarias)

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

Page 15: Series de Tiempo en R parte I (Series estacionarias)

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

Page 16: Series de Tiempo en R parte I (Series estacionarias)

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

Page 17: Series de Tiempo en R parte I (Series estacionarias)

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

Page 18: Series de Tiempo en R parte I (Series estacionarias)

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

Page 19: Series de Tiempo en R parte I (Series estacionarias)

Correlacion

Serie Pasajeros (estacionaria) Correlograma

J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 19 / 34

Page 20: Series de Tiempo en R parte I (Series estacionarias)

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

Page 21: Series de Tiempo en R parte I (Series estacionarias)

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

Page 22: Series de Tiempo en R parte I (Series estacionarias)

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

Page 23: Series de Tiempo en R parte I (Series estacionarias)

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

Page 24: Series de Tiempo en R parte I (Series estacionarias)

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

Page 25: Series de Tiempo en R parte I (Series estacionarias)

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

Page 26: Series de Tiempo en R parte I (Series estacionarias)

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

Page 27: Series de Tiempo en R parte I (Series estacionarias)

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

Page 28: Series de Tiempo en R parte I (Series estacionarias)

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

Page 29: Series de Tiempo en R parte I (Series estacionarias)

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

Page 30: Series de Tiempo en R parte I (Series estacionarias)

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

Page 31: Series de Tiempo en R parte I (Series estacionarias)

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

Page 32: Series de Tiempo en R parte I (Series estacionarias)

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

Page 33: Series de Tiempo en R parte I (Series estacionarias)

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

Page 34: Series de Tiempo en R parte I (Series estacionarias)

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