Cléber da Costa Figueiredo Séries Temporais PAE - 2º semestre de 2007 Quem sou? Licenciado em matemática pelo IMEUSP; Iniciação Científica sob orientação da Profª Drª Mônica Carneiro Sandoval; Transformação de Box-Cox. Mestre em estatística sob a orientação da Profª Drª Mônica Carneiro Sandoval e co-orientação da Profª Denise Aparecida Botter; Incorporação do plano amostral na análise de regressão. Atualmente, doutorando em estatística...sob a orientação do Profº Drº Heleno Bolfarine e Co-orientação da Profª Drª Mônica Carneiro Sandoval; Calibração linear em modelos com assimetria. Autocorrelação Interesse: Análise de Regressão, Inferência Bayesiana e Calibração Linear. 1 2 Alguns exemplos do R - Passageiros Programa de Aperfeiçoamento de Ensino 500 400 300 200 0 Supervisora: Profª Clélia Maria de Castro Toloi 100 Número de passageiros (em milhares) 600 Figura 1. Totais mensais de passageiros em linhas aéreas internacionais nos EUA entre 1949 e 1960. 1950 1952 1954 1956 1958 1960 Anos Existe uma clara tendência de crescimento bem como um padrão sazonal ao longo dos anos. 3 Comandos 4 Número de Linces > data(AirPassengers) # para obter informações sobre os dados # > help(AirPassengers) 5000 4000 3000 0 1000 > x = AirPassengers # testa se um objeto é uma série temporal # > is.ts(x) 2000 Número de linces capturados 6000 7000 Figura 2. Número anual de linces capturados em armadilhas entre 1821 e 1934 no Canadá. 1820 1840 1860 1880 1900 1920 Anos Observe o padrão um padrão cíclico em torno de 10 ou 11 anos. > plot(x,xlab='Anos',ylim=c(0,650),ylab='Número de passageiros (em milhares)') 5 Autocorrelações e correlograma 6 1 Cléber da Costa Figueiredo Séries Temporais PAE - 2º semestre de 2007 Comandos Vazões do Rio Nilo > data(lynx) # para obter informações sobre os dados # > help(lynx) 1200 1000 600 > linces = lynx # testa se o objeto é uma série temporal # > is.ts(linces) 800 Medições anuais das vazões 1400 Figura 3. Medições anuais de vazões do Rio Nilo em Ashwan entre 1871 e 1970. 1880 1900 1920 1940 1960 Anos Parece haver alguma alteração estrutural em torno do ano de 1900. > plot(linces,xlab='Anos', ylab='Número de linces capturados') 7 Comandos 8 Total mensal de mortos em acidentes > data(Nile) # para obter informações sobre os dados # > help(Nile) 10000 7000 8000 > Nilo = Nile # testa se o objeto é uma série temporal # > is.ts(Nilo) 9000 Número de mortos 11000 Figura 4. Mostra o total mensal de mortos nos Estados Unidos da América envolvidos em acidentes. 1973 1974 1975 1976 1977 1978 1979 Anos Parece que o número de mortos é maior durante os verões e esse padrão é observado ano a ano. Além disso, o número de mortos não parece aumentar, mantendo-se estacionário. > plot(Nilo,xlab='Anos', ylab='Medições Anuais das vazões') 9 Comandos 10 Gás no Reino Unido > data(USAccDeaths) # para obter informações sobre os dados # > help(USAccDeaths) 800 200 400 > mortes = USAccDeaths # testa se o objeto é uma série temporal # > is.ts(mortes) 600 Consumo de gás 1000 1200 Figura 5. Série trimestral do consumo de gás no Reino Unido entre o primeiro trimestre de 1960 e o quarto trimestre de 1986. 1960 1965 1970 1975 1980 1985 Tempo (em quadrimestres) Há uma tendência de crescimento porém a amplitude do padrão sazonal aumenta bastante a partir de 1971. > plot(mortes,xlab='Anos', ylab='Número de mortos') 11 Autocorrelações e correlograma 12 2 Cléber da Costa Figueiredo Séries Temporais PAE - 2º semestre de 2007 Comandos Colocando quatro deles lado a lado. > data(UKgas) # para obter informações sobre os dados # > help(UKgas) > par(mfrow=c(2,2)) > plot(x,xlab='Anos',ylim=c(0,650),ylab='Número de passageiros (em milhares)') > plot(linces,xlab='Anos', ylab='Número de linces capturados') > plot(Nilo,xlab='Anos', ylab='Medições Anuais das vazões') > plot(mortes,xlab='Anos', ylab='Número de mortos') > gas = UKgas # testa se o objeto é uma série temporal # > is.ts(gas) > plot(gas,xlab='Tempo (em quadrimestres)', ylab='Consumo de gás') 1950 1954 5000 1820 1860 11000 9000 Número de mortos 7000 1400 1000 Medições Anuais das vazões 1900 Anos 600 1920 Coeficientes de Autocorrelação: Ferramenta para se identificar as propriedades de uma série temporal. Coeficiente de correlação linear... SXY r SX SY 2000 1958 Anos 1880 14 Autocorrelação 0 Número de linces capturados 600 400 200 0 Número de passageiros (em milhares) 13 1960 xi 1973 1975 1977 x yi y i 1 n xi i 1 Anos x 2 n yi y 2 i 1 1979 Anos (x1,y1), (x2, y2), (x3, y3), (x4, y4), (x5, y5), (x6, y6) . . . 15 Idéia de autocorrelação 16 r1 Queremos medir a correlação entre as observações de uma mesma variável em diferentes momentos de tempo. Será que há correlação entre uma e outra observação? x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, ... Seria ótimo se conseguíssemos entender a relação entre observações defasadas 1, 2, ..., períodos de tempo. 17 Autocorrelações e correlograma n (x1,x2), (x2, x3), (x3, x4), (x4, x5), (x5, x6), (x6, x7) . . . 18 3 Cléber da Costa Figueiredo Séries Temporais PAE - 2º semestre de 2007 r2 r3 E entre a observação e a segunda vizinha? E com a terceira vizinha?... x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, ... x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, ... (x1,x4), (x2, x5), (x3, x6), (x4, x7), (x5, x8), . . . (x1,x3), (x2, x4), (x3, x5), (x4, x6), (x5, x7), (x6, x8) . . . 19 20 O coeficiente pode ser simplificado! A idéia é criar novos pares de variáveis! Em r1 os pares são (x1,x2), (x2, x3), ... Em r2 os pares são (x1,x3), (x2, x4), ... Em r3 os pares são (x1,x4), (x2, x5), ... Considerando x1, . . . , xn 1 e x2, . . . , xn como duas variáveis o coeficiente de correlação entre xt e xt+1, por exemplo, é dado por: E calcular as correlações dos novos pares de variáveis. 21 22 Mais simplificações! A versão simplificada do coeficiente de correlação fica: Onde as médias amostrais são Se utilizarmos a média amostral total x e considerarmos que as duas médias acima são aproximadamente as mesmas. Além disso, podemos excluir o fator n/(n-1) já que está próximo de 1 e temos um estimador bem mais simples! 23 Autocorrelações e correlograma 24 4 Cléber da Costa Figueiredo Séries Temporais PAE - 2º semestre de 2007 Um estimador da autocorrelação Observações A expressão anterior pode ser generalizada para calcular a correlação entre observações defasadas em k períodos de tempo. Assim como o coeficiente de correlação usual, as autocorrelações são adimensionais e 1 < rk < 1. Na prática é mais usual calcular primeiro os coeficientes de autocovariância {ck}, definidos por analogia com a fórmula usual de covariância Os coeficientes de autocorrelação são então obtidos como rk = ck/c0. 25 Verificação da necessidade do uso de alguma transformação Estudo da série de vazões do Nilo j<-floor(n/20) # para garantir L = 20 # abcissa<- NULL ordenada<- NULL for (i in 1: (n-j)){ abcissa[i]<-mean(Nilo[i:(i+j)]) ordenada[i]<-sd(Nilo[i:(i+j)]) } plot(x=abcissa,y=ordenada, xlab='Médias dos subconjuntos', ylab= 'Desvios-padrão(ões) dos subconjuntos', main='Uso de alguma transformação?') 200 150 100 50 Desvios-padrão(ões) dos subconjuntos 250 Uso de alguma transformação? 800 900 1000 1100 26 1200 Médias dos subconjuntos 27 Gás no Reino Unido Loge? Estudo das autocorrelações Como exemplo do cálculo das autocorrelações vamos utilizar os dados das medições das vazões do Nilo disponível no R. 50 100 150 200 250 300 Uso de alguma transformação? Desvios-padrão(ões) dos subconjuntos 28 100 200 300 400 500 Vamos montar uma matriz de correlogramas de valores defasados de 1, 2, 3 e 4 períodos. 600 Médias dos subconjuntos 29 Autocorrelações e correlograma 30 5 Cléber da Costa Figueiredo Séries Temporais PAE - 2º semestre de 2007 1000 1400 600 1000 1400 1400 600 1000 Comandos 1000 1400 600 x[i] Nilo <- Nile n <- length(Nilo) k <- 5 m = NULL for (i in 1:k) m=cbind(m,lag(Nilo,k=i-1)) m=as.data.frame(m) colnames(m) <- c("Nilo[i]", "Nilo[i-1]", "Nilo[i-2]", "Nilo[i-3]", "Nilo[i-4]") pairs(m, gap = 0, upper.panel = panel.smooth) 1000 1400 600 x[i-1] 1000 1400 600 x[i-2] 1000 1400 600 x[i-3] 600 x[i-4] 600 31 1000 1400 600 1000 1400 600 1000 1400 32 Series Nile 1.0 A função de autocorrelação - acf 0.4 0.2 ACF 0.6 0.8 Para calcularmos todas as possíveis autocorrelações existe uma função chamada acf. No exemplo anterior, se tivéssemos digitado o comando: -0.2 0.0 acf( Nile ) Teríamos o correlograma de toda a série. 0 5 10 34 1954 5000 2000 1958 1820 1980 11000 9000 Número de mortos 1970 1900 7000 600 1960 1860 Anos 1000 Anos Anos 35 0 Número de linces capturados 600 400 200 0 Número de passageiros (em milhares) 1950 200 Numa série aleatória esperamos que os valores defasados sejam não correlacionados e espera-se que rk = 0. Podemos mostrar que rk tem distribuição assintótica rk ~N ( 1/n ; 1/n). Assim, os limites de confiança aproximados de 95% são dados por 1/n ± 1, 96/ n, que são frequentemente ainda mais aproximados para ±1, 96/ n. Autocorrelações e correlograma 20 Correlogramas dos Exemplos Medições Anuais das vazões Limites de confiança 15 Lag 33 1973 1975 1977 1979 Anos 36 6 Cléber da Costa Figueiredo Séries Temporais PAE - 2º semestre de 2007 Correlogramas Comandos 1.0 0.5 -0.5 0.0 autocorrelaçoes 0.6 0.2 1.0 1.5 0 5 10 15 defasagem gás mortos par(mfrow=c(2,2)) acf(x, main= 'passageiros',xlab='defasagem',ylab='autocorrelaçoes') acf(linces, main='linces',xlab='defasagem',ylab='autocorrelaçoes') acf(gas, main='gás',xlab='defasagem',ylab='autocorrelaçoes') acf(mortes, main='mortos',xlab='defasagem',ylab='autocorrelaçoes') 0.4 autocorrelaçoes 0.6 -0.2 -0.4 0.2 20 0.8 defasagem 0.0 autocorrelaçoes -0.2 0.5 1.0 0.0 autocorrelaçoes par(mfrow=c(2,2)) plot(x,xlab='Anos',ylim=c(0,650),ylab='Número de passageiros (em milhares)') plot(linces,xlab='Anos', ylab='Número de linces capturados') plot(gas,xlab='Anos', ylab='Medições Anuais das vazões') plot(mortes,xlab='Anos', ylab='Número de mortos') linces 1.0 passageiros 0 1 2 3 4 5 0.0 defasagem 0.5 1.0 1.5 defasagem 37 Gerando séries temporais artificiais 38 Saídas - ruído 0.6 0.4 autocorrelações 0.2 -0.2 -0.2 0.0 -0.1 x = rnorm(200,0,0.1) par(mfrow=c(1,2)) plot.ts(x,xlab='tempo',ylab='observações') acf(x,main='',xlab='defasagem',ylab='autocorrelações') 0.0 observações 0.1 0.8 0.2 1.0 1. Série aleatória, observações iid da distribuição N(0,1) 0 5 0 1 0 0 2 0 0 0 te m p o 5 1 0 1 5 2 0 d e fa s a g e m 39 Gerando séries temporais artificiais 40 Saída passeio aleatório 0 2 0 4 0 6 0 te m p o 41 Autocorrelações e correlograma 0.6 0.4 autocorrelações -0.2 0.0 -1.0 e = rnorm(100,0,0.1) x = cumsum(e) par(mfrow=c(1,2)) plot.ts(x,xlab='tempo',ylab='observações') acf(x,main='',xlab='defasagem',ylab='autocorrelações') 0.2 N (0;0,01) 0.0 1 -0.5 xt observações xt 0.8 1.0 2. Série com tendência, 8 0 0 5 1 0 1 5 2 0 d e fa s a g e m 42 7 Cléber da Costa Figueiredo Séries Temporais PAE - 2º semestre de 2007 Agora é estacionária! 0.6 0.4 0.2 -0.2 -0.2 0.0 -0.1 0.0 observações z<-diff(x) par(mfrow=c(1,2)) plot.ts(z,xlab='tempo',ylab='observações') acf(z,main='',xlab='defasagem',ylab='autocorrel ações') autocorrelações 0.1 0.8 0.2 É interessante notar que a primeira diferença de um passeio aleatório é estacionária! 1.0 A função diff(...) 0 2 0 40 6 0 80 0 5 te m p o 1 0 1 5 d e fa s a g e m 43 44 z<-diff(x,lag=12) par(mfrow=c(1,2)) plot.ts(z,xlab='tempo',ylab='observações') acf(z,main='',xlab='defasagem',ylab='autocorrelações') Vamos usar diff(...) - Passageiros 1 95 4 19 58 1.0 0.8 0.6 0.4 autocorrelações 40 observações 20 0.0 0.2 -0.2 0 0.0 -0.2 1 95 0 0.2 60 0.8 0.4 autocorrelaçoes 0.6 500 400 300 200 100 0 Número de passageiros (em milhares) 600 1.0 p a s s a g e ir o s 0 .0 A no s 0 .5 1 .0 1 .5 1 9 5 0 1 9 5 4 d e fa s a g e m 1 9 5 8 0 .0 te m p o 0 .5 1 .0 1 .5 d e fa s a g e m 45 Gerando séries temporais artificiais 46 Saída memória de curto prazo 1.0 3. Série com correlação de curto-prazo et 0.8 1 2 0,7 xt -0.4 -4 -0.2 -3 0.0 0.2 autocorrelações -1 -2 observações 0 Curto<-arima.sim(n = 400, list(ar = 0.7)) par(mfrow=c(1,2)) plot.ts(Curto,xlab='tempo',ylab='observações') acf(Curto,main='',xlab='defasagem',ylab='autocorrelações') 0.4 0.6 1 xt 0 2 0 4 0 60 te m p o 47 Autocorrelações e correlograma 80 0 5 1 0 1 5 20 d e fa s a g e m 48 8 Cléber da Costa Figueiredo Séries Temporais PAE - 2º semestre de 2007 Gerando séries temporais artificiais Saída correlações negativas 1 et -6 -4 -0.5 0.0 0 -2 observações negativo<-arima.sim(n = 100, list(ar = -0.8)) par(mfrow=c(1,2)) plot.ts(negativo,xlab='tempo',ylab='observações') acf(negativo,main='',xlab='defasagem',ylab='autocorrelações') autocorrelações 2 0.5 0,8 xt 4 xt 1.0 6 4. Série com correlação negativa 0 2 0 4 0 6 0 te m p o 49 Autocorrelações e correlograma 8 0 0 5 1 0 1 5 2 0 d e fa s a g e m 50 9 This document was created with Win2PDF available at http://www.daneprairie.com. The unregistered version of Win2PDF is for evaluation or non-commercial use only.