Category

Comentário de Conjuntura

Núcleos vs. Meta de Inflação

By | Comentário de Conjuntura

Como tenho mostrado nesse espaço ao longo das últimas semanas, a inflação medida pelo IPCA sofreu um choque no último trimestre de 2019 causado, basicamente, pela maior demanda da China por proteínas. Isso fez com que subitens ligados à carne tivessem um repique inflacionário, causando um deslocamento do índice cheio para próximo da meta de inflação. Os dados mais recentes, contudo, mostram uma dissipação desse movimento. Não por outro motivo, a expectativa de inflação para o final de 2020 despencou no Focus, chegando a 3,25% - para uma meta de 4%.

Mais interessante do que acompanhar o índice cheio, entretanto, tem sido verificar o comportamento dos núcleos de inflação. A ideia de um núcleo é capturar a tendência da inflação ao longo do tempo, retirando assim variações idiossincráticas. Em outros palavras, busca capturar a persistência do aumento de preços ao longo do tempo. Considere, por exemplo, que o preço de um bem/serviço {i} varie de acordo com a equação \pi_{i,t} = \pi_t + \mu_{i,t}, onde \pi_t representa uma tendência e \mu_{i,t} uma idiossincracia. Desse modo, para {n} bens/serviços, o núcleo será dado por:

(1)   \begin{align*} \pi_t^{nucleo} = \sum_{i=1}^{n} \omega_{i}\pi_{i,t} - \sum_{i=1}^{n} \omega_{i}\mu_{i,t} \end{align*}

Em outras palavras, o objetivo do núcleo é reconhecer e retirar a parte idiossincrática, \sum_{i=1}^{n} \omega_{i}\mu_{i,t}, concentrando-se na verdadeira tendência da variação dos preços ao longo do tempo. Não à toa, Bancos Centrais de todo o mundo procuram construir e acompanhar medidas de núcleo de inflação. No Brasil, em particular, temos atualmente sete medidas de núcleo - para saber mais sobre eles, ver aqui.

Tendo isso em consideração, podemos nos concentrar nos núcleos de inflação mais sensíveis ao ciclo econômico, isto é, à ociosidade da economia. Das sete medidas construídas e divulgadas pelo Banco Central, os núcleos IPCA-EX2 e IPCA-EX3 seriam aqueles mais correlacionados à medidas de hiato do produto. Com efeito, podemos compará-los à meta de inflação. O gráfico a seguir ilustra.

Como é possível verificar, os núcleos mais sensíveis ao hiato do produto estão performando próximos ao limite inferior da meta de inflação, após a desinflação de 2016. A posição dos núcleos nessa situação, por suposto, mostra uma ociosidade ainda bastante elevada, com baixa pressão inflacionária.

O que esse dado mostra é que a política monetária atual, situada em posição expansionista, é condizente com o estado da economia, de elevada ociosidade. E, ademais, não há motivo para esperar uma alta de juros tão cedo por parte do Comitê de Política Monetária. O risco aqui, como mostra a ata divulgada hoje pela manhã, é de que o Comitê tenha de rever a posição de manutenção dos juros em 4,25% para baixo em algum ponto nos próximos meses. Combinado, claro, com a perspectiva para o nível de atividade.

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

___________


Coronavírus, Volatilidade e Ibovespa

By | Comentário de Conjuntura

A proliferação do coronavírus fez aumentar a volatilidade global em janeiro, tendo impactos negativos no mercado financeiro. Para ilustrar, vamos nesse Comentário de Conjuntura relacionar um índice de volatilidade, o VIX, com o índice Bovespa. Para isso, carregamos alguns pacotes como abaixo.


library(quantmod)
library(dplyr)
library(tidyr)
library(ggplot2)
library(scales)
library(png)
library(grid)
library(ggalt)

Carregados os pacotes, nós usamos a função getSymbols do pacote quantmod para coletar os dados do IBOV e do VIX. O primeiro é coletado a partir do yahoo finance, enquanto o segundo é coletado a partir do FRED.


ibov = getSymbols("^BVSP",src="yahoo")
vix = getSymbols('VIXCLS', src='FRED')
data1 = tibble(dates=as.Date(time(VIXCLS)), vix=VIXCLS)
data2 = tibble(dates=as.Date(time(BVSP)), ibov=BVSP$BVSP.Close)
data = inner_join(data1, data2, by='dates') %>%
drop_na()

Com os dados coletados, podemos gerar um gráfico como abaixo.


img <- readPNG('logo.png')
g <- rasterGrob(img, interpolate=TRUE)

data_select = data[data$ibov < 120000 & data$vix > 5 &
data$ibov > 90000 & data$vix < 30,]

