Learn R Programming

sstvars (version 1.1.6)

simulate.stvar: Simulate method for class 'stvar' objects

Description

simulate.stvar is a simulate method for class 'stvar' objects.

Usage

# S3 method for stvar
simulate(
  object,
  nsim = 1,
  seed = NULL,
  ...,
  init_values = NULL,
  init_regime,
  ntimes = 1,
  use_stat_for_Gaus = FALSE,
  burn_in = 1000,
  exo_weights = NULL,
  drop = TRUE,
  girf_pars = NULL
)

Value

Returns a list containing the simulation results. If drop==TRUE and ntimes==1 (default), contains the following entries:

sample

a size (nsim\(\times d\)) matrix containing the simulated time series.

transition weights:

a size (nsim\(\times M\)) matrix containing the transition weights corresponding to the simulated sample.

Otherwise, returns a list with the following entries:

$sample

a size (nsim\(\times d\times\)ntimes) array containing the samples: the dimension [t, , ] is the time index, the dimension [, d, ] indicates the marginal time series, and the dimension [, , i] indicates the i:th set of simulations.

$transition_weights

a size (nsim\(\times M \times\)ntimes) array containing the transition weights corresponding to the sample: the dimension [t, , ] is the time index, the dimension [, m, ] indicates the regime, and the dimension [, , i] indicates the i:th set of simulations.

Arguments

object

an object of class 'stvar'.

nsim

number of observations to be simulated.

seed

set seed for the random number generator?

...

currently not in use.

init_values

a size \((p\times d)\) matrix specifying the initial values, where d is the number of time series in the system. The last row will be used as initial values for the first lag, the second last row for second lag etc. If not specified, initial values will be drawn from the regime specified in init_regimes (for Gaussian models only).

init_regime

an integer in \(1,...,M\) specifying the regime from which the initial values should be generated from (using a simulation procedure with a burn-in period). For models with Gaussian conditional distribution, it is also possible to generate the starting values from the stationary distribution of a regime. See the details section.

ntimes

how many sets of simulations should be performed?

use_stat_for_Gaus

if TRUE and cond_dist=="Gaussian", uses the stationary distribution of a regime to generate the initial values for the simulation. Note that if stationary distribution is used, unlike with out simulation procedure, it is not guaranteed that the regime of interest has high transition weights at the given points of time. Note that if the model allows for unstable estimates (stvar$allow_unstab=TRUE), simulation procedure is always used.

burn_in

Burn-in period for simulating initial values from a regime when cond_dist!="Gaussian". See the details section.

exo_weights

if weight_function="exogenous", provide a size \((nsim \times M)\) matrix of exogenous transition weights for the regimes: [t, m] for a time \(t\) and regime \(m\) weight. Ignored if weight_function!="exogenous".

drop

if TRUE (default) then the components of the returned list are coerced to lower dimension if ntimes==1, i.e., $sample and $transition_weights will be matrices, and $component will be vector.

girf_pars

This argument is used internally in the estimation of generalized impulse response functions (see ?GIRF). You should ignore it (specifying something else than null to it will change how the function behaves).

Details

When using init_regime to simulate the initial values from a given regime, we employ the following simulation procedure to obtain the initial values (unless use_stat_for_Gaus=TRUE and Gaussian model is considered). First, we set the initial values to the unconditional mean of the specified regime. Then, we simulate a large number observations from that regime as specified in the argument burn_in. Then, we simulate \(p + 100\) observations more after the burn in period, and for the \(100\) observations calculate the transition weights for them and take the consecutive \(p\) observations that yield the highest transition weight for the given regime. For models with exogenous transition weights, takes just the last \(p\) observations after the burn-in period.

The argument ntimes is intended for forecasting, which is used by the predict method (see ?predict.stvar).

