Category

Comentário de Conjuntura

O sofrimento da Petrobras no R

By | Comentário de Conjuntura

Bolsonaro, enfim, fez o que dele se esperava desde o início do mandato: "dilmou". A demissão do presidente da principal estatal brasileira foi um banho de água fria para investidores domésticos e estrangeiros. O problema aqui vai além da Petrobras em si e afeta praticamente toda a política econômica do atual governo. Em campanha, Bolsonaro flertou com o liberalismo, alimentando-se de um sentimento "antiestadismo" pós-operação Lava Jato. Eleito, porém, era visível o desconforto do Presidente da República com a agenda liberal. Era, portanto, questão de tempo que o seu passado intervencionista desse o ar da graça.

Investidores domésticos e estrangeiros, por óbvio, irão colocar isso no preço. Para ilustrar, vamos nesse Comentário de Conjuntura olhar as ações de três empresas estatais: Banco do Brasil, Eletrobras e Petrobras. Além disso, vamos ver o que aconteceu com o Ibovespa, dados os eventos recentes.

Os membros do Clube AM, como sempre, têm acesso aos códigos completos desse Comentário e também a um vídeo explicativo sobre como rodar os códigos.

Vamos começar, como de praxe, carregando alguns pacotes de R.


library(tidyverse)
library(quantmod)
library(timetk)
library(scales)
library(tidyquant)

Feito isso, podemos pegar os dados de ações dessas três estatais a partir da base de dados do yahoo finance.


symbols = c('PETR4.SA', 'BBAS3.SA', 'ELET6.SA')

prices = getSymbols(symbols, src='yahoo', from='2020-01-01') %>%
map(~Ad(get(.))) %>%
reduce(merge) %>%
`colnames<-` (symbols) %>%
tk_tbl(preserve_index = TRUE, rename_index = 'date') %>%
drop_na() %>%
gather(variavel, valor, -date)

Com os dados carregados, nós podemos gerar um gráfico da ação da Petrobras.

A ação da Petrobras sofreu uma queda de 21,5% nessa segunda-feira, mostrando o descontentamento do mercado com a interferência política do Palácio do Planalto sobre a estatal. Para além da Petrobras, será que tivemos queda nas outras estatais? O gráfico abaixo ilustra.

O Banco do Brasil também parece ter sofrido com o "efeito Petrobras": a ação do Banco teve queda de 11,6% nessa segunda-feira. A Eletrobrás, por outro lado, não parece ter sentido impacto relevante, ao menos por enquanto.

E o IBOVESPA?

O Índice Bovespa acabou sendo levado pelo mau humor dos investidores com a interferência política e fechou com queda de quase 5% nessa segunda-feira.

Difícil dizer como acabará o governo Bolsonaro, mas uma coisa parece cada vez mais clara para quem acompanha a política econômica: o flerte com o liberalismo está sepultado.

___________________

(*) Conheça o Clube AM e faça parte de um grupo exclusivo de compartilhamento de códigos e troca de informações entre os membros;

(**) Uma introdução à análise de dados no mercado financeiro é feita no nosso Curso de Mercado Financeiro e Gestão de Portfólios. As inscrições estão abertas para a Turma de Verão: aproveite!

Raio-X da inflação brasileira usando o R

By | Comentário de Conjuntura

Na próxima quinta-feira, às 20h, eu farei uma aula ao vivo sobre estratégias de previsão da inflação mensal medida pelo IPCA. A aula faz parte do lançamento do nosso novo Curso de Previsão Macroeconométrica usando o R. Para garantir sua presença na aula, coloque seu nome na lista aqui para ser avisado. Nesse Comentário de Conjuntura, a propósito, fazemos um raio-x da inflação brasileira, tendo por foco o IPCA. O código completo está disponível para os membros do Clube AM.

Para começar, nós carregamos os pacotes de R que utilizaremos.


library(tidyverse)
library(readxl)
library(sidrar)
library(forecast)
library(tstools)
library(scales)
library(ggrepel)
library(BETS)
library(xtable)
library(lubridate)
library(RcppRoll)
library(knitr)
library(fpp3)
library(xts)
library(reshape2)
library(rbcb)

