Séries Temporais: Correlograma (Interpretação e Código em R)

Em séries temporais, é importante realizar uma análise da autocorrelação de uma série, para entender, principalmente sua aleatoriedade, já que várias técnicas partem dessa premissa. Autocorrelação é simplesmente a correlação entre uma série e ela mesma defasada. Ou seja, é a correlação entre os valores da série em um determinado período de tempo, e os valores da mesma série em um outro momento no tempo.

Um exemplo simples seria tomar os valores de venda de uma loja de Fevereiro a Dezembro de um ano e calcular a correlação desses valores com os de vendas da mesma loja de Janeiro a Novembro desse mesmo ano (comparar t com t-1). Essa é uma autocorrelação de defasagem igual a 1 (lag=1). Para defasagem 2 bastaria pular dois meses. Quando a série for aleatória, observaremos autocorrelações próximas de zero. No entanto, quando temos uma tendência ou uma sazonalidade, observamos uma tendência de queda ou picos positivos nos valores. Uma forma de analisar a autocorrelação é através de um correlograma.

O correlograma é o gráfico utilizado em séries temporais para traçar as autocorrelações (também chamadas em inglês de ACF = autocorrelation function) em diversas defasagens. A análise desse gráfico permite entender se a série é aleatória ou possui alguma tendência ou sazonalidade. Para traçar esse gráfico no R, podemos utilizar a função ggACF() do pacote forecast. Vamos ver alguns exemplos e interpretá-los

## gera uma serie aleatoria
y <- ts(rnorm(50))

## plota o correlograma
ggAcf(y);

correlograma1

No gráfico, o eixo vertical indica a autocorrelação e o horizontal a defasagem. A linha tracejada azul indica onde é significativamente diferente de zero. Como é possível ver na imagem, praticamente todos os valores ACF estão dentro do limite da linha tracejada azul. Ou seja, autocorrelação igual a zero, indicando que a série é aleatória – conforme o esperado.

## instala pacote com a serie de dados beer2
install.packages("fpp");

## plota correlograma de beer2
ggAcf(beer2)

correlograma2

A série beer2 contém os dados trimestrais para a produção de cerveja na Austrália, iniciando no ano de 1992. Para cada linha você terá o valor de um trimestre. É possível observar aqui que o maior valor está em 4. Isso ocorre porque a série tem sazonalidade trimestral. Obviamente, os valores múltiplos de 4 também serão altos, mas vão diminuindo com o passar do tempo.

## carrega dados
dados <- read.table("sales.csv", header=T);

## trata nome da coluna
colnames(dados)[1] <- "vendas_varejo"

## cria objeto ts
dados_ts <- ts(dados, start=c(1992,1), frequency=12);

## gera correlograma com 50 defasagens
ggAcf(dados_ts, lag.max=50);

correlograma3

Novamente utilizando dados do varejo dos EUA como exemplo (foram utilizados também no post Séries Temporais: Introdução e Decomposição dos Componentes em R).

Aqui, podemos ver que o maior valor está em 12, além de valores positivos altos em múltiplos de 12. Isso porque a sazonalidade aqui é mensal. É possível observar inclusive um padrão sendo seguido a cada 12 defasagens. Os picos são causados pela sazonalidade, enquanto que o comportamento decrescente dos valores de autocorrelação ocorrem por conta de uma tendência nas vendas (também já demonstradas no post Séries Temporais: Introdução e Decomposição dos Componentes em R).

O correlograma também é utilizado (e talvez até com maior relevância) para analisar os resíduos de um modelo. Quando você faz, por exemplo, uma projeção (forecast) do preço de uma ação, o correlograma do resíduo desse modelo deve estar contido no tracejado azul. Ou seja, os resíduos não podem ter autocorrelação. Caso contrário, sua projeção pode ser melhorada, pois alguma informação relevante no modelo está contida nos resíduos (análogo ao que foi comentado nos textos de Regressão Linear).

 

Anúncios

8 comentários

  1. Excelente. Só fiquei na duvida de como identificar ou não a sazonalidade. Se eu inputo o valor do Lag, não é porque eu já sei a sazonalidade? Os meus valores teriam que estar dentro do range tracejado em azul para demonstrar que os meus dados são aleatórios, ou seja, não apresentam sazonalidade e, aonde alguns pontos cruzam o suporte azul, seria os períodos que apresentam a sazonalidade? Obrigado.

    Curtir

    1. Olá Carlos. Não sei se entendi bem seu primeiro raciocínio. No último trecho do código a gente só inputa o lag máximo, até onde queremos ir. Se você usar ggAcf() com seus dados, você chega no que eu fiz nos dois primeiros exemplos. Com relação a segunda pergunta é isso mesmo, a linha tracejada que aponta a significância. De forma simples, se ultrapassa é porque tem correlação.

      Curtir

  2. Boa tarde,
    desculpe incomodar com uma questão simples.
    Apliquei um teste de defasagem para um modelo de correlação, acontece que:
    o teste de defasagem para o data.frame que possues 4 variáveis e consistente em 4 defasagens que acredito seja a melhor opção no cenário.
    porém quando verificado as defasagens em individual todas elas são consistentes em 11 períodos.

    A pergunta é, qual dessas será a ideal?

    Curtir

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s