All Posts By

Diogo Wolff

Relatório AM #14 - Política fiscal

By | Indicadores

No Relatório AM de hoje, vamos comentar a situação da política fiscal nos últimos meses. A análise é feita com os dados disponibilizados pelo STN, porém a última atualização ocorreu em maio desse ano, então há certa defasagem nos valores apresentados. Inicialmente, vamos apresentar os resultados acumulados em 12 meses para maio desse ano, e do ano passado:

Como podemos ver, as receitas do governo parecem ter um crescimento estável, porém as políticas necessárias para o combate da pandemia e manutenção do bem-estar da população aumentaram fortemente as despesas, abrindo o déficit nominal. É interessante notar que essa trajetória negativa vai na contramão da tendência pré-pandemia, que era de melhora do resultado nominal, em face da crise de 2016:

Ademais, podemos ver que a composição dos gastos foi diferente durante a pandemia, correspondendo ao caráter emergencial das medidas tomadas. Com isso, era esperado que o resultado fiscal fosse melhor após o aumento do estoque de pessoas vacinadas.

Há, porém, uma grande dúvida aberta em torno da agenda fiscal que tem sido tocada pelo Congresso. Em particular, temas antigos como o dos precatórios voltaram à pauta, bem como há diversos questionamentos em relação à reforma tributária.

Todos esses questionamentos se refletem no aumento do risco-país nas últimas semanas, como pode ser visto no gráfico abaixo.

Hackeando o R: introdução à estatística bayesiana

By | Hackeando o R

No Hackeando o R de hoje, vamos fazer uma introdução à estatística bayesiana, passando pelos seus conceitos básicos e realizando um exemplo no R. Esse post será o primeiro de uma série sobre o tema, abordando temas mais avançados a cada semana.

A ideia por trás da estatística bayesiana é de que, a partir de uma crença prévia sobre os parâmetros que queremos estimar, é possível melhorar nosso conhecimento sobre seus valores verdadeiros através de uma amostra. Para realizar essa melhora, utilizamos o famoso Teorema de Bayes:


Pense no caso de uma variável com distribuição binomial, como uma amostra de pessoas que responderam a uma pergunta de 'sim' ou 'não'. Tal distribuição pode ser descrita como:

Note que a distribuição da amostra é dependente do parâmetro da binomial, que é o que queremos encontrar. Para resolvermos isso, basta traduzir nosso problema para o Teorema de Bayes: a probabilidade do parâmetro ser de certo valor, a partir dos dados, é igual à probabilidade dos dados serem gerados por esse valor, multiplicada pela probabilidade do parâmetro, dividia pela probabilidade total da amostra.

A probabilidade do parâmetro é escolhida previamente, pois é a nossa crença a priori quanto ao parâmetro verdadeiro, sobrando apenas a integral para calcularmos. De modo geral, a estimação dessa integral é o grande problema para a solução analítica de aplicações desse tipo, porém no caso que estamos utilizando de exemplo, essa questão se simplifica ao utilizarmos uma crença a priori uniforme entre 0 e 1. Considerando nosso exemplo de amostras de 'sim' ou 'não', e, dado que não temos nenhum estudo prévio sobre a proporção das respostas, tal crença parece válida, pois dá peso igual a todos os valores válidos para a proporção, que é o parâmetro de uma binomial.

Utilizando o Teorema de Bayes (e alguns resultados fora do escopo do nosso post), podemos chegar em uma fórmula fechada para a probabilidade a posteriori - isto é, a nossa nova crença, após olharmos os dados - do parâmetro estimado:

Com isso, a partir de uma amostra, podemos encontrar uma distribuição estimada para o valor verdadeiro da proporção. A distribuição uniforme para a crença a priori é um tipo particular da distribuição Beta, que é a posteriori acima. Quando as crenças são da mesma família, dizemos que elas são conjugadas.

Digamos que possuímos duas amostras diferentes de tamanho 5 e 85, e ambas apresentam proporção de 'sim' de 20%. Utilizando a regra acima, podemos encontrar como fica a distribuição após computarmos a nova distribuição. Abaixo, temos um gráfico com a crença original (uniforme), e as outras duas. Como podemos ver, elas têm pico em torno da proporção da amostra, porém a distribuição com maior número de observações é muito mais estreita, indicando o maior nível de certeza que temos sobre o valor real do parâmetro.

library(ggplot2)

df = data.frame(x = seq(0.01, 1, by = 0.01), y = 1)
ggplot(df, aes(x=x, y = y)) + geom_line() +
stat_function(fun = function(x) dbeta(x, 2, 5), color = "red",
size = 1) +
stat_function(fun = function(x) dbeta(x, 20, 67), color = "darkred",
size = 1) +
xlab("Proporção") +
ylab('Densidade') +
theme_minimal(
)

