All Posts By

Vitor Wilher

Além da euforia: é possível manter o juro baixo no Brasil?

By | Comentário de Conjuntura

Há uma euforia no mercado financeiro brasileiro com os juros básicos na mínima histórica. O investidor mediano que mantinha seu portfólio aplicado basicamente em renda fixa viu seu rendimento cair substancialmente nos últimos anos. Com efeito, muitos desses migraram para o mercado de capitais, impulsionando a criação de novas gestoras e assets país à fora. A maior consequência dessa euforia talvez seja o avanço do índice Bovespa, mesmo com o crescimento econômico ainda bastante aquém do esperado.

Sabemos da evidência empírica que existe uma correlação negativa entre o índice Bovespa e o juro real. Isto é, menos juro reais estão associados a maiores níveis do índice Bovespa. Isso pode ser facilmente ilustrado com um código de R simples. Abaixo, faço um exemplo.


## Pacotes utilizados nesse comentário
library(tidyverse)
library(sidrar)
library(scales)
library(png)
library(grid)
library(zoo)
library(rbcb)
library(ggrepel)
library(gridExtra)
library(readxl)
library(xts)
library(grDevices)
library(ggalt)
library(quantmod)
library(Quandl)

script desse comentário começa, como de hábito, com os pacotes que utilizaremos. A seguir, importo o ibovespa, o juro nominal (Selic) e a expectativa de inflação.


## Ibovespa
env <- new.env()
getSymbols("^BVSP",src="yahoo",
env=env,
from=as.Date('2008-12-01'))
ibovespa = env$BVSP[,4]
ibovespa = ibovespa[complete.cases(ibovespa)]

## Juro Real
selic = Quandl('BCB/1178', order='asc', start_date='2008-12-01')
expinf = get_twelve_months_inflation_expectations('IPCA',
start_date = '2008-12-01')

Com as variáveis importadas, é preciso criar o juro real. Isso é feito na sequência.


selic = xts(selic$Value, order.by = selic$Date)
expinf12 = xts(expinf$mean[expinf$smoothed=='S'],
order.by = expinf$date[expinf$smoothed=='S'])
dataex = cbind(selic, expinf12)
dataex = dataex[complete.cases(dataex),]
juro_ex = (((1+(dataex[,1]/100))/(1+(dataex[,2]/100)))-1)*100

Por fim, eu posso colocá-las em um tibble para gerar um gráfico de correlação como no código abaixo.


## Juntar dados
df01 = cbind(ibovespa, juro_ex)
df01 = df01[complete.cases(df01),]
df01 = tibble(ibovespa=df01[,1], juroreal=df01[,2])

E o gráfico de correlação é posto abaixo.


ggplot(df01, aes(x=juroreal, y=ibovespa/1000))+
geom_point(size=.8, colour='darkblue')+
geom_smooth(method='lm', se=FALSE, colour='red')+
labs(x='Juro Real (% a.a.)', y='Ibovespa (Mil Pontos)',
title='Juro Real vs. Ibovespa',
caption='Fonte: analisemacro.com.br')

Como dito, há uma correlação negativa entre o índice Bovespa e o juro real. Aí está, basicamente, a raiz da euforia que temos visto no mercado financeiro brasileiro, a despeito do crescimento econômico ainda bastante aquém do desejado. O ponto principal, por suposto, é saber até quando vai essa euforia. E isso passa por saber se o atual nível de juro real será mantido no futuro próximo.

Ao longo dos últimos anos, vimos a aprovação de um conjunto importante de reformas estruturais. Em particular, como visto na edição 71 do Clube do Código, a aprovação do teto de gastos teve como efeito reduzir o juro neutro da economia brasileira - o nível de juro real compatível com hiato do produto nulo em uma Curva IS estacionária.

Um ponto importante, entretanto, é saber o quanto essas reformas irão afetar a capacidade de poupança da economia brasileira. Isto porque, sabemos da teoria e da evidência que a taxa de poupança é um dos fatores mais importantes para determinar o nível de juro do país - ver, por exemplo, The Puzzle of Brazil's High Interest Rates. Infelizmente, como se sabe, a taxa de poupança brasileira é não só baixa como cadente nos últimos anos.

