You are on page 1of 34

Análisis de Series de Tiempo

Aplicaciones en R - Parte I

Juan Carlos Campuzano S.

Escuela Superior Politécnica del Litoral

Semestre I 2013

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


Preliminares

Estas prácticas utilizan los paquetes de R que acompañan a las


publicaciones ”Introductory Time Series with R”, de Cowperwait, P.y
Metcalfe, A. (2009), ”Time Series Analysis with R” de Ian McLeod, Hao
Yu 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 siguiente


dirección: http://cran.r-project.org/web/packages/TSA/TSA.pdf

Las diapositivas fueron elaboradas en Beamer con la ayuda del paquete


SASnRdisplay.
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 predecir


el futuro, permitiendo a los administradores o hacedores de polı́tica
tomar decisiones informados apropiadamente.
En términos cientı́ficos, el propósito del análisis de las series de tiempo
es entender o modelar el mecanismo estocástico que da movimiento a
una serie observada y predecir los valores futuros de la serie basado en
su historia y posiblemente de otras series o factores relacionados.
Los métodos de series de tiempo son utilizadas todos los dı́as en la
toma de decisiones.
Las series de tiempo también suelen formar la base de simulaciones
por computadora.

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


Gráfico de Series de Tiempo

Gráfico de Series de Tiempo

En esta sección el interés está en la gráfica de las series de tiempo. Dichos


gráficos generalmente son el primer paso en un análisis exploratorio y
presentados en un reporte final.

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


Gráfico de Series de Tiempo

Gráfico de Series de Tiempo


Ejemplo 1: Paseo aleatorio

Uno de los procesos más elemental para el análisis de series de tiempo es


un 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


Gráfico de Series de Tiempo

Gráfico de Series de Tiempo


Ejemplo 2: Precios del Trigo

Este ejemplo tiene como propósito mostrar el uso del comando plot()
con los datos del ı́ndice de precios del trigo en Canadá (Beveridge wheat
price 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


Gráfico de Series de Tiempo

Gráfico de Series de Tiempo


Ejemplo 2: Precios del Trigo

Añadiendo algunas opciones adicionales al comando plot() se pueden


tener 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


Gráfico de Series de Tiempo

Gáfico de Series de Tiempo


Ejemplo 3: Estacionalidades

En ocasiones un evento se repite sistemáticamente a lo largo del tiempo y


para el análisis de series de tiempo, visualizar estos patrones resulta
súmamente útil:

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


Gráfico de Series de Tiempo

Gráfico de Series de Tiempo


Ejemplo 4: Gáfico de Múltiples Series de Tiempo

En otras ocasiones también es importante graficar múltiples series de


tiempo:

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


Gráfico de Series de Tiempo

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


Gráfico de Series de Tiempo

Gráfico de Series de Tiempo


Ejemplo 5: Agrupación y Tendencias

Sin lugar a dudas, agrupar frecuencias y visualizar tendencias es una de los


principales análisis gráficos que se suelen realizar a las series de tiempo. El
ejemplo a continuación corresponde a observaciones sobre series de
temperaturas.

En el primer paso obsérvese la frecuencia mensual de la serie entre los


periodos 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


Gráfico de Series de Tiempo

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


Gráfico de Series de Tiempo

Luego, se puede proceder a agrupar las frecuencias por promedios


mensuales:

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


Gráfico de Series de Tiempo

Finalmente, se observa que desde los ’70 existe incremento en las


temperaturas, 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


Gráfico de Series de Tiempo

Gráfico de Series de Tiempo


Ejemplo 6: Descomposición de una Serie

Si existe evidencia de una tendencia en una serie, resulta útil descomponer


la serie para estimar la tendencia y efectos estacionales. Se presenta un
ejemplo 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


Gráfico de Series de Tiempo

También se puede realizar una descomposición 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


Gráfico 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


Correlación

Funciones de autocorrelación Procesos Estacionarios


Correlograma

El principal propósito del correlograma es detectar autocorrelaciones en las


series de tiempo luego de haberles removido y estimado la tendencia y la
variación estacional. El siguiente ejemplo se realiza con la serie de
Pasajeros 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


Correlación

Serie Pasajeros (estacionaria) Correlograma

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


Procesos ARMA

Análisis 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

Correlación 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)

Relación entre rezagos Correlograma

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


Procesos ARMA

Simulación Procesos ARMA


AR(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 función de autocorrelación 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 gráficas 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 función de autocorrelación 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 gráficas 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

Qué sucede cuando el proceso NO ES estacionario? Simulemos el proceso


Yt = 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 función de autocorrelación 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 gráficas 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

Simulación Procesos ARMA


MA(2)

Ahora simulemos un MA(2) de la forma: Yt = εt − 0.7εt−1 + 0.1εt−2 con


100 observaciones:

R> ma.sim<-arima.sim(model=list(ma=c(-.7,.1)),n=100)
R> ma.sim

La gráfica 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 autocorrelación 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

Función de autocorrelación Función de autocorrelación


simple ACF parcial PACF

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


Procesos ARMA

Simulación Procesos ARMA


ARMA(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 autocorrelación 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

Función de autocorrelación Función de autocorrelación


simple ACF parcial 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 función de
autocorrelación parcial, pacf, mientras la estacionariedad se analiza
en la función de autocorrelación simple, acf.
El orden de un proceso MA(q) se analiza en la función de
autocorrelación simpre, acf, mientras que la invertibilidad se analiza
en la función de autocorrelación 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 with


R. Springer.
A. Ian McLeod, Hao Yu, Esam Mahdi (2012) ”Time Series Analysis
with R”. Handbook of Statistics. Volume 30. Pages 661- 712.
Elsevier
Cryer, J., Chan, K. (2008) ”Time Series Analysis with Applications in
R”. Springer

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