FactorAugmentedSVARResult#

class cultivars.multivariate.structural.factor_augmented.FactorAugmentedSVARResult(*, favar, structural)[source]#

An identified factor system, answered at the scale of the panel.

The factor VAR on \((F_t, Y_t)\) is identified like any closed system, \(u_t = B \varepsilon_t\); the observation equation \(x_t = \Lambda^F F_t + \Lambda^Y Y_t + e_t\) then carries every identified factor-space response onto the panel,

\[\frac{\partial x_{t+h}}{\partial \varepsilon_t} = \operatorname{diag}(s)\, \Lambda\, \Psi_h B,\]

with \(\Lambda = (\Lambda^F, \Lambda^Y)\) the loadings on the standardized panel and \(s\) the standardization scales, so the responses come back in each series’ own units.

Composition on both sides: structural is the factor-space identification with its whole surface – impact matrix, factor impulse responses, variance shares, recovered shocks – and favar is the reduced form with its loadings and fit. This object owns the join: the observation-equation map from identified factor shocks to responses of every panel series.

Note

The map is rotation-invariant. Principal components recover the factor space only up to rotation, and the loadings rotate with the factors, so \(\Lambda \Psi_h B\) does not depend on the factor basis even though a factor-by-factor reading of factor_irf() does. The panel response to the observed block’s own shock is not zero on impact: the observed variables enter the observation equation directly through \(\Lambda^Y\), and the recursive default only keeps that shock out of the factors within the period.

Variables:
  • favar – The fitted factor-augmented reduced form.

  • structural – The identification of its factor VAR.

See also

  • FactorAugmentedSVAR – the model whose identify() returns this record.

  • FAVARResult – the reduced form, with the loadings and the standardization.

  • SVARResult – the factor-space result under the default scheme.

References

Bernanke, B. S., Boivin, J., & Eliasz, P. (2005). Measuring the effects of monetary policy: A factor-augmented vector autoregressive (FAVAR) approach. Quarterly Journal of Economics, 120(1), 387-422.

Example

Thirty series loading on one AR(1) factor and a policy rate that reacts to it. The panel impact of the factor shock is the loadings pattern in each series’ units, and the panel responses are the factor-space responses pushed through the observation equation:

>>> import numpy as np
>>> from cultivars.multivariate.large_dim.factor_augmented import FAVAR
>>> rng = np.random.default_rng(0)
>>> factor = np.zeros(300)
>>> for t in range(1, 300):
...     factor[t] = 0.7 * factor[t - 1] + rng.standard_normal()
>>> weights = rng.uniform(0.5, 1.5, 30)
>>> panel = np.outer(factor, weights) + 0.3 * rng.standard_normal((300, 30))
>>> policy = 0.4 * factor + rng.standard_normal(300)
>>> res = FAVAR(panel, policy[:, None], n_factors=1, order=1, observed_names=("ffr",)).fit()
>>> svar = FactorAugmentedSVAR(res).identify()
>>> svar.n_series, svar.shock_names, svar.impact.shape, svar.irf(8).shape
(30, ('f1', 'ffr'), (30, 2), (9, 30, 2))
>>> bool(abs(np.corrcoef(svar.impact[:, 0], weights)[0, 1]) > 0.99)
True
>>> through = (res.loadings @ svar.factor_irf(0)[0]) * res._scales[:, None]
>>> bool(np.allclose(svar.impact, through))
True

Attributes#

favar

The fitted factor-augmented reduced form, with loadings and scales.

structural

The factor-space identification of favar.factors.

impact

Impact responses of every panel series, (n_series, s).

n_series

Number of panel series.

panel_names

One label per panel series.

shock_names

Labels of the identified shocks, from the factor-space result.

Methods#

factor_irf([horizon, cumulative])

The factor-space structural impulse responses, undelegated.

irf([horizon, cumulative])

Responses of every panel series to the identified shocks.

summary()

The estimation summary, renderable as text, HTML, or a dataframe.