Para ilustrar esse ponto, podemos pegar os dados das Contas Nacionais Trimestrais através do pacote sidrar. O código abaixo implementa.


tab1 = get_sidra(api='/t/2072/n1/all/v/933,940/p/all')
pib = tab1$Valor[tab1$`Variável (Código)`==933]
poupanca = tab1$Valor[tab1$`Variável (Código)`==940]
fbcf = get_sidra(api='/t/1846/n1/all/v/all/p/all/c11255/93406/d/v585%200')$Valor

Com o código acima, pegamos os dados do PIB, da Poupança Bruta e da Formação Bruta de Capital Fixo. A seguir, nós tratamos os dados, de modo a colocar em um tibble as taxas de poupança e de investimento acumuladas em quatro trimestres.


dates_1 = seq(as.Date('1996-01-01'), as.Date('2019-09-01'),
by='3 month')
dates_2 = seq(as.Date('2000-01-01'), as.Date('2019-09-01'),
by='3 month')

df1 = tibble(dates=dates_1, fbcf=fbcf)
df2 = tibble(dates=dates_2, pib=pib, poupanca=poupanca)

data = inner_join(df1, df2, by='dates') %>%
mutate(tx_poupanca = (poupanca+lag(poupanca,1)+lag(poupanca,2)+
lag(poupanca,3))/(pib+lag(pib,1)+lag(pib,2)+lag(pib,3))*100) %>%
mutate(tx_investimento = (fbcf+lag(fbcf,1)+lag(fbcf,2)+
lag(fbcf,3))/(pib+lag(pib,1)+lag(pib,2)+lag(pib,3))*100) %>%
transform(dates = as.yearqtr(dates))

Com os dados prontos, podemos construir o gráfico a seguir.

Como se vê, temos um nível de poupança bastante baixo, mesmo se comparado a outros países de mesmo nível de renda per capita. Há muitas explicações para isso, como a existência de uma ampla rede de proteção social no país, incluindo aí a previdência pública, que desincentivaria a necessidade de poupança para a velhice ou a existência de universidades estatais subsidiadas para a classe média, dentre outras.

A dúvida, portanto, é se as reformas aprovadas ao longo dos últimos anos, bem como as que estão ainda em andamento no Congresso serão suficientes para mudar essa questão institucional estrutural, incentivando as famílias e o governo a aumentarem a poupança no médio e longo prazo. Esse ponto é crucial para saber se o juro que estamos experimentando no momento é de fato permanente ou há risco de voltarmos a flertar com juros nominais de um dígito quando a economia conseguir reduzir a ociosidade.

Não é uma questão simples de responder posto que envolve uma economia política bastante complexa. Em particular, passa pela continuação dos avanços reformistas que vivemos nos últimos anos. E isso não é nada trivial.

A conferir...

__________________________

(*) O código completo desse comentário estará logo mais no Clube do Código.

(**) Aprenda a fazer análises como essa com nossos Cursos Aplicados de R.

Detecção de outliers com o R

By | Dicas de R

Outliers são valores atípicos e distantes das demais observações de um determinado conjunto de dados. A depender do tipo de análise que você esteja fazendo, eles podem distorcer os resultados, levando a conclusões nem sempre verdadeiras. Por isso, é sempre importante fazer uma análise exploratória dos dados, se certificando de que o seu conjunto de dados não está contaminado com esse tipo de problema.

De modo a ilustrar como detectar e descartar outliers no R, vou mostrar aqui a parte introdutória da Edição 73 do Clube do Código, em que faço um exercício relacionando a inflação observada com as expectativas de inflação. Os dados estão disponíveis no Banco Central. Para começar, eu carrego alguns pacotes como abaixo.


## Pacotes
library(rbcb)
library(tidyverse)
library(scales)
library(ggrepel)
library(png)
library(grid)
library(gridExtra)
library(sidrar)
library(readxl)
library(xts)
library(grDevices)
library(ggalt)

Com o pacote rbcb, eu importo os dados de inflação e de expectativa de inflação, já fazendo um tratamento dessa última. O objetivo é ter um tibble com dados mensais de ambas as variáveis.


