Main Content

Create Univariate Markov-Switching Dynamic Regression Models

These examples show how to create fully and partially specified, univariate Markov-switching dynamic regression models by using the msVAR function. For an overview, see Creating Markov-Switching Dynamic Regression Models.

If you plan to fit a model to data, you must create a partially and fully specified model. The partially specified model contains unknown parameter values to be estimated, and the fully specified model contains parameter values that the estimate function uses to initiate the expectation-maximization algorithm.

If you do not plan to fit a model to data by using estimate, you must create a fully specified model for all other msVAR object functions.

Create Fully Specified Univariate Model

This example shows how to create a fully specified, two-state Markov-switching dynamic regression model.

Suppose that an economy switches between two regimes: an expansion and a recession. If the economy is in an expansion, the probability that the expansion persists in the next time step is 0.9, and the probability that it switches to a recession is 0.1. If the economy is in a recession, the probability that the recession persists in the next time step is 0.7, and the probability that it switches to an expansion is 0.3.

Suppose that yt is a univariate response process representing an economic measurement that can suggest which state the economy experiences during a period. During an expansion, yt is this AR(2) model:

yt=5+0.3yt-1+0.2yt-2+ε1t,

where ε1t is an iid Gaussian process with mean 0 and variance 2. During a recession, yt is this AR(1) model:

yt=-5+0.1yt-1+ε2t,

where ε2t is an iid Gaussian process with mean 0 and variance 1.

Describe Switching Mechanism

The right-stochastic transition matrix describing the regime switching probabilities is

P=[0.90.10.30.7].

Create a two-state discrete-time Markov chain model that describes the regime switching mechanism by passing P to mc. Label the regimes.

P = [0.9 0.1; 0.3 0.7];
mc = dtmc(P,StateNames=["Expansion" "Recession"])
mc = 
  dtmc with properties:

             P: [2x2 double]
    StateNames: ["Expansion"    "Recession"]
     NumStates: 2

mc is a dtmc object.

Describe State-Specific Dynamic Regression Submodels

For each regime, create an AR model for yt by using arima. Specify all parameter values, and enter a description for the models.

% Constants
C1 = 5;
C2 = -5;

% AR coefficients
AR1 = [0.3 0.2]; % 2 lags
AR2 = 0.1;       % 1 lags

% Innovations variances
v1 = 2;
v2 = 1;

% Submodels:
mdl1 = arima(Constant=C1,AR=AR1,Variance=v1, ...
    Description="Expansion State")
mdl1 = 
  arima with properties:

     Description: "Expansion State"
      SeriesName: "Y"
    Distribution: Name = "Gaussian"
               P: 2
               D: 0
               Q: 0
        Constant: 5
              AR: {0.3 0.2} at lags [1 2]
             SAR: {}
              MA: {}
             SMA: {}
     Seasonality: 0
            Beta: [1×0]
        Variance: 2
 
   ARIMA(2,0,0) Model (Gaussian Distribution)
mdl2 = arima(Constant=C2,AR=AR2,Variance=v2, ...
    Description="Recession State")
mdl2 = 
  arima with properties:

     Description: "Recession State"
      SeriesName: "Y"
    Distribution: Name = "Gaussian"
               P: 1
               D: 0
               Q: 0
        Constant: -5
              AR: {0.1} at lag [1]
             SAR: {}
              MA: {}
             SMA: {}
     Seasonality: 0
            Beta: [1×0]
        Variance: 1
 
   ARIMA(1,0,0) Model (Gaussian Distribution)

mdl1 and mdl2 are fully specified arima objects.

Store the submodels in a vector with their order corresponding to the regimes in mc.StateNames.

mdl = [mdl1; mdl2];

Create Markov-Switching Dynamic Regression Model

Create the Markov-switching dynamic regression model that describes the dynamic behavior of the economy with respect to yt.

Mdl = msVAR(mc,mdl)
Mdl = 
  msVAR with properties:

      NumStates: 2
      NumSeries: 1
     StateNames: ["Expansion"    "Recession"]
    SeriesNames: "1"
         Switch: [1x1 dtmc]
      Submodels: [2x1 varm]

Mdl is a fully specified msVAR object representing a univariate two-state Markov-switching dynamic regression model. You can pass Mdl to any msVAR object function for further analysis, or initialize the estimation procedure using the parameter values of Mdl.

Mdl.Submodels(1)
ans = 
  varm with properties:

     Description: "AR-Stationary 1-Dimensional VAR(2) Model"
     SeriesNames: "Y1" 
       NumSeries: 1
               P: 2
        Constant: 5
              AR: {0.3 0.2} at lags [1 2]
           Trend: 0
            Beta: [1×0 matrix]
      Covariance: 2
Mdl.Submodels(2)
ans = 
  varm with properties:

     Description: "AR-Stationary 1-Dimensional VAR(1) Model"
     SeriesNames: "Y1" 
       NumSeries: 1
               P: 1
        Constant: -5
              AR: {0.1} at lag [1]
           Trend: 0
            Beta: [1×0 matrix]
      Covariance: 1

msVAR converts the arima object submodels to 1-D varm object equivalents.

Create Partially Specified Univariate Model for Estimation

This example shows how to create a Markov-switching dynamic regression model containing unknown parameter values to be fit to data.

Suppose that an economy switches between two regimes, an expansion and a recession, and suppose that the transition probabilities are unknown.

Also suppose that yt is a univariate response process representing an economic measurement that can suggest which state the economy experiences during a period. During an expansion, yt is this AR(2) model. During a recession, yt is an AR(1) model. State-specific submodel coefficients and innovations variances are unknown.

