Baixando e tratando dados da Previdência com o R

[et_pb_section admin_label="section"][et_pb_row admin_label="row"][et_pb_column type="4_4"][et_pb_text admin_label="Texto" background_layout="light" text_orientation="justified" use_border_color="off" border_color="#ffffff" border_style="solid" text_font="Verdana||||" text_font_size="18"]

Temos enfatizado ao longo dos anos nesse espaço, que saber coletar, tratar, analisar e apresentar dados é essencial para compreender os problemas das mais diversas áreas do conhecimento. Com efeito, temos utilizado a linguagem R, uma ferramenta poderosa voltada para análise de dados, para dar exemplos sobre como lidar com evidência empírica em nosso blog e nos nossos cursos aplicados de R. Nesse post, vamos trazer mais um exemplo, com o tema do momento: a previdência. Para começar, vamos pegar os dados do regime geral da previdência social, disponível no site do Tesouro NacionalO código abaixo ilustra.

library(XLConnect)
### Importar dados e tratá-los
www = 'http://www.tesouro.fazenda.gov.br/documents/10180/246449/Anexos+RTN+Mar17.xlsx/686e2173-97ac-49fa-9e98-1d8f55eb9c1e'
temp = tempfile()
download.file(www, temp, mode='wb')
data = loadWorkbook(temp)
data = readWorksheet(data, sheet = "1.1", header = TRUE,
 colTypes = 'numeric')
data = t(data[c(17,39),-1])
colnames(data) = c('receita', 'despesa')
data = ts(data, start=c(1997,01), freq=12)

Observe que, com o código acima, nós carregamos o pacote XLConnect, uma das muitas opções disponíveis para importar dados do excel para o R. Uma vez feito isso, fazemos o download da planilha, carregamos no R e lemos o arquivo. Depois, um tratamento rápido, para pegar apenas os dados de receita e despesa do regime geral de previdência socialPor fim, transformamos os dados em séries temporais.

Uma vez importados os dados diretamente para o R, nós agora podemos visualizá-los. Para isso, vamos utilizar o pacote ggplot2, um dos pacotes mais poderosos do R para visualização de dados. De modo a ilustrar como o pacote funciona, nós colocamos os dados em um data frame, como no código abaixo.

dates = seq(as.Date('1997-01-01'), as.Date('2017-03-01'), by='1 month')
previdencia = data.frame(time=dates, receita=data[,1],
 despesa=data[,2])

Uma vez que tenhamos colocado os dados em um data frame, uma das estruturas de dados disponíveis no R, nós podemos utilizar o ggplot2O código abaixo ilustra.

ggplot(previdencia, aes(x=time))+
 geom_line(aes(y=receita/1000, colour='Receita'), size=.4)+
 geom_line(aes(y=despesa/1000, colour='Despesa'), size=.4)+
 scale_colour_manual('', values=c('Receita'='darkgreen',
 'Despesa'='red'))+
 theme(legend.position = 'top')+
 scale_x_date(breaks = date_breaks("2 years"),
 labels = date_format("%Y"))+
 xlab('')+ylab('R$ bilhões')+
 labs(title='Receitas vs. Despesas do RGPS',
 caption='Fonte: analisemacro.com.br com dados da STN.')

E o resultado...

[/et_pb_text][et_pb_image admin_label="Imagem" src="https://analisemacro.com.br/wp-content/uploads/2017/05/plot1-1.png" show_in_lightbox="on" url_new_window="off" use_overlay="off" animation="left" sticky="off" align="center" force_fullwidth="off" always_center_on_mobile="on" use_border_color="off" border_color="#ffffff" border_style="solid"] [/et_pb_image][et_pb_text admin_label="Texto" background_layout="light" text_orientation="justified" use_border_color="off" border_color="#ffffff" border_style="solid" text_font="Verdana||||" text_font_size="18"]