## Importar expectativas de inflação
expinf = get_twelve_months_inflation_expectations('IPCA',
start_date = '2001-11-01')

expectativa = expinf$mean[expinf$smoothed=='N' & expinf$base==0]
dates = expinf$date[expinf$smoothed=='N' & expinf$base==0]

expinf12 = xts(expectativa, order.by = dates)
expinf12 = apply.monthly(expinf12, FUN=mean)
expinf12 = expinf12[-length(expinf12)]

## Importar inflação
inflacao = get_series(13522, start_date='2001-11-01')

## Juntar dados
data = tibble(date=inflacao$date,
expfocus=as.numeric(expinf12),
inflacao=inflacao$`13522`)
colnames(data) = c('date', 'expfocus', 'inflacao')

Com os dados disponíveis, nós podemos gerar um gráfico de correlação já chamando atenção para os outliers presentes no conjunto de dados. O código abaixo implementa.


select.outliers = data[data$inflacao > min(boxplot.stats(data$inflacao)$out) |
data$expfocus > min(boxplot.stats(data$expfocus)$out),]

ggplot(data, aes(x=inflacao, y=expfocus))+
geom_point(stat='identity')+
geom_encircle(aes(x=inflacao, y=expfocus),
data=select.outliers,
color="red",
size=2,
expand=0.08)+
annotate('text', x=14, y=10,
label='Outliers',
colour='darkblue', size=4.5)+
labs(x='Inflação Observada', y='Expectativa de Inflação',
title='Inflação vs. Expectativa de Inflação no Brasil',
caption='Fonte: analisemacro.com.br com dados do BCB.')

Observe que estou usando a função boxplot.stats do pacote grDevices para construir o intervalo onde vou circular os possíveis outliers do conjunto de dados. Com essa função, nós conseguimos definir um outlier como sendo os valores que estão fora do intervalo composto por [(Q1 - 1,5*IQR), (Q3 + 1,5*IQR)] - para quem é iniciante em estatística, talvez seja necessário conhecer nosso Curso de Introdução à Estatística usando o R. A seguir colocamos o gráfico.

Uma vez identificadas as observações consideradas outliers, nós podemos nos livrar dela com o código abaixo.


outliers = c(boxplot.stats(data$inflacao)$out,
boxplot.stats(data$expfocus)$out)

data_outliers = data[-c(which(data$inflacao %in% outliers),
which(data$expfocus %in% outliers)),]

Produzimos agora um gráfico de correlação sem os pontos considerados outliers como abaixo.

Bem melhor, não?

__________________________

(*) Isso e muito mais você aprende em nossos Cursos Aplicados de R.

Relação entre inflação e expectativa ainda é forte no Brasil

By | Indicadores

O boletim Focus divulgado agora há pouco mostra leve correção para baixo na inflação esperada para esse ano. De 3,58% para 3,56%. Mais importante do que o tamanho da correção, porém, é o sinal, dado que o mesmo mostra uma expectativa do mercado de que os choques recentes que afetaram o índice cheio não devem comprometer a trajetória da inflação ao longo de 2020.  Em outros termos, espera-se que os choques se dissipem no curto prazo.

Essa é, de fato, uma boa notícia uma vez que a expectativa de inflação no Brasil guarda (ainda) forte correlação com a inflação observada. Como é possível ver no gráfico acima, a expectativa dos agentes 12 meses à frente segue colada à inflação efetivamente observada ao longo do tempo. A seguir, plotamos um gráfico de correlação entre as variáveis.

Como é possível verificar, na região de um dígito, essa correlação é mais forte, indicando que a partir de um determinado nível, os agentes perdem o guidance gerado pela meta de inflação. A amostra do gráfico contém 218 observações mensais, para o período entre novembro de 2001 e dezembro de 2019. Os dados estão disponíveis no Banco Central.

É esperado, com efeito, que choques na inflação tenham impacto sobre as expectativas dos agentes. Hipótese que testaremos na Edição 73 do Clube do Código, a ser divulgada na próxima sexta-feira para membros do Clube e alunos do plano premium dos nossos Cursos Aplicados de R.

______________________

