Learn R Programming

⚠️There's a newer version (2.2.0) of this package.Take me there.

gmvarkit

The goal of gmvarkit is to provide tools to analyse structural and reduced form Gaussian mixture vector autoregressive (GMVAR) model. gmvarkit provides functions for unconstrained and constrained maximum likelihood estimation of the model parameters, quantile residual based model diagnostics, simulation from the processes, forecasting, estimation of generalized impulse response function, and more.

Installation

You can install the released version of gmvarkit from CRAN with:

install.packages("gmvarkit")

And the development version from GitHub with:

# install.packages("devtools")
devtools::install_github("saviviro/gmvarkit")

Example

Simple example

This is a basic example on how to use gmvarkit in time series analysis. The example data is the same that is used by Kalliovirta et al. (2016) in their paper introducing the GMVAR model. The estimation process is computationally demanding and takes advantage of parallel computing. After estimating the model, it is shown by simple examples how to conduct some further analysis.

# These examples use the data 'eurusd' which comes with the package, but in a scaled form.
data(eurusd, package="gmvarkit")
data <- cbind(10*eurusd[,1], 100*eurusd[,2])
colnames(data) <- colnames(eurusd)

## Reduced form GMVAR model ##

# Estimate a GMVAR(2,2) model: 16 estimation rounds and seeds for reproducible results
fit <- fitGMVAR(data, p=2, M=2, ncalls=16, seeds=1:16, ncores=4)
fit

# Estimate a GMVAR(2,2) model with the unconditional means of the two regimes 
# restricted to be the same:
fitm <- fitGMVAR(data, p=2, M=2, parametrization="mean", same_means=list(1:2),
                 ncalls=16, seeds=1:16, ncores=4)
fitm

# Estimate a GMVAR(2,2) model with autoregressive parameters restricted to be the same for all regimes
C_mat <- rbind(diag(2*2^2), diag(2*2^2))
fitc <- fitGMVAR(data, p=2, M=2, constraints=C_mat, ncalls=16, seeds=1:16, ncores=4)
fitc

# Test the above constraints on the AR parameters with likelihood ratio test:
LR_test(fit, fitc)

# Further information on the estimated model:
plot(fitc)
summary(fitc)
print_std_errors(fitc)
get_foc(fitc) # The first order condition
get_soc(fitc) # The second order condition (eigenvalues of approximated Hessian)
profile_logliks(fitc) # Profile log-likelihood functions

# Quantile residual diagnostics
diagnostic_plot(fitc) # type=c("all", "series", "ac", "ch", "norm")
qrt <- quantile_residual_tests(fitc, nsimu=10000)

# Simulate a sample path from the estimated process
sim <- simulateGMVAR(fitc, nsimu=100)
plot.ts(sim$sample)

# Forecast future values of the process
predict(fitc, n_ahead=10)


## Structural GMVAR model ##

# Estimate structural GMVAR(2,2) model identified with sign constraints:
W_22 <- matrix(c(1, 1, -1, 1), nrow=2, byrow=FALSE)
fit22s <- fitGMVAR(data, p=2, M=2, structural_pars=list(W=W_22),
                   ncalls=20, seeds=1:20, ncores=4)
fit22s

# Alternatively, if there are two regimes (M=2), a stuctural model can 
# be build based on the reduced form model:
fit22s_2 <- gmvar_to_sgmvar(fit)
fit22s_2

# Columns of the matrix W can be permutated and all signs in any column
# can be swapped without affecting the implied reduced form model, as 
# long as the lambda parameters are also rearranged accordingly: 
fit22s_3 <- reorder_W_columns(fit22s_2, perm=c(2, 1))
fit22s_3

fit22s_4 <- swap_W_signs(fit22s_3, which_to_swap=1)
fit22s_4

# Estimate generalized impulse response function (GIRF) with starting values
# generated from the stationary distribution of the process:
girf1 <- GIRF(fit22s, N=60, ci=c(0.95, 0.8), R1=200, R2=200)

# Estimate GIRF with starting values generated from the stationary distribution
# of the first regime:
girf2 <- GIRF(fit22s, N=60, ci=c(0.95, 0.8), init_regimes=1, R1=200, R2=200)

# Estimate GIRF with starting values given by the last p observations of the
# data:
girf3 <- GIRF(fit22s, N=60, init_values=fit22s$data, R1=1000)