Observe que ambas as séries apresentam duas características que saltam aos olhos. Primeiro, elas mostram uma tendência de aumento ao longo do tempo. Segundo, elas mostram um comportamento sazonal bastante explícito. Vamos tratar esses dois "problemas" daqui a pouco. Antes, vamos ver um gráfico de correlação dessas séries com o código abaixo.

ggplot(previdencia, aes(despesa/1000, receita/1000))+
 geom_point(colour='blue', size=5, shape=1)+
 geom_smooth(method = 'lm')+
 xlab('Despesas do RGPS')+
 ylab('Receitas do RGPS')+
 labs(title='Receitas vs. Despesas do RGPS (R$ bilhões)',
 caption='Fonte: analisemacro.com.br com dados da STN.')

E o resultado abaixo...

[/et_pb_text][et_pb_image admin_label="Imagem" src="https://analisemacro.com.br/wp-content/uploads/2017/05/plot2.png" show_in_lightbox="on" url_new_window="off" use_overlay="off" animation="left" sticky="off" align="center" force_fullwidth="off" always_center_on_mobile="on" use_border_color="off" border_color="#ffffff" border_style="solid"] [/et_pb_image][et_pb_text admin_label="Texto" background_layout="light" text_orientation="justified" use_border_color="off" border_color="#ffffff" border_style="solid" text_font="Verdana||||" text_font_size="18"]

As séries, naturalmente, estão positivamente correlacionadas. Isso implica em causalidade? É tema que exploraremos na 31ª edição do Clube do Código, que extende a análise desse post. Por aqui, por suposto, vamos tratar os "problemas" de tendência e sazonalizade.

Dessazonalizando os dados 

Antes de mais nada, vamos dessazonalizar os nossos dados usando o pacote seasonal. O código abaixo ilustra.

## Carregar o pacote, definir a pasta do X13-Arima e checar se está tudo ok
library(seasonal)
Sys.setenv(X13_PATH = "C:/Séries Temporais/R/Pacotes/seas/x13ashtml")
checkX13()

## Dessazonalizar as séries
prev = ts(previdencia[,-1], start=c(1997,01), freq=12)
receita_sa = seas(prev[,1])
despesa_sa = seas(prev[,2])
previdencia_sa = data.frame(time=dates, receita=final(receita_sa),
 despesa=final(despesa_sa))

Uma vez dessazonalizadas as séries, podemos plotar um gráfico com código similar ao visto anteriormente.

[/et_pb_text][et_pb_image admin_label="Imagem" src="https://analisemacro.com.br/wp-content/uploads/2017/05/plot3.png" show_in_lightbox="on" url_new_window="off" use_overlay="off" animation="left" sticky="off" align="center" force_fullwidth="off" always_center_on_mobile="on" use_border_color="off" border_color="#ffffff" border_style="solid"] [/et_pb_image][et_pb_text admin_label="Texto" background_layout="light" text_orientation="justified" use_border_color="off" border_color="#ffffff" border_style="solid" text_font="Verdana||||" text_font_size="18"] A tendência, agora, ficou mais clara, não é mesmo? A despeito de alguns outliers existentes - que, de certo, também podem ser tratados com o R. Uma vez dessazonalizados os dados, por suposto, podemos agora ver novamente aquele gráfico de correlação... [/et_pb_text][et_pb_image admin_label="Imagem" src="https://analisemacro.com.br/wp-content/uploads/2017/05/plot4.png" show_in_lightbox="on" url_new_window="off" use_overlay="off" animation="left" sticky="off" align="center" force_fullwidth="off" always_center_on_mobile="on" use_border_color="off" border_color="#ffffff" border_style="solid"] [/et_pb_image][et_pb_text admin_label="Texto" background_layout="light" text_orientation="justified" use_border_color="off" border_color="#ffffff" border_style="solid" text_font="Verdana||||" text_font_size="18"]

A correlação positiva entre as séries ficou maior, não é mesmo?