Relatório AM #13 - Previsões

By | Indicadores

No Relatório AM dessa semana, vamos apresentar de modo conjunto o resultado de nossos modelos preditivos para as próximas observações de algumas variáveis macroeconômicas. Tais previsões são resultado de intensa modelagem estatística, e demonstram a utilidade do R como ferramenta para o dia-a-dia de um economista.

Abaixo, apresentamos as previsões para a PMC:

E também para a PMS:

Finalmente, apresentamos a expectativa para o IPCA. Ela está disponível online, em um de nossos dashboards.

Hackeando o R: diminuindo seu código com purrr

By | Hackeando o R

No Hackeando o R de hoje, vamos mostrar como podemos facilitar a repetição de funções em larga escala com o auxílio do pacote purrr. Além de possuir melhor performance do que loops básicos, as funções disponíveis nesse pacote permitem a geração de objetos em larga escala de modo conciso. Inicialmente, vamos calcular a média de cada coluna de um dataframe, comparando um loop com o purrr:

library(purrr)

dados = as.data.frame(matrix(rexp(200, rate=.1), ncol=20))

# for loop
media <- vector('double', ncol(dados))

for (i in 1:ncol(dados)) {
media[i] <- mean(dados[,i])
}

# purrr
media <- map_dbl(dados, mean)
<pre>
media
V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 
15.506445 9.066860 9.606222 7.875641 8.021313 14.424925 7.983791 8.276200 5.910139 8.545459 12.199477 9.404228 5.866048 
V14 V15 V16 V17 V18 V19 V20 
8.440641 10.624942 9.263813 5.243025 6.235834 14.552733 12.405802 

Os dois códigos geram o mesmo resultado, porém no primeiro precisamos gerar um objeto e assinalar manualmente onde deve ir cada resultado, enquanto a função map_dbl do purrr retorna diretamente o vetor de resultados. Sua interpretação é simples: para o objeto dados, calculamos a função mean() sobre cada coluna, e guardamos seu valor em um vetor do tipo double. Se quiséssemos aplicar sobre as linhas, basta transpor a matriz que gerou os dados, ou utilizar a função pmap.

Considere agora o caso de uma iteração múltipla. Digamos que você tem o dataset do Gapminder, que contém informações como o PIB per capita para diversos países separados por continente e ano, e quer gerar um gráfico para cada continente, em cada ano. No total, teríamos 60 gráficos distintos, que exigiriam a realização de um for para uma lista de continentes, e outro for dentro do primeiro com a lista de anos. Ao invés disso, podemos utilizar a map2, que itera uma função sobre as mesmas linhas de vetores distintos. O código abaixo mostra como isso fica:

library(tidyverse)
library(ggplot2)

gapminder <- read.csv("https://raw.githubusercontent.com/swcarpentry/r-novice-gapminder/gh-pages/_episodes_rmd/data/gapminder-FiveYearData.csv")

continent_year <- gapminder %>% distinct(continent, year)
continents <- continent_year %>% pull(continent) %>% as.character
years <- continent_year %>% pull(year)

plot_list <- map2(.x = continents,
.y = years,
.f = ~{
gapminder %>%
filter(continent == .x,
year == .y) %>%
ggplot() +
geom_point(aes(x = gdpPercap, y = lifeExp)) +
ggtitle(glue::glue(.x, " ", .y))
})

A partir daqui, podemos acessar um gráfico qualquer verificando sua numeração no objeto continent_year.

plot_list[15]

 

Relatório AM #12 - PIM-PF

By | Indicadores

No Relatório AM dessa semana, vamos visualizar os movimentos recentes da PIM-PF e apresentar os resultados de nossas previsões para as próximas duas observações desse índice, baseados em modelos estatísticos de ponta. Abaixo, reportamos a pesquisa em suas três principais divisões, e também o índice da indústria automotiva, que possui grande influência sobre o total. Como podemos ver, tal setor ainda não se recuperou, especialmente em comparação com o geral da indústria de transformação, como resultado de choques de oferta na cadeia de produção de veículos.

Também podemos observar as diferenças nos comportamentos de cada índice em sua variação interanual. É interessante notar a natureza mais volátil da indústria extrativa, enquanto que a de automóveis, que era particularmente estável até a pandemia, teve um congelamento quase total, o que causa números tão grandes em seu gráfico.

Para finalizar, apresentamos abaixo os resultados de nosso modelo de previsão para a variação interanual da indústria geral.

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais
e conteúdos exclusivos sobre Análise de Dados!

Assinar Gratuitamente
{"cart_token":"","hash":"","cart_data":""}