Markov Switching Model Tool
Markov Switching Model Tool
Abstract
This paper provides an overview of MS Regress, a MATLAB toolbox specially designed for the estimation, simulation and forecasting
of a general markov regime switching model. The package was written
in an intuitive manner so that the user have at its reach a large number of different markov switching specifications, without any change
in the original code. This document introduces the main functionality
of the package with the help of several empirical examples.
Assistant Professor of Finance, Federal University of Rio Grande do Sul (Porto Alegre,
Brazil)
Contents
1 Introduction
4
6
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
10
15
17
18
19
22
25
25
30
32
33
35
12 Reporting a bug
37
37
14 Final remarks
37
Introduction
The purpose of this document is to introduce the user to the functionality of MS Regress package1 . The document is organized as follows,
first I give a brief exposition on the topic of regime switching models
and the further sections of the paper are related to the introduction
to the features of the package along with illustrative examples.
The installation of the package is quite straightforward. The downloaded zip file contains several m files and a few .txt files with the
data used in the example scripts. In order to use the main functions,
all you need to do is to tell Matlab to place the files from the m Files
folder in the search path:
addpath('m Files');
Once Matlab recognizes the path of the package, the functions will be
1
The package is still under development to accommodate new features. The up to date
version can be downloaded from https://sites.google.com/site/marceloperlin/.
I also wrote a lighter version of the package in R. The code is available within the
Rmetrics project (https://r-forge.r-project.org/projects/rmetrics/, search for
fMarkovSwitching). Please be aware that the R version is no longer being maintained.
available to the user. More details about how to use each function can
be found in the description of the files2 . After the use of the package,
it is advised (but not necessary) to remove the files from the search
path. This is accomplished with:
rmpath('m Files');
These commands are already included in all example scripts. These
scripts were written so that they can run without any modification.
They are a good starting point in learning the interface of the package.
Next I give a brief introduction to markov regime switching models.
(1)
These are related to the first comments in each m file, which are available by opening
it in the editor. An alternative way to access the description of each file is to use the help
function (e.g. help('MS Regress Fit')).
for State 1
(2)
yt = 2 + t
for State 2
(3)
t (0, 12 )
for State 1
(4)
(0, 22 )
for State 2
(5)
where:
t
The log return is the geometric change for the price of a particular asset (e.g. stock
price) between time t 1 and t. Formally, if Pt is the price of a particular asset for time
t, then log(Pt /Pt1 ) is the log return for time t.
4
The usual explanation for this effect is that traders react faster to bad news when
comparing to good news. This can also be explained by the presence of limit loss orders,
which will sell at market prices once a particular threshold in the prices has been breached.
When used by a significant amount of traders and at different threshold levels, these limit
loss orders will create a cascade effect, therefore accelerating the downfall of prices.
(6)
4.1
The ordering of the elements in the matrix is a matter of notation. It is not uncommon
to find different notations in the literature.
6
In fact, the probabilities of each regime over time can be represented as a AR process,
[Hamilton, 1994]
7
Zhuanxin Ding developed a matlab package for TVTP models based on MS Regress.
You can access it at: http://www.mathworks.com/matlabcentral/fileexchange/
37144.
matlab package all of the models are estimated using maximum likelihood and this procedure is described here. Consider the following
regime switching model:
yt = St + t
t
(7)
N (0, S2 t )
(8)
St = 1, 2
(9)
T
X
ln q
2S2 t
t=1
yt S t
exp
2S2 t
(10)
For the previous specification, if all of the states of the world were
know, that is, the values of St are available, then estimating the model
by maximum likelihood is straightforward. All you need is to maximize
Equation 10 as a function of parameters 1 , 2 , 12 and 22 . Is should
be clear by now that this is not the case for a markov switching model,
where the states of the world are unknown.
In order to estimate a regime switching model where the states
are not know, it is necessary to change the notation for the likelihood function. Considering f (yt |St = j, ) as the likelihood function
for state j conditional on a set of parameters (), then the full log
likelihood function of the model is given by:
ln L =
T
X
t=1
ln
2
X
(11)
j=1
1 p11
2 p11 p22
(12)
P r(S0 = 2|0 ) =
1 p22
2 p22 p11
(13)
2
X
(14)
i=1
where pji are the transition probabilities from the markov chain
(see equation 6).
3. Update the probability of each state with the new information
from time t. This is accomplished by using the parameters of the
model in each state, in this case 1 ,2 ,1 ,2 , the transition probabilities p11 and p22 for the calculation of the likelihood function
in each state (f (yt |St = j, t1 )) for time t. After that, use the
following formula to update the probability of each state given
the new information:
f (yt |St = j, t1 )P r(St = j|t1 )
P r(St = j|t ) = P2
(15)
j=1 f (yt |St = j, t1 )P r(St = j|t1 )
4. Set t = t + 1 and repeat steps 2-3 until t = T , that is, you
reached all observations in your sample. This should provide a
set of filtered probabilities for each state, from t = 1 to t = T .
The previous set of steps provides the probabilities that one needs
for calculating the log likelihood of the model as a function of the set
of parameters:
ln L =
T
X
t=1
ln
2
X
(16)
j=1
The estimation of the model is obtained by finding the set of parameters that maximize the previous equation. While I used k = 2 in
the previous example, the formula for the generic case of k states is
also available, where matrix notation can greatly simplify the calculations. See Hamilton [1994] and Kim and Nelson [1999] for further
details on this topic.
One important point in the estimation of the regime switching
model is that the parameters in the transition matrix are not variation
free. Since they are probabilities, their values have to be between 0
and 1 and need to sum to 1 in each column of the transition matrix
P . For k = 2, these conditions are easy to implement by just applying
a numerical transformation8 for p11 and p22 and setting p12 = 1 p11
and p22 = 1 p21 . But, be aware that when k > 3 this procedure will
not work as the second condition of the model will not be guaranteed.
One solution to this problem is to use a constrained optimization
function, so that the desired properties in the parameter vector are
explicitly defined in the search of the log likelihood solution. This
was the approach used in the previous version of the code, with the
use of Matlabs fmincon function. Recently Zhuanxin Ding provided
an interesting numerical transformation9 that made possible for the
transition matrix to be estimated in a variation free framework. This
allowed for the use of different optimization functions such as fminsearch and fminunc in the estimation of the model.
N
nS
X
i xnS
i,t +
i=1
NS
X
j,St xSj,t + t
(17)
j=1
t P (St )
(18)
5.1
The first variable Spec Out is the output structure which contains
all the information regarding the estimated model. Variable dep is
the dependent variable and it can either be a vector (univariate) or a
matrix (multivariate model). The input indep represents the independent variables. For the case of a univariate model, it is represented
as a matrix with columns equal to the number of regressors. For the
case of a multivariate model, this variable is a cell array12 . The last
three inputs, k, S and advOpt are, respectively, the number of states
in the model, the locations of the switching parameters and advanced
11
Special thanks to Florian Knorm for providing a latex package for Matlab code (available at http://www.mathworks.com/matlabcentral/fileexchange/8015/).
12
Details on multivariate models are given later on the paper.
10
options fed to the algorithm. Further details on these are given next,
with the help of an example.
Consider the following case of a model with two explanatory variables (x1,t , x2,t ) where the innovations follow a Gaussian (Normal)
distribution and the input argument S, which is passed to the fitting function MS Regress Fit.m, is equal to S=[1 1 1]. Given this
configuration, the model is represented as:
yt = 1,St x1,t + 2,St x2,t + t
(19)
t N (0, S2 t )
(20)
Where:
St : The state at time t, that is,St = 1..k , where k is the number
of states.
S2 t : The variance of the innovation at state St .
i,St : Beta coefficient for explanatory variable i at state St where i
goes from 1 to 2.
t : Residual vector which follows a particular distribution (in this case
Normal).
Now, changing the input argument to S=[1 1 0], the model is:
yt = 1,St x1,t + 2,St x2,t + t
(21)
t N (0, 2 )
(22)
Notes that that with S=[1 1 0], the variance term is no longer
switching states. Now, with the switching argument as S=[0 1 1],
the model is:
yt = 1 x1,t + 2,St x2,t + t
(23)
t N (0, S2 t )
(24)
With this change in the input argument S, only the second coefficient and the models variance are switching according to the transition probabilities. That is, the first coefficient (1 ) does not change
states. Therefore, the logic is clear: the first elements of S control the
switching dynamic of the mean equation, while the last term controls
the switching dynamic of the residual vector, including distribution
11
parameters. For an example with extra distribution parameters, consider the following definition for a model with GED (generalized error
distribution) innovations and with input S=[1 1 1 1]. This configuration yields:
yt = 1,St x1,t + 2,St x2,t + t
(25)
t GED(0, S2 t , KSt )
(26)
In this setup, the new parameter K will also switch states. This
coefficient is part of the GED distribution and should not be confused with the k (number of states in the model). If we had set
S=[1 1 1 0], the model would switch in all coefficients, except in
the K parameter.
As an example for the markov switching fitting function, assume
that there is a variable called logRet in MATLABs workspace. This
represents the log returns of a particular asset over a particular frequency (e.g. daily). Consider the input of the following options at
MS Regress Fit():
1
2
3
4
5
6
7
8
% Defining inputs
dep=logRet;
constVec=ones(length(dep),1);
indep=constVec;
k=2;
S=[1 1];
advOpt.distrib='Normal';
advOpt.std method=1;
9
10
11
For the last piece of code, the vector dep is the dependent variable. The term constVec is a vector full of ones (the constant), k is
the number of states and S defines the location of the switching parameters. The model represented in computational terms in the last
piece of Matlab code is equivalent to the model with only a constant
term and two states given previously in the paper (see Equation 1).
The input structure advOpt determines advanced information of
the model, in this case, the distribution assumption and the method
for calculating the standard errors. More details regarding the use of
advOpt can be found in a later section of the paper.
12
The inputs given before are related to the estimation of the following equations:
State 1 (St = 1)
(27)
yt = 1 + t
(28)
t N (0, 12 )
(29)
State 2 (St = 2)
(30)
yt = 2 + t
(31)
t
N (0, 22 )
with:
P=
p1,1 p2,1
p1,2 p2,2
(32)
!
(33)
13
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<---
22
23
24
25
26
27
28
State 1
Model's Variance:
Std Error (p. value):
State 2
Model's Variance:
Std Error (p. value):
0.000266
0.0000 (0.00)
0.000837
0.0001 (0.00)
29
30
--->
<---
31
32
33
34
35
36
37
38
39
State 1
Value:
Std Error (p. value):
State 2
Value:
Std Error (p. value):
0.0003
0.0006 (0.63)
0.0005
0.0016 (0.75)
40
41
42
43
44
0.99 (0.20,0.00)
0.01 ( NaN, NaN)
0.02 (0.21,0.91)
0.98 ( NaN, NaN)
45
14
46
47
48
49
5.2
By now it should be clear the use of input argument S. The multivariate interface I built for this package has the same intuition as
in the univariate case and consists of basically a group of inputs in
cell array notation, where the elements iterates over the equations in
the system. An example should make it clear. Consider the following
model:
y1,t = 1,1,St x1,t + 1,2,St x2,t + 1,t
15
(34)
(35)
2
1,t N (0, 1,S
)
t
(36)
2
2,t N (0, 2,S
)
t
(37)
St = 1, 2
(38)
cov(1,t , 2,t ) = 0
(39)
with
8
9
10
For the last piece of code, variable y is a matrix with two columns.
As one can see, the inputs have the same shape as for the univariate
case, but they are iterated over the equations of the system by using
cell arrays13 . Notice that in the previous code it is not allowed covariance between the residuals of the different equations (see 39). This is
a default option of the algorithm, but it can be changed so that a full
covariance matrix is estimated from the data.
All options to univariate modeling, including reduced estimation,
are also available for the multivariate case. For further details see
the script Example MS Regress Fit MultiVar.m, which can be
found in the packages zip file.
13
For those not familiarized with Matlab, cell arrays are a type of flexible structure that
can accommodate any kind of data. They are similar to the use of lists in R.
16
(40)
with:
t N (0, St )
St =
2
1,S
t
1,2,St
1,2,St
2
2,S
t
(41)
!
(42)
% Defining input
dep=logRet(:,1:2);
nLag=1;
k=2;
advOpt.diagCovMat=0;
doIntercept=0;
7
8
9
This implies that all elements in the covariance matrix are estimated from the data.
If advOpt.diagCovMat=1, then only the elements in the diagonal (the variances) are
estimated and the rest (the non diagonal elements, the covariances) are all set to zero.
17
5.4
18
yt = 0.5 + t
State 1
yt = 0.5 + t
2
t N (0, 0.5 )
t N (0, 1)
19
State 2
State 1
State 2
(43)
(44)
(45)
(46)
"
0.95 0.1
0.05 0.9
(47)
2
3
4
5
6
clear; clc;
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
%
%
%
%
32
33
17
20
34
Coeff.S param(1,2)=-.5;
35
36
37
38
39
40
41
42
43
44
45
46
Coeff.indepMean=[1 0];
Coeff.indepStd= [0 0];
47
48
49
50
51
52
53
54
rmpath('m Files');
The inputs to the simulation function MS Regress Sim are explained within the codes comments. When running the previous
script, a figure with the time series plot of the simulated model will
be created:
21
22
23
Input Argument
advOpt.distrib
advOpt.std method
advOpt.useMex
Possible Values
Normal,t or GED
1 or 2
1 or 0
advOpt.constCoeff
advOpt.diagCovMat
advOpt.optimizer
advOpt.printOut
advOpt.printIter
advOpt.doPlots
1 or 0
fminsearch,fmincon
or fminunc
1 or 0
1 or 0
1 or 0
Default Value
Normal
1
0
A structure with
fields containing
string e (all
coefficients are
estimated from the
data)
1
fminsearch
1
1
1
Special thanks for Zhuanxin Ding for providing a clever numerical transformation in
the transition matrix that allows for the model to be estimated without the need of equality
constraints in the optimization, that is, using functions fminsearch and fmincon. See
Zhuanxin [2012] for details.
24
7.1
mex -setup;
This will take you to a set of steps for configuring your default mex
compiler to MS VC 2008. After that, just use the command:
1
http://www.microsoft.com/express/
25
choose whether you want to estimate the parameter from the data or
if you want to fix it to a specific value. This feature also holds for
multivariate models.
Consider the following case: you know for sure (or at least have a
theory) that one (or more) of the switching coefficients (say column 2
of indep) has the value of 0.5 when the model is in state 1 and value
of -0.5 when the model is in state 2. You now want to know what are
the maximum likelihood estimates for the other coefficients given this
restriction. The package allow for this particular specification (or any
other as matter of fact) to be set. The interface for using constrained
estimation has the following principles:
1. The parameters are grouped with the notation:
nS P aram: All non switching coefficients at indep matrix
(which were chosen with argument S)
S P aram: All switching coefficients at indep matrix (also
chosen with input S)
p: Transition matrix
covM at: Covariance matrix of innovations
df : Degrees of freedom for t distribution (if applicable)
K: Parameter for GED distribution (if applicable)
2. The size of each of these fields are set according to the number of
switching/non switching parameters and the number of states in
the model (value of k). For all of them (except covM at), the cells
iterates over the equations in the system, the columns iterate
the states and the rows iterate the coefficients. For instance, for
nS Param{iEq}, the element (1,1) of this matrix is the first non
switching parameters of equation iEq, the element (2,1) is the
second non switching parameter and so on. For S Param{iEq},
the element (1,2) is the parameter of the first switching variable,
at state 2, equation iEq. The sizes of covMat, df and K also
have to respect the choices made at input S. For instance if the
model is switching in the standard deviation of the innovations,
then covMat should have size {1,k}, otherwise it should be a
{1,1} cell. For the case of multivariate models, covMat should
be sized according to the number of equations in the system.
3. The rule for building the fields is, use the string 'e' (as in estimate) if you want the respective parameter to be estimated from
26
(48)
(49)
t N (0, 12 )
(50)
State 2 (St = 2)
(51)
(52)
t N (0, 22 )
(53)
with:
P=
p1,1 p2,1
p1,2 p2,2
(54)
% Defining Inputs
k=2;
S=[0 1 1 1];
advOpt.distrib=`Normal';
advOpt.std method=1;
27
6
7
8
9
10
11
12
advOpt.constCoeff.covMat{1}(1,1)={'e'};
advOpt.constCoeff.covMat{2}(1,1)={'e'};
13
advOpt.constCoeff.p={'e','e' ; 'e','e' };
14
15
16
17
28
(55)
(56)
t N (0, 0.0004)
(57)
State 2 (St = 2)
(58)
(59)
t N (0, 22 )
(60)
with:
P=
0.95 p2,1
0.05 p2,2
(61)
% Defining inputs
k=2;
S=[0 1 1 1];
advOpt.distrib='Normal';
advOpt.std method=1;
6
7
8
9
10
11
12
% Defining restrictions
advOpt.constCoeff.nS Param{1}={'e'};
advOpt.constCoeff.S Param{1}={0.5, 'e' ; 'e',-0.8};
advOpt.constCoeff.covMat{1}(1,1)={0.0004};
advOpt.constCoeff.covMat{2}(1,1)={'e'};
advOpt.constCoeff.p={0.95,'e' ; 0.05,'e'};
Be aware that when constraining the transition matrix, the probabilities have to sum
to one in each column.
29
4
X
i (yti Sti ) + t
(62)
i=1
t N (0, 2 )
(63)
(64)
4
X
i zti + t
(65)
i=1
By rearranging 62 we get:
yt = St + zt
(66)
where zt are the residuals from this reduced model. The two steps
for the approximation which can be used to estimate Hamiltons model
are:
1. Estimate using MS Regress Fit:
yt = St + t
2
(67)
t N (0, )
(68)
St = 1, 2
(69)
30
4
X
i ti + t
(70)
i=1
t N (0, 2t )
(71)
23
31
Parameter
1
2
p1,1
p2,2
2
Hamilton [1989]
1.16
-0.36
0.9
0.75
0.866
1
2
3
4
0.01
-0.06
-0.25
-0.21
0.126
0.104
-0.133
-0.104
From Table 2, one can see that the parameters are fairly comparable for the markov regime switching part of the model. For the autoregressive part, they are not as comparable as for the first part but,
since most of the i are not statistically significant, the approximation
performance is still good. When looking at the regimes probabilities
(Hamilton [1994], page 697), it is also clear that they are very similar.
The code for this estimation is available within the packages zip file
(Script Hamilton Comparison.m).
You probably want to apply the package to your own time series. This
topic will set some advices for using the fitting function.
1. For a better convergence, always check the scale of your dependent and independent variables. For instance, lets say the
explained variable varies from 0.1 to 0.1, while one of the independent varies from 1000 to 1000. If you estimate with this
setup (without any correction) the algorithm may not converge
well24 . In this case just divide the corresponding independent
24
This is usually associated with the algorithm converging to -Inf in the log likelihood
32
variable by 1000 so that they are correctly scaled. This gentlemans (linear) transformation will help the optimization functions (fminsearch, fminunc or fmincon) to find the set of maximum likelihood parameters.
2. Always try to estimate simple models. For instance, dont try
to estimate any model with k > 3 and number of explanatory
variables higher than 4. The models size (number of parameters) grows exponentially as n and k grows. For instance, in a
univariate framework, if k = 5, n = 4 (4 explanatory variables)
and youre switching in all coefficients, then the model has 50
parameters to be estimated from data, which is definitely too
much for a gradient descent method (fmincon function). Dont
get me wrong, the package will try to estimate it, but the solution is probably a local maximum and you cant really trust the
output you get.
3. If using constrained estimation, make reasonable choices for the
restricted coefficients, otherwise the function will have a hard
time in finding the maximum likelihood estimates.
4. With the last update in the package, the choice for the optimizer
to be used in the maximum likelihood was made available. If
you are having problems in the estimation, try to change the
optimizer and check whether the problem still persists.
If after those steps youre still having problems converging to a
solution, send me an email with a nice personal introduction and an
attached zip file containing:
The scripts youre running (the main .m file). This should be
send with all auxiliary m-files and data. The main program
should run without any problem except the one youre reporting.
The error message (if there is one, could be in .txt or just in the
email scope).
10
33
the error messages that people can get when running the code. Next,
Table 3 you can find these messages, along with respective causes and
solutions. If you have an error message which is not there, please let
me know and Ill add it to the table.
Error Message
FMINCON/FMINSEARCH
cannot continue because
user supplied objective
function failed with the
following error: Variable
indep nS is used as a
command function.
Cause
Solution
This is an issue that usually appears when working with optimizer fmincon. Basically the optimizing function got stuck
in a particular value of the
log likelihood function and
was not able to get out
on its own. Usually this
means that the input data
is badly shaped (e.g. outliers) or the case of bad
starting coefficients.
Table 3: Possible error messages, causes and solutions when using function
MS Regress Fit.
34
11
35
you still cant figure it out, perhaps it is a version issue. Try the code
in a newer version of Matlab and check how it goes. If still there are
problems, fell free to email me.
Q: Im rewriting some parts of MS Regress but Im having problems
with the programming part. Can you help me with the codes?
A: Sorry but no. Helping people with programming in Matlab turned
out to have a high cost in my side. If I helped everyone I would not
have time to do my normal job. While I wont help you directly with
the coding, I am willing to give you with some general guidelines of
how (and where) to change the code.
Q: Im estimating my model with MS Regress and and the optimization converges. However, I noticed that some of the standard error
and p-values are NaN (not a number). Why is that?
A: If you are finding NaN values for standard error or p-value, then
it is because the numerical algorithm that calculates the first and/or
second derivative has failed at that particular part. My advice is to either use an alternative optimization function (e.g. fmincon) or change
the method that calculates the standard errors.
But, there a specific case where NaN are expected. If you are estimating the model with fminsearch or fminunc then the last row of
the transition matrix is not estimated, but calculated indirectly from
the other probabilities. Therefore it is not possible to calculate the
first/second derivative and the standard error and p-value are not
available.
Q: Are there other versions of the package written in different programming languages?
A: Yes, there are. Some time ago I wrote a version of MS Regress for
R. The package can be downloaded here:
https://r-forge.r-project.org/projects/rmetrics/
or installed with the following command in R:
36
install.packages(fMarkovSwitching, repos=http://R-Forge.R-project.org)
But be aware that given time constraints, Im no longer maintaining
this package.
Q: Are you interested in working in a consultancy job?
A: Yes. Fell free to drop me an email and we will discuss it.
12
Reporting a bug
Im very happy to hear about any sort of bug in the program. If you
have found one please report it to my email containing:
Name of functions and lines of alleged bug (if applicable).
Reason why you think it is a bug.
Zip file with codes youre running (including data and scripts).
MATLAB s error message (if applicable).
And Ill happily look into it.
13
If you have used the package for research or teaching, make sure you
cite the code, not just for acknowledgment but also for replication of
results. My suggested citation is to use the paper from SSRN25 :
Perlin, M. (2014) MS Regress - The MATLAB Package for Markov
Regime Switching Models. Available at SSRN: http://ssrn.com/
abstract=1714016 or http://dx.doi.org/10.2139/ssrn.1714016
14
Final remarks
The interest of this paper was in presenting the main features of the
MATLAB package MS Regress. As one can see, the interface of the
25
Available in http://ssrn.com/abstract=1714016.
37
software is quite intuitive and it should be flexible enough to handle personalized markov switching specifications without any change
in the original code. For any doubts which are not clear from this
document, fell free to contact me at [email protected].
38
References
Carol Alexander. Market Risk Analysis: Practical Financial Econometrics. Wiley, 2008.
Chris Brooks. Introduction to Econometrics. Cambridge University
Press, 2002.
James Hamilton. A new approach to the economic analysis of nonstationary time series and the business cycle. Econometrica, 57
(2):35784, March 1989. URL http://ideas.repec.org/a/ecm/
emetrp/v57y1989i2p357-84.html.
James Hamilton. Time Series Analysis. Princeton University Press,
1994.
James Hamilton. Regime switching models. Palgrave Dictionary of
Economics, 2005.
J. Kim and R. Nelson. State Space Model with Regime Switching:
Classical and Gibbs-Sampling Approaches with Applications. The
MIT Press, 1999.
Ruey Tsay. Analysis of Financial Time Series. John Wiley and Sons,
2002.
Peijie Wang. Financial Econometrics. Taylor and Francis, 2003.
Ding Zhuanxin. An implementation of markov regime switching model
with time varying transition probabilities in matlab. SSRN elibrary,
2012. URL http://ssrn.com/abstract=2083332.
39