RETO MES DE ABRIL .............................docx
Series de Tiempo en R parte I (Series estacionarias)
1. 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
2. Preliminares
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.
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 2 / 34
3. 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´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.
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 3 / 34
4. Gr´afico de Series de Tiempo
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.
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 4 / 34
5. Gr´afico de Series de Tiempo
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’)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 5 / 34
6. Gr´afico de Series de Tiempo
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)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 6 / 34
7. Gr´afico de Series de Tiempo
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’)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 7 / 34
8. Gr´afico de Series de Tiempo
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’)
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
9. Gr´afico de Series de Tiempo
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))
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 9 / 34
10. Gr´afico de Series de Tiempo
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 10 / 34
11. Gr´afico de Series de Tiempo
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’)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 11 / 34
12. Gr´afico de Series de Tiempo
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 12 / 34
13. Gr´afico 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
14. Gr´afico 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
15. Gr´afico de Series de Tiempo
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))
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 15 / 34
16. Gr´afico de Series de Tiempo
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)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 16 / 34
17. Gr´afico 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
18. Correlaci´on
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])
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 18 / 34
20. Procesos ARMA
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’)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 20 / 34
21. Procesos ARMA
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 Correlograma
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 21 / 34
22. Procesos ARMA
Simulaci´on 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´on de autocorrelaci´on 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
23. Procesos ARMA
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
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
24. 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´on de autocorrelaci´on 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
25. Procesos ARMA
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
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
26. Procesos ARMA
Qu´e 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´on de autocorrelaci´on 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
27. Procesos ARMA
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
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
28. Procesos ARMA
Simulaci´on 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´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’)
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 28 / 34
29. Procesos ARMA
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
simple ACF
Funci´on de autocorrelaci´on
parcial PACF
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 29 / 34
30. Procesos ARMA
Simulaci´on 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
31. 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
32. Procesos ARMA
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
simple ACF
Funci´on de autocorrelaci´on
parcial PACF
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 32 / 34
33. Procesos ARMA
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.
J. Campuzano (E.S.P.O.L) Series de Tiempo en R Semestre I 2013 33 / 34
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