cultivars.multivariate.structural.external_instruments#
External-instrument identification: one shock, named from outside the system.
A reduced-form VAR pins down the innovation covariance \(\Sigma_u\) and nothing about the matrix \(B\) in \(u_t = B \varepsilon_t\). An instrument \(z_t\) with
gives \(\mathbb{E}[z_t u_t] \propto b_1\): the column of \(B\) belonging to the shock the instrument speaks for, up to a scale that the unit-variance normalization \(b_1' \Sigma_u^{-1} b_1 = 1\) fixes. Narrative tax changes, high-frequency monetary surprises, oil supply disruptions: the instrument brings information the reduced form never had, and in exchange identifies only that one column. The partial result is the honest one.
Two commitments shape the surface. First, what is not identified is not
fabricated. The result carries one column, and the shared
SVARResult
surface is built so a single column supports impulse responses, variance
shares, shock recovery and historical contributions without inventing the
columns it does not have; the variance shares therefore need not sum to one,
and the summary says which shocks remain unidentified. Second, the two
instrument conditions are kept apart. Relevance is a testable implication
and the first-stage F statistic reports it; exogeneity is an assumption that
no statistic in the system can check, and the result’s restriction note
says so on every summary rather than letting a large F stand in for both.
Layout. ProxySVAR is an _IdentificationModel from
_internals, which validates the closed-system contract of the source
result and exposes its names; the instrument panel is validated and
demeaned here, identify() runs the two-stage least squares on the
source’s residuals, and the column is packaged into SVARResult from
zero_restrictions with
scheme="proxy" and the first-stage diagnostics. Full identification from
an ordering is zero_restrictions;
set identification without an instrument is
sign_restrictions.
References
Mertens, K., & Ravn, M. O. (2013). The dynamic effects of personal and corporate income tax changes in the United States. American Economic Review, 103(4), 1212-1247.
Stock, J. H., & Watson, M. W. (2018). Identification and estimation of dynamic causal effects in macroeconomics using external instruments. Economic Journal, 128(610), 917-948.
Montiel Olea, J. L., Stock, J. H., & Watson, M. W. (2021). Inference in structural vector autoregressions identified with an external instrument. Journal of Econometrics, 225(1), 74-87.
Example
A bivariate system whose first shock moves both variables on impact and a noisy proxy for it. The column is recovered, the variance shares of the one identified shock stay below one for the variable it only partly drives, and the historical decomposition carries one column:
>>> import numpy as np
>>> from cultivars.multivariate.reduced_form.vector_autoregression import VAR
>>> rng = np.random.default_rng(0)
>>> B = np.array([[1.0, 0.0], [0.5, 1.0]])
>>> A = np.array([[0.5, 0.1], [0.0, 0.4]])
>>> eps = rng.standard_normal((402, 2))
>>> y = np.zeros((402, 2))
>>> for t in range(1, 402):
... y[t] = A @ y[t - 1] + B @ eps[t]
>>> proxy = eps[:, 0] + 0.5 * rng.standard_normal(402)
>>> res = VAR(y, order=1, names=("r", "x")).fit()
>>> svar = ProxySVAR(res, proxy[1:], shock="policy").identify()
>>> svar.impact.round(2).ravel(), svar.is_complete
(array([1. , 0.5]), False)
>>> shares = svar.fevd(10)[-1, :, 0]
>>> bool(shares[0] > 0.95), bool(0.1 < shares[1] < 0.4)
(True, True)
>>> svar.historical_decomposition().shape
(401, 2, 1)
Classes#
External-instrument identification, Mertens-Ravn (2013). |