Learn R Programming

gmvarkit (version 1.2.0)

check_parameters: Check that the given parameter vector satisfies the model assumptions

Description

check_parameters checks whether the given parameter vector satisfies the model assumptions. Does NOT consider the identifiability condition!

Usage

check_parameters(p, M, d, params, constraints = NULL, structural_pars = NULL)

Arguments

p

a positive integer specifying the autoregressive order of the model.

M

a positive integer specifying the number of mixture components.

d

the number of time series in the system.

params

a real valued vector specifying the parameter values.

For unconstrained models:

Should be size \(((M(pd^2+d+d(d+1)/2+1)-1)x1)\) and have form \(\theta\)\( = \)(\(\upsilon\)\(_{1}\), ...,\(\upsilon\)\(_{M}\), \(\alpha_{1},...,\alpha_{M-1}\)), where

  • \(\upsilon\)\(_{m}\) \( = (\phi_{m,0},\)\(\phi\)\(_{m}\)\(,\sigma_{m})\)

  • \(\phi\)\(_{m}\)\( = (vec(A_{m,1}),...,vec(A_{m,p})\)

  • and \(\sigma_{m} = vech(\Omega_{m})\), m=1,...,M.

For constrained models:

Should be size \(((M(d+d(d+1)/2+1)+q-1)x1)\) and have form \(\theta\)\( = (\phi_{1,0},...,\phi_{M,0},\)\(\psi\) \(,\sigma_{1},...,\sigma_{M},\alpha_{1},...,\alpha_{M-1})\), where

  • \(\psi\) \((qx1)\) satisfies (\(\phi\)\(_{1}\)\(,...,\) \(\phi\)\(_{M}) =\) \(C \psi\) where \(C\) is \((Mpd^2xq)\) constraint matrix.

For structural GMVAR model:

Should have the form \(\theta\)\( = (\phi_{1,0},...,\phi_{M,0},\)\(\phi\)\(_{1},...,\)\(\phi\)\(_{M}, vec(W),\)\(\lambda\)\(_{2},...,\)\(\lambda\)\(_{M},\alpha_{1},...,\alpha_{M-1})\), where

  • \(\lambda\)\(_{m}=(\lambda_{m1},...,\lambda_{md})\) contains the eigenvalues of the \(m\)th mixture component.

If AR parameters are constrained:

Replace \(\phi\)\(_{1}\)\(,...,\) \(\phi\)\(_{M}\) with \(\psi\) \((qx1)\) that satisfies (\(\phi\)\(_{1}\)\(,...,\) \(\phi\)\(_{M}) =\) \(C \psi\), as above.

If \(W\) is constrained:

Remove the zeros from \(vec(W)\) and make sure the other entries satisfy the sign constraints.

If \(\lambda_{mi}\) are constrained:

Replace \(\lambda\)\(_{2},...,\)\(\lambda\)\(_{M}\) with \(\gamma\) \((rx1)\) that satisfies (\(\lambda\)\(_{2}\)\(,...,\) \(\lambda\)\(_{M}) =\) \(C_{\lambda} \gamma\) where \(C_{\lambda}\) is a \((d(M-1) x r)\) constraint matrix.

Above, \(\phi_{m,0}\) is the intercept parameter, \(A_{m,i}\) denotes the \(i\)th coefficient matrix of the \(m\)th mixture component, \(\Omega_{m}\) denotes the error term covariance matrix of the \(m\):th mixture component, and \(\alpha_{m}\) is the mixing weight parameter. The \(W\) and \(\lambda_{mi}\) are structural parameters replacing the error term covariance matrices (see Virolainen, 2020). If \(M=1\), \(\alpha_{m}\) and \(\lambda_{mi}\) are dropped. If parametrization=="mean", just replace each \(\phi_{m,0}\) with regimewise mean \(\mu_{m}\). \(vec()\) is vectorization operator that stacks columns of a given matrix into a vector. \(vech()\) stacks columns of a given matrix from the principal diagonal downwards (including elements on the diagonal) into a vector. The notation is in line with the cited article by Kalliovirta, Meitz and Saikkonen (2016) introducing the GMVAR model.

constraints

a size \((Mpd^2 x q)\) constraint matrix \(C\) specifying general linear constraints to the autoregressive parameters. We consider constraints of form (\(\phi\)\(_{1}\)\(,...,\)\(\phi\)\(_{M}) = \)\(C \psi\), where \(\phi\)\(_{m}\)\( = (vec(A_{m,1}),...,vec(A_{m,p}) (pd^2 x 1), m=1,...,M\), contains the coefficient matrices and \(\psi\) \((q x 1)\) contains the related parameters. For example, to restrict the AR-parameters to be the same for all regimes, set \(C\)= [I:...:I]' \((Mpd^2 x pd^2)\) where I = diag(p*d^2). Ignore (or set to NULL) if linear constraints should not be employed.

structural_pars

If NULL a reduced form model is considered. For structural model, should be a list containing the following elements:

  • W - a \((dxd)\) matrix with its entries imposing constraints on \(W\): NA indicating that the element is unconstrained, a positive value indicating strict positive sign constraint, a negative value indicating strict negative sign constraint, and zero indicating that the element is constrained to zero.

  • C_lambda - a \((d(M-1) x r)\) constraint matrix that satisfies (\(\lambda\)\(_{2}\)\(,...,\) \(\lambda\)\(_{M}) =\) \(C_{\lambda} \gamma\) where \(\gamma\) is the new \((r x 1)\) parameter subject to which the model is estimated (similarly to AR parameter constraints). The entries of C_lambda must be either positive or zero. Ignore (or set to NULL) if the eigenvalues \(\lambda_{mi}\) should not be constrained.

See Virolainen (2020) for the conditions required to identify the shocks and for the B-matrix as well (it is \(W\) times a time-varying diagonal matrix with positive diagonal entries).

Value

Throws an informative error if there is something wrong with the parameter vector.

References

  • Kalliovirta L., Meitz M. and Saikkonen P. 2016. Gaussian mixture vector autoregression. Journal of Econometrics, 192, 485-498.

  • Virolainen S. 2020. Structural Gaussian mixture vector autoregressive model. Unpublished working paper, available as arXiv:2007.04713.

Examples

Run this code
# NOT RUN {
# These examples will cause an informative error

# GMVAR(1, 1), d=2 model:
params112 <- c(1.07, 127.71, 0.99, 0.00, -0.01, 1.00, 4.05,
  2.22, 8.87)
check_parameters(p=1, M=1, d=2, params=params11)

# GMVAR(2, 2), d=2 model:
params222 <- c(1.39, -0.77, 1.31, 0.14, 0.09, 1.29, -0.39,
 -0.07, -0.11, -0.28, 0.92, -0.03, 4.84, 1.01, 5.93, 1.25,
  0.08, -0.04, 1.27, -0.27, -0.07, 0.03, -0.31, 5.85, 10.57,
  9.84, 0.74)
check_parameters(p=2, M=2, d=2, params=params222)

# GMVAR(2, 2), d=2 model with AR-parameters restricted to be
# the same for both regimes:
C_mat <- rbind(diag(2*2^2), diag(2*2^2))
params222c <- c(1.03, 2.36, 1.79, 3.00, 1.25, 0.06,0.04,
 1.34, -0.29, -0.08, -0.05, -0.36, 0.93, -0.15, 5.20,
 5.88, 3.56, 9.80, 1.37)
check_parameters(p=2, M=2, d=2, params=params222c, constraints=C_mat)

# Structural GMVAR(2, 2), d=2 model identified with sign-constraints:
params222s <- c(1.03, 2.36, 1.79, 3, 1.25, 0.06, 0.04, 1.34, -0.29,
 -0.08, -0.05, -0.36, 1.2, 0.05, 0.05, 1.3, -0.3, -0.1, -0.05, -0.4,
  0.89, 0.72, -0.37, 2.16, 7.16, 1.3, 0.37)
W_222 <- matrix(c(1, NA, -1, 1), nrow=2, byrow=FALSE)
check_parameters(p=2, M=2, d=2, params=params222s,
 structural_pars=list(W=W_222))
# }

Run the code above in your browser using DataLab