Econometria Aplicada - Exercício 2

Autor

Leonardo Zanetti

Data de Publicação

8 de setembro de 2025

1 Introdução

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\, Y_t = \sum_{j=1}^{p} C_j\, Y_{t-j} + \varepsilon_t \]

Multiplicando ambos os lados por \(A^{-1}\), obtemos a forma reduzida:

\[ Y_t = \sum_{j=1}^{p} B_j\, Y_{t-j} + u_t \]

onde os resíduos reduzidos são combinação linear dos choques estruturais:

\[ u_t = S\, \varepsilon_t, \quad \text{com } B_j = A^{-1} C_j,\; S = A^{-1} \]

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:

\[ Y_t = \sum_{j=1}^{p} B_j\, Y_{t-j} + s\, \varepsilon_t^{p} \]

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}\):

\[ E[Z_t\, \varepsilon_t^{p}] = \phi \neq 0, \qquad E[Z_t\, \varepsilon_t^{q}] = 0 \]

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\):

\[ u_t^{q} = \frac{s^{q}}{s^{p}}\, \widehat{u_t^{p}} + \xi_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}\):

\[ i_t^{12} = E_t\Bigg[\frac{1}{12} \sum_{j=0}^{11} i_{t+j}\Bigg] + \phi_t^{12} \]

Logo, o resíduo da forma reduzida para \(i_t^{12}\) equivale ao erro de previsão mensal adiante:

\[ i_t^{12} - E_{t-1} i_t^{12} = \frac{1}{12}\sum_{j=0}^{11} (E_t i_{t+j} - E_{t-1} i_{t+j}) + (\phi_t^{12} - E_{t-1}\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 externos
devtools::install_github("martinbaumgaertner/varexternal")
devtools::install_github("angusmoore/varexternalinstrument")

library(varexternal)
library(varexternalinstrument)

# Carregamento das planilhas e construção da data mensal
df1 <- 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 colunas
df <- 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ápida
summary(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.

df_long <- df %>%
  pivot_longer(cols = -date, names_to = "variavel", values_to = "valor") %>%
  mutate(valor = as.numeric(valor))

ggplot(df_long, aes(x = date, y = valor)) +
  geom_line(color = "black") +
  facet_wrap(~ variavel, scales = "free_y", ncol = 3) +
  theme_bw() +
  labs(x = "Tempo", y = "Valor")

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 constante
var_df <- df %>% dplyr::select(date, logip, logcpi, gs1, ebp) %>% drop_na()

p <- 12
modelo_var <- VAR(var_df %>% dplyr::select(-date), p = p, type = "const")

# Inovação monetária: resíduo da equação de gs1
eps_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/amigo
reg_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 stargazer
stargazer(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)")

Primeiro estágio: choques de gs1 em instrumentos HFI (sem intercepto)
=========================================================================================================================================
                                                                     Dependent variable:                                                 
                    ---------------------------------------------------------------------------------------------------------------------
                                                                           eps_gs1                                                       
                              (1)                     (2)                    (3)                     (4)                    (5)          
-----------------------------------------------------------------------------------------------------------------------------------------
FF1                    0.859*** (0.203)                                                                                0.372 (0.387)     
FF4                                            1.099*** (0.239)                               1.229*** (0.325)        1.192** (0.503)    
ED2                                                                                                                    1.355 (1.212)     
ED3                                                                                                                   -4.206** (1.694)   
ED4                                                                    0.613*** (0.236)        -0.184 (0.312)         2.501** (1.051)    
-----------------------------------------------------------------------------------------------------------------------------------------
Observations                  258                     258                    258                     258                    258          
R2                           0.065                   0.076                  0.026                   0.077                  0.105         
Adjusted R2                  0.061                   0.072                  0.022                   0.070                  0.088         
Residual Std. Error    0.196 (df = 257)        0.195 (df = 257)        0.200 (df = 257)       0.195 (df = 256)        0.194 (df = 253)   
F Statistic         17.892*** (df = 1; 257) 21.067*** (df = 1; 257) 6.749*** (df = 1; 257) 10.681*** (df = 2; 256) 5.964*** (df = 5; 253)
=========================================================================================================================================
Note:                                                                                                         *p<0.1; **p<0.05; ***p<0.01
# 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âneas
A0[1, 2:4] <- 0                          # Produção não responde contemporaneamente às demais
A0[2, 3:4] <- 0                          # Preços não respondem a gs1 e ebp no mesmo período
A0[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 simples
irf_resultado <- irf(modelo1, impulse = "gs1", n.ahead = 50, 
                     ortho = TRUE, boot = TRUE, ci = 0.85)

# Plotar diretamente com o pacote vars
plot(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 VAR
datas_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álidos
modelo_var_instr <- VAR(var_data_instr, p = p, type = "const")

# Extrair resíduos do modelo re-estimado
residuos_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íodo
n_obs_residuos <- nrow(residuos_instr)
n_obs_instr <- nrow(instr_df)

# Pegar as últimas n_obs_residuos observações dos instrumentos
if (n_obs_instr > n_obs_residuos) {
  ff4_ajustado <- tail(instr_df$FF4, n_obs_residuos)
} else {
  ff4_ajustado <- instr_df$FF4
}

# Verificar comprimentos
cat("Resíduos:", nrow(residuos_instr), "observações\n")
Resíduos: 234 observações
cat("FF4 ajustado:", length(ff4_ajustado), "observações\n")
FF4 ajustado: 234 observações
# Identificação via 2SLS: primeira etapa
stage1_ff4 <- lm(residuos_instr[, "gs1"] ~ 0 + ff4_ajustado)
u_hat_ff4 <- fitted(stage1_ff4)

# Segunda etapa: estimar razões s^q/s^p
s_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_ff4
names(s_vector_ff4) <- colnames(residuos_instr)

# IRFs via multiplicação de Phi(h) por s
library(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 in 1:51) {
  irf_hfi_ff4[, h] <- phi_matrices[,, h] %*% s_vector_ff4
}

# Converter para data.frame para plotting
irf_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 HFI
library(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.