Structural Identification#

A reduced-form VAR estimates the joint dynamics of a set of variables, but its residuals are correlated. Structural identification decomposes these correlated residuals into uncorrelated structural shocks with economic interpretations.

Why identification matters#

Without identification, you can describe correlations but not causation. Identification lets you answer:

  • “What happens to inflation when there is a monetary policy shock?” (impulse responses)

  • “How much of GDP variation is due to supply vs demand shocks?” (variance decomposition)

Cholesky identification#

The simplest approach. Uses the lower-triangular Cholesky factor of the residual covariance matrix. This implies a recursive causal ordering: the first variable is not contemporaneously affected by any other, the second is affected only by the first, and so on.

from impulso.identification import Cholesky

scheme = Cholesky(ordering=["gdp", "inflation", "rate"])

The ordering encodes your assumptions. Changing it changes the results.

Ordering sensitivity

The ordering encodes your causal assumptions. Changing the ordering changes the results — not because the data changed, but because the identifying restrictions changed. Always justify your ordering with domain knowledge.

Sign restrictions#

A more agnostic approach. Instead of imposing a full recursive structure, you specify qualitative constraints: “a supply shock raises GDP and lowers inflation.” The algorithm searches over random rotation matrices to find decompositions consistent with your restrictions.

from impulso.identification import SignRestriction

scheme = SignRestriction(
    restrictions={
        "gdp":       {"supply": "+", "demand": "+"},
        "inflation": {"supply": "-", "demand": "+"},
    },
)

Sign restrictions are weaker than Cholesky (they don’t uniquely identify the model), but they require fewer assumptions.