[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 Nacional. O 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 social. Por 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 ggplot2. O 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]