Séries Temporais: Introdução e Decomposição dos Componentes em R

Esse post vai ensinar de forma sucinta como inputar seus dados de séries temporais no R e separar graficamente o que é a sazonalidade, a tendência e a aleatoriedade dos seus dados. Se você já conhece o conceito de séries, pode pular os dois próximos parágrafos.

Séries temporais são observações ao longo do tempo. Se você está trabalhando com dados ao longo do tempo, então as técnicas serão diferentes das utilizadas quando se trabalha com dados que consistem em informações retiradas de uma foto ao longo do tempo (dados cross-sectional). Exemplos de variáveis analisadas em séries temporais: preço diários de uma ação, crescimento anual do PIB, inflação anual, vendas mensais, resultados trimestrais de uma empresa, etc.

Sendo mais claro ainda, quando temos os preços diários de uma ação ao longo de um ano e queremos saber qual o valor da ação para os dias seguintes, a análise será feita com ferramentas para tratar séries temporais. Quando temos informações de clientes de uma empresa (e.g.: idade, profissão, renda, valor do plano, etc.) em uma determinada data, e queremos saber sua probabilidade de inadimplência para a fatura do próximo mês, estamos tratando de dados cross-sectionalAinda, se fizermos um experimento com um grupo de 200 alunos, sendo que 100 recebem algum tipo de tratamento, e queremos acompanhar a evolução do tratamento ao longo dos próximos 12 meses, estamos tratado de dados em painel.

Os dados aqui utilizados serão os de venda no varejo dos EUA, que encontrei enquanto resolvia alguns exercícios pela internet e estão disponíveis para baixar aqui. Já o site que eu menciono é o R-Exercises. Também recomendo a visita.

Quando você carregar seus dados de séries temporais no R, você deve sempre convertê-los para o objeto ts. Isso facilita o entendimento do programa e irá fazer com que seus tratamentos sejam mais simples. O R entende os objetos de séries temporais e por isso existem diversas funções específicas para serem utilizadas com esses tipos de dados. Por exemplo, podemos carregar um vetor qualquer com valores aleatórios e indicar para o R que é uma série utilizando a função ts, escolhendo ainda em qual ano (e mês se quiser) que começa e a frequência:

## cria um vetor com valores qualquer
dados_teste = c(10,20,15,30);

## utiliza o vetor como serie anual que inicia em 2005
dados_teste_serie_1 = ts(dados_teste, start = 2005);

## utiliza o vetor como serie mensal que inicia em 2005
dados_teste_serie_2 = ts(dados_teste, start = 2005, frequency = 12);

## utiliza o vetor como serie mensal que inicia em fevereiro de 2015
dados_teste_serie_3 = ts(dados_teste, start = c(2005,2), frequency = 12);

## graficos dos 3 para mostrar a diferenca nos eixos
par(mfrow=c(1,3));
plot(dados_teste_serie_1);
plot(dados_teste_serie_2);
plot(dados_teste_serie_3);

Veja que frequency representa o número de observações até que a sazonalidade ocorra, 1 é anual, 4 é trimestral, 12 é mensal e 52 semanal. A função plot() gera os gráficos normalmente, conforme será demonstrado abaixo.

Agora, trabalhando os dados de venda:

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

## da o nome de 'vendas_varejo' para a coluna 1
colnames(dados)[1] = "vendas_varejo"

## cria objeto ts, serie que comeca em janeiro de 1992
## dados sao mensais
dados_ts = ts(dados, start=c(1992,1), frequency=12);
## ajusta para um grafico apenas (por causa do 1o codigo)
par(mfrow=c(1,1));
## plota serie limitando eixo y
plot(dados_ts, ylim = c(0,max(dados_ts[,])));

Agora, você já consegue visualizar os seus dados. Porém, você não sabe exatamente como separar o que ali representa a sazonalidade e o que representa a tendência (crescimento ou decrescimento). Para isso, vamos utilizar a função decompose() do tipo multiplicative para obter 4 informações: o que é aleatório, sazonalidade, tendência e o observado:

## decomposicao
decomposicao = decompose(dados_ts, type = "multiplicative");
plot(decomposicao);

Agora, por conta do type utilizado acima você pode estar em dúvida do que quer dizer multiplicative quando tratamos de modelos. Mais especificamente, a pergunta que fica é: Qual a diferença entre um modelo aditivo e um modelo multiplicativo em séries temporais?

Basicamente, séries temporais envolvem sazonalidade, tendência e ciclo, além, é claro, dos resíduos. Porém, esses componentes podem se somar ou se multiplicar, e essa é a diferença básica.

Modelo aditivo: Dado = Efeito Sazonal + Tendência + Ciclo + Resíduo

Modelo multiplicativo: Dado = Efeito Sazonal x Tendência x Ciclo x Resíduos

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!

11 comentários em “Séries Temporais: Introdução e Decomposição dos Componentes em R”

  1. Os seus artigos são ótimos. Parabéns. Não consigo entender o que seria exatamente ciclo (diferença para sazonalidade) e quando aplicar o modelo aditivo ou multiplicativo. Obrigado.

  2. Boa noite,
    Gostaria de saber como eu faço para decompor uma série anual.
    Em um exercício que estou fazendo, a série analisada apresenta dados ano a ano. Quando eu escrevo o código, devo colocar frequency= 1, correto? (Quando eu coloco frequency>1, o gráfico plotado não vai até onde os dados vão. Exemplo: se frequency=2, o plot() mostra um gráfico de 1880-1950 (em uma série que vai até 2015)). Porém, ao aplicar o decompose, o R apresenta um erro.
    Se puder me ajudar, ficarei muito grato!

    1. Fala, André!
      Me chama lá na DM do Insta (@universidadedosdados) ou do Twitter (@unidosdados) para eu entender melhor seus dados e o problema.
      A gente resolve juntos.
      Abraços!

Deixe um comentário

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