# Test with Wald test whether the diagonal elements of the first AR coefficient
# matrix of the second regime are identical:
# fit22s has parameter vector of length 27 with the diagonal elements  of the
# first A-matrix of the second regime are in elements 13 and 16.
A <- matrix(c(rep(0, times=12), 1, 0, 0, -1, rep(0, times=27-16)), nrow=1, ncol=27)
c <- 0
Wald_test(fit22s, A, c)

# The same functions used in the demonstration of the reduced form model also
# work with structural models.

References

  • Kalliovirta L., Meitz M. and Saikkonen P. (2016) Gaussian mixture vector autoregression. Journal of Econometrics, 192, 485-498.
  • Kalliovirta L. and Saikkonen P. (2010) Reliable Residuals for Multivariate Nonlinear Time Series Models. Unpublished Revision of HECER Discussion Paper No. 247.
  • Virolainen S. 2020. Structural Gaussian mixture vector autoregressive model. Unpublished working paper, available as arXiv:2007.04713.

Copy Link

Version

Install

install.packages('gmvarkit')

Monthly Downloads

675

Version

1.4.0

License

GPL-3

Maintainer

Savi Virolainen

Last Published

January 11th, 2021

Functions in gmvarkit (1.4.0)

Wvec

Vectorization operator that removes zeros
LR_test

Perform likelihood ratio test for a GMVAR or SGMVAR model
GAfit

Genetic algorithm for preliminary estimation of a GMVAR model
VAR_pcovmat

Calculate the dp-dimensional covariance matrix of p consecutive observations of a VAR process
GIRF

Estimate generalized impulse response function for a structural GMVAR model.
Wald_test

Perform Wald test for a GMVAR or SGMVAR model
all_pos_ints

Check whether all arguments are positive integers
GMVAR

Create a class 'gmvar' object defining a reduced form or structural GMVAR model
add_data

Add data to an object of class 'gmvar' defining a GMVAR model
alt_gmvar

Construct a GMVAR model based on results from an arbitrary estimation round of fitGMVAR
change_regime

Change regime parameters \(\upsilon_{m}\)\( = (\phi_{m,0},\)\(\phi_{m}\)\(,\sigma_{m})\) of the given parameter vector
calc_gradient

Calculate gradient or Hessian matrix
check_gmvar

Checks whether the given object has class attribute 'gmvar'
check_data

Check the data is in the correct form
change_parametrization

Change parametrization of a parameter vector
check_same_means

Check whether the parametrization is correct for usage of same means restrictions
check_parameters

Check that the given parameter vector satisfies the model assumptions
get_IC

Calculate AIC, HQIC, and BIC
format_valuef

Function factory for value formatting
check_constraints

Check the constraint matrix has the correct form
form_boldA

Form the \(((dp)x(dp))\) "bold A" matrices related to the VAR processes
check_null_data

Checks whether the given object contains data
check_pMd

Check that p, M, and d are correctly set
fitGMVAR

Two-phase maximum likelihood estimation of a GMVAR model
cond_moment_plot

Conditional mean or variance plot for a GMVAR model
cond_moments

Compute conditional moments of a GMVAR model
diag_Omegas

Simultaneously diagonalize two covariance matrices
dlogmultinorm

Calculate logarithms of multiple multivariate normal densities with varying mean and constant covariance matrix
diagnostic_plot

Quantile residual diagnostic plot for a GMVAR model
get_boldA_eigens

Calculate absolute values of the eigenvalues of the "bold A" matrices containing the AR coefficients
get_omega_eigens

Calculate the eigenvalues of the "Omega" error term covariance matrices
eurusd

Euro area and U.S. long-term government bond yields and Euro-U.S. dollar exchange rate.
get_regime_autocovs

Calculate regimewise autocovariance matrices
get_Sigmas

Calculate the dp-dimensional covariance matrices \(\Sigma_{m,p}\) in the mixing weights of the GMVAR model.
get_alpha_mt

Get mixing weights alpha_mt (this function is for internal use)
get_test_Omega

Compute covariance matrix Omega used in quantile residual tests
get_regime_means_int

Calculate regime means \(\mu_{m}\)
get_minval

Returns the default smallest allowed log-likelihood for given data.
in_paramspace

Determine whether the parameter vector lies in the parameter space
gmvarkit

gmvarkit: Estimate Gaussian Mixture Vector Autoregressive (GMVAR) model
loglikelihood

Compute log-likelihood of a GMVAR model using parameter vector
iterate_more