References

  • Anderson H., Vahid F. 1998. Testing multiple equation systems for common nonlinear components. Journal of Econometrics, 84:1, 1-36.

  • Hansen B.E. 1994. Autoregressive Conditional Density estimation. Journal of Econometrics, 35:3, 705-730.

  • Kheifets I.L., Saikkonen P.J. 2020. Stationarity and ergodicity of Vector STAR models. International Economic Review, 35:3, 407-414.

  • Lanne M., Virolainen S. 2025. A Gaussian smooth transition vector autoregressive model: An application to the macroeconomic effects of severe weather shocks. Unpublished working paper, available as arXiv:2403.14216.

  • Lütkepohl H. 2005. New Introduction to Multiple Time Series Analysis, Springer.

  • McElroy T. 2017. Computation of vector ARMA autocovariances. Statistics and Probability Letters, 124, 92-96.

  • Kilian L., Lütkepohl H. 20017. Structural Vector Autoregressive Analysis. 1st edition. Cambridge University Press, Cambridge.

  • Tsay R. 1998. Testing and Modeling Multivariate Threshold Models. Journal of the American Statistical Association, 93:443, 1188-1202.

  • Virolainen S. 2025. Identification by non-Gaussianity in structural threshold and smooth transition vector autoregressive models. Unpublished working paper, available as arXiv:2404.19707.

See Also

predict.stvar,GIRF, GFEVD, fitSTVAR, fitSSTVAR STVAR

Examples

Run this code
 # Gaussian STVAR(p=2, M=2) model with weighted relative stationary densities
 # of the regimes as the transition weight function:
 theta_222relg <- c(0.356914, 0.107436, 0.356386, 0.08633, 0.13996, 0.035172,
   -0.164575, 0.386816, 0.451675, 0.013086, 0.227882, 0.336084, 0.239257, 0.024173,
   -0.021209, 0.707502, 0.063322, 0.027287, 0.009182, 0.197066, 0.205831, 0.005157,
   0.025877, 1.092094, -0.009327, 0.116449, 0.592446)
 mod222relg <- STVAR(data=gdpdef, p=2, M=2, d=2, params=theta_222relg,
   weight_function="relative_dens")

 # Simulate T=200 observations using given initial values:
 init_vals <- matrix(c(0.5, 1.0, 0.5, 1), nrow=2)
 sim1 <- simulate(mod222relg, nsim=200, seed=1, init_values=init_vals)
 plot.ts(sim1$sample) # Sample
 plot.ts(sim1$transition_weights) # Transition weights

 # Simulate T=100 observations, with initial values drawn from the stationary
 # distribution of the 1st regime:
 sim2 <- simulate(mod222relg, nsim=200, seed=1, init_regime=1)
 plot.ts(sim2$sample) # Sample
 plot.ts(sim2$transition_weights) # Transition weights

# Logistic Student's t STVAR with p=1, M=2, and the first lag of the second variable
# as the switching variable.
params12 <- c(0.62906848, 0.14245295, 2.41245785, 0.66719269, 0.3534745, 0.06041779, -0.34909745,
  0.61783824, 0.125769, -0.04094521, -0.99122586, 0.63805416, 0.371575, 0.00314754, 0.03440824,
  1.29072533, -0.06067807, 0.18737385, 1.21813844, 5.00884263, 7.70111672)
fit12 <- STVAR(data=gdpdef, p=1, M=2, params=params12, weight_function="logistic",
  weightfun_pars=c(2, 1), cond_dist="Student")

# Simulate T=100 observations with initial values drawn from the second regime.
# Since the stationary distribution of the Student's regime is not known, we
# use a simulation procedure that starts from the unconditional mean of the regime,
# then simulates a number of observations from the regime for a "burn-in" period,
# and finally takes the last p observations generated from the regime as the initial
# values for the simulation from the STVAR model:
sim3 <- simulate(fit12, nsim=100, init_regime=1, burn_in=1000)
plot.ts(sim3$sample) # Sample
plot.ts(sim3$transition_weights) # Transition weights

Run the code above in your browser using DataLab