Este trabalho busca replicar os principais resultados de Gertler e Karadi (2015) sobre o mecanismo de transmissão da política monetária em modelos VAR com variáveis econômicas e financeiras, com foco em como choques de política afetam custos de crédito e atividade real. O artigo combina a abordagem tradicional de VARs monetários com identificação por alta frequência (HFI) para construir instrumentos externos baseados em surpresas de mercado em datas de FOMC.
Há duas motivações centrais. A primeira é que os modelos tradicionais, com mercados financeiros friccionless, implicam que a resposta das taxas de empréstimo se dá via a trajetória esperada da taxa curta, sem variação relevante em prêmios a termo ou spreads (a crise de 2008 sugere rever esse pressuposto). Em segundo lugar, o Federal Reserve passou a utilizar mais a comunicação (forward guidance) para ancorar expectativas sobre a trajetória futura da taxa curta, algo que a identificação por HFI capta ao usar surpresas em contratos de Fed Funds/Eurodólar com diferentes vencimentos.
O artigo mostra que: (a) choques identificados por instrumentos externos (HFI) geram respostas de produto e inflação compatíveis com a literatura de VARs monetários; (b) movimentos “modestos” na taxa curta podem induzir movimentos “grandes” nos custos de crédito, em boa parte via prêmios a termo e spreads (ausentes no baseline friccionless); (c) forward guidance é quantitativamente relevante: choques com maior componente de “path” (horizonte mais longo) tendem a produzir efeitos maiores sobre atividade e custos de crédito.
Este exercício segue a estrutura solicitada pelo curso para a Entrega 2: comparação com identificação recursiva (Cholesky), replicação das Tabelas 1 e 2 do artigo, IRFs sob Cholesky e sob instrumentos externos, e ao menos uma extensão (por exemplo, hipotecas/mortgage ou corporate bonds). O objetivo é documentar a pergunta, a metodologia (incluindo a identificação), os dados e os resultados empíricos, discutindo intuições e implicações.
2 Metodologia
2.1 Problema de identificação em SVARs
Consideramos um VAR estrutural para um vetor de variáveis econômicas e financeiras, \(Y_t\), com matrizes de coeficientes \(A\) e \(C_j\) e choques estruturais \(\varepsilon_t\):
A matriz de variância-covariância da forma reduzida é \(\Sigma\):
\[
E[u_t u_t'] = S S' = \Sigma
\]
Seja \(Y_t^{p} \in Y_t\) o indicador de política monetária — aqui, uma taxa soberana de 1 ano — cujo comportamento contém a inovação estrutural de política \(\varepsilon_t^{p}\). Distinguimos “indicador” (taxa de 1 ano, que incorpora surpresa atual e revisões de trajetória) do “instrumento” (a taxa curta efetivamente controlada, como a fed funds corrente). Para fins de respostas a impulso a choques monetários, basta identificar a coluna \(s\) de \(S\) associada ao choque \(\varepsilon_t^{p}\), de modo que:
Restrições temporais recursivas (Cholesky) impõem zeros contemporâneos em \(s\), mas tornam-se pouco plausíveis quando o VAR inclui variáveis financeiras: é difícil supor que uma inovação no indicador de política não afete imediatamente spreads e prêmios, ou que a política não reaja à informação contida em mercados financeiros. Esse desalinhamento costuma gerar o “price puzzle”. Para contornar o problema, adotamos instrumentos externos de alta frequência.
2.2 Instrumentos externos (HFI)
Seja \(Z_t\) um vetor de instrumentos externos (no nosso caso, surpresas em futuros de juros em janelas de anúncio do FOMC). Para serem válidos para o choque de política, exigimos correlação com \(\varepsilon_t^{p}\) e ortogonalidade a demais choques \(\varepsilon_t^{q}\):
Procedimento: (i) estime a forma reduzida e recupere os resíduos \(u_t\); (ii) denote por \(u_t^{p}\) o resíduo da equação do indicador de política e por \(u_t^{q}\) o resíduo das demais variáveis; (iii) estime \(s^{q}/s^{p}\) por MQ2E, instrumentando \(u_t^{p}\) por \(Z_t\):
onde \(\widehat{u_t^{p}}\) é a projeção de \(u_t^{p}\) em \(Z_t\). A primeira etapa isola a variação de \(u_t^{p}\) devida exclusivamente ao choque de política; a segunda etapa fornece a razão \(s^{q}/s^{p}\). A escala \(s^{p}\) é então obtida a partir de \(\Sigma\) usando (10) em conjunto com (13), normalizando a variância do choque de política. Assim identificamos a coluna \(s\) necessária para construir as IRFs via (11).
Para construir \(Z_t\), usamos surpresas em futuros de Fed Funds e Eurodólar no dia do FOMC, medidas em janela de 30 minutos do anúncio. Seja \(f_{t+j}\) o preço de liquidação no dia do FOMC para o contrato com vencimento em \(t+j\) e \(f_{t+j,j-1}\) o preço na véspera. A surpresa na taxa esperada (choque HFI) é:
\[
(E_{i+t,j})^{u} = f_{t+j} - f_{t+j-1}
\]
com \(j=0\) medindo a surpresa na taxa corrente (Kuttner, 2001) e \(j\geq 1\) capturando forward guidance (Gürkaynak, Sack & Swanson, 2005). Contratos com prazos mais longos ajudam a instrumentar revisões na trajetória esperada da taxa curta.
2.3 Implementação em Gertler & Karadi (2015)
No baseline mensal, o indicador de política é a taxa soberana de 1 ano, que incorpora tanto a surpresa contemporânea quanto revisões na trajetória futura. Intuitivamente, pela aproximação de expectativas com prêmio a termo \(\phi_t^{12}\):
Assim, choques monetários no nosso arcabouço são combinações lineares de surpresas na taxa atual e de choques de forward guidance (revisões no caminho esperado), além de movimentos inesperados no prêmio a termo. Usando as surpresas de alta frequência em futuros (FF1, FF4 e ED2–ED4) como \(Z_t\), isolamos a componente exógena desse resíduo associada a \(\varepsilon_t^{p}\). Em prática, os autores mostram que, ao nível mensal, instrumentos ligados ao horizonte de alguns meses à frente (como FF4) exibem maior força (estatísticas F), razão pela qual adotamos o 1Y como indicador no baseline e reportamos robustez com o 2Y.
3 Dados
Utilizamos dados mensais para os EUA consistentes com Gertler & Karadi (2015), combinando variáveis macroeconômicas e financeiras com instrumentos de alta frequência. A base está no arquivo references/data_ea2_gk.xlsx com duas planilhas: VAR_data (variáveis do VAR) e Instruments (surpresas de FOMC). Construímos uma coluna de datas no primeiro dia de cada mês a partir de year e month, e unimos as planilhas por date para formar um único painel. A lista de variáveis inclui: produção industrial, inflação (CPI), taxa soberana de 1 ano (indicador de política), spreads de crédito (por exemplo, excess bond premium, mortgage, commercial paper), e várias taxas de juros (2y, 5y, 10y, 5x5 forward). Os instrumentos incluem surpresas em Fed Funds (FF1, FF4) e Eurodólar (ED2–ED4) medidas em janelas de anúncio do FOMC.
library(tidyverse)library(readxl)library(devtools)options(repos =c(CRAN ="https://cran.rstudio.com/"))# INstalando os pacotes de var com instrumentos externosdevtools::install_github("martinbaumgaertner/varexternal")devtools::install_github("angusmoore/varexternalinstrument")library(varexternal)library(varexternalinstrument)# Carregamento das planilhas e construção da data mensaldf1 <-read_xlsx("../references/data_ea2_gk.xlsx", sheet ="VAR_data") %>%mutate(date =paste0("01-", month, "-", year) %>%as.Date(format ="%d-%m-%Y")) %>% dplyr::select(-c(year, month))df2 <-read_xlsx("../references/data_ea2_gk.xlsx", sheet ="Instruments") %>%mutate(date =paste0("01-", month, "-", year) %>%as.Date(format ="%d-%m-%Y")) %>% dplyr::select(-c(year, month))# Merge por date e organização de colunasdf <- df1 %>%left_join(df2, by ="date") %>% dplyr::select(date, dplyr::everything()) %>%rename(FF1 = ff1_tc, FF4 = ff4_tc, ED2 = ed2_tc, ED3 = ed3_tc, ED4 = ed4_tc)# Visão rápidasummary(df)
date logcpi logip ff
Min. :1979-07-01 Min. :429.0 Min. :384.6 Min. : 0.070
1st Qu.:1987-09-23 1st Qu.:474.4 1st Qu.:408.5 1st Qu.: 2.987
Median :1995-12-16 Median :503.9 Median :428.6 Median : 5.310
Mean :1995-12-16 Mean :499.4 Mean :427.9 Mean : 5.670
3rd Qu.:2004-03-08 3rd Qu.:523.2 3rd Qu.:451.0 3rd Qu.: 8.020
Max. :2012-06-01 Max. :543.4 Max. :461.3 Max. :19.100
gs1 gs2 cm5yr cm10yr
Min. : 0.100 Min. : 0.210 Min. : 0.7114 Min. : 1.622
1st Qu.: 3.290 1st Qu.: 3.640 1st Qu.: 4.1856 1st Qu.: 4.557
Median : 5.435 Median : 5.715 Median : 6.0494 Median : 6.277
Mean : 5.675 Mean : 6.014 Mean : 6.5237 Mean : 6.940
3rd Qu.: 7.785 3rd Qu.: 8.143 3rd Qu.: 8.4402 3rd Qu.: 8.759
Max. :16.720 Max. :16.460 Max. :15.9300 Max. :15.324
cm5f5 ebp mortg_spread_m cp3m_spread_m
Min. : 2.533 Min. :-1.32735 Min. :0.530 Min. :0.0250
1st Qu.: 5.029 1st Qu.:-0.32088 1st Qu.:1.450 1st Qu.:0.1400
Median : 6.592 Median :-0.03875 Median :1.680 Median :0.3225
Mean : 7.357 Mean : 0.04718 Mean :1.792 Mean :0.4505
3rd Qu.: 9.040 3rd Qu.: 0.26890 3rd Qu.:2.000 3rd Qu.:0.5725
Max. :14.890 Max. : 2.97094 Max. :4.860 Max. :2.4650
ff_exp1yr FF1 FF4 ED2
Min. : 0.1203 Min. :-0.422587 Min. :-0.290322 Min. :-0.459355
1st Qu.: 2.5221 1st Qu.:-0.016257 1st Qu.:-0.010647 1st Qu.:-0.017398
Median : 5.1135 Median :-0.000002 Median :-0.000892 Median :-0.000960
Mean : 4.7815 Mean :-0.015549 Mean :-0.013449 Mean :-0.012025
3rd Qu.: 6.5327 3rd Qu.: 0.004433 3rd Qu.: 0.003637 3rd Qu.: 0.008952
Max. :11.7940 Max. : 0.145830 Max. : 0.092194 Max. : 0.159333
NA's :44 NA's :112 NA's :126 NA's :54
ED3 ED4
Min. :-0.420645 Min. :-0.381290
1st Qu.:-0.019476 1st Qu.:-0.024435
Median : 0.000000 Median :-0.001669
Mean :-0.010403 Mean :-0.010344
3rd Qu.: 0.009589 3rd Qu.: 0.010851
Max. : 0.178839 Max. : 0.213387
NA's :54 NA's :54
Para uma visão exploratória rápida, apresentamos um painel com todas as séries (cada uma em sua escala) ao longo do tempo.
Painel de séries: todas as variáveis (escalas livres)
4 Resultados da replicação
4.1 VAR simples
Avançamos para a estimação do VAR mensal com quatro variáveis: produção industrial (logip), nível de preços (logcpi), taxa soberana de 1 ano (gs1) e excess bond premium (ebp), com 12 defasagens e constante. Esse é o que o artigo chama de “VAR simples”. Extraímos o resíduo da equação de gs1, que contém a inovação monetária a ser instrumentada.
library(vars)library(tseries)library(dplyr)library(knitr)# Seleção, remoção de NAs e estimação do VAR(12) com constantevar_df <- df %>% dplyr::select(date, logip, logcpi, gs1, ebp) %>%drop_na()p <-12modelo_var <-VAR(var_df %>% dplyr::select(-date), p = p, type ="const")# Inovação monetária: resíduo da equação de gs1eps_gs1 <-as.numeric(modelo_var$varresult$gs1$residuals)
4.2 Força dos instrumentos
Agora, replicamos parte da seção 3.A, em que os autores avaliam a força dos instrumentos via o primeiro estágio da regressão do resíduo de gs1 sobre os instrumentos FF1, FF4, ED2, ED3 e ED4. Excluímos o período da crise financeira (jul/2008 a jun/2009) e reportamos coeficientes e estatísticas F (clássica, HC e HAC) para várias especificações.
library(stargazer)library(lmtest)library(sandwich)# Janela efetiva do VAR (descarta as p primeiras datas)datas_eff <- var_df$date[(p +1):nrow(var_df)]# Monta base do primeiro estágio: residual de gs1 + instrumentos alinhados por data# Removemos período da Crise Financeira de 2008 (assim como o artigo)first_stage <- tibble::tibble(date = datas_eff, eps_gs1 = eps_gs1) %>% dplyr::left_join(df %>% dplyr::select(date, FF1, FF4, ED2, ED3, ED4), by ="date") %>% tidyr::drop_na() %>%filter(date >=as.Date("1991-01-01") & date <=as.Date("2012-06-01")) %>%filter(!(date <=as.Date("2008-07-01") & date >=as.Date("2009-06-01")))# Regressões do primeiro estágio (sem intercepto), como no artigo/amigoreg_ff1 <-lm(eps_gs1 ~0+ FF1, data = first_stage)reg_ff4 <-lm(eps_gs1 ~0+ FF4, data = first_stage)reg_ed4 <-lm(eps_gs1 ~0+ ED4, data = first_stage)reg_ff4_ed4 <-lm(eps_gs1 ~0+ FF4 + ED4, data = first_stage)reg_all <-lm(eps_gs1 ~0+ FF1 + FF4 + ED2 + ED3 + ED4, data = first_stage)# Tabela principal (coeficientes) via stargazerstargazer(reg_ff1, reg_ff4, reg_ed4, reg_ff4_ed4, reg_all,type ="text", header =FALSE, single.row =TRUE,no.space =TRUE, column.sep.width ="0.5pt",title ="Primeiro estágio: choques de gs1 em instrumentos HFI (sem intercepto)")
# Estatísticas F: clássica, robusta HC e robusta HAC (Newey–West)extrai_F <-function(m, termos){ f_cls <-unname(summary(m)$fstatistic[1]) f_hc <- lmtest::waldtest(m, termos, vcov = sandwich::vcovHC)[2, "F"] f_hac <- lmtest::waldtest(m, termos, vcov = sandwich::vcovHAC)[2, "F"]c(F = f_cls, F_HC = f_hc, F_HAC = f_hac)}f_mat <-rbind(FF1 =extrai_F(reg_ff1, "FF1"),FF4 =extrai_F(reg_ff4, "FF4"),ED4 =extrai_F(reg_ed4, "ED4"),`FF4+ED4`=extrai_F(reg_ff4_ed4, c("FF4","ED4")),Todos =extrai_F(reg_all, c("FF1","FF4","ED2","ED3","ED4")))f_df <-as.data.frame(f_mat) |> dplyr::mutate(across(everything(), ~round(., 2)))knitr::kable( f_df,caption ="Estatísticas F (clássica, HC e HAC) para relevância dos instrumentos no primeiro estágio (resíduo gs1).",col.names =c("F","F (HC)","F (HAC)"))
Estatísticas F (clássica, HC e HAC) para relevância dos instrumentos no primeiro estágio (resíduo gs1).
F
F (HC)
F (HAC)
FF1
17.89
14.10
23.11
FF4
21.07
14.93
18.06
ED4
6.75
4.12
5.01
FF4+ED4
10.68
8.95
10.95
Todos
5.96
6.61
8.46
À semelhança do exercício em Gertler & Karadi (2015), o foco aqui é verificar se as surpresas de alta frequência explicam de forma substantiva a inovação mensal do indicador de política (resíduo da equação de gs1). Na Tabela 3 do artigo, os autores mostram que, no bloco com a taxa de 1 ano como indicador, a estatística F de primeiro estágio supera confortavelmente o limiar de 10 em várias especificações, com destaque para o instrumento FF4 — que também apresenta os maiores R². Já no bloco com a taxa de 2 anos, os F raramente atingem 10, sugerindo fragilidade instrumental nessa frequência. Na nossa replicação (para 1Y), o padrão é análogo: especificações com FF4, isolado ou combinado ao ED4, tendem a registrar F mais altos e R² maiores do que alternativas, enquanto conjuntos mais saturados podem diluir a potência por colinearidade entre instrumentos. Esse contraste sustenta a escolha de 1Y como indicador e FF4 como instrumento principal no baseline mensal, conforme a justificativa do paper.
Nota-se que os valores são ligeiramente diferentes dos reportados no artigo. Sendo absolutamente sincero, não sei o que pode estar causando essa diferença. O número de observações é o mesmo (258) e estamos usando as mesmas datas de início e fim, bem como o mesmo critério de exclusão do período da crise financeira. Pode ser alguma diferença na forma como os dados foram tratados (por exemplo, remoção de NAs), mas não consegui identificar a causa exata.
4.3 Estimando o VAR estrutural por Cholesky
Antes de avançar para a identificação por instrumentos, estimamos o VAR estrutural via Cholesky, que impõe uma ordem recursiva entre as variáveis. A ordem adotada é: produção industrial (logip), inflação (logcpi), taxa soberana de 1 ano (gs1) e excess bond premium (ebp). Essa ordem implica que choques em gs1 podem afetar contemporaneamente ebp, mas não o contrário, e que a política monetária não reage imediatamente a choques em ebp.
library(remotes)remotes::install_github("angusmoore/varexternalinstrument")library(varexternalinstrument)A0 <-matrix(NA, 4, 4) # Matriz de restrições contemporâneasA0[1, 2:4] <-0# Produção não responde contemporaneamente às demaisA0[2, 3:4] <-0# Preços não respondem a gs1 e ebp no mesmo períodoA0[3, 4] <-0# gs1 não responde a ebp no mesmo período# Estimação do SVAR recursivo (Cholesky)modelo1 <-SVAR(modelo_var, Amat = A0, Bmat =NULL)# IRFs do SVAR (choque em gs1) - forma mais simplesirf_resultado <-irf(modelo1, impulse ="gs1", n.ahead =50, ortho =TRUE, boot =TRUE, ci =0.85)# Plotar diretamente com o pacote varsplot(irf_resultado)
4.4 Identificação estrutural via instrumentos de alta frequência
Após validar a força dos instrumentos no primeiro estágio, procedemos à identificação estrutural utilizando as surpresas de FOMC como instrumentos externos. Empregamos principalmente FF4 como instrumento principal (dado seu melhor desempenho no primeiro estágio) e FF1 para comparação. Esta abordagem permite contornar as limitações da identificação recursiva, especialmente relevantes quando o VAR inclui variáveis financeiras que podem reagir simultaneamente aos choques de política.
# Precisamos usar as mesmas datas do primeiro estágio para consistência# Alinhamento dos instrumentos com os resíduos do VARdatas_var <- var_df$date[(p +1):nrow(var_df)]# Base para instrumentos alinhada temporalmente (mesma do primeiro estágio)instr_df <- tibble::tibble(date = datas_var) %>% dplyr::left_join(df %>% dplyr::select(date, FF1, FF4), by ="date") %>% tidyr::drop_na() %>%filter(date >=as.Date("1991-01-01") & date <=as.Date("2012-06-01")) %>%filter(!(date >=as.Date("2008-07-01") & date <=as.Date("2009-06-01")))# Dados do VAR para o mesmo período (alinhado com instrumentos)var_data_instr <- var_df %>%semi_join(instr_df, by ="date") %>%arrange(date) %>% dplyr::select(logip, logcpi, gs1, ebp)# Re-estimação do VAR apenas no período com instrumentos válidosmodelo_var_instr <-VAR(var_data_instr, p = p, type ="const")# Extrair resíduos do modelo re-estimadoresiduos_instr <-sapply(modelo_var_instr$varresult, function(x) x$residuals)# IMPORTANTE: Os resíduos do VAR são p observações a menos que os dados originais# Precisamos ajustar os instrumentos para o mesmo períodon_obs_residuos <-nrow(residuos_instr)n_obs_instr <-nrow(instr_df)# Pegar as últimas n_obs_residuos observações dos instrumentosif (n_obs_instr > n_obs_residuos) { ff4_ajustado <-tail(instr_df$FF4, n_obs_residuos)} else { ff4_ajustado <- instr_df$FF4}# Verificar comprimentoscat("Resíduos:", nrow(residuos_instr), "observações\n")
# Identificação via 2SLS: primeira etapastage1_ff4 <-lm(residuos_instr[, "gs1"] ~0+ ff4_ajustado)u_hat_ff4 <-fitted(stage1_ff4)# Segunda etapa: estimar razões s^q/s^ps_ratios_ff4 <-sapply(colnames(residuos_instr), function(var) {if (var =="gs1") return(1) # normalização reg <-lm(residuos_instr[, var] ~0+ u_hat_ff4)coef(reg)[1]})# Construir vetor s normalizado (choque estrutural)s_vector_ff4 <- s_ratios_ff4names(s_vector_ff4) <-colnames(residuos_instr)# IRFs via multiplicação de Phi(h) por slibrary(vars)phi_matrices <-Phi(modelo_var_instr, nstep =50)irf_hfi_ff4 <-array(NA, dim =c(4, 51)) # 4 variáveis, 51 horizontes (0-50)rownames(irf_hfi_ff4) <-names(s_vector_ff4)for (h in1:51) { irf_hfi_ff4[, h] <- phi_matrices[,, h] %*% s_vector_ff4}# Converter para data.frame para plottingirf_hfi_df <-data.frame(horizonte =0:50,gs1 = irf_hfi_ff4["gs1", ],logip = irf_hfi_ff4["logip", ],logcpi = irf_hfi_ff4["logcpi", ],ebp = irf_hfi_ff4["ebp", ])# Gráfico simples das IRFs via HFIlibrary(tidyr)irf_hfi_long <- irf_hfi_df %>%pivot_longer(cols =-horizonte, names_to ="variavel", values_to ="resposta")ggplot(irf_hfi_long, aes(x = horizonte, y = resposta)) +geom_hline(yintercept =0, color ="black", linewidth =0.5) +geom_line(color ="blue", linewidth =0.8) +facet_wrap(~ variavel, scales ="free_y") +labs(x ="Horizonte (meses)", y ="Resposta", title ="IRFs estruturais via HFI (instrumento: FF4)") +theme_bw()
5 Conclusão
Este trabalho replicou os principais resultados de Gertler e Karadi (2015) sobre transmissão da política monetária via custos de crédito. Implementamos um VAR mensal com quatro variáveis (produção industrial, inflação, taxa soberana de 1 ano e excess bond premium) para os EUA no período 1991-2012. Validamos a força dos instrumentos de alta frequência através de regressões de primeiro estágio, confirmando que FF4 apresenta as maiores estatísticas F e serve como instrumento principal para identificação de choques monetários.
Comparamos duas estratégias de identificação: decomposição recursiva de Cholesky versus instrumentos externos (HFI). As IRFs por instrumentos externos atenuam o price puzzle observado na identificação recursiva e fornecem respostas mais plausíveis economicamente. Os resultados confirmam que choques monetários contracionários levam a quedas na produção e aumentos nos custos de crédito, validando a importância de fricções financeiras na transmissão monetária e a necessidade de estratégias de identificação mais sofisticadas quando o VAR inclui variáveis financeiras.
6 Referências
Gertler, M., & Karadi, P. (2015). Monetary Policy Surprises, Credit Costs and Economic Activity. American Economic Journal: Macroeconomics, 7(1), 44-76.
Gürkaynak, R. S., Sack, B., & Swanson, E. (2005). Do Actions Speak Louder Than Words? The Response of Asset Prices to Monetary Policy Actions and Statements. Journal of Monetary Economics, 52(1), 93-124.
Kuttner, K. N. (2001). Monetary Policy Surprises and Interest Rates: Evidence from the Fed Funds Futures Market. Journal of Monetary Economics, 47(3), 523-544.
Stock, J. H., & Watson, M. W. (2012). Disentangling the Channels of the 2007-2009 Recession. Brookings Papers on Economic Activity, 2012(1), 81-135.