Describe Switching Mechanism

A discrete-time Markov chain represents the switching mechanism, and a right stochastic matrix describes the chain. Because the transition probabilities are unknown, create a matrix of NaNs, and pass it to dtmc to create the chain. Label the states.

P = NaN(2);
mc = dtmc(P,StateNames=["Expansion" "Recession"])
mc = 
  dtmc with properties:

             P: [2x2 double]
    StateNames: ["Expansion"    "Recession"]
     NumStates: 2

mc.P
ans = 2×2

   NaN   NaN
   NaN   NaN

mc is a partially specified dtmc object. The transition matrix mc.P is completely unknown and estimable.

Describe State-Specific Dynamic Regression Submodels

The shorthand syntax of arima is well suited for the quick creation of AR model templates for estimation. That is, given the AR model order, all other parameters in the model are unknown and estimable.

For each regime, create an AR model template by specifying the AR polynomial order as well as zero-order differencing and moving average polynomials. Describe each model by using dot notation.

mdl1 = arima(1,0,0);
mdl1.Description = "Expansion State"
mdl1 = 
  arima with properties:

     Description: "Expansion State"
      SeriesName: "Y"
    Distribution: Name = "Gaussian"
               P: 1
               D: 0
               Q: 0
        Constant: NaN
              AR: {NaN} at lag [1]
             SAR: {}
              MA: {}
             SMA: {}
     Seasonality: 0
            Beta: [1×0]
        Variance: NaN
 
   ARIMA(1,0,0) Model (Gaussian Distribution)
mdl2 = arima(2,0,0);
mdl2.Description = "Recession State"
mdl2 = 
  arima with properties:

     Description: "Recession State"
      SeriesName: "Y"
    Distribution: Name = "Gaussian"
               P: 2
               D: 0
               Q: 0
        Constant: NaN
              AR: {NaN NaN} at lags [1 2]
             SAR: {}
              MA: {}
             SMA: {}
     Seasonality: 0
            Beta: [1×0]
        Variance: NaN
 
   ARIMA(2,0,0) Model (Gaussian Distribution)

mdl1 and mdl2 are partially specified arima objects. NaN-valued properties correspond to unknown, estimable parameters.

Store the submodels in a vector with their order corresponding to the regimes in mc.StateNames.

mdl = [mdl1; mdl2];

Create Markov-Switching Dynamic Regression Model

Create the Markov-switching dynamic regression model that describes the dynamic behavior of the economy with respect to yt.

Mdl = msVAR(mc,mdl)
Mdl = 
  msVAR with properties:

      NumStates: 2
      NumSeries: 1
     StateNames: ["Expansion"    "Recession"]
    SeriesNames: "1"
         Switch: [1x1 dtmc]
      Submodels: [2x1 varm]

Mdl is a partially specified msVAR object representing a univariate two-state Markov-switching dynamic regression model.

Mdl.Submodels(1)
ans = 
  varm with properties:

     Description: "1-Dimensional VAR(1) Model"
     SeriesNames: "Y1" 
       NumSeries: 1
               P: 1
        Constant: NaN
              AR: {NaN} at lag [1]
           Trend: 0
            Beta: [1×0 matrix]
      Covariance: NaN
Mdl.Submodels(2)
ans = 
  varm with properties:

     Description: "1-Dimensional VAR(2) Model"
     SeriesNames: "Y1" 
       NumSeries: 1
               P: 2
        Constant: NaN
              AR: {NaN NaN} at lags [1 2]
           Trend: 0
            Beta: [1×0 matrix]
      Covariance: NaN

msVAR converts the arima object submodels to 1-D varm object equivalents.

Mdl is prepared for estimation; pass it, a fully specified model containing initial values for optimization, and data to estimate.

Create Partially Specified Univariate Model Containing Regression Components

This example shows how to include an unknown regression component in each submodel of the Markov-switching dynamic regression model in Create Partially Specified Univariate Model for Estimation.

Consider adjusting the response variable with exogenous variables x1t and x2t by including a regression component in each submodel.

Create a discrete-time Markov chain representing the switching mechanism.

P = NaN(2);
mc = dtmc(P,StateNames=["Expansion" "Recession"]);

Create the ARX(1) and ARX(2) submodels by using the longhand syntax of arima. For each model, supply a 2-by-1 vector of NaNs to the Beta name-value argument. This setting specifies the size of the regression component (that is, which predictors are included) and that it is estimable. Store the submodels in a vector.

mdl1 = arima(ARLags=1,Beta=NaN(2,1),Description="Expansion State");
mdl2 = arima(ARLags=1:2,Beta=NaN(2,1),Description="Recession State");
mdl = [mdl1; mdl2];

Create a Markov-switching dynamic regression model.

Mdl = msVAR(mc,mdl);
Mdl.Submodels(1)
ans = 
  varm with properties:

     Description: "1-Dimensional VARX(1) Model with 2 Predictors"
     SeriesNames: "Y1" 
       NumSeries: 1
               P: 1
        Constant: NaN
              AR: {NaN} at lag [1]
           Trend: 0
            Beta: [NaN NaN]
      Covariance: NaN
Mdl.Submodels(2)
ans = 
  varm with properties:

     Description: "1-Dimensional VARX(2) Model with 2 Predictors"
     SeriesNames: "Y1" 
       NumSeries: 1
               P: 2
        Constant: NaN
              AR: {NaN NaN} at lags [1 2]
           Trend: 0
            Beta: [NaN NaN]
      Covariance: NaN

See Also

Objects

Related Topics