(***) Uma apresentação em RMarkdown do boletim Focus está disponível aqui.

IBC-Br avança em novembro

By | PIB

Contrariando os resultados das pesquisas do Comércio, Serviços e Indústria, o IBC-Br, o índice de nível de atividade do Banco Central avançou em novembro 0,18%, contra o mês de outubro. O índice conta com script automático que é ensinado/disponibilizado no nosso Curso de Análise de Conjuntura usando o R. A seguir, resumimos os dados do mesmo.


library(ggplot2)
library(scales)
library(gridExtra)
library(BETS)

ibc = BETSget(24363, data.frame=TRUE)
ibc_sa = BETSget(24364, data.frame=TRUE)
ibc = data.frame(ibc$date, ibc$value, ibc_sa$value)
colnames(ibc) = c('dates', 'ibc', 'ibc_sa')

Com os dados do índice em mãos, nós construímos uma tabela resumo com os últimos resultados.

Variação do IBC-Br (%)
Mensal Trimestral Interanual Anual
2019 Sep 0,44 0,79 2,07 1,01
2019 Oct 0,09 0,67 1,98 0,95
2019 Nov 0,18 0,75 1,10 0,90

Como é possível ver, na comparação interanual houve avanço de 1,10% e no acumulado em 12 meses, o índice mantém crescimento de 0,9%. Os gráficos a seguir resumem a trajetória das principais métricas de crescimento do índice.

O IBC-Br resume as principais pesquisas de nível de atividade. A despeito do crescimento na margem, a variação em 12 meses ainda mostra um cenário de estagnação próxima a 1%. A expectativa, diga-se, é que isso mude ao longo de 2020.
_________________

(*) Aprenda a construir análises como essa em nossos Cursos Aplicados de R:

Um novembro decepcionante para o nível de atividade

By | PIB

O IBGE divulgou hoje a Pesquisa Mensal do Comércio (PMC). Com efeito, completa-se a trilha de divulgação das principais pesquisas de nível de atividade: PMC, PMS (Serviços) e PIM-PF (Indústria). As três pesquisas contam com scripts automáticos que são ensinados/disponibilizados no nosso Curso de Análise de Conjuntura usando o R. A seguir, resumimos as três pesquisas.

Métricas da Indústria Geral (%)
Mensal Interanual Trimestral Anual
2019 Sep 0,2 1,0 0,4 -1,3
2019 Oct 0,8 1,1 0,7 -1,3
2019 Nov -1,2 -1,7 -0,1 -1,3

A tabela acima resume as principais métricas referentes à indústria geral. Em novembro, houve queda na margem de 1,2%, o que acabou impactando as demais métricas. No acumulado em 12 meses, a indústria geral flerta com números negativos.

Métricas da PMS-IBGE (%)
Mensal Trimestral Interanual 12 meses
Receita -0,5 0,7 5,0 4,4
Volume -0,1 0,7 1,9 0,9

Na sequência, analisamos a PMS, que também trouxe uma acomodação de -0,1% em novembro. No acumulado em 12 meses, porém, os Serviços mostram um número positivo de 0,9%.

Métricas da PMC-IBGE (%)
Mensal Trimestral Interanual 12 meses
Volume Restrito 0,6 0,5 2,9 1,6
Receita Restrito 0,9 0,7 4,9 4,6
Volume Ampliado -0,5 0,4 3,8 3,6
Receita Ampliado -0,3 0,5 5,5 6,1

O comércio também sofreu com a posição dos automóveis, gerando um número negativo na margem no conceito ampliado. Em 12 meses, contudo, mantém variação de 3,6%. A seguir, nós consolidamos essa última métrica para as três pesquisas em um gráfico.


Como é possível verificar, na métrica de variação mais suave para as três pesquisas, indústria e comércio parecem ainda não refletir os avanços verificados na margem no segundo semestre. Enquanto isso, os serviços mantém alguma estabilidade no período, ainda que experimentem uma trajetória distinta das duas outras pesquisas. Das três, apenas a indústria flerta com números negativos, acusando os efeitos dos choques que abalaram a economia brasileira nos últimos anos.

_________________

Cadastre-se na newsletter
e receba nossas novidades em primeira mão!