Análise de Séries Temporais: Estudo da Inflação Mensal no Brasil (2020-2023)
Introdução
Nos últimos anos, a inflação no Brasil tem sido um tema central nas discussões econômicas e políticas. A inflação, medida principalmente pelo Índice de Preços ao Consumidor Amplo (IPCA), reflete a variação nos preços de bens e serviços e afeta diretamente o poder de compra da população. Entre 2020 e 2023, o Brasil enfrentou desafios significativos, incluindo a pandemia de COVID-19, crises políticas, e instabilidades globais, que influenciaram a trajetória da inflação. Houve períodos de alta inflacionária, impulsionados por fatores como o aumento dos preços dos combustíveis, da energia elétrica e dos alimentos, além de pressões externas como a desvalorização cambial e o impacto das cadeias de suprimento globais.
Nesse contexto, o estudo de séries temporais torna-se bastante relevante. As Séries Temporais permitem analisar a evolução da inflação ao longo do tempo, identificar padrões sazonais e tendências, e prever futuros movimentos com base nos dados históricos. A análise dessas séries auxilia economistas e formuladores de políticas públicas a entenderem a dinâmica inflacionária, tomar decisões informadas e planejar intervenções adequadas.
Este trabalho busca aplicar conceitos de Séries Temporais na análise da inflação mensal no Brasil, compreendendo melhor seus comportamentos cíclicos e identificando padrões que possam fornecer insights sobre a evolução futura dos preços.
Objetivos
Este trabalho tem como objetivos criar e analisar uma série temporal com dados mensais de inflação, aplicando conceitos fundamentais da análise de Séries Temporais. Especificamente, busca-se avaliar a estacionaridade da série, testar a presença de passeio aleatório, examinar a autocorrelação, decompor a série em seus componentes principais, realizar transformações e diferenciação, e utilizar médias móveis para identificar padrões e tendências.
Pacotes utilizados
Para a análise de séries temporais, diversos pacotes do R foram
utilizados, cada um com uma função específica. O pacote DT
é empregado para exibir o dataset de forma interativa, facilitando a
visualização. O readxl é usado para importar os dados, que
oferece suporte a planilhas do Excel. O dplyr permite
manipulação e transformação dos dados, como sumarização e filtragem. E,
para realizar testes de estacionariedade, como o teste ADF, utiliza-se o
pacote tseries.
Pré processamento
Para garantir que os dados estejam no formato correto para análise, o índice da inflação foi convertido para o tipo numérico, substituindo vírgulas por pontos, e a coluna de datas foi formatada. O dataframe foi atualizado com novos nomes de colunas para maior clareza e, em seguida, a estrutura do dataframe foi revisada para confirmar que as alterações foram aplicadas corretamente. Além disso, a presença de valores nulos foi verificada, assegurando a integridade dos dados antes da análise.
inflacaomensal <- read_excel("C:/Users/laris/Downloads/inflacao_mensal_brasil/infacaomensal.xlsx")
#View(inflacaomensal)
summary(inflacaomensal$`Índice do mês`)## Length Class Mode
## 43 character character
## tibble [43 × 2] (S3: tbl_df/tbl/data.frame)
## $ Mês/ano : POSIXct[1:43], format: "2023-01-01" "2023-02-01" ...
## $ Índice do mês: chr [1:43] "0,53" "0,84" "0,71" "0,61" ...
# Transformar `Índice do mês` para numérico e garantir que `Mês/ano` esteja no formato correto
inflacaomensal <- inflacaomensal %>%
mutate(
`Índice do mês` = as.numeric(gsub(",", ".", `Índice do mês`)),
`Mês/ano` = as.Date(`Mês/ano`, format="%Y-%m-%d")
)
inflacaomensal <- inflacaomensal %>%
rename(
data = `Mês/ano`,
indice_do_mes = `Índice do mês`
)
# Verificar a estrutura do dataframe para garantir que as mudanças foram aplicadas
str(inflacaomensal) # OK## tibble [43 × 2] (S3: tbl_df/tbl/data.frame)
## $ data : Date[1:43], format: "2023-01-01" "2023-02-01" ...
## $ indice_do_mes: num [1:43] 0.53 0.84 0.71 0.61 0.23 0.08 0.12 0.54 1.01 1.62 ...
## data indice_do_mes
## 0 0
Base de Dados
O conjunto de dados utilizado nesta análise foi obtido do Kaggle, disponível no link Inflação Mensal Brasil. O dataset contém 2 colunas e 43 linhas, contendo dados mensais de inflação no Brasil de 2020 a 2023. As colunas consideradas para esta análise são:
- a data em que a inflação foi coletada; e
- a taxa de inflação registrada.
Metodologia
A metodologia adotada para o estudo envolveu várias etapas detalhadas. Inicialmente, na Coleta e Pré-processamento dos Dados, foram convertidos os valores do índice de inflação para o formato numérico, ajustado o formato da coluna de datas, renomeadas as colunas para maior clareza e verificados valores nulos. Em seguida, realizou-se a Análise Exploratória de Dados (EDA), que incluiu a criação e visualização da série temporal para identificar padrões iniciais de tendência e sazonalidade, a decomposição da série para separar as componentes de tendência, sazonalidade e ruído, e a verificação da distribuição dos dados com histogramas, gráficos Q-Q e o teste de Shapiro-Wilk para testar a normalidade. Também foram calculadas e analisadas a autocorrelação e autocorrelação parcial utilizando as funções ACF e PACF. A Verificação de Estacionaridade foi feita com o teste de Dickey-Fuller aumentado (ADF), e, em casos de não estacionaridade, a diferenciação foi aplicada para remover tendências e tornar a série estacionária.
Resultados
A Análise Exploratória de Dados (EDA) a seguir ajudará a entender e preparar a série temporal, sendo realizada através de vários tipos de gráficos e testes que revelam padrões e características da série.
Criação da Série Temporal
As séries temporais são conjuntos de observações ordenadas no tempo e podem representar diversos fenômenos observáveis ao longo de um período. Exemplos incluem valores diários de poluição, índices da Bolsa de Valores, temperaturas mensais, precipitação anual, e até mesmo o número de manchas solares registradas ao longo dos anos (MORETTIN, 2018). Em outras palavras, uma série temporal é uma sequência de dados organizados em ordem de tempo.
Exemplos:
Preço do petróleo;
Taxa de desemprego;
Volume de tráfego em estradas;
Inflação.
Séries temporais possuem três tipos de padrões, também chamados de componentes:
- Tendência: ocorre quando a variável na série temporal mostra um crescimento ou declínio de longo prazo;
- Sazonalidade: refere-se a um padrão que se repete em intervalos regulares, como o aumento da demanda por presentes durante o período de festas de fim de ano;
- Ciclos: ocorrem quando os dados exibem flutuações que não seguem um período específico;
- Erro aleatório: refere-se a variações irregulares nos dados causadas por fatores imprevisíveis ou desconhecidos.
# Criar a série temporal
serie <- ts(inflacaomensal$indice_do_mes, start = c(2020, 1), frequency = 12)
print(serie)## Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
## 2020 0.53 0.84 0.71 0.61 0.23 0.08 0.12 0.54 1.01 1.62 1.06 0.47
## 2021 0.67 0.68 0.36 0.29 0.59 0.41 0.62 0.25 0.86 0.93 0.31 0.83
## 2022 0.53 0.96 0.87 1.16 1.25 0.95 0.73 0.21 0.25 0.07 0.31 0.38
## 2023 0.26 0.36 0.24 0.64 0.86 0.89 1.35
# Converter a série temporal para um data frame
df <- data.frame(
Tempo = time(serie),
Índice = as.numeric(serie)
)
# Criar o gráfico interativo
fig <- plot_ly(df, x = ~Tempo, y = ~Índice, type = 'scatter', mode = 'lines+markers',
line = list(color = 'black'),
marker = list(color = 'black',
text = ~paste("Tempo:", round(Tempo, 2), "<br>Índice:", round(Índice, 2)),
hoverinfo = 'text'))
# Adicionar título e rótulos
fig <- fig %>%
layout(title = "Série Temporal do Índice de Inflação no Brasil",
xaxis = list(title = "Tempo"),
yaxis = list(title = "Índice"))
figA série de inflação apresenta variações ao longo do tempo, com alguns meses mostrando índices mais baixos e outros mais altos. Por exemplo, o índice foi mais baixo em maio de 2023 (0,08) e mais alto em março de 2022 (1,62). Observa-se também variações sazonais e tendências gerais, com valores mais voláteis nos anos de 2020 e 2021 e uma possível estabilização no final de 2022 e início de 2023.
Estacionaridade
Uma série é estacionária, quando ela se desenvolve no tempo aleatoriamente ao redor de uma média constante, refletindo alguma forma de equilíbrio estável.
Vamos verificar se a série é estacionária ou não. Para isso utilizaremos o Teste de Dickey-Fuller aumentado (ADF). O Teste de Dickey-Fuller Aumentado (ADF) é uma ferramenta estatística usada para verificar se uma série temporal é estacionária, ou seja, se suas propriedades estatísticas, como a média e a variância, permanecem constantes ao longo do tempo.
- Hipótese Nula: A série é não-estacionária (ou possui uma raiz unitária)
- Hipótese Alternativa: A série é estacionária
##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -3.1001, Lag order = 3, p-value = 0.1391
## alternative hypothesis: stationary
Como o p-valor é maior que 0.05, não há evidências suficientes para rejeitar a hipótese nula. Portanto, concluímos que a série temporal não é estacionária. Ou seja, precisamos realizar a diferenciação.
Passeio aleatório
Passeio Aleatório é um tipo de série temporal onde o valor futuro depende do valor atual e de uma “surpresa” aleatória, sem tendência clara. É como caminhar aleatoriamente, onde você não tem controle sobre para onde vai. O KPSS Unit Root Test é um teste usado para avaliar a estacionaridade de uma série temporal. O teste pode ser configurado para verificar a estacionaridade em nível (mu) ou em tendência.
- Hipótese Nula: A série é estacionária.
- Hipótese Alternativa: A série é não-estacionária (ou possui uma raiz unitária).
##
## #######################
## # KPSS Unit Root Test #
## #######################
##
## Test is of type: mu with 3 lags.
##
## Value of test-statistic is: 0.0488
##
## Critical value for a significance level of:
## 10pct 5pct 2.5pct 1pct
## critical values 0.347 0.463 0.574 0.739
Neste caso, o teste é do tipo “mu” e usa 3 defasagens (lags) para calcular o valor do teste. O valor do teste estatístico obtido é 0,0488. Comparamos o valor do teste estatístico com os valores críticos para diferentes níveis de significância (10%, 5%, 2,5% e 1%). Os valores críticos fornecidos são 0,347 para 10%, 0,463 para 5%, 0,574 para 2,5% e 0,739 para 1%. O valor do teste estatístico (0,0488) é menor do que todos os valores críticos. Ou seja, não podemos rejeitar a hipótese nula de que a série é estacionária em nível, sugerindo que a série temporal analisada não possui uma raiz unitária e é estacionária.
Observação: A presença de resultados contraditórios entre o Teste de Dickey-Fuller Aumentado (ADF) e o Teste KPSS pode ocorrer devido às diferenças nas hipóteses nulas dos testes. O ADF testa a estacionaridade em nível, enquanto o KPSS pode ser configurado para verificar a estacionaridade em nível ou em tendência. Se o p-valor do ADF é alto, sugere que a série pode ser não-estacionária, enquanto um valor baixo no KPSS (em nível) indica que a série pode ser estacionária em nível. A contradição pode surgir se a série apresentar tendências ou sazonalidades não detectadas por um dos testes. Por isso, é importante considerar ambas as abordagens e, se necessário, aplicar diferenciação ou outras transformações para alcançar a estacionaridade.
Autocorrelação
Autocorrelação é a correlação entre os valores de uma série temporal em diferentes pontos no tempo. Em outras palavras, é a medida de como os valores passados de uma série influenciam os valores futuros.
O gráfico ACF mostra a autocorrelação das observações da série temporal com suas defasagens, revelando como uma observação está correlacionada com as anteriores. Picos significativos fora da faixa de confiança indicam autocorrelação importante, sugerindo a necessidade de modelar essas correlações. Um decaimento exponencial no ACF pode sugerir um modelo de suavização exponencial, enquanto um corte rápido indica a presença de um componente autoregressivo (AR). O gráfico PACF, por sua vez, mostra a autocorrelação parcial, que revela a correlação entre uma observação e uma defasagem, após remover o efeito das defasagens intermediárias. Picos significativos no PACF ajudam a identificar a ordem do componente AR, enquanto um decaimento gradual pode sugerir a necessidade de um componente de média móvel (MA) no modelo.
O teste de Ljung-Box é utilizado para verificar a presença de autocorrelação em uma série temporal e avaliar a adequação de um modelo ajustado à série. Ele testa a hipótese de que os resíduos da série temporal (ou do modelo) são independentes e não apresentam autocorrelação significativa em vários lags.
- Hipótese Nula: Os resíduos são independentes e não possuem autocorrelação significativa até o lag especificado.
- Hipótese Alternativa: Os resíduos apresentam autocorrelação significativa em pelo menos um dos lags especificados.
# Teste de Autocorrelação (Ljung-Box)
# Ho = não é autocorrelacionado: p > 0.05
# Ha = é autocorrelacionado: p <= 0.05
Box.test(serie, type = "Ljung-Box")##
## Box-Ljung test
##
## data: serie
## X-squared = 13.563, df = 1, p-value = 0.0002307
Com um p-valor de 0.0002307, que é menor que 0.05, rejeitamos a hipótese nula. Portanto, os dados apresentam autocorrelação, ou seja, os valores da série temporal estão de fato relacionados com seus valores anteriores.
Decomposição
A decomposição é uma técnica que permite analisar e entender uma série temporal ao separá-la em seus diferentes componentes.
O gráfico acima divide a série em três componentes principais: tendência, sazonalidade e resíduos. A tendência revela uma diminuição geral da inflação ao longo do tempo. A sazonalidade destaca padrões repetitivos, como variações mensais ou anuais. Já os resíduos representam as flutuações aleatórias não explicadas pelos outros dois componentes.
Transformação
Na transformação de dados, aplica-se uma função matemática para estabilizar a variância ou aproximar a série de uma distribuição normal. Entre as transformações comuns, como logaritmo e raiz quadrada, optamos pela transformação logarítmica. Essa escolha se deve ao fato de que a transformação logarítmica é eficaz na redução da variabilidade e na mitigação de diversos problemas que podem afetar a análise dos dados.
Vamos começar verificando a normalidade dos dados, usando o Teste de Shapiro-Wilk; Ele verifica se um conjunto de dados segue uma distribuição normal e é amplamente utilizado devido à sua alta precisão em amostras pequenas e médias.
- Hipótese Nula: Os dados seguem uma distribuição normal.
- Hipótese Alternativa: Os dados não seguem uma distribuição normal.
##
## Shapiro-Wilk normality test
##
## data: serie
## W = 0.96094, p-value = 0.15
Com um p-valor de 0.15, que é maior que 0.05, não rejeitamos a hipótese nula. Portanto, os dados podem ser considerados normalmente distribuídos.
Mesmo com o Teste de Shapiro-Wilk indicando que os dados podem se aproximar da normalidade, aplicaremos a transformação logarítmica. Isso é feito para reduzir a variabilidade e estabilizar a variância, o que pode melhorar a qualidade da análise e a performance de modelos que exigem dados com distribuição mais homogênea.
# Aplicar a transformação logarítmica
serie_log <- log(serie)
# Plotar a série transformada
plot(serie_log, main = "Série Temporal Transformada (Log)", ylab = "Log(Índice)", xlab = "Tempo")# Histograma
hist(serie_log, main = "Histograma", xlab = "Valores", ylab = "Frequência", breaks = 10)##
## Shapiro-Wilk normality test
##
## data: serie_log
## W = 0.93555, p-value = 0.01811
Mesmo com a transformação, a normalidade dos dados não foi totalmente atingida, pois o p-valor é menor que 0,05. A transformação logarítmica ajudou a reduzir a variabilidade e estabilizar a variância, mas os dados ainda não seguem uma distribuição normal perfeita.
Diferenciação
Na diferenciação, calcula-se a diferença entre observações consecutivas para eliminar a tendência e a sazonalidade. A primeira diferença é a diferença entre um valor e o valor anterior, a segunda diferença é a diferença entre as primeiras diferenças, e assim por diante.
# Diferenciar a série
serie_dif <- diff(serie_log)
# Plotar a série diferenciada
plot(serie_dif, main = "Série Diferenciada", ylab = "Diferença", xlab = "Tempo")##
## Augmented Dickey-Fuller Test
##
## data: serie_dif
## Dickey-Fuller = -4.7013, Lag order = 3, p-value = 0.01
## alternative hypothesis: stationary
Após a diferenciação, mostra um p-valor de 0.01, que é menor que o nível de significância de 0.05. Isso indica que podemos rejeitar a hipótese nula de que a série possui uma raiz unitária, sugerindo que a série diferenciada agora é estacionária.
Média móvel
A média móvel é uma técnica de suavização que calcula a média de um conjunto fixo de observações anteriores e posteriores para substituir cada valor em uma série temporal. Essa abordagem reduz a variabilidade e suaviza a série, facilitando a identificação de tendências e ciclos. No gráfico abaixo, essa suavização é representada pela linha azul.
media_movel <- rollmean(serie_dif, k = 7, fill = NA)
plot(serie_dif, type = "l", main = "Média Móvel", ylab = "Inflação", xlab = "Tempo")
lines(media_movel, col = "blue")Conclusão
Neste trabalho, foram explorados conceitos essenciais para a criação e análise de séries temporais utilizando a linguagem R. A série temporal do índice de inflação revelou características sazonais e tendências marcantes, sendo a diferenciação eficaz para alcançar a estacionaridade. Embora a transformação logarítmica tenha contribuído para a redução da variabilidade, a normalidade completa não foi alcançada. A aplicação da média móvel permitiu suavizar a série e destacar padrões de longo prazo. As análises realizadas fornecem uma base para modelagem e previsões futuras.
Referências
MORETTIN, Pedro A. Análise de Séries Temporais. São Paulo: Editora Blucher, 2018. E-book. ISBN 9788521213529. Disponível em: https://app.minhabiblioteca.com.br/#/books/9788521213529/. Acesso em: 22 ago. 2024.
GAIA, Flávia. Introdução às séries temporais com a linguagem R. Medium, 2019. Disponível em: https://medium.com/@flaviagaia/introdu%C3%A7%C3%A3o-%C3%A0s-s%C3%A9ries-temporais-com-a-linguagem-r-37157435cfbd. Acesso em: 24 ago. 2024.
GONZAGA, Sillas. Introdução às séries temporais. Disponível em: http://sillasgonzaga.com/material/curso_series_temporais/introducao. Acesso em: 24 ago. 2024.
MRC, Dan. Séries temporais. Disponível em: https://danmrc.github.io/R-para-Economistas/s%C3%A9ries-temporais.html. Acesso em: 24 ago. 2024.
UFRGS. Decomposição de séries temporais. Disponível em: https://www.ufrgs.br/wiki-r/index.php?title=Decomposi%C3%A7%C3%A3o_de_s%C3%A9ries_temporais#S.C3.A9ries_temporais_no_R. Acesso em: 25 ago. 2024.
OLIVEIRA, Robson. Séries temporais em R. RPubs, 2020. Disponível em: https://rpubs.com/RobsonOL/series_temporais_r. Acesso em: 25 ago. 2024.