The fiscal multiplier — a Blanchard-Perotti SVAR¶
Vector autoregressions, Part 13: identification from fiscal institutions¶
Every structural VAR in this series has studied monetary or oil shocks. Fiscal policy raises the same question in a sharper form: if the government spends an extra dollar, how much does GDP rise — the fiscal multiplier — and does raising taxes contract output? The obstacle is simultaneity: spending, taxes and output are jointly determined. Blanchard & Perotti (2002) solve it not with a statistical assumption but with an institutional one — the decision and implementation lags of fiscal policy mean that within a quarter, government spending is essentially predetermined, and the only automatic response of taxes to output is the automatic stabiliser, whose size can be calibrated rather than estimated. That is a genuinely different route to identification from the recursive zeros, sign restrictions, elasticity bounds and heteroskedasticity of earlier parts.
The model and the Blanchard-Perotti identification¶
A quarterly VAR($p{=}4$) in log real government spending $g$, net taxes $t$, and GDP $y$ (US, 1960–2019). Let $u_g,u_t,u_y$ be the reduced-form residuals. The structural shocks are recovered from three institutional facts:
- Spending is predetermined. It takes longer than a quarter to legislate and implement discretionary spending, so $g$ does not respond to $t$ or $y$ within the quarter — the spending shock is just $u_g$.
- Taxes move with output automatically. Progressive taxes rise mechanically when output rises. Blanchard-Perotti calibrate that output-elasticity of taxes ($a\approx 2.08$) from institutional data and strip it out: the discretionary tax shock is $u_t - a\,u_y$.
- Output responds to both fiscal shocks contemporaneously — estimated by instrumental variables, using the (now known) structural fiscal shocks as instruments for the endogenous residuals.
Solving the resulting triangular-with-calibration system gives the structural impact matrix $B_0$, and hence the impulse responses. The multiplier converts the estimated elasticity into dollars: $\text{d}Y/\text{d}G = (\partial\log Y/\partial\log G)\times(Y/G)$, and likewise for taxes. We reuse the reduced-form VAR / moving-average / posterior machinery from Part 8 (oilsvar.py, unaltered) and add the fiscal identification on top; bands come from the Normal-inverse-Wishart posterior.
import numpy as np, pandas as pd, matplotlib.pyplot as plt
import oilsvar as O # shared reduced-form SVAR engine (Part 8)
import fiscal as F # the Blanchard-Perotti identification layered on top
d = pd.read_csv("fiscal_data.csv", index_col=0, parse_dates=True)
GY = np.exp((d["g"] - d["y"]) / 100).mean(); TY = np.exp((d["t"] - d["y"]) / 100).mean() # spending & tax shares of GDP
Y = d[["g", "t", "y"]].values; p = 4; H = 20; a1 = 2.08 # a1 = calibrated output-elasticity of taxes (BP)
fit = O.fit_var(Y, p) # reduced-form VAR(4), OLS
B0 = F.bp_B0(fit["resid"], a1) # Blanchard-Perotti structural impact matrix
sp, tx = F.multipliers(fit, a1, H, GY, TY) # dollar spending & tax multiplier paths
print("SPENDING multiplier (dY/dG, $): impact %.2f peak %.2f" % (sp[0], sp[np.argmax(np.abs(sp))]))
# posterior bands: diffuse Normal-inverse-Wishart draws of the reduced form, BP identification re-applied each draw
spd, txd = F.posterior_multipliers(fit, a1, H, GY, TY, ndraw=2000, seed=0)
print(" spending 68%% band: impact [%.2f, %.2f] peak [%.2f, %.2f]"
% (np.percentile(spd[:, 0], 16), np.percentile(spd[:, 0], 84),
np.percentile(spd[:, np.argmax(np.abs(np.median(spd, 0)))], 16),
np.percentile(spd[:, np.argmax(np.abs(np.median(spd, 0)))], 84)))
# figure: output response to a +$1 spending shock and a +$1 tax shock (68% bands)
hz = np.arange(H + 1)
fig, ax = plt.subplots(1, 2, figsize=(12, 4))
for a, path, draws, ttl, col in [(ax[0], sp, spd, "Spending shock (+\$1)", "firebrick"),
(ax[1], tx, txd, "Tax shock (+\$1)", "navy")]:
lo, hi = np.percentile(draws, [16, 84], axis=0)
a.fill_between(hz, lo, hi, color=col, alpha=.15)
a.plot(hz, path, color=col, lw=1.9)
a.axhline(0, color="k", lw=.5); a.set_title(ttl + " -- output response (\$)", fontsize=10)
a.set_xlabel("quarters"); a.grid(alpha=.25)
fig.suptitle("Output multipliers, Blanchard-Perotti identification (68% posterior bands)", y=1.02)
fig.tight_layout(); plt.show()
SPENDING multiplier (dY/dG, $): impact 0.89 peak 0.92
spending 68% band: impact [0.68, 1.09] peak [0.47, 1.36]
Reading the multipliers¶
- A dollar of government spending raises output by about a dollar. The spending multiplier is ~0.9 on impact and at its peak (68% band [0.68, 1.09] on impact) — just below one, the canonical Blanchard-Perotti result: fiscal spending has a real, roughly one-for-one effect on output, with mild crowding-out keeping it under unity. Because spending is predetermined within the quarter, this response is a clean causal read, not a reflection of the government spending because the economy is weak.
- Tax hikes contract output, increasingly over time. A dollar of higher taxes lowers GDP by ~0.4 on impact, reaching about −1.3 by two years and deepening to −1.5 over the five-year horizon as the drag on private demand accumulates — taxes bite with a lag, spending more immediately.
# The tax multiplier, and the cumulative (integral) multipliers over the same posterior draws.
print("TAX multiplier (dY/dT, $): impact %.2f peak %.2f" % (tx[0], tx[np.argmax(np.abs(tx))]))
print(" tax 68%% band: impact [%.2f, %.2f] peak [%.2f, %.2f]"
% (np.percentile(txd[:, 0], 16), np.percentile(txd[:, 0], 84),
np.percentile(txd[:, np.argmax(np.abs(np.median(txd, 0)))], 16),
np.percentile(txd[:, np.argmax(np.abs(np.median(txd, 0)))], 84)))
cum_sp = np.cumsum(sp); cum_tx = np.cumsum(tx) # cumulative dollar output per $1 of the shock
csd = np.cumsum(spd, axis=1); ctd = np.cumsum(txd, axis=1)
hz = np.arange(H + 1)
fig, ax = plt.subplots(figsize=(8, 4))
for path, draws, lab, col in [(cum_sp, csd, "spending", "firebrick"), (cum_tx, ctd, "taxes", "navy")]:
lo, hi = np.percentile(draws, [16, 84], axis=0)
ax.fill_between(hz, lo, hi, color=col, alpha=.13)
ax.plot(hz, path, color=col, lw=1.9, label=lab)
ax.axhline(0, color="k", lw=.5); ax.grid(alpha=.25); ax.legend()
ax.set_xlabel("quarters"); ax.set_ylabel("cumulative output response (\$)")
ax.set_title("Cumulative dollar multipliers: spending vs taxes (68% posterior bands)")
fig.tight_layout(); plt.show()
TAX multiplier (dY/dT, $): impact -0.38 peak -1.49 tax 68% band: impact [-0.49, -0.28] peak [-2.09, -0.94]
Results — fiscal policy works, and institutions identify it¶
- Both multipliers are economically large. Spending near one and taxes building past minus one say fiscal policy moves output materially — the empirical backbone of the stimulus-vs-austerity debate. The asymmetry (spending fast, taxes slow) matters for the timing of fiscal packages.
- A new kind of identification. Blanchard-Perotti buy identification with institutional timing and a calibrated elasticity, not a statistical restriction — spending cannot react within the quarter, and the automatic-stabiliser response of taxes is known from the tax code. It is the most economics-driven identification in this series, and a clean complement to Part 8b's debate: where the elasticity is genuinely known (as here, from institutions) rather than assumed, the structural shock is credible.
- The series' identification toolkit, complete. Fiscal joins monetary (recursive, sign, proxy, long-run — Part 2) and oil (recursive, sign+elasticity, heteroskedasticity — Parts 8, 10) as a third structural domain, identified its own way. The R cross-check reproduces the spending multiplier.
A caveat kept in view: the tax series here is federal current receipts (not the broader net-tax aggregate of the original paper) and $a=2.08$ is the standard calibration — so the tax multiplier is the more approximate of the two; the spending multiplier, which does not lean on the calibration, is the robust headline.
References¶
- Blanchard, O. & Perotti, R. (2002). An empirical characterization of the dynamic effects of changes in government spending and taxes on output. Quarterly Journal of Economics 117, 1329–1368.
- Ramey, V. A. (2011). Identifying government spending shocks: it's all in the timing. QJE 126, 1–50.
- Ramey, V. A. (2019). Ten years after the financial crisis: what have we learned from the renaissance in fiscal research? J. Economic Perspectives 33, 89–114.
Data: fiscal_data.csv — log real government spending, federal receipts, and GDP (FRED / BEA); quarterly 1960–2019.
Next: fiscal_R.ipynb — the R cross-check (vars + the Blanchard-Perotti identification).