library(tidyverse)
library(lubridate)
library(scales)
library(ggrepel)
library(tidyquant)
library(jsonlite)
theme_set(theme_minimal())
invisible(Sys.setlocale("LC_TIME", "en_US.UTF-8"))
fred_series <- "Country Series ID Series Name
United States IR3TIB01USM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for United States
Euro Area IR3TIB01EZM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Euro Area
United Kingdom IR3TIB01GBM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for United Kingdom
Japan IR3TIB01JPM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Japan
Germany IR3TIB01DEM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Germany
Canada IR3TIB01CAM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Canada
Norway IR3TIB01NOM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Norway
Australia IR3TIB01AUM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Australia
Sweden IR3TIB01SEM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Sweden
Switzerland IR3TIB01CHM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Switzerland
Denmark IR3TIB01DKM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Denmark
New Zealand IR3TIB01NZM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for New Zealand
South Africa IR3TIB01ZAM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for South Africa
China IR3TIB01CNM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for China
Mexico IR3TIB01MXM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Mexico
South Korea IR3TIB01KRM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for South Korea
India IR3TIB01INM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for India
Indonesia IR3TIB01IDM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Indonesia
Italy IR3TIB01ITM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Italy
France IR3TIB01FRM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for France
Spain IR3TIB01ESM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Spain
Netherlands IR3TIB01NLM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Netherlands
Belgium IR3TIB01BEM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Belgium
Austria IR3TIB01ATM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Austria
Portugal IR3TIB01PTM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Portugal
Greece IR3TIB01GRM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Greece
Ireland IR3TIB01IEM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Ireland
Finland IR3TIB01FIM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Finland
Poland IR3TIB01PLM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Poland
Czech Republic IR3TIB01CZM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Czech Republic
Hungary IR3TIB01HUM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Hungary
Russia IR3TIB01RUM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Russia
Turkey IR3TIB01TRM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Turkey
Chile IR3TIB01CLM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Chile
Colombia IR3TIB01COM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Colombia
Costa Rica CRIIR3TIB01STM Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Costa Rica
Slovak Republic IR3TIB01SKM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Slovak Republic
Estonia IR3TIB01EEM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Estonia
Slovenia IR3TIB01SIM156N Interest Rates: 3-Month or 90-Day Rates and Yields: Interbank Rates: Total for Slovenia"
fred_series <- read_tsv(fred_series)
fred_data <- fred_series |>
mutate(data = map(`Series ID`, ~tq_get(.x, get = "economic.data", from = "2000-01-01")))
fred_data |>
saveRDS("data/rates/fred_data.RDS")
fred_data <- readRDS("data/rates/fred_data.RDS")
df <- fred_data |>
unnest(data) |>
mutate(rate = price/100)
p <- df |>
ggplot(aes(date, rate, color = Country)) +
geom_line() +
scale_y_continuous(labels = scales::percent) +
scale_x_date(date_breaks = "2 year", date_labels = "%Y", limits = c(as.Date("2000-01-01"), as.Date("2026-07-01"))) +
ggplot2::coord_cartesian(ylim = c(0, 0.2)) +
labs(title = "Interest Rates",
subtitle = "3-Month or 90-Day Rates and Yields: Interbank Rates",
x = NULL,
y = NULL,
caption = "Source: Federal Reserve Economic Data (FRED)") +
theme(legend.position = "none")
p +
geom_text_repel(data = df |> group_by(Country) |> slice_max(date), aes(label = Country),
nudge_x = 10, direction = "y", size = 3, hjust = 0, max.overlaps = Inf)

library(plotly)
ply <- p +
scale_x_date(date_breaks = "2 year", date_labels = "%Y")
ply |> ggplotly()