Para realizar a interpolação FlatForwardCOPOM utilizamos a função interp_flatforwardcopom onde defini-se as datas das reuniões futuros do COPOM e atribui-se a curva de juros utilizando o método interpolation. Um resultado dessa interpolação é um vetor com as mudanças de taxa implícitas na curva de juros considerando as reuniões do COPOM. Diferentemente, a função interp_copomscenarios constrói um interpolador que utiliza cenários de mudanças de taxa nas datas de reunião do COPOM e realiza a interpolação. Dessa maneira é possível observar a estrutra a termo interpolada e comparar com os pontos da curva. Isso é interessante por que as mudanças implicitas na curva, em geral, veem em números quebrados e as mudanças executadas pelo COPOM, em geral, são múltiplos de 25 bps. Assim é possível visualizar qual conjunto de mudanças múltiplas de 25 bps mais se aproxima da curva de juros.

library(tidyverse)
#> ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
#>  ggplot2 3.3.6      purrr   0.3.4
#>  tibble  3.1.8      dplyr   1.0.9
#>  tidyr   1.2.0      stringr 1.4.0
#>  readr   2.1.2      forcats 0.5.1
#> ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
#>  dplyr::filter() masks stats::filter()
#>  dplyr::lag()    masks stats::lag()
library(fixedincome)
#> 
#> Attaching package: 'fixedincome'
#> 
#> The following objects are masked from 'package:dplyr':
#> 
#>     first, last
library(copom)
#> Loading required package: bizdays
#> 
#> Attaching package: 'bizdays'
#> 
#> The following object is masked from 'package:stats':
#> 
#>     offset

refdate <- as.Date("2022-04-29")
terms <- c(1, 23, 44, 65, 88, 109, 129, 149, 171, 193, 211, 234, 252)
rates <- c(
  0.1165, 0.1247, 0.1265, 0.1281, 0.1294, 0.1298, 0.1301, 0.1304,
  0.1303, 0.1305, 0.1306, 0.1302, 0.1300
)
curve <- spotratecurve(
  rates, terms, "discrete", "business/252", "Brazil/ANBIMA",
  refdate = refdate
)
copom_dates <- get_copom_dates(refdate, 4)
moves <- c(100, 0, 0, 0) / 1e4
interpolation(curve) <- interp_copomscenarios(copom_dates, copom_moves = moves)
plot(curve, use_interpolation = TRUE)

moves <- c(100, 25, 0, 0) / 1e4
interpolation(curve) <- interp_copomscenarios(copom_dates, copom_moves = moves)
plot(curve, use_interpolation = TRUE)

moves <- c(100, 50, 0, 0) / 1e4
interpolation(curve) <- interp_copomscenarios(copom_dates, copom_moves = moves)
plot(curve, use_interpolation = TRUE)