ggplot(data, aes(x=vix, y=ibov/1000))+
geom_point(size=.6)+
geom_encircle(aes(x=vix, y=ibov/1000),
data=data_select,
color="blue",
size=2,
expand=0.08)+
geom_smooth(aes(x=vix, y=ibov/1000),
data=data_select,
method='lm',
se=FALSE,
colour='red',
size=.8)+
labs(x='VIX Index', y='Ibovespa (mil)',
title='Ibovespa vs. Volatilidade Global (VIX Index)',
caption='Fonte: analisemacro.com.br')+
theme(panel.background = element_rect(fill='#acc8d4',
colour='#acc8d4'),
plot.background = element_rect(fill='#8abbd0'),
axis.line = element_line(colour='black',
linetype = 'dashed'),
axis.line.x.bottom = element_line(colour='black'),
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
legend.position = 'bottom',
legend.background = element_rect((fill='#acc8d4')),
legend.key = element_rect(fill='#acc8d4',
colour='#acc8d4'),
plot.margin=margin(5,5,15,5))+
annotation_custom(g,
xmin=60,
xmax=80,
ymin=75, ymax=120)

E o gráfico...

Como esperado, há uma correlação negativa entre o IBOV e o VIX. Abaixo, mostramos que houve um aumento da volatilidade nas últimas semanas associado ao coronavírus.

(*) Mais sobre como modelar o VIX em nosso Curso de Econometria Financeira usando o R.

___________


(*) O script completo do Comentário estará disponível logo mais no Clube do Código.

Poupança, Investimento e Balanço de Pagamentos

By | Comentário de Conjuntura

No Comentário de Conjuntura da semana passada, eu falei sobre a baixa taxa de poupança brasileira e a relação disso com o juro de equilíbrio da economia. Hoje, quero continuar no tema da poupança, mas relacionando a mesma à taxa de investimento e ao balanço de pagamentos. Relações importantes que ensino no nosso Curso de Teoria Macroeconômica. Para começar, devemos carregar alguns pacotes do R.


library(tidyverse)
library(sidrar)
library(scales)
library(png)
library(grid)
library(zoo)
library(rbcb)
library(gridExtra)

Na sequência, eu pego os dados de poupança, Formação Bruta de Capital Fixo (FBCF) e PIB do SIDRA/IBGE.


## Pegar dados de Poupança vs. Investimento
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

A seguir, coloco as séries no mesmo tibble, já acumuladas em 4 trimestres e normalizadas pelo PIB.


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))

O gráfico a seguir ilustra o comportamento da taxa de poupança e da taxa de investimento (em bases trimestres) ao longo do tempo.

Como se vê, há um gap entre poupança e investimento. Aquela é menor do esta. Macroeconomicamente, essa diferença é fechada através de um déficit na conta corrente do balanço de pagamentos que é igual à poupança externa positiva. O saldo das transações correntes pode ser baixado através do sistema de séries temporais do Banco Central como abaixo.


stct = get_series(23081, start_date='2000-01-01')

Também pegamos, pelo lado da conta financeira do balanço de pagamentos, o investimento estrangeiro direto no país e o investimento em carteira.


iedt = get_series(23265, start_date='2000-01-01')
ict = get_series(23285, start_date='2000-01-01')

A seguir tratamos e juntamos os dados, de modo a torná-los comparáveis com o gráfico que fizemos acima.


data2 = inner_join(stct, iedt, by='date') %>%
inner_join(ict, by='date') %>%
mutate(tx_stc = -(stct$`23081`+lag(stct$`23081`,1)+lag(stct$`23081`,2)+
lag(stct$`23081`,3))/(pib+lag(pib,1)+lag(pib,2)+lag(pib,3))*100) %>%
mutate(tx_ied = (iedt$`23265`+lag(iedt$`23265`,1)+lag(iedt$`23265`,2)+
lag(iedt$`23265`,3))/(pib+lag(pib,1)+lag(pib,2)+lag(pib,3))*100) %>%
mutate(tx_ic = (ict$`23285`+lag(ict$`23285`,1)+lag(ict$`23285`,2)+
lag(ict$`23285`,3))/(pib+lag(pib,1)+lag(pib,2)+lag(pib,3))*100) %>%
transform(date = as.yearqtr(date)) %>%
as_tibble()

Na sequência, plotamos um gráfico como abaixo.

O Brasil é historicamente um usuário de poupança externa. Na série antiga do balanço de pagamentos do Banco Central, apenas em 12 anos tivemos saldo em conta corrente positiva. Isso significa que esse déficit em conta corrente deve ser financiado. A conta financeira do balanço de pagamento é a responsável por esse financiamento.

Grosso modo, podemos financiar o déficit em conta corrente com investimento direto ou com investimento em carteira. Aquele, teoricamente, é alocado no aumento da capacidade produtiva do país, enquanto esse seria apenas alocado em ativos financeiros, como ações e títulos públicos. Como é possível ver no gráfico, o país mantém um IED acima do déficit em conta corrente, o que é suficiente, portanto, para financiá-lo integralmente. Não obstante a queda de juros e a fuga recente dos estrangeiros do mercado de capitais, há ainda também saldo positivo no investimento em carteira.

Isso posto, aquela diferença entre poupança e investimento domésticas está sendo financiada, basicamente, via IED, o que é salutar para a economia brasileira. Aumentar o fluxo de IED ao longo do tempo, obviamente, vai depender da continuação da agenda de reformas, melhorando, por exemplo, o marco regulatório da infraestrutura.

O déficit em conta corrente, portanto, pode continuar existindo, desde que o país não o financie com hot money, o capital volátil que vem aqui apenas para arbitrar juros, por exemplo. Para isso, é preciso que o país dê continuidade à melhoria do ambiente de negócios. Por todos os lados que se olha, você verá a necessidade da agenda de reformas. Parece que só bicho grilo, político populista e economista heterodoxo não conseguem enxergar isso... 🙂

___________


(*) O script completo do Comentário estará disponível logo mais no Clube do Código.

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.

Produção Industrial é o patinho feio da recuperação

By | Comentário de Conjuntura

A produção industrial tem sofrido com os choques que afetaram a economia brasileira nos últimos anos mais do que os demais setores. De modo a ilustrar esse ponto, nós importamos, tratamos e visualizamos os dados desagregados da pesquisa, com base nas atividades industriais. Os dados são importados a partir do SIDRA, com o pacote sidrar.


# Pacotes utilizados no script

library(tidyverse)
library(sidrar)
library(xtable)
library(forecast)
library(grid)
library(png)
library(gridExtra)
library(scales)
library(tstools)


# Importação dos dados
## Produção Física por Seção e Atividades
table1 = get_sidra(api='/t/3653/n1/all/v/3134,3135/p/all/c544/all/d/v3134%201,v3135%201')
## Produção Física por grandes categorias econômicas
table2 = get_sidra(api='/t/3651/n1/all/v/3134,3135/p/all/c543/129278,129283,129300,129301,129305/d/v3134%201,v3135%201')
## Ponderações
pond = read_csv2('ponderacao.csv',
locale = locale(encoding = 'Latin1'))


## Atividades com ajuste sazonal
series = as.numeric(table1$`Seções e atividades industriais (CNAE 2.0) (Código)`[1:28])

names = pond$Atividades

atividades_sa <- matrix(NA, ncol=length(series),
nrow=nrow(table1)/length(series)/2)

for(i in 1:length(series)){

atividades_sa[,i] <- table1$Valor[table1$`Variável (Código)`==3134 & table1$`Seções e atividades industriais (CNAE 2.0) (Código)`==series[i]]

}

colnames(atividades_sa) = names


## Atividades sem ajuste sazonal
atividades <- matrix(NA, ncol=length(series),
nrow=nrow(table1)/length(series)/2)

for(i in 1:length(series)){

atividades[,i] <- table1$Valor[table1$`Variável (Código)`==3135 & table1$`Seções e atividades industriais (CNAE 2.0) (Código)`==series[i]]

}

colnames(atividades) = names

Uma vez importados os dados, podemos criar algumas métricas.


vmensal = acum_i(atividades_sa, 1)
colnames(vmensal) = names

vanual = acum_i(atividades, 12)
colnames(vanual) = names

interanual = (atividades/dplyr::lag(atividades,12)-1)*100
colnames(interanual) = names

trimestral <- (((atividades_sa+dplyr::lag(atividades_sa,1)+
dplyr::lag(atividades_sa,2))/3)/
((dplyr::lag(atividades_sa,1)+
dplyr::lag(atividades_sa,2)+
dplyr::lag(atividades_sa,3))/3)-1)*100
colnames(trimestral) = names

E começar a visualizar os dados...

Os gráficos acima trazem o número índice (com ajuste sazonal) completo de quatro indicadores. Observe que houve uma queda forte da produção industrial no período da greve dos caminhoneiros em maio de 2018. Desde então, a produção industrial tem sofrido para crescer. Em particular, a produção de veículos sofre com os problemas da Argentina, principal comprador de carros brasileiros.

A Pesquisa Industrial Mensal - Produção Física, divulgada pelo IBGE, é a principal pesquisa do setor. São avaliados 805 produtos das indústrias extrativa e de transformação. Nesta, há 25 atividades industriais pesquisadas. O peso de cada uma na indústria geral é dado pelo Valor de Transformação Industrial (VTI), sendo as maiores participações dadas pela fabricação de produtos alimentícios, indústria extrativa, derivados de petróleo produção de veículos. O gráfico a seguir ilustra a participação de cada uma das atividades industriais.

A seguir nós ilustramos as métricas que construímos para uma janela mais recente. Primeiro, damos uma olhada na variação mensal.

A seguir, ilustramos a variação interanual...

Por fim, mostramos a variação acumulada em 12 meses desses índices selecionados.

Como se vê, a produção industrial mostra grandes dificuldades de voltar a crescer. É, de fato, o setor que mais sofreu com os choques recentes. Em particular, com a greve dos caminhoneiros e com os problemas na Argentina. Ao longo das próximas semanas, divulgaremos um exercício de modelagem e previsão, no âmbito do Clube do Código, que nos permitirá fazer uma análise prospectiva do setor em 2020.

_____________________

(*) Os códigos completos desse comentário estarão disponíveis logo mais no Clube do Código.

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

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