library(tidyverse)
library(lubridate)
library(patchwork)
library(stringr)
# Safe helper function to fetch FRED CSV data
fetch_fred <- function(series_id) {
# Keep ONLY alphanumeric letters and numbers in the series_id
clean_id <- gsub("[^A-Za-z0-9_]", "", series_id)
# Clean, plain URL string
raw_url <- paste0("https://fred.stlouisfed.org/graph/fredgraph.csv?id=", clean_id)
# Download directly to temp file
temp_file <- tempfile(fileext = ".csv")
download.file(raw_url, destfile = temp_file, mode = "wb", quiet = TRUE)
# Read CSV
df <- read_csv(temp_file, show_col_types = FALSE)
colnames(df) <- c("date", "price")
unlink(temp_file)
df %>%
mutate(
date = lubridate::as_date(date),
price = as.numeric(price)
) %>%
drop_na()
}
# Fetch all required macroeconomic series
cpi_df <- fetch_fred("CPIAUCSL") %>% rename(CPI = price)
fedfunds_df <- fetch_fred("FEDFUNDS") %>% rename(FedFunds = price)
unrate_df <- fetch_fred("UNRATE") %>% rename(Unemployment = price)
jolts_df <- fetch_fred("JTSJOL") %>% rename(JobOpenings = price)
unemp_level <- fetch_fred("UNEMPLOY") %>% rename(UnempLevel = price)
# Combine into master extended dataset (macro_ext)
macro_ext <- cpi_df %>%
inner_join(fedfunds_df, by = "date") %>%
inner_join(unrate_df, by = "date") %>%
left_join(jolts_df, by = "date") %>%
left_join(unemp_level, by = "date") %>%
filter(date >= as.Date("1995-01-01") & date <= as.Date("2025-12-31")) %>%
arrange(date) %>%
mutate(
CPI_YoY = (CPI / lag(CPI, 12) - 1) * 100,
RealFedFunds = FedFunds - CPI_YoY,
VU_Ratio = JobOpenings / UnempLevel
) %>%
drop_na(CPI_YoY)
# Alias for backward compatibility
macro_data <- macro_extNavigating the Dual Mandate: An Empirical Analysis of Federal Reserve Policy Regimes (1995–2025)
Evaluating Pre-FAIT, FAIT, and the Return to Flexible Inflation Targeting
Executive Summary
The Federal Reserve operates under a statutory Dual Mandate established by Congress: achieving price stability and maximum employment. Historically, these goals have existed in friction, often analyzed through the framework of the Phillips Curve, which posits an inverse relationship between inflation and unemployment.
This report examines thirty years of U.S. monetary policy (1995–2025), focusing on the shift from strict point-in-time inflation targeting to Flexible Average Inflation Targeting (FAIT) in August 2020, and the subsequent policy reset in August 2025. Through data pulled directly from the Federal Reserve Economic Data (FRED) system, we assess whether these regime changes successfully achieved macroeconomic stability.
Theoretical Framework & The Dual Mandate
The Statutory Mandate
The Federal Reserve targets:
Price Stability: Defined as a long-run annualized inflation rate of \(2\%\).
Maximum Employment: The highest level of employment that the economy can sustain without generating excessive inflationary pressure (often aligned with the Natural Rate of Unemployment or \(u^*\)).
(Note: While informal discussions sometimes conflate terms, Congress mandates maximum employment, not maximum unemployment.)
Mathematical Formulation of Policy Trade-Offs
The traditional Phillips Curve framework describes inflation (\(\pi_t\)) as a function of expected inflation (\(\pi_t^e\)), excess demand measured by unemployment relative to its natural rate (\(u_t - u_t^*\)), and exogenous supply shocks (\(\epsilon_t\)):
\[\pi_t = \pi_t^e - \gamma (u_t - u_t^*) + \epsilon_t\]
Where: * \(\pi_t = \frac{CPI_t - CPI_{t-12}}{CPI_{t-12}} \times 100\) represents the Year-over-Year (YoY) Consumer Price Index growth rate. * \(\gamma > 0\) measures the responsiveness of inflation to labor market tightness.
Under strict point-in-time targeting (Pre-2020), the Fed aimed to maintain:
\[\lim_{k \to \infty} \mathbb{E}_t [\pi_{t+k}] = 2\%\]
Under Flexible Average Inflation Targeting (FAIT) (2020–2025), the target was modified so that past deviations below target (\(\pi_\tau < 2\%\)) were offset by temporary future overshoots:
\[\frac{1}{T} \sum_{\tau=t-T}^{t} \pi_\tau = 2\%\]
Macroeconomic Data Analysis in R
We fetch thirty years of monthly economic indicators using the tidyquant package:
Consumer Price Index for All Urban Consumers (CPIAUCSL): Seasonally adjusted index level.
Effective Federal Funds Rate (FEDFUNDS): Primary monetary policy lever.
Civilian Unemployment Rate (UNRATE): Seasonally adjusted unemployment rate.
knitr::opts_chunk$set(echo = FALSE, message = FALSE, warning = FALSE)
library(tidyverse)
library(patchwork)Timeline of Federal Reserve Policy Regimes
Evaluation of Policy Regimes: The Chicago Fed “Bullseye”
To evaluate the success of Fed policy, we utilize a version of the Chicago Fed Bullseye framework. The center of the bullseye represents the policy target:
Target Inflation (pi*): 2.0%
Target Unemployment (u*): 4.1% (NAIRU estimate)
The red dashed circles (and inner asterisk) represent the Federal Reserve’s Dual Mandate “Bullseye” Target Zone.
Here is what each component indicates:
Red Asterisk (
*) Center: The exact ideal economic target set by the Federal Reserve—2.0% YoY CPI Inflation and 4.1% Unemployment Rate (the natural rate of unemployment/NAIRU).Inner Red Dashed Circle: The Optimal / Tight Target Zone. Data points inside this ring mean the economy was performing near the Fed’s dual mandate goals.
Outer Orange Dotted Circle: The Acceptable / Tolerance Band. Data points outside this boundary indicate a significant policy failure or macroeconomic shock (such as sub-target deflation risk in 2010 or the >9% inflation overshoot during 2021–2022).
The Non-Linear Beveridge/Phillips Curve (V/U Ratio)
During the post-COVID period, traditional unemployment (U) stayed low while inflation skyrocketed. Economists discovered that the Vacancy-to-Unemployed (V/U) ratio provided a far superior signal of labor market overheating than U alone. Demonstrate that traditional unemployment failed to predict post COVID inflation, while the Vacancy to unemployed ration accurately captured labor shortage shocks.
Policy Success Metric — Disinflation Trajectory Comparison
To evaluate whether pre-FAIT vs FAIT targeting regimes were “successful,” I plot the inflation reduction path against unemployment across major inflation shocks (2000 Dot-Com Peak, 2008 Great Financial Crisis, and 2021–2025 FAIT Disinflation). It directly evaluates policy effectiveness by tracing the trajectory of inflation reduction vs labor market cost across the 2008 GFC, 2015 Pre-FAIT tightening, and 2021-2025 FAIT cycles.
Synthesis & Policy Takeaways
The Breakdown of the 2010s Phillips Curve
During the 2010–2019 expansion, unemployment fell from 9.8% down to 3.5%. Traditional Phillips Curve models suggested that low unemployment would ignite wage-push inflation, prompting rate hikes in 2015–2018. However, inflation remained persistently below 2%. This dynamic demonstrated a flattened Phillips Curve (gamma to 0), motivating the switch to FAIT in August 2020.
The FAIT Policy Outcome (2020–2025)
FAIT was designed to prevent long-term inflation expectations from falling too low. However, when applied during post-pandemic supply disruptions and demand recovery (2021–2022), inflation surged to over 9.0%. Because FAIT anchored policy to prior years of low inflation, rate hikes were initially delayed. When the Fed acted, it engaged in one of the most aggressive rate-tightening cycles in modern policy history.
The August 2025 Strategy Shift
In August 2025, the Federal Reserve officially retired the explicit average targeting regime, returning to a forward-looking flexible targeting framework akin to pre-2020 policy. This shift highlights that backward-looking average inflation targets can create policy inertia during unexpected supply shocks.