Com os pacotes carregados, podemos coletar os dados diretamente do SIDRA/IBGE para o RStudio com o código abaixo. Já aproveito para criar a inflação mensal e a inflação acumulada em 12 meses.


## Criar Inflação mensal e acumulada em 12 meses
ipca_indice = 
'/t/1737/n1/all/v/2266/p/all/d/v2266%2013' %>%
get_sidra(api=.) %>%
mutate(date = ymd(paste0(`Mês (Código)`, '01'))) %>%
select(date, Valor) %>%
mutate(mensal = round((Valor/lag(Valor, 1)-1)*100, 2),
anual = round((Valor/lag(Valor, 12)-1)*100, 2))

Como o índice pega toda a hiperinflação da década de 80, nós pegamos uma janela a partir de 2007 com o código a seguir.


## Criar amostra
ipca_subamostra = ipca_indice %>%
filter(date >= as.Date('2007-06-01'))

Uma tabela com os últimos resultados é colocada abaixo.

date Valor mensal anual
159 2020-08-01 5357.46 0.24 2.44
160 2020-09-01 5391.75 0.64 3.14
161 2020-10-01 5438.12 0.86 3.92
162 2020-11-01 5486.52 0.89 4.31
163 2020-12-01 5560.59 1.35 4.52
164 2021-01-01 5574.49 0.25 4.56

Os gráficos do número índice e da inflação mensal e acumulada em 12 meses são colocados abaixo.


Podemos dar um zoom na inflação mensal, como abaixo.

Uma análise estatística da inflação pode ser feita, a começar pelas estatísticas descritivas do nosso dataset.

date Valor mensal anual
Min. :2007-06-01 Min. :2669 Min. :-0.3800 Min. : 1.880
1st Qu.:2010-10-24 1st Qu.:3169 1st Qu.: 0.2500 1st Qu.: 4.190
Median :2014-03-16 Median :3911 Median : 0.4300 Median : 5.250
Mean :2014-03-17 Mean :4017 Mean : 0.4522 Mean : 5.473
3rd Qu.:2017-08-08 3rd Qu.:4855 3rd Qu.: 0.6025 3rd Qu.: 6.492
Max. :2021-01-01 Max. :5574 Max. : 1.3500 Max. :10.710

A seguir, podemos ver uma característica bastante conhecida da inflação que é a sua sazonalidade.

A seguir, nós vemos o boxplot e o histograma da inflação mensal medida pelo IPCA.

Na sequência, nós podemos importar os núcleos de inflação criados e acompanhados pelo Banco Central.


## Pegar núcleos
series = c(ipca_ex2 = 27838,
ipca_ex3 = 27839,
ipca_ms = 4466,
ipca_ma = 11426,
ipca_ex0 = 11427,
ipca_ex1 = 16121,
ipca_dp = 16122)

nucleos = get_series(series, start_date = '2006-07-01') %>%
purrr::reduce(inner_join)

Com os dados dos núcleos disponíveis, nós podemos criar um gráfico como abaixo.

A despeito do avanço da inflação cheia, a média dos sete núcleos do Banco Central ainda se situa abaixo da meta de inflação. A seguir, ilustramos todos os sete núcleos.

Como é possível ver pelo gráfico, todos os sete núcleos situam-se abaixo da meta de inflação, que esse ano é de 3,75%. Na sequência, vemos cada um dos sete grupos, na sua variação mensal.

E a variação acumulada em 12 meses.

Os núcleos de inflação são importantes para expurgar choques que ocorrem sobre o índice cheio. O que se vê pelos gráficos acima é que, de fato, os núcleos ainda estão mais comportados do que a inflação cheia, mas na margem, houve sim uma contaminação.

Outra informação importante é a difusão da inflação, isto é, o percentual de subitens que teve variação positiva no mês. Pelo gráfico acima, é possível ver que na margem há um avanço da difusão, já considerando uma média móvel de 12 meses dos dados.

Na sequência, nós podemos ver a contribuição dos 9 grupos para a inflação cheia. Os dados são coletados diretamente do SIDRA/IBGE.


