Skip to content

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.

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.