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

Analisando séries temporais no Python e esquecendo de vez o Excel

Séries temporais representam uma disciplina extremamente importante em diversas áreas, principalmente na economia e na ciência de dados. Mas, afinal, como lidar com esses dados que se apresentam ao longo do tempo? Neste exercício, demonstraremos como compreender uma série temporal e como o Python se destaca como uma das melhores ferramentas para analisar esse tipo de dado.

Cálculo do Retorno Econômico de uma Política Pública

Como podemos traduzir os efeitos de uma política pública para valores monetários? Essa é uma tarefa árdua que requer algumas premissas, entretanto, com métodos bem definidos, é possível obter estimativas precisas dos ganhos e os gastos de uma política pública.

Neste exercício, demonstramos tal método usando a política hipotética "Mãe Paranense”, um conjunto de ações que visam reduzir a mortalidade materna e infantil no estado. Usamos a linguagem R como ferramenta para analisar os dados.

Simplificando análises de dados manuais do Excel usando o Python

Tratar e analisar dados no Excel pode ser um verdadeiro caos, mesmo que você precise fazer coisas simples como cruzar duas tabelas de dados. Uma solução melhor é o uso de scripts em Python, que possibilitam a automação de tarefas repetitivas e manuais. Neste artigo mostramos um exemplo simples, comparando o Excel versus Python.

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.