Retirando a tendência das séries

A outra característica das séries que salta os olhos é a tendência. Podemos retirá-la com o código abaixo.

## Regredir as séries contra uma tendência
fit.rec = lm(previdencia_sa$receita ~ seq(along = previdencia_sa$receita))
fit.desp = lm(previdencia_sa$despesa ~ seq(along = previdencia_sa$despesa))

## Pegar os resíduos da regressão, somados à média da série.
receita.st = residuals(fit.rec)+mean(fitted(fit.rec))
despesa.st = residuals(fit.desp)+mean(fitted(fit.desp))
previdencia_st = data.frame(time=dates, receita=receita.st,
 despesa=despesa.st)

E o gráfico das séries dessazonalizadas e sem tendência é colocado abaixo...

[/et_pb_text][et_pb_image admin_label="Imagem" src="https://analisemacro.com.br/wp-content/uploads/2017/05/plot5.png" show_in_lightbox="on" url_new_window="off" use_overlay="off" animation="left" sticky="off" align="center" force_fullwidth="off" always_center_on_mobile="on" use_border_color="off" border_color="#ffffff" border_style="solid"] [/et_pb_image][et_pb_text admin_label="Texto" background_layout="light" text_orientation="justified" use_border_color="off" border_color="#ffffff" border_style="solid" text_font="Verdana||||" text_font_size="18"]

Evolução das séries e relações de longo prazo

O próximo passo é investigar como as séries evoluem ao longo do tempo. Isto é, já sabemos que as séries possuem sazonalidade e têm uma tendência positiva ao longo do tempo. Mas a que taxa crescem? O quanto elas crescem ao longo do tempo acima da inflação? Para responder essas perguntas, precisamos verificar algumas métricas de crescimento mensal, interanual, acumulada em 12 meses, seja em termos nominais ou em termos reais, coisas que vemos no nosso Curso de Análise de Conjuntura usando o R.

Uma análise um pouco mais sofisticada, por suposto, envolve verificar se existe uma relação de longo prazo entre as séries, o que nos leva ao tema da cointegração, uma vez que como pode verificar o leitor, as séries não são estacionárias. Ademais, podemos investigar também a causalidade entre receita e despesa, de modo a definir se podemos afirmar coisas como o aumento da despesa leva a aumento da receita e assim por diante. Perguntas que abordamos em nosso Curso de Séries Temporais usando o R e no nosso Curso de Macroeconometria usando o R.

O exemplo mostra o quanto saber lidar com evidência empírica é importante. Não basta, portanto, criar narrativas, mas é preciso saber o que afinal dizem os dados, não é mesmo? 🙂 

[/et_pb_text][et_pb_image admin_label="Imagem" src="https://analisemacro.com.br/wp-content/uploads/2016/11/macroeconometria.png" show_in_lightbox="off" url_new_window="off" use_overlay="off" animation="left" sticky="off" align="center" force_fullwidth="off" always_center_on_mobile="on" use_border_color="off" border_color="#ffffff" border_style="solid" url="https://analisemacro.com.br/cursos-de-r/macroeconometria/" /][/et_pb_column][/et_pb_row][/et_pb_section]

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Análise exploratória para modelagem preditiva no Python

Antes de desenvolver bons modelos preditivos é necessário organizar e conhecer muito bem os dados. Neste artigo, damos algumas dicas de recursos, como gráficos, análises e estatísticas, que podem ser usados para melhorar o entendimento sobre os dados usando Python.

Como usar modelos do Sklearn para previsão? Uma introdução ao Skforecast

Prever séries temporais é uma tarefa frequente em diversas áreas, porém exige conhecimento e ferramentas específicas. Os modelos de machine learning do Sklearn são populadores, porém são difíceis de aplicar em estruturas temporais de dados. Neste sentido, introduzimos a biblioteca Skforecast, que integra os modelos do Sklearn e a previsão de séries temporais de forma simples.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.