statsmodels.tsa.statespace.dynamic_factor_mq.DynamicFactorMQ.loading_constraints

DynamicFactorMQ.loading_constraints(i)[source]

Matrix formulation of quarterly variables’ factor loading constraints.

Parameters:
iint

Index of the endog variable to compute constraints for.

Returns:
Rarray (k_constraints, k_factors * 5)
qarray (k_constraints,)

Notes

If the factors were known, then the factor loadings for the ith quarterly variable would be computed by a linear regression of the form

y_i = A_i’ f + B_i’ L1.f + C_i’ L2.f + D_i’ L3.f + E_i’ L4.f

where:

  • f is (k_i x 1) and collects all of the factors that load on y_i

  • L{j}.f is (k_i x 1) and collects the jth lag of each factor

  • A_i, …, E_i are (k_i x 1) and collect factor loadings

As the observed variable is quarterly while the factors are monthly, we want to restrict the estimated regression coefficients to be:

y_i = A_i f + 2 A_i L1.f + 3 A_i L2.f + 2 A_i L3.f + A_i L4.f

Stack the unconstrained coefficients: Lambda_i = [A_i’ B_i’ … E_i’]’

Then the constraints can be written as follows, for l = 1, …, k_i

  • 2 A_{i,l} - B_{i,l} = 0

  • 3 A_{i,l} - C_{i,l} = 0

  • 2 A_{i,l} - D_{i,l} = 0

  • A_{i,l} - E_{i,l} = 0

So that k_constraints = 4 * k_i. In matrix form the constraints are:

\[R \Lambda_i = q\]

where \(\Lambda_i\) is shaped (k_i * 5,), \(R\) is shaped (k_constraints, k_i * 5), and \(q\) is shaped (k_constraints,).

For example, for the case that k_i = 2, we can write:

2 0 -1 0 0 0 0 0 0 0 | | A_{i,1} | | 0 |
0 2 0 -1 0 0 0 0 0 0 | | A_{i,2} | | 0 |
3 0 0 0 -1 0 0 0 0 0 | | B_{i,1} | | 0 |
0 3 0 0 0 -1 0 0 0 0 | | B_{i,2} | | 0 |
2 0 0 0 0 0 -1 0 0 0 | | C_{i,1} | = | 0 |
0 2 0 0 0 0 0 -1 0 0 | | C_{i,2} | | 0 |
1 0 0 0 0 0 0 0 -1 0 | | D_{i,1} | | 0 |
0 1 0 0 0 0 0 0 0 -1 | | D_{i,2} | | 0 | | E_{i,1} | | 0 | | E_{i,2} | | 0 |

Last update: Dec 14, 2023