## Creating Markov-Switching Dynamic Regression Models

Econometrics Toolbox™ enables you to capture nonlinear patterns in a univariate or multivariate
time series by using a Markov-switching dynamic regression model. This model type
characterizes the time series behavior as linear models within different regimes. To
create a Markov-switching model, use the `msVAR`

function.

### What Is a Markov-Switching Dynamic Regression Model?

A *Markov-switching dynamic regression model*
describes the dynamic behavior of a response series
*y _{t}* in the presence of structural
breaks or changes among

*n*regimes or states, where statistical characteristics of

*y*can differ among the regimes. At any point in the sample, the regime can change, or switch, given the economic environment. The discrete-state switching mechanism

_{t}*s*is a discrete-time Markov chain with a probabilistic transition matrix. Visually, a discrete-time Markov chain is a directed graph, such as the four-regime Markov chain.

_{t}Mathematically, the probabilistic transition matrix characterizes the dynamics of the Markov chain. For more details, see Discrete-Time Markov Chains.

The variable *s _{t}* governs
which state-specific submodel best describes

*y*during a particular period. Symbolically,

_{t}$${y}_{t}~\{\begin{array}{cc}{f}_{1}\left({y}_{t};{x}_{t},{\theta}_{1}\right)& ,{s}_{t}=1\\ {f}_{2}\left({y}_{t};{x}_{t},{\theta}_{2}\right)& ,{s}_{t}=2\\ \vdots & \vdots \\ {f}_{n}\left({y}_{t};{x}_{t},{\theta}_{n}\right)& ,{s}_{t}=n\end{array},$$

where:

$${f}_{i}\left({y}_{t};{x}_{t},{\theta}_{i}\right)$$ is the dynamic regression model of

*y*in regime_{t}*i*.*x*is a vector of observed exogenous variables at time_{t}*t*.*θ*is the collection of parameters of the submodel in regime_{i}*i*.

### Markov-Switching Model Functionality of Econometrics Toolbox

The Econometrics Toolbox function `msVAR`

returns an `msVAR`

object specifying the functional form and storing
the parameter values of a Markov-switching dynamic regression model for a univariate
or multivariate *y _{t}*. An

`msVAR`

object contains information about the structure of
*s*and the submodels for

_{t}*y*. In addition to model specification, the

_{t}`msVAR`

object framework enables you to fit models
to data and generate forecasts from models, among other common time series analysis
tasks.Before you can create an `msVAR`

object in MATLAB^{®}, you must have the following information, which is application
dependent or based on economic theory:

The response variables

*y*to model._{t}A good statistical description of

*y*in each state. In other words, you need to know the structure of each submodel, which includes:_{t}The presence of a model constant (intercept), but its value can be unknown

For multivariate models, the presence of a linear trend term

The autoregressive (AR) polynomial order

Predictor variables to include in the regression component

The number of states in the system.

A description of the state switching mechanism that determines how the submodels transition among each other. Although this topic uses a probabilistic discrete-time Markov chain for the switching mechanism, Econometrics Toolbox also supports fixed threshold transitions as the switching mechanism for a set of dynamic regression models. For more details, see Create Threshold-Switching Dynamic Regression Models.

The values of *estimable parameters*, such as
model coefficients and the state transition matrix, can be known and specified or
unknown and fit to data.

A time series plot of the response data can help you to understand the structure of the model. For example, consider building a simple dynamic model to forecast the US unemployment rate. The following figure shows a time series plot of the unemployment rate, with dark bands indicating periods of recession.

The plot shows relatively long periods during which the unemployment rate generally decreases and shorter periods during which the rate increases sharply. Those periods align with economic periods of expansion and recession, respectively. Within each state and across the sample, the dynamic behavior and volatility of the series appear similar. An autoregressive submodel for each economic state, expansion and recession, might capture the dynamics of the unemployment rate throughout the sample.

In summary, the plot suggests that a two-regime, switching system of autoregressive models for the unemployment rate series is plausible.

### Represent Markov-Switching Model Using `msVAR`

To create a Markov-switching dynamic regression model, the `msVAR`

function requires these two inputs or property settings:

`Submodels`

: A length`NumStates`

vector of state-specific linear autoregressive models describing the dynamics of*y*. The_{t}`msVAR`

function accepts a vector completely composed of univariate autoregressive models (ARX,`arima`

objects) or multivariate vector autoregression models (VARX,`varm`

objects), optionally containing an exogenous regression component. For more details, see Create Autoregressive Models, Create ARIMA Models That Include Exogenous Covariates, or Vector Autoregression (VAR) Model Creation.`Switch`

: A discrete-time Markov chain that characterizes the probabilistic switching mechanism*s*among the_{t}`NumStates`

states, specified as a`dtmc`

object. The transition matrix`Switch.P`

specifies the switching probability distributions, in which elements are transition probabilities in the interval [0,1] or unknown (`NaN`

) and fit to data. For more details on discrete-time Markov chains, see Markov Chain Modeling.

For example, create a Markov-switching dynamic regression model for the unemployment rate in the two-regime system. Assume AR(4) submodels for the rate in each state, and set all parameters to unknown values.

numStates = 2; P = nan(numStates); stateNames = ["Expansion" "Recession"]; mc = dtmc(P,StateNames=stateNames) ar4 = arima(4,0,0); mdl = [ar4; ar4]; Mdl1 = msVAR(mc,mdl) transitionMatrix = Mdl1.Switch.P submdl1 = Mdl1.Submodels(1)

mc = dtmc with properties: P: [2×2 double] StateNames: ["Expansion" "Recession"] NumStates: 2 Mdl1 = msVAR with properties: NumStates: 2 NumSeries: 1 StateNames: ["Expansion" "Recession"] SeriesNames: "1" Switch: [1×1 dtmc] Submodels: [2×1 varm] transitionMatrix = NaN NaN NaN NaN submdl1 = varm with properties: Description: "1-Dimensional VAR(4) Model" SeriesNames: "Y1" NumSeries: 1 P: 4 Constant: NaN AR: {NaNs} at lags [1 2 3 ... and 1 more] Trend: 0 Beta: [1×0 matrix] Covariance: NaN

Although the elements of the input submodel vector are `arima`

objects, `msVAR`

stores a vector of equivalent `varm`

objects. `NaN`

-valued elements correspond to unknown, but
estimable, coefficient values or transition probabilities. You can treat all
estimable parameters as unknown or you can specify a mix of known and unknown
values. A model containing at least one unknown parameter is a *partially
specified* model. A partially specified model completely specifies the
model structure; its sole purpose is to specify which parameters the `estimate`

function should estimate. During estimation, specified parameter values indicate
equality constraints, but `estimate`

always estimates innovations
covariances regardless of any specified values.

For example, suppose economic theory suggests that, during an expansion, AR lags 2 and 3 of the model are insignificant for the unemployment rate. Create a Markov-switching model to reflect this characteristic.

ar4adj = ar4; ar4adj.AR(2:3) = {0} Mdl2 = msVAR(mc,[ar4adj; ar4]);

ar4adj = arima with properties: Description: "ARIMA(4,0,0) Model (Gaussian Distribution)" Distribution: Name = "Gaussian" P: 4 D: 0 Q: 0 Constant: NaN AR: {NaN NaN} at lags [1 4] SAR: {} MA: {} SMA: {} Seasonality: 0 Beta: [1×0] Variance: NaN

Economic theory or a research hypothesis might suggest values for all parameters.
In this case, you can specify values of all model parameters, which results in a
*fully specified* model. You can pass a fully specified model
to any `msVAR`

object
function for further analysis. Also, to initiate the
expectation-maximization algorithm, `estimate`

requires initial
values for all parameters. A fully specified model specifies the required initial
values.

For example, create a simple three-regime model that uniformly switches between
the following models, where *ε _{t}* is a
standard Gaussian random variable:

*y*= –1 +_{t}*ε*._{t}*y*=_{t}*ε*._{t}*y*= 1 +_{t}*ε*._{t}

Simulate a 1000-period path from the model.

P = [0.9 0.1 0; 0.25 0.5 0.25 0 0.1 0.9]; mc3 = dtmc(P); mdl1 = arima(Constant=-1,Variance=1); mdl2 = arima(Constant=0,Variance=1); mdl3 = arima(Constant=1,Variance=1); mdlvec = [mdl1; mdl2; mdl3]; Mdl3 = msVAR(mc3,mdlvec); rng("default") % For reproducibility y = simulate(Mdl3,1000); plot(y) hold on yline([-1 0 1],'r--') title("Simulated Response Path from Three-State Model") hold off