This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents.
Neste trabalho vamos visualizar a relação entre a Selic e a inflação (IPCA) como ilustração para uso do pacote tidyverse.
Os dados da Selic e inflação serão pegados no site do Banco Central, módulo de séries temporais (SGC), por meio do pacote de raspagem GetBCBData, desenvolvido por Marcelo Perlin (ver Análise de dados financeiros e econômicos do Brasil, 3ª edição, Porto Alegre, Publicação Independente, 2021).
No site do Banco Central, em estatísticas SGS, deve-se procurar pelos números das tabelas desejadas. No caso desse exeplo, são elas:
Taxa de juros - Selic acumulada no mês(Tabela 4390)
Índice nacional de preços ao consumidor-amplo (IPCA, Tabela 433)
Os pacotes necessários são os seguintes:
library(GetBCBData)
library(dplyr)
library(ggplot2)
library(scales)
library(ggthemes)
library(tidyverse)
O primeiro pacote é o programa de raspagem desenvolvido por Perlin. Os pacotes dplyr e tidyverse serão úteis no manuseio da base dados baixada. O pacote ggplot2 será usado no desenho do gráfico das séries. O pacote scales será usado na montagem do eixo horizontal no ggplot. O pacote ggthemes será usado para definir um plano de fundo para o gráfico (o tema escolhido será “economist”.
sel<- gbcbd_get_series (id = c(selic = 4390, inf = 0433),
first.date = '2010-01-01',
last.date = '2022-03-01',
use.memoise = FALSE)
##
## Fetching selic [4390] from BCB-SGS from Online API
## Found 147 observations
## Fetching inf [433] from BCB-SGS from Online API
## Found 147 observations
Vocês podem visualizar a tabela criada (data frame) clicando no quadrado ao lado de seu nome (sel) no Environment do RStudio. Note que os dados de inflação estão abaixo dos dados da Selic.
Do data frame sel, vamos separar os dados da Selic e os da inflação. Criando dois novos data frames que serão, em seguida, juntados em um só.
Para isso, vamos usar as seguintes funções do pacote tidyverse:
Pipe (%>%): ou pipeline, “canaliza” a tabela original, no caso, sel para o que queremos dela. Quando usamos o %>% estamos alterando a configuração original da tabela conforme instruções que vêm a seguir.
Filter(): esta função “filtra” ou separa as linhas da tabela de acordo com o nosso interesse. Se quiséssemos separar por colunas, a função que seria usada seria a **select*()**.
O comando, então, fica:
sels <- sel %>%
filter(series.name == "selic") %>%
select (ref.date, value)
colnames(sels) = c("Tempo", "Selic")
No comando acima, estamos chamando de sels a parte de sel constituída apenas pelas datas e por Selic. A função colnames() atribui nomes às colunas.
seli <- sel %>%
filter(series.name == "inf") %>%
select(value)
colnames(seli) = c("IPCA")
Acima, seli é a parte do data frame original, sel, com dados, apenas, da inflação.
Vamos juntar os dois:
dft <- data.frame(sels, seli)
Faramos dois tipos de gráficos. No primeiro as duas séries temporais são apresentadas com o uso do ggplot2. No segundo, é apresentado um gráfico de dispersão sem o recurso ao ggplot.
ggplot(data = dft, aes(x = Tempo)) + theme_economist()+
geom_line(aes(y= Selic, colour="SELIC"), size=.8) +
geom_line(aes(y= IPCA, colour="IPCA"), size=.8) +
theme(axis.text.x = element_text(face="bold", color="black", size=9, angle=45, hjust = .01)) +
theme(axis.text.y = element_text(face="bold", color="Black", size=9, angle=0)) +
theme(axis.line = element_line(colour = "black", size = 0.5, linetype = "solid"))+
scale_x_date(date_labels = "%m / %Y", breaks = date_breaks("6 month"))+
xlab('meses/anos')+
ylab('% ao mês') +
labs(title='Inflação x Selic',
subtitle='2010-2022',
caption='Turma de Fundamentos de Macro - 2022', color = "")
plot (x = dft$Selic, y = dft$IPCA,
main = "Selic x Inflação (2010-2022)",
ylab = "IPCA",
xlab = "SELIC",
pch = 16, col = "blue")
grid()
abline(a = 0.43564, b = 0.09742, col = "red")
No gŕafico acima, foi incluída uma reta (vermelha) que retrata a relação linear entre Selic (variável indendente) e Inflação (variável dependente). Essa reta é incluída com o recurso à função abline(), cujos parâmetros \(a\) e \(b\), são, respectivamente, os intercepto e coeficiente angular da reta de regressão.
Esses coeficientes, por sua vez, foram obtidos como resultado da aplicação da função lm(), cuja sintaxe é apresentada à seguir. Com a função summary() apresentamos os resultados da regressão. Notem o baixo \(R^2\) da regressão.
reg <- lm(IPCA~Selic, data = dft)
summary(reg)
##
## Call:
## lm(formula = IPCA ~ Selic, data = dft)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.83902 -0.23990 -0.03824 0.24315 1.09376
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.43564 0.08126 5.361 3.19e-07 ***
## Selic 0.09742 0.10740 0.907 0.366
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3564 on 145 degrees of freedom
## Multiple R-squared: 0.005642, Adjusted R-squared: -0.001215
## F-statistic: 0.8228 on 1 and 145 DF, p-value: 0.3659