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

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

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

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

Gostou do conteúdo? Se inscreva para receber as novidades! Deixe seu e-mail em INSCREVA-SE na barra à direita, logo abaixo de pesquisar. E, por favor, não deixe de comentar, dar seu feedback e compartilhar com seus amigos. De verdade, isso faz toda a diferença. Você também pode acompanhar mais do meu trabalho seguindo a conta de Twitter @EstatSite ou por alguma das redes que você encontra em Sobre o Estatsite / Contato, como meu canal de Youtube Canal do Yukio

Bons estudos!

16 comentários em “Séries Temporais: Correlograma (Interpretação e Código em R)”

  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.

    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.

  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?

    1. Olá Felipe! Não entendi a pergunta. Que teste de defasagem você diz? O próprio correlograma? O que você quer dizer com a verificação em individual ser consistente em 11 períodos?

  3. Olá. Posso utilizar o correlograma para dados que não sejam de séries temporais? Por exemplo, quero ver se o modelo que estou utilizando para meus dados (volume e altura de árvores) produz resíduos autocorrelacionados…

      1. Muito obrigado Yukio.

        Vc sabe como plotar esses gráficos em um mosaico, usando o R?
        Tenho 12 gráficos para plotar e estou tentando pela função par(mfrow=c(3,4)) mas não consigo…
        Quando eu estava utilizando a função acf do default do r eu conseguia fazer o mosaico.

        você poderia me ajudar com alguma dica?

  4. Olá, boa tarde, estou tentando fazer um correlograma com pontos coloridos, consegui, no entanto percebi que o comando que tenho utiliza somente uma coluna por vez, gostaria de saber se tem como usar todas as minhas variáveis de uma só vez afim de ter dados mais robustos, ou isso não é possível?.

    1. Olá, Lucas. Não sei se entendi direito a pergunta. Mas autocorrelação é a correlação da variável com ela mesmo para diferentes lags temporais. Nesse ponto, não sei onde faria sentido “usar todas as variáveis”. Posso estar confuso quanto ao que você quer.
      Se quiser me mandar por e-mail a dúvida, as variáveis, etc, ou chamar na DM do Twitter, podemos até discutir melhor.
      Abs!

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *