Está en la página 1de 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

Estas pr´acticas utilizan los paquetes de R que acompa˜nan 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´on: http://cran.r-project.org/web/packages/TSA/TSA.pdf

Las diapositivas fueron elaboradas en Beamer con la ayuda del paquete SASnRdisplay.

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´erminos cient´ıficos, el prop´osito del an´alisis de las series de tiempo es entender o modelar el mecanismo estoc´astico 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´etodos de series de tiempo son utilizadas todos los d´ıas en la toma de decisiones.

Las series de tiempo tambi´en suelen formar la base de simulaciones por computadora.

Gr´afico de Series de Tiempo

En esta secci´on el inter´es est´a en la gr´afica de las series de tiempo. Dichos gr´aficos generalmente son el primer paso en un an´alisis exploratorio y presentados en un reporte final.

Gr´afico de Series de Tiempo

Ejemplo 1: Paseo aleatorio

Uno de los procesos m´as elemental para el an´alisis de series de tiempo es un paseo aleatorio:

R> library(TSA) R> data(rwalk) R> plot(rwalk, ylab=’Paseo Aleatorio’, type=’o’)
R>
library(TSA)
R>
data(rwalk)
R>
plot(rwalk,
ylab=’Paseo
Aleatorio’,
type=’o’)

Gr´afico de Series de Tiempo

Ejemplo 2: Precios del Trigo

Este ejemplo tiene como prop´osito mostrar el uso del comando plot() con los datos del ´ındice de precios del trigo en Canad´a (Beveridge wheat price index).

R>

library(TSA)

R>

data(bev)

R>

plot(bev)

Gr´afico de Series de Tiempo Ejemplo 2: Precios del Trigo Este ejemplo tiene como prop´osito mostrar

Gr´afico de Series de Tiempo

Ejemplo 2: Precios del Trigo

A˜nadiendo 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’)
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’)

G´afico de Series de Tiempo

Ejemplo 3: Estacionalidades

En ocasiones un evento se repite sistem´aticamente a lo largo del tiempo y

para el an´alisis de series de tiempo, visualizar estos patrones resulta

s´umamente 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’)
s´umamente 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)))

Gr´afico de Series de Tiempo

Ejemplo 4: G´afico de M´ultiples Series de Tiempo

En otras ocasiones tambi´en es importante graficar m´ultiples 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))

 

Gr´afico de Series de Tiempo

Ejemplo 5: Agrupaci´on y Tendencias

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

principales an´alisis gr´aficos que se suelen realizar a las series de tiempo. El

ejemplo a continuaci´on corresponde a observaciones sobre series de

temperaturas.

En el primer paso obs´ervese 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’)

 

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’)
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’)

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

Gr´afico de Series de Tiempo

Ejemplo 6: Descomposici´on de una Serie

Si existe evidencia de una tendencia en una serie, resulta util

´

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))

 
Gr´afico de Series de Tiempo Ejemplo 6: Descomposici´on de una Serie Si existe evidencia de una

Tambi´en se puede realizar una descomposici´on multiplicativa : ...

R> Elec.decom <- decompose(Elec.ts, type = "mult") R> win.graph(width=4.875, height=3.5, pointsize=8) R> plot(Elec.decom)
R>
Elec.decom
<-
decompose(Elec.ts,
type
=
"mult")
R>
win.graph(width=4.875,
height=3.5,
pointsize=8)
R>
plot(Elec.decom)

...

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
R>
Trend
<-
Elec.decom$trend
R>
Seasonal
<-
Elec.decom$seasonal
R>
ts.plot(cbind(Trend,
Trend
*
Seasonal),
lty

=

1:2)

Funciones de autocorrelaci´on Procesos Estacionarios

Correlograma

El principal prop´osito del correlograma es detectar autocorrelaciones en las

series de tiempo luego de haberles removido y estimado la tendencia y la

variaci´on 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])

 

Serie Pasajeros (estacionaria)

Serie Pasajeros (estacionaria) Correlograma

Correlograma

