model 04 — Federal Reserve macroeconomic model · frb-us · US · hosted
Test US monetary and fiscal shocks.
Trace how a funds-rate or fiscal shock affects US output, inflation, and unemployment quarter by quarter using the April 2026 baseline.
Ask the server, or install it.
Five steps from a hosted one-liner to the full 284-variable model in Python; each step's code sits alongside its narrative.
Ask the hosted server
Three MCP tools
The quickest route is the hosted MCP server, with three tools: frbus_list_variables (the shockable levers, with units), frbus_shock (solve and return impulse responses), and frbus_summary (vintage and validation provenance).
Speed
A solve takes about 3 seconds cold and well under a second warm — the fastest member of the suite.
CLI mirrors
The same three tools are on the CLI, no server round-trip required.
pe-macro frbus-variables
pe-macro frbus-shock --var rffintay_aerr --shock 1.0
pe-macro frbus-summaryTwo traps
Units are per-lever
rffintay_aerr is in percentage points (1.0 = a 100bp tightening), but spending levers such as egfe_aerr are in log points of quarterly growth, not billions of dollars — a dollar-sized number there diverges the solver.
Each rule reads its own add-error
rffintay_aerr works only under inertial_taylor; under taylor it is rejected with a pointer to rfftay_aerr rather than silently returning all-zero responses.
Choose the policy rule
Usually the point of the exercise
frbus_shock takes a policy_rule: inertial_taylor (the default, the LONGBASE rule and the one the validation numbers use), taylor (the non-inertial variant), or fixed_funds_rate, which holds the funds rate on its baseline path so there is no endogenous monetary offset.
Why it matters
A four-quarter federal-purchases shock of 0.01 log points peaks higher on real GDP with the funds rate fixed — and the price-level response is larger still.
Install the package
When to install
For the full 284-variable model, the Board's own demo scripts, or anything the three tools do not expose — separate from the rest of the suite, with its own Python API.
No data step
The Board's raw materials are vendored unmodified, so there is no data-download step, but you clone rather than pip-install from an index.
git clone https://github.com/PolicyEngine/us-frb-model
cd us-frb-model
uv venv && uv pip install -e ".[dev]"Run a 100bp shock in Python
The workflow
Load LONGBASE, set the Board's demo fiscal configuration, add-factor with init_trac so the baseline reproduces LONGBASE exactly, add the shock, solve.
a runnable copy of exactly this is
examples/monetary_policy_shock.py. The API mirrors the
essentials of pyfrbus's Frbus class —
Frbus(path), .init_trac(),
.solve(), .exogenize() — so the Board's
demo scripts port across with minimal change.
Series you will reach for
| code | variable | role |
|---|---|---|
rffintay_aerr | Taylor-rule policy-rate error term | shock instrument — +1 for a 100bp tightening |
dfpdbt / dfpsrp | Fiscal policy switches | exogenous — set the debt / surplus closure |
xgdp | Real GDP | endogenous — headline output |
lur | Unemployment rate | endogenous — rate, pp |
picxfe | Core PCE inflation | endogenous — rate, pp |
rff | Federal funds rate | endogenous under the rule, pp |
import pandas as pd
from frbus import Frbus, load_data
data = load_data("vendor/data_only_package/LONGBASE.TXT")
model = Frbus("vendor/pyfrbus_package/models/model.xml")
start, end = pd.Period("2026Q1"), pd.Period("2030Q4")
# the fiscal-policy configuration the Board's own demos use
data.loc[start:end, "dfpdbt"] = 0
data.loc[start:end, "dfpsrp"] = 1
# add-factor the model so the baseline reproduces LONGBASE exactly
with_adds = model.init_trac(start, end, data)
# 100bp monetary policy shock in the first quarter
with_adds.loc[start, "rffintay_aerr"] += 1
sim = model.solve(start, end, with_adds)
print((sim.loc[start:end, "xgdp"] / with_adds.loc[start:end, "xgdp"] - 1) * 100)