The oil market SVAR — II. The identification debate¶
Vector autoregressions, Part 8b: how much does identification drive the answer?¶
Part 8a's recursive scheme rests on within-month timing zeros — in particular, that oil production does not respond to demand within the month. That single zero is an economic claim: the short-run price elasticity of oil supply is exactly zero. It is defensible (turning oil wells up and down is slow) but dogmatic, and the entire "demand, not supply" conclusion could hinge on it. This notebook relaxes it, set-identifying the same three shocks three less-dogmatic ways, and asks the honest question: how robust is Kilian's conclusion to the identifying assumptions? The answer — it depends, and knowing on what is the point — is the substance of the Baumeister-Hamilton critique.
Everything is built in the same self-contained oilsvar.py; no earlier module is touched.
Three ways to identify without the zeros¶
All three keep the reduced-form VAR of Part 8a and search over orthogonal rotations $A_0^{-1}=\operatorname{chol}(\Sigma)\,Q$, $Q$ Haar-uniform, differing only in which rotations they admit:
- Sign restrictions (Uhlig 2005; Rubio-Ramírez-Waggoner-Zha 2010). Impose only signs on the impact responses (each shock normalised to raise the real oil price): a supply disruption lowers production and activity; an aggregate-demand expansion raises both; an oil-specific (precautionary) demand shock raises production but lowers activity. Keep every rotation that satisfies them.
- Kilian-Murphy (2012) — sign restrictions plus a hard bound on the short-run price elasticity of oil supply ($\le 0.0258$). Sign restrictions alone let the data pick implausibly elastic supply; the bound imposes what a century of oil-market evidence says — supply is nearly inelastic month-to-month.
- Baumeister-Hamilton (2019) — replace the hard bound with an informative Bayesian prior on the elasticity (here a half-normal favouring inelastic supply). Their central point: because the Gaussian likelihood is flat over the rotations $Q$, a "flat" (uniform-Haar) sign-restriction analysis is not uninformative about the impulse responses — it embeds an implicit, and often economically implausible, prior. Making the elasticity prior explicit is the honest fix.
The identifying quantity is the short-run price elasticity of oil supply — the impact production response divided by the impact price response along a demand shift. The recursive scheme fixes it at 0; the schemes above let the data and the prior speak.
import numpy as np, pandas as pd, matplotlib.pyplot as plt
import oilsvar as O
d = pd.read_csv("oilsvar_data.csv", index_col=0, parse_dates=True)
Y = d[["prod_growth", "rea", "rpo"]].values; fit = O.fit_var(Y, p=24)
# flat sign restrictions: every sign-satisfying Haar rotation, with its implied supply elasticity
r = O.sign_rotations(fit, H=18, ntry=150000, seed=1)
es, irf = r["elast_supply"], r["irf"]
v = (irf[:, :19, 2, :] ** 2).sum(1); fev = v / v.sum(1, keepdims=True) # FEVD of the real oil price
km = es <= 0.0258 # Kilian-Murphy hard bound
bh_w = np.exp(-0.5 * (es / 0.15) ** 2) # Baumeister-Hamilton elasticity prior
def wq(x, w, q): # weighted quantile (for the BH posterior)
o = np.argsort(x); c = np.cumsum(w[o]) / w.sum(); return np.interp(np.array(q)/100, c, x[o])
print("accepted sign rotations: %d (%.1f%%)\n" % (len(es), 100*r["accept_frac"]))
print("Supply share of real-oil-price variance (median [16,84]):")
print(" recursive (dogmatic zeros): 0.02")
print(" flat sign restrictions : %.2f [%.2f, %.2f]" % (np.median(fev[:,0]), *np.percentile(fev[:,0],[16,84])))
print(" Kilian-Murphy (elast<=.026): %.2f [%.2f, %.2f]" % (np.median(fev[km,0]), *np.percentile(fev[km,0],[16,84])))
print(" Baumeister-Hamilton (prior): %.2f [%.2f, %.2f]" % (wq(fev[:,0],bh_w,[50])[0], *wq(fev[:,0],bh_w,[16,84])))
# figure: (left) supply-elasticity posterior by scheme; (right) supply vs demand share across schemes -> oil2_1.png
accepted sign rotations: 22031 (14.7%) Supply share of real-oil-price variance (median [16,84]): recursive (dogmatic zeros): 0.02 flat sign restrictions : 0.31 [0.10, 0.60] Kilian-Murphy (elast<=.026): 0.10 [0.03, 0.34] Baumeister-Hamilton (prior): 0.26 [0.08, 0.52] Implied short-run supply elasticity (median): flat 0.059 | KM 0.012 | BH 0.046
Results — the conclusion is only as strong as the elasticity belief¶
- Kilian's "demand not supply" is not automatic once the zeros go. With flat sign restrictions the supply share of the real-oil-price variance jumps from the recursive 2% to ~31% (68% band [10%, 60%]) — because unrestricted rotations happily entertain a very elastic oil supply (implied elasticity up to ~0.5), which lets supply shocks masquerade as big price movers. The recursive answer sat at one extreme of a very wide set.
- Economic discipline on the elasticity restores the demand story. Bounding the short-run supply elasticity to the near-inelastic range everyone agrees on — Kilian-Murphy — pulls the supply share back to ~10%; Baumeister-Hamilton's softer prior lands at ~26%, in between and honestly uncertain. The narrower and more credible the elasticity belief, the more the oil price becomes a demand story.
- The Baumeister-Hamilton lesson. The "agnostic" flat-prior sign-restriction bands are not agnostic: a uniform prior over rotations implies a specific, and here implausible, prior over the elasticity. The recursive scheme hides an even stronger belief (elasticity = 0) inside a timing zero. Neither is assumption-free — the honest approach is to put the economic belief (the elasticity prior) on the table where it can be argued about, which is exactly what the Bayesian treatment does.
- So what do we conclude about oil? Kilian's qualitative result survives conditional on supply being inelastic — which is well supported — but the data alone, without that belief, do not pin down the supply-vs-demand split. That conditional honesty, not a single point estimate, is the modern state of the oil-SVAR literature. The R cross-check reproduces the flat-sign supply-share distribution with an independent rotation search.
References¶
- Kilian, L. & Murphy, D. P. (2012). Why agnostic sign restrictions are not enough: understanding the dynamics of oil market VAR models. J. European Economic Association 10, 1166–1188.
- Baumeister, C. & Hamilton, J. D. (2019). Structural interpretation of vector autoregressions with incomplete identification: revisiting the role of oil supply and demand shocks. American Economic Review 109, 1873–1910.
- Rubio-Ramírez, J., Waggoner, D. & Zha, T. (2010). Structural vector autoregressions: theory of identification and algorithms for inference. Review of Economic Studies 77, 665–696.
- Uhlig, H. (2005). What are the effects of monetary policy on output? J. Monetary Economics 52, 381–419.
Next: oilsvar2_R.ipynb — the R cross-check (base-R sign-restriction rotation search).