library(dplyr)
library(ggplot2)
library(rbcb)
É possível obter as expectativas de mercado para diversos indicadores macroeconômicos da pesquisa Focus de forma totalmente automática utilizando o R.
Vamos utilizar o pacote {rbcb} para obter estes dados. O pacote {rbcb} é uma interface para algumas das diversas APIs do portal de dados abertos do Banco Central (link).
As expectativas de mercado para os indicadores macroeconômicos da pesquisa Focus são consolidadas em estatísticas diárias e divulgadas na API. Estas estatísticas são calculadas com base nas expectativas de mercado de diversos bancos, gestores de recursos e demais instituições do mercado financeiro. Os indicadores macroeconômicos são referentes a índices de preços, crescimento do PIB e da produção industrial, taxa de câmbio, taxa Selic, variáveis fiscais e indicadores do setor externo e são publicadas todo primeiro dia útil da semana.
Carregando os pacotes utilizados.
Função get_market_expectations
A função get_market_expectations
implementa a interface para a API de expectativas de mercado da pesquisa Focus. Vejamos os seus argumentos e o que podemos fazer com eles:
|> args() get_market_expectations
function (type = c("annual", "quarterly", "monthly", "inflation-12-months",
"top5s-monthly", "top5s-annual", "institutions", "selic",
"top5s-selic"), indic = NULL, start_date = NULL, end_date = NULL,
keep_names = TRUE, ...)
NULL
type
: A API de expectativas possui diversos endpoints e o argumentotype
define qual deve ser utilizado. Se não for informado o valorannual
será utilizado.annual
,quarterly
emonthly
retorna, respectivamente, as expectativas anuais, trimestrais e mensais dos indicadores macroeconômicosinflation-12-months
para expectativas de inflação nos próximos 12 mesestop5s-monthly
etop5s-annual
retorna as expectativas mensais e anuais para os indicadores do Top 5institutions
expectativas informadas pelas instituições credenciadasselic
expectativas de mercado SELICtop5s-selic
expectativas Top 5 para SELIC
indic
nome do indicador macroeconômico, é opcional, de forma, quando não for definido, todos os indicadores disponíveis para o endpoint serão retornados. Esse ponto é curioso, pois a documentação não é boa e informa indicadores que não são mais disponibilizados.start_date
eend_date
definem as datas de início e fim para a consulta, são opcionais e caso não sejam informados, todo o período será retornado, o que não é recomendado pois onera os serviços de dados do BCB que já não são lá os melhores.keep_names
é um argumento utilizado internamente que não faz diferença para o usuário final....
aqui são passados argumentos adicionais para a API$select
define as colunas retornadas na consulta:Nome, Idade
$filter
define filtros mais elaborados baseado nos valores das colunas:Nome eq 'João'
$orderby
define como as colunas devem ser ordenadas:Nome asc, Idade desc
$skip
define quantidade de linhas no começo que não devem ser retornadas$top
define a quantidade de linhas que serão retornadas
Descobrindo indicadores disponíveis
Para descobrir os indicadores macroeconômicos disponíveis para um determinado endpoint é necessário realizar duas consultas. A primeira para descobrir a data mais recente com dados, pois a disponibilidade dos indicadores varia com o tempo, de maneira que temos indicadores mais recentes que não estão no histórico antigo. Tendo esta data, realizamos a segunda consulta filtrando por esta data.
Vamos fazer isso para cada um dos endpoints.
annual
Consulta 1
get_market_expectations("annual",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
|>
) ::paged_table() rmarkdown
Consulta 2
get_market_expectations("annual",
`$select` = "Data,Indicador,IndicadorDetalhe",
`$filter` = "Data eq '2022-04-29'"
|>
) distinct(Indicador, IndicadorDetalhe) |>
arrange(Indicador, IndicadorDetalhe) |>
::paged_table() rmarkdown
Este endpoint tem uma coluna IndicadorDetalhe, que é como uma especificação do indicador. No caso, Balança Comercial-Saldo ou Balança Comercial-Exportações, por exemplo.
monthly
Consulta 1
get_market_expectations("monthly",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
|>
) ::paged_table() rmarkdown
Consulta 2
get_market_expectations("monthly",
`$select` = "Data,Indicador",
`$filter` = "Data eq '2022-04-29'"
|>
) distinct(Indicador) |>
arrange(Indicador) |>
::paged_table() rmarkdown
quarterly
Consulta 1
get_market_expectations("quarterly",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
|>
) ::paged_table() rmarkdown
Consulta 2
get_market_expectations("quarterly",
`$select` = "Data,Indicador",
`$filter` = "Data eq '2022-04-29'"
|>
) distinct(Indicador) |>
arrange(Indicador) |>
::paged_table() rmarkdown
inflation-12-months
Consulta 1
get_market_expectations("inflation-12-months",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
|>
) ::paged_table() rmarkdown
Consulta 2
get_market_expectations("inflation-12-months",
`$select` = "Data,Indicador",
`$filter` = "Data eq '2022-04-29'"
|>
) distinct(Indicador) |>
arrange(Indicador) |>
::paged_table() rmarkdown
top5s-annual
Consulta 1
get_market_expectations("top5s-annual",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
|>
) ::paged_table() rmarkdown
Consulta 2
get_market_expectations("top5s-annual",
`$select` = "Data,Indicador",
`$filter` = "Data eq '2022-04-29'"
|>
) distinct(Indicador) |>
arrange(Indicador) |>
::paged_table() rmarkdown
top5s-monthly
Consulta 1
get_market_expectations("top5s-monthly",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
|>
) ::paged_table() rmarkdown
Consulta 2
get_market_expectations("top5s-monthly",
`$select` = "Data,Indicador",
`$filter` = "Data eq '2022-04-29'"
|>
) distinct(Indicador) |>
arrange(Indicador) |>
::paged_table() rmarkdown
top5s-selic
Consulta 1
get_market_expectations("top5s-selic",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
|>
) ::paged_table() rmarkdown
Consulta 2
get_market_expectations("top5s-selic",
`$select` = "Data,indicador",
`$filter` = "Data eq '2022-04-29'"
|>
) distinct(indicador) |>
arrange(indicador) |>
::paged_table() rmarkdown
Aqui temos uma pegadinha, a coluna indicador vem com sua inicial minúscula, diferente dos demais endpoints.
selic
Consulta 1
get_market_expectations("selic",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
|>
) ::paged_table() rmarkdown
Consulta 2
get_market_expectations("selic",
`$select` = "Data,Indicador",
`$filter` = "Data eq '2022-04-29'"
|>
) distinct(Indicador) |>
arrange(Indicador) |>
::paged_table() rmarkdown
Conclusão
Observamos que para a maior parte dos endpoints, a última data disponível é a mesma, indicando que as estatísticas são atualizadas conjuntamente.
Uma vez que conhecemos os indicadores disponíveis podemos utilizar o argumento indic
para selecionar o indicador desejado na consulta.
get_market_expectations("monthly",
indic = c("IPCA", "IGP-M"),
start_date = "2022-04-29",
`$select` = "Data,Indicador,DataReferencia,Media,baseCalculo"
|>
) ::paged_table() rmarkdown