Serie Pasajeros (estacionaria) Correlograma

An´alisis 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’)
R>
win.graph(width=4.875,
height=3,
pointsize=8)
R>
data(ar1.s);
plot(ar1.s,
ylab=expression(Y[t]),
type=’o’)

Correlaci´on 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´on entre rezagos

Correlaci´on 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’)

Correlograma

Correlaci´on 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’)

Simulaci´on Procesos ARMA

AR(2)

Simulemos el proceso visto en clases, un AR(2) de la forma:

Y t = 0.5Y t1 + 0.3Y t2 + ε t con 100 observaciones:

R>

ar.sim<-arima.sim(model=list(ar=c(.5,.3)),n=100)

R>

ar.sim

La funci´on de autocorrelaci´on simple (acf):

R>

ar.acf<-acf(ar.sim,type="correlation",plot=T)

R>

ar.acf

Las gr´aficas 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

Y t = 0.5Y t1 + 0.3Y t2 + ε t

Las gr´aficas 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’)

Correlograma

Las gr´aficas 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’)

Ahora simulemos una variante del proceso anterior:

Y t = 0.5Y t1 0.3Y t2 + ε t con 100 observaciones:

R>

ar.sim2<-arima.sim(model=list(ar=c(.5,-.3)),n=100)

R>

ar.sim2

La funci´on de autocorrelaci´on simple:

R>

ar.acf<-acf(ar.sim2,type="correlation",plot=T)

R>

ar.acf

Las gr´aficas 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

Y t = 0.5Y t1 0.3Y t2 + ε t

Las gr´aficas 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’)

Correlograma

Las gr´aficas 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’)

Qu´e sucede cuando el proceso NO ES estacionario? Simulemos el proceso

Y t = 0.9Y t1 + 0.3Y t2 + ε t con 100 observaciones:

R>

ar.sim3<-arima.sim(model=list(ar=c(.9,.3)),n=100)

R>

ar.sim3

La funci´on de autocorrelaci´on simple:

R>

ar.acf<-acf(ar.sim3,type="correlation",plot=T)

R>

ar.acf

Las gr´aficas 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

Y t = 0.9Y t1 + 0.3Y t2 + ε t

Las gr´aficas 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]),

Correlograma

Las gr´aficas 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]),

Simulaci´on Procesos ARMA

MA(2)

Ahora simulemos un MA(2) de la forma: Y t = ε t 0.7ε t1 + 0.1ε t2 con

100 observaciones:

R>

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

R>

ma.sim

La gr´afica 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’)

Simulaci´on Procesos ARMA MA(2) Ahora simulemos un MA(2) de la forma: Y = ε − 0

Las funciones de autocorrelaci´on 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´on de autocorrelaci´on

Funci´on de autocorrelaci´on

simple ACF parcial PACF
simple ACF
parcial PACF

Simulaci´on Procesos ARMA

ARMA(2,2)

Ahora simulemos un ARMA(2,2) de la forma:

Y t = 0.5Y t1 0.2Y t2 + ε t 0.4ε t1 + 0.3ε t2 con 100 observaciones:

R>

arma.sim<-arima.sim(model=list(ar=c(.5,-.2),ma=c(-.4,.3)),n=100)

R>

arma.sim

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)
R>
require("tseries")
R>
win.graph(width=4.875,
height=3,
pointsize=8)
R>
ts.plot(arma.sim)

Las funciones de autocorrelaci´on 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´on de autocorrelaci´on

Funci´on de autocorrelaci´on

simple ACF parcial PACF
simple ACF
parcial PACF

Para recordar

El orden de un proceso AR(p) se analiza en la funci´on de

autocorrelaci´on parcial, pacf, mientras la estacionariedad se analiza

en la funci´on de autocorrelaci´on simple, acf.

El orden de un proceso MA(q) se analiza en la funci´on de

autocorrelaci´on simpre, acf, mientras que la invertibilidad se analiza

en la funci´on de autocorrelaci´on parcial, pacf.

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