## Baixar e tratar os dados
variacao =
'/t/7060/n1/all/v/63/p/all/c315/7170,7445,7486,7558,7625,7660,7712,7766,7786/d/v63%202' %>%
get_sidra(api=.) %>%
mutate(date = parse_date(`Mês (Código)`, format='%Y%m')) %>%
select(date, "Geral, grupo, subgrupo, item e subitem", Valor) %>%
pivot_wider(names_from = "Geral, grupo, subgrupo, item e subitem",
values_from = Valor)

peso =
'/t/7060/n1/all/v/66/p/all/c315/7170,7445,7486,7558,7625,7660,7712,7766,7786/d/v66%204' %>%
get_sidra(api=.) %>%
mutate(date = parse_date(`Mês (Código)`, format='%Y%m')) %>%
select(date, "Geral, grupo, subgrupo, item e subitem", Valor) %>%
pivot_wider(names_from = "Geral, grupo, subgrupo, item e subitem",
values_from = Valor)

contribuicao = (variacao[,-1]*peso[,-1]/100) %>%
mutate(date = variacao$date) %>%
select(date, everything())

Na sequência, geramos um gráfico com a variação mensal dos nove grupos.

Como se vê, houve um aumento considerável do grupo Alimentação e bebidas ao longo de 2020, o que contribuiu de forma peremptória para o avanço da inflação ao longo daquele ano. Na sequência, colocamos a contribuição de cada um dos grupos para a inflação mensal.

O gráfico acima ilustra a contribuição do grupo Alimentação e bebidas para a inflação mensal ao longo de 2020. A seguir, baixamos as classificações do IPCA diretamente do Banco Central.


series = c('Comercializáveis' = 4447,
'Não Comercializáveis' = 4448,
'Monitorados' = 4449,
'Não Duráveis' = 10841,
'Semi-Duráveis' = 10842,
'Duráveis' = 10843,
'Serviços' = 10844,
'Livres' = 11428)

classificacoes_ipca = get_series(series, start_date = '2007-01-01') %>%
purrr::reduce(inner_join)

Um gráfico com a variação acumulada em 12 meses é colocado abaixo.

Há uma assimetria entre as classificações do IPCA. Enquanto os preços livres tiveram um avanço nos últimos anos, os monitorados e não comercializáveis seguiram trajetória contrária. Na margem, contudo, essas classificações também mostram algum repique.

Para terminar esse `Raio-x da inflação brasileira`, vamos passar rapidamente pelos Índices Gerais de Preço (IGPs), construídos e divulgados mensalmente pela Fundação Getúlio Vargas. Os (IGPs) são formados por três índices: Índice de Preços por Atacado (IPA), Índice de Preço ao Consumidor (IPC) e Índice Nacional de Custo da Construção Civil (INCC). São divididos por período de coleta em IGP-10, IGP-M e IGP-DI.

Os números-índices do IGP-10, IGP-M e IGP-DI podem ser obtidos aplicando a seguinte fórmula no \mathbf{R}:

(1)   \begin{equation*} IGP_{i,t}=0,6*IPA_{i,t}+0,3*IPC_{i,t}+0,1*INCC_{i,t} \end{equation*}

Onde i pode ser 10, M ou DI.

O código a seguir pega os dados diretamente do Banco Central.


series = list('IGP-M'=189, 'IGP-DI'=190, 'IGP-10'=7447, 'IPC-Br'=191,
'INCC'=192, 'IPA'=225)

indices_gerais = get_series(series, start_date = '2007-01-01') %>%
purrr::reduce(inner_join) %>%
gather(variavel, valor, -date)

Na sequência, colocamos um gráfico que mostra os índices gerais e seus componentes no acumulado em 12 meses.

Como se vê, houve um salto no IPA, o índice de preços no atacado. Como o mesmo representa 60% dos índices gerais, houve um salto grande nesses índices ao longo de 2020. A tabela abaixo mostra a correlação entre os índices gerais, seus componentes e o IPCA.

IGP-10 IGP-DI IGP-M INCC IPA IPC-Br IPCA
IGP-10 1.0000000 0.9839832 0.9961309 0.4423330 0.9714577 0.2969412 0.3105496
IGP-DI 0.9839832 1.0000000 0.9947883 0.3984862 0.9930553 0.2648717 0.2771306
IGP-M 0.9961309 0.9947883 1.0000000 0.4198252 0.9855453 0.2778136 0.2909590
INCC 0.4423330 0.3984862 0.4198252 1.0000000 0.3182797 0.4864669 0.5081419
IPA 0.9714577 0.9930553 0.9855453 0.3182797 1.0000000 0.1571463 0.1702913
IPC-Br 0.2969412 0.2648717 0.2778136 0.4864669 0.1571463 1.0000000 0.9866917
IPCA 0.3105496 0.2771306 0.2909590 0.5081419 0.1702913 0.9866917 1.0000000

Para terminar, então, mostramos o gap entre o IPA e o IPCA no gráfico abaixo.

Membros do Clube AM têm acesso a todos os resultados dessas pesquisas, que contam com scripts automáticos ensinados no nosso Curso de Análise de Conjuntura usando o R.

_______________________

Análise da produção industrial em 2020

By | Comentário de Conjuntura

Hoje o IBGE divulgou o resultado da produção industrial em dezembro. Com efeito, começamos a conhecer os resultados do nível de atividade ao longo de 2020. Nesse Comentário de Conjuntura, fazemos uma análise dos principais aspectos da pesquisa com uso do R. O código completo está disponível para os membros do Clube AM.

Para começar, nós carregamos os pacotes de R que utilizaremos.


library(tidyverse)
library(lubridate)
library(tstools)
library(sidrar)
library(zoo)
library(scales)
library(gridExtra)
library(tsibble)
library(timetk)
library(knitr)

Com os pacotes carregados, podemos coletar os dados diretamente do SIDRA/IBGE para o RStudio com o código abaixo.


# Produção Física por Seção e Atividades
## Número-Indice com ajuste sazonal
tabela_sa = get_sidra(api='/t/3653/n1/all/v/3134/p/all/c544/all/d/v3134%201') %>%
mutate(date = parse_date(`Mês (Código)`, format='%Y%m')) %>%
select(date, "Seções e atividades industriais (CNAE 2.0)", Valor) %>%
spread("Seções e atividades industriais (CNAE 2.0)", Valor) %>%
as_tibble()

## Número-Índice sem ajuste sazonal
tabela = get_sidra(api='/t/3653/n1/all/v/3135/p/all/c544/all/d/v3135%201') %>%
mutate(date = parse_date(`Mês (Código)`, format='%Y%m')) %>%
select(date, "Seções e atividades industriais (CNAE 2.0)", Valor) %>%
spread("Seções e atividades industriais (CNAE 2.0)", Valor) %>%
as_tibble()

O código acima importa os números índices com e sem ajuste sazonal da produção industrial. A seguir, podemos criar métricas de crescimento que avaliam o comportamento da produção industrial geral e das atividades industriais.


## Variação na Margem
tabela_sa_ts = ts(tabela_sa[,-1], start=c(year(tabela_sa$date[1]),
month(tabela_sa$date[1])), freq=12)
margem = (tabela_sa_ts/stats::lag(tabela_sa_ts,-1)-1)*100
colnames(margem) <- colnames(tabela_sa[,-1])
margem = tk_tbl(margem, preserve_index = TRUE,
rename_index = 'date')
margem_long = margem %>%
gather(variavel, valor, -date)

## Variação Interanual
tabela_ts = ts(tabela[,-1], start=c(year(tabela$date[1]),
month(tabela$date[1])), freq=12)
interanual = (tabela_ts/stats::lag(tabela_ts,-12)-1)*100
colnames(interanual) <- colnames(tabela[,-1])
interanual = tk_tbl(interanual, preserve_index = TRUE,
rename_index = 'date')
interanual_long = interanual %>%
gather(variavel, valor, -date)

## Variação acumulada em 12 meses
anual = acum_i(tabela_ts,12) %>%
as_tibble() %>%
mutate(date = tabela$date) %>%
drop_na() %>%
select(date, everything())

anual_long = anual %>%
gather(variavel, valor, -date)

A variação na margem pode ser vista a seguir.

Produção Industrial: variação na margem
Mês Indústria Geral Indústria Extrativa Indústria de Transformação
jul 2020 8.62 8.81 9.30
ago 2020 3.49 1.60 3.52
set 2020 2.79 -5.35 3.87
out 2020 1.02 -2.88 1.58
nov 2020 1.12 -4.56 1.78
dez 2020 0.88 3.70 1.53

Os números na margem indicam que houve uma recuperação após o crash causado pela pandemia do coronavírus. Ocorre que as variações na margem estão cada vez menores, o que pode indicar uma perda de fôlego nessa recuperação. Os gráficos a seguir ilustram.

A suavização do crescimento ocorre com a comparação com o mesmo período do ano anterior. A tabela a seguir ilustra.

Produção Industrial: variação interanual
Mês Indústria Geral Indústria Extrativa Indústria de Transformação
jul 2020 -2.57 1.35 -3.22
ago 2020 -2.39 -1.86 -2.51
set 2020 3.81 -4.18 4.84
out 2020 0.31 -6.17 1.14
nov 2020 2.61 -9.09 4.23
dez 2020 8.32 -3.94 10.16

Os dados da comparação interanual mostram como a recuperação ainda é bastante lenta e insuficiente para gerar uma comparação positiva com o ano anterior. Os gráficos a seguir ilustram.

Isso fica mais claro quando suavizamos ainda mais as taxas de crescimento, com a taxa acumulada em 12 meses. Os gráficos a seguir ilustram.

Como mostram os gráficos, a recuperação da indústria ainda não é muito clara. Não houve uma recuperação em V do setor, o que deve acentuar a preocupação com o nível de atividade em 2021.

Nos próximos dias, o IBGE divulga os resultados de dezembro para o Comércio e para os Serviços. Ademais, o BCB divulga o IBC-BR, o que nos ajudará a ter uma visão completa sobre o que ocorreu com o nível de atividade nas pesquisas de alta frequência.

Membros do Clube AM têm acesso a todos os resultados dessas pesquisas, que contam com scripts automáticos ensinados no nosso Curso de Análise de Conjuntura usando o R.

_______________________

Consumo em Restaurantes e Supermercados

By | Comentário de Conjuntura

A Fipe (Fundação Instituto de Pesquisas Econômicas), em parceria com a Alelo, criou dois índices de consumo em restaurantes e supermercados que são bastante interessantes para verificar o impacto da pandemia nos hábitos de consumo dos brasileiros. Nesse Comentário de Conjuntura, fazemos uma análise dos índices. O código completo está disponível para os membros do Clube AM.


library(readxl)
library(tidyverse)
library(zoo)

Com o código acima, nós carregamos os pacotes utilizados nesse exercício. A seguir, nós baixamos a planilha excel disponível no site da FIPE.


url = 'https://downloads.fipe.org.br/indices/indicesconsumoalelo-serieshistoricas.xlsx'
download.file(url, destfile = 'seriehistorica.xlsx', mode='wb')
data = read_excel('seriehistorica.xlsx', sheet=1, skip=1) %>%
select(dia, "Índice de Consumo em Supermercados (ICS) - Valor",
"Índice de Consumo em Restaurantes (ICR) - Valor") %>%
rename('Consumo em Supermercados (diário)' = "Índice de Consumo em Supermercados (ICS) - Valor",
'Consumo em Restaurantes (diário)' = "Índice de Consumo em Restaurantes (ICR) - Valor") %>%
mutate(`Consumo em Supermercados (mensal)` = rollapply(`Consumo em Supermercados (diário)`, 30,
mean, align='right',
fill=NA)) %>%
mutate(`Consumo em Restaurantes (mensal)` = rollapply(`Consumo em Restaurantes (diário)`, 30,
mean, align='right',
fill=NA)) %>%
drop_na() %>%
gather(variavel, valor, -dia)

A seguir, nós podemos gerar o gráfico múltiplo abaixo.

A análise dos gráficos sugere que o consumo em supermercados aumentou no início da pandemia, enquanto houve uma queda brusca no consumo em restaurantes. Enquanto aquele parece ter voltado ao seu nível normal, este ainda não completou a volta ao nível anterior à pandemia.

A esse respeito, é interessante verificar se haverá uma mudança permanente nos hábitos de consumo, isto é, mais pessoas cozinhando em casa, por exemplo, o que reduz o consumo potencial em restaurantes.

_______________________

Análise de falências e recuperações judiciais com o R

By | Comentário de Conjuntura

Uma das questões mais delicadas ao longo de 2020 era evitar que (1) a população vulnerável ficasse desamparada na maior crise sanitária dos últimos 100 anos e (2) as micro e pequenas empresas falissem ou solicitassem recuperação judicial. Evitar que (2) ocorresse implicava em irrigar o mercado de crédito com dinheiro subsidiado, mitigando assim o risco de crédito associado a esse tipo de empréstimo.

Empresas falidas ou em recuperação judicial têm impacto sobre o PIB Potencial da economia, conforme exercício que fizemos em meados do ano passado. Quanto maior o número de empresas nessa condição, menor a capacidade de produção do país, logo menor será o PIB Potencial.

Isso dito, cabe nos perguntar: houve um aumento de falências e recuperações judiciais ao longo de 2020?

Para responder essa pergunta, podemos recorrer aos índices da Serasa e da Boa Vista. Os arquivos estão disponíveis nos respectivos sites dessas instituições. De posse desses dados, podemos importá-los conforme o código abaixo.


library(tidyverse)
library(readxl)
library(xts)
library(zoo)
library(timetk)
library(vars)
library(seasonal)

## Dados de Falências, RJ e concordatas SERASA
falencias = read_excel('FACONS.xls', sheet=1, skip=4) %>%
rename(date = "...1",
falencias_requeridas_total = "Total...5",
falencias_decretadas_total = "Total...9",
rj_requeridas_total = "Total...13",
rj_deferidas_total = "Total...17") %>%
filter(date > '2006-01-01') %>%
mutate(falencias_requeridas_sa = final(seas(ts(falencias_requeridas_total,
start=c(1991,01), freq=12))),
falencias_decretadas_sa = final(seas(ts(falencias_decretadas_total,
start=c(1991,01), freq=12))),
rj_requeridas_sa = final(seas(ts(rj_requeridas_total,
start=c(1991,01), freq=12))),
rj_deferidas_sa = final(seas(ts(rj_deferidas_total,
start=c(1991,01), freq=12)))) %>%
dplyr::select(date, falencias_requeridas_sa, falencias_decretadas_sa,
rj_requeridas_sa, rj_deferidas_sa) %>%
gather(variavel, valor, -date)

## Índice de Falências Boa Vista
fal_boavista = read_excel('Falências-e-Recuperações-Judiciais.xlsx',
skip=3) %>%
rename(date = "...1",
falencias_requeridas = "(média 2011 = 100)...2",
falencias_decretadas = "(média 2011 = 100)...3",
rj_pedidos = "(média 2014 = 100)...4",
rj_deferimentos = "(média 2014 = 100)...5") %>%
mutate(falencias_requeridas_sa = final(seas(ts(falencias_requeridas,
start=c(2006,01), freq=12))),
falencias_decretadas_sa = final(seas(ts(falencias_decretadas,
start=c(2006,01), freq=12))),
rj_pedidos_sa = final(seas(ts(rj_pedidos,
start=c(2006,01), freq=12))),
rj_deferimentos_sa = final(seas(ts(rj_deferimentos,
start=c(2006,01), freq=12)))) %>%
dplyr::select(date, falencias_requeridas_sa, falencias_decretadas_sa,
rj_pedidos_sa, rj_deferimentos_sa) %>%
gather(variavel, valor, -date)

Uma vez que tenhamos tratados os dados, podemos gerar os gráficos a seguir.

O índice Boa Vista de falências e recuperações judiciais indica que, de fato, houve um aumento tanto no número de pedidos quanto de deferimentos de recuperações judiciais ao longo de 2020. O número de falências, por outro lado, não parece ter descolado muito do que se observou em anos recentes.

O índice Serasa, por seu turno, também não mostra um avanço atípico no número de falências, mas captura um aumento no número de recuperações judiciais ao longo dos primeiros meses de 2020.

Os membros do Clube AM, a propósito, têm acesso aos códigos completos dos nossos Comentários e Exercícios.

_______________________

Seja avisado da nossa próxima aula ao vivo de R para Análise de Dados, toda terça-feira, às 21h!

Quero ser avisado
{"cart_token":"","hash":"","cart_data":""}