Maximum likelihood estimation of a GMVAR model with preliminary estimates
in_paramspace_int

Determine whether the parameter vector lies in the parameter space
is_stationary

Check the stationary condition of a given GMVAR model
get_regime_means

Calculate regime means \(\mu_{m}\)
n_params

Calculate the number of parameters in GMVAR model parameter vector
get_regime_autocovs_int

Calculate regimewise autocovariance matrices
loglikelihood_int

Compute log-likelihood of a Gaussian mixture vector autoregressive model
get_unconstrained_structural_pars

Get structural parameters that indicate there are no constraints
gmvar_to_sgmvar

Switch from two-regime reduced form GMVAR model to a structural GMVAR model.
pick_Omegas

Pick covariance matrices
pick_phi0

Pick \(\phi_{m,0}\) or \(\mu_{m}\), m=1,..,M vectors
pick_alphas

Pick mixing weight parameters \(\alpha_{m}, m=1,...,M\)
pick_allA

Pick coefficient all matrices
pick_W

Pick the structural parameter matrix W
pick_lambdas

Pick the structural parameters eigenvalue 'lambdas'
pick_all_phi0_A

Pick all \(\phi_{m,0}\) or \(\mu_{m}\) and \(A_{m,1},...,A_{m,p}\) parameter values
pick_Ami

Pick coefficient matrix
pick_Am

Pick coefficient matrices
pick_regime

Pick regime parameters \(\upsilon_{m}\)\( = (\phi_{m,0},\)\(\phi_{m}\)\(,\sigma_{m})\)
print.gmvarpred

Print method for class 'gmvarpred' objects
plot.qrtest

Quantile residual tests
plot.gmvarpred

plot method for class 'gmvarpred' objects
print.gmvarsum

Summary print method from objects of class 'gmvarsum'
print_std_errors

Print standard errors of GMVAR model in the same form as the model estimates are printed
quantile_residuals_int

Calculate multivariate quantile residuals of GMVAR model
quantile_residuals

Calculate multivariate quantile residuals of a GMVAR model
random_coefmats

Create random VAR-model \((dxd)\) coefficient matrices \(A\).
predict.gmvar

Predict method for class 'gmvar' objects
profile_logliks

Plot profile log-likehoods around the estimates
reorder_W_columns

Reorder columns of the W-matrix and lambda parameters of a structural GMVAR model.
random_ind

Create random mean-parametrized parameter vector of a GMVAR model that may not be stationary
random_coefmats2

Create random stationary VAR model \((dxd)\) coefficient matrices \(A\).
simulateGMVAR

Simulate from GMVAR process
random_ind2

Create somewhat random parameter vector of a GMVAR model that is always stationary
random_covmat

Create random VAR model error term covariance matrix
reform_data

Reform data
reform_constrained_pars

Reform constrained parameter vector into the "standard" form
uncond_moments

Calculate the unconditional mean, variance, the first p autocovariances, and the first p autocorrelations of a GMVAR process
uncond_moments_int

Calculate the unconditional mean, variance, the first p autocovariances, and the first p autocorrelations of a GMVAR process
unWvec

Reverse vectorization operator that restores zeros
vech

Parsimonious vectorization operator for symmetric matrices
swap_parametrization

Swap the parametrization of a GMVAR model
unvech

Reverse operator of the parsimonious vectorization operator vech
unvec

Reverse vectorization operator
smart_ind

Create random parameter vector of a GMVAR model fairly close to a given parameter vector
reform_structural_pars

Reform structural parameter vector into the "standard" form
regime_distance

Calculate "distance" between two (scaled) regimes \(\upsilon_{m}\)\( = (\phi_{m,0},\)\(\phi_{m}\)\(,\sigma_{m})\)
smart_covmat

Create random VAR-model \((dxd)\) error term covariance matrix \(\Omega\) fairly close to a given positive definite covariance matrix using (scaled) Wishart distribution
sort_components

Sort components in parameter vector according to mixing weights into a decreasing order
sort_W_and_lambdas

Sort the columns of W matrix by sorting the lambda parameters of the second regime to increasing order
update_numtols

Update the stationarity and positive definiteness numerical tolerances of an existing class 'gmvar' model.
swap_W_signs

Swap all signs in pointed columns a the \(W\) matrix of a structural GMVAR model.
standard_errors

Calculate standard errors for estimates of GMVAR model
vec

Vectorization operator