equatiomatic: transformando modelos em equações LaTeX

By | Dicas de R

Quem trabalha com modelagem costuma ter que escrever equações de forma bastante rotineira. Para exercícios simples, é bastante tranquilo escrever uma ou outra equação em \LaTeX. O problema é quando você tem muitas equações no mesmo documento. Nessa Dicas de R - disponível toda quarta-feira aqui no blog da AM -vamos divulgar um novo pacote, o equatiomatic, que trata justamente desse problema.

library(equatiomatic)
library(palmerpenguins)
library(ggplot2)
library(latex2exp)

Usei a própria documentação do pacote para exemplificar o seu uso. Primeiro, rodamos um lm qualquer como o abaixo.


m <- lm(bill_length_mm ~ bill_depth_mm + flipper_length_mm, penguins)

Agora, basta usar a função extract_eq para que tenhamos acesso à equação.


extract_eq(m)

(1)   \begin{equation*} \operatorname{body\_mass\_g} = \alpha + \beta_{1}(\operatorname{bill\_length\_mm}) + \epsilon \end{equation*}

A equação extract_eq contém, inclusive, alguns argumentos que permitem a customização da equação a ser exibida. Para além disso, outra coisa legal do pacote é poder plotar gráficos com equações, como abaixo.


# Fit an lm model
m <- lm(body_mass_g ~ bill_length_mm, penguins)
# extract equation with `ital_vars = TRUE` to avoid the use of `\operatorname`
m_eq <- extract_eq(m, use_coef = TRUE, ital_vars = TRUE)
# swap escaped underscores for dashes
prep_eq <- gsub("\\\\_", "-", m_eq)
# swap display-style 
prep_eq <- paste("$", as.character(prep_eq), "$", sep = "")
# Plot
ggplot(penguins, aes(x = bill_length_mm, y = body_mass_g)) +
geom_point() +
geom_smooth(method = "lm") +
labs(title = "Relation between bill length and body mass",
subtitle = TeX(prep_eq))

____________

Um pdf e um script com todo o código desse exercício está disponível para os membros do Clube AM.

 

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.

_______________________

Comportamento das variáveis fiscais em 2020 e o que esperar de 2021

By | Indicadores

No último dia 29 de janeiro, o Banco Central divulgou as Estatísticas Fiscais referentes à dezembro de 2020. Com efeito, ficamos sabendo como se comportaram as principais variáveis fiscais ao longo de 2020, um ano repleto de desafios por conta da pandemia do coronavírus. Nesse Comentário Semanal do boletim Focus, nós trazemos uma edição especial focada em variáveis fiscais.

Para começar, como de praxe, nós carregamos os pacotes que utilizamos.


library(rbcb)
library(scales)
library(tidyverse)

A seguir, nós buscamos dois grupos de dados. Para começar, nós pegamos os dados referentes às variáveis efetivamente observadas. O código a seguir pega os dados diretamente do Sistema de Séries Temporais do Banco Central.


## Coleta de dados reais
series = list('DBGG' = 13762,
'DLSP' = 4513,
'NFSP Primário' = 5793,
'NFSP Nominal' = 5727)

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

A seguir, nós pegamos os dados referentes às expectativas contidas para essas variáveis dentro do boletim Focus.


## Coleta de dados de expectativas
data_expectativas = get_annual_market_expectations('Fiscal',
start_date = '2019-01-01')

data_expectativas$indic_detail = ifelse(data_expectativas$indic_detail == "Resultado Primário",
'Resultado Primário',
data_expectativas$indic_detail)

data_expectativas$indic_detail = ifelse(data_expectativas$indic_detail ==
unique(data_expectativas$indic_detail)[3],
'DLSP',
data_expectativas$indic_detail)

data_expectativas$indic_detail = ifelse(data_expectativas$indic_detail ==
unique(data_expectativas$indic_detail)[4],
'DBGG',
data_expectativas$indic_detail)

De posse dos dados, nós podemos olhar o que ocorreu com as variáveis observadas.

O ano de 2020 terminou com a Dívida Bruta muito próxima dos 90% do PIB (89,3%) e com a Dívida Líquida em 63%. Em dezembro de 2019, a DBGG estava em 74,3%, enquanto a DLSP estava em 54,6% do PIB. Isto é, houve um aumento de 15 pontos percentuais na DBGG ao longo de 2020.

A deterioração do fluxo explica a maior parte dessa evolução. As Necessidades de Financiamento do Setor Público (NFSP) saíram de 0,84% em dezembro de 2019 para 9,49% do PIB em dezembro de 2020, no seu corte primário, que não inclui gastos com juros. No seu corte nominal, que inclui gastos financeiros, houve uma variação de 7,91 pontos percentuais: de 5,79% para 13,7% do PIB.

Ao longo de 2021, diga-se, os agentes de mercado esperam uma certa estabilidade nas variáveis de estoque, enquanto para o fluxo, o resultado nominal esperado está em -6,59% do PIB e o primário em -2,72%.

 

____________________

(*) No nosso Curso de Análise de Conjuntura usando o R, nós estressamos a coleta e tratamento de dados fiscais com o R;

(**) O código de R desse artigo está disponível para os membros do novo Clube AM. Para saber mais, clique aqui.

Novo Curso: Previsão Macroeconométrica usando o R

By | Cursos da Análise Macro

No próximo dia 11 de fevereiro, vamos abrir inscrições para um novo Curso aqui na Análise Macro. Trata-se do Curso de Previsão Macroeconométrica usando o R. No terceiro Curso de Macroeconometria da Análise Macro, nos voltamos para a construção de modelos econométricos que servem para a previsão de variáveis macroeconômicas.

Ao longo do Curso, serão vistos diversos modelos econométricos bem como modelo de machine learning que serão direcionados para a construção de previsões quantitativas de variáveis macroeconômicas.

O Curso é direcionado principalmente para profissionais envolvidos na produção e interpretação de previsões macroeconométricas, em particular aquelas contidas no boletim Focus do Banco Central. Também podem achar útil o programa do Curso, estudantes de graduação e pós-graduação que objetivam produzir monografias, dissertações e teses que contenham modelos econométricos de previsão, bem como professores envolvidos em pesquisas e ensino de econometria aplicada.

O lançamento oficial do Curso será feito por meio de uma live no própria dia 11 de fevereiro, às 20h, para explicar todos os detalhes do Curso e também para exemplificar o que será visto no Curso, com uma aula degustação sobre "Previsão da Inflação Mensal medida pelo IPCA". Para ser avisado da live, se inscreva na lista aqui. Para todos os detalhes do Curso, visite a página do mesmo aqui.

______________________

Análise de microdados da PNAD Covid com o R

By | Dicas de R

Com o R, é possível acessar diversas bases de dados e baixar o que precisa diretamente para o RStudio. Um exemplo disso são os microdados da PNAD Covid. Nessa Dicas de R - disponível toda quarta-feira aqui no blog da AM -vamos mostrar como pegar esses dados diretamente do ftp do IBGEComo de praxe, o código começa carregando alguns pacotes que utilizaremos.

library(tidyverse)

A seguir, nós podemos fazer o download dos dados diretamente do FTP do IBGE. Escolhemos os últimos microdados disponíveis da PNAD Covid.


## Baixar os dados via ftp
url = "ftp://ftp.ibge.gov.br/Trabalho_e_Rendimento/Pesquisa_Nacional_por_Amostra_de_Domicilios_PNAD_COVID19/Microdados/Dados/PNAD_COVID_112020.zip"
download.file(url, destfile='PNAD_COVID_112020.zip', mode='wb')
unzip('PNAD_COVID_112020.zip')
pnad_covid <- read_csv("PNAD_COVID_112020.csv",
col_types = cols(.default = "d"))

No código acima, é preciso observar que estamos baixando os dados para a pasta previamente setada no RStudio. Baixado os dados e importado para o RStudio, podemos agora baixar também o dicionário dos dados.


## Baixar o dicionário dos dados
url_2 = "ftp://ftp.ibge.gov.br/Trabalho_e_Rendimento/Pesquisa_Nacional_por_Amostra_de_Domicilios_PNAD_COVID19/Microdados/Documentacao/Dicionario_PNAD_COVID_112020.xls"
download.file(url_2, destfile='Dicionario_PNAD_COVID_112020.xls', mode='wb')

De posse desses dados, podemos agora explorá-los. Vamos supor que estamos interessados em saber quem recebeu o auxílio emergencial do governo por tipo de trabalho que a pessoa ocupa. Esse foi o questionamento do meu aluno Rodrigo Ashikawa, da nossa Formação Data Science para Economistas, que acabou me dando a ideia desse Dicas de R de hoje.

Com o código a seguir, nós criamos uma nova variável com o tipo de trabalho que a pessoa ocupa, de acordo com o dicionário dos microdados da pesquisa.


pnad_covid <- mutate(pnad_covid,
tipo_emprego = case_when(
C007 == 1 ~ "Trabalhador Doméstico",
C007 == 2 ~ "Militar",
C007 == 3 ~ "Policial ou Bombeiro",
C007 == 4 ~ "Setor Privado",
C007 == 5 ~ "Setor Público",
C007 == 6 ~ "Empregador",
C007 == 7 ~ "Conta Própria",
C007 == 8 ~ "Trabalhador Familiar",
C007 == 9 ~ "Fora do mercado",
is.na(C007) ~ 'Não informado'))

Uma vez feito isso, nós podemos agora selecionar as variáveis que queremos dos dados e também criar uma nova variável dummy que diz se a pessoa recebeu ou não o auxílio emergencial. O código a seguir implementa.


auxilio_emprego <- select(pnad_covid, D0051, tipo_emprego) %>%
mutate(auxilio_emergencial = ifelse(D0051 == 1, "Sim", "Não"))

Por fim, nós podemos agrupar os nossos dados, de modo a saber quantas pessoas da nossa base receberam o auxílio emergencial de acordo com o trabalho que ocupam.


auxilio_emprego <- auxilio_emprego %>%
group_by(tipo_emprego) %>%
summarise(
count_total = n(),
recebeu = sum(D0051 == 1),
n_recebeu = sum(D0051 == 2)) %>%
mutate("Auxilio Emergencial (%)" = (recebeu / count_total)*100)

O gráfico a seguir ilustra.

O gráfico resume a pesquisa que fizemos nos microdados da PNAD Covid. 58% dos que se identificaram como "Conta Própria" receberam o auxílio emergencial, enquanto 21,4% que se identificaram como "Militar" tiveram acesso ao benefício. Dos que colocaram "Não informado", o maior contingente, 52% tiveram acesso ao auxílio.

Um pdf e um script com todo o código desse exercício está disponível para os membros do Clube AM.

Caso você tenha interesse em microdados, conheça nosso Curso de Microeconometria usando o R.

____________

Cadastre-se em nossa Lista VIP para receber conteúdos exclusivos!

Fazer Inscrição
{"cart_token":"","hash":"","cart_data":""}