V91i04 PDF
V91i04 PDF
Abstract
We describe the package MSGARCH, which implements Markov-switching GARCH
(generalized autoregressive conditional heteroscedasticity) models in R with efficient C++
object-oriented programming. Markov-switching GARCH models have become popular
methods to account for regime changes in the conditional variance dynamics of time se-
ries. The package MSGARCH allows the user to perform simulations as well as maximum
likelihood and Bayesian Markov chain Monte Carlo estimations of a very large class of
Markov-switching GARCH-type models. The package also provides methods to make
single-step and multi-step ahead forecasts of the complete conditional density of the vari-
able of interest. Risk management tools to estimate conditional volatility, value-at-risk,
and expected-shortfall are also available. We illustrate the broad functionality of the
MSGARCH package using exchange rate and stock market return data.
1. Introduction
In 2003, Robert Engle received the Nobel Prize for his “contribution to methods of analyzing
economic time series with time-varying volatility (ARCH)” (Nobel Media 2003). The seminal
paper introducing the orginal autoregressive conditional heteroscedasticity (ARCH) model is
2 MSGARCH: Markov-Switching GARCH Models in R
Engle (1982), while its generalization to GARCH was introduced by Bollerslev (1986). Since
then, multiple extensions of the GARCH scedastic function have been proposed to capture
additional stylized facts observed in financial and economic time series, such as nonlineari-
ties, asymmetries, and long-memory properties; see Teräsvirta (2009) for a review. According
to the Time Series Analysis (Hyndman 2019) and Empirical Finance (Eddelbuettel 2019)
task views at https://CRAN.R-project.org/web/views, the following implementations of
univariate GARCH-type models are available in the R (R Core Team 2018) programming
language: bayesGARCH (Ardia and Hoogerheide 2010), fGarch (Wuertz, Chalabi, Miklovic,
Boudt, and Chausse 2016), GAS (Ardia, Boudt, and Catania 2019b), gets (Pretis, Reade, and
Sucarrat 2018), GEVStableGarch (Sousa, Otiniano, Lopes, and Diethelm 2015), lgarch (Su-
carrat 2015), rugarch (Ghalanos 2017) and tseries (Trapletti and Hornik 2017). In GARCH-
type models, the conditional volatility is driven by shocks in the observed time series. An
alternative approach is to assume that volatility is driven by volatility-specific shocks. This
is the case in stochastic volatility models, as available in the R package stochvol (Kastner
2016).
Recent studies show that volatility predictions by GARCH-type models may fail to capture the
true variation in volatility in the case of regime changes in the volatility dynamics (see, e.g.,
Lamoureux and Lastrapes 1990; Bauwens, Backer, and Dufays 2014). A solution to this
problem is to allow the parameters of the GARCH model to vary over time according to
a latent discrete Markov process. This approach is called the Markov-switching GARCH
(MSGARCH) model, which leads to volatility forecasts that can quickly adapt to variations
in the unconditional volatility level.
MSGARCH models are mainly used in finance. Other fields of applications include the anal-
ysis of business cycles in economics (see, e.g., Kim and Nelson 1999) and the forecasting of
windpower (see, e.g., Zhang, Wang, and Wang 2014). Their use is not widespread in industry
applications mainly because their implementation is tedious and their estimation is not trivial.
We fill this gap with the R package MSGARCH (Ardia, Bluteau, Boudt, Catania, Ghalanos,
Peterson, and Trottier 2019a), and provide researchers and practitioners with a ready-to-use
program within the R environment. The R package MSGARCH implements the specifica-
tion of Haas, Mittnik, and Paolella (2004a), which, compared to the MSGARCH model in
the seminal work of Gray (1996), has the advantage that the estimation does not face the
“path-dependency problem”.1 In their model, the authors define K separate GARCH-type
processes, one for each regime of the unobserved Markov chain. In addition to its appealing
computational aspects, the MSGARCH model of Haas et al. (2004a) has conceptual advan-
tages. Indeed, one reason for specifying Markov-switching models that allow for different
GARCH behavior in each regime is to capture the difference in the variance dynamics of low-
and high-volatility periods.
The R package MSGARCH provides a comprehensive set of methods for estimating, sim-
ulating, and forecasting with MSGARCH models. It includes the possibility of specifying
different GARCH processes and conditional distributions for each state. Evaluation of risk
management metrics such as the value-at-risk and the expected-shortfall is also available. The
1
Literature on computationally feasible implementations of MSGARCH models started with the seminal
work of Gray (1996), Dueker (1997), and Klaassen (2002), who proposed different solutions to the “path-
dependency problem” raised by Cai (1994) and Hamilton and Susmel (1994). It means that, for a sample of
size T and a MSGARCH model with K regimes, the evaluation of K T different volatility paths is required,
rendering the estimation intractable for medium and large sample sizes.
Journal of Statistical Software 3
where pi,j ≡ P[st = j | st−1 = i] is the probability of a transition from state st−1 = i to
state st = j. Obviously, the following constraints hold: 0 < pi,j < 1 ∀i, j ∈ {1, . . . , K},
and K 2
j=1 pi,j = 1, ∀i ∈ {1, . . . , K}. Given the parametrization of D(·), we have E[yt | st =
P
k, It−1 , ] = hk,t , that is, hk,t is the variance of yt conditional on the realization of st = k.
In the MSGARCH model of Haas et al. (2004a), the conditional variances hk,t for k = 1, . . . , K
are assumed to follow K separate GARCH-type processes which evolve in parallel.
Independent states
A related specification has been also introduced by Haas et al. (2004b) and is referred to
as the mixture of GARCH. In this case, we assume that st is sampled independently over
time from a Multinomial distribution with support {1, . . . , K} and vector of probabilities
ω = (ω1 , . . . , ωK )> , that is P[st = k] = ωk . We have that the same parametric formulation
of (1) with K separate GARCH-type models defined for each component of the mixture.4
Below we briefly present the scedastic specifications available in the R package MSGARCH.
Each of them is identified with a label used in the code for defining a model specification.
Similarly, model coefficients are also identified with labels.
ARCH model
The ARCH model of Engle (1982) is given by:
2
hk,t ≡ α0,k + α1,k yt−1 ,
for k = 1, . . . , K. In this case, we have θ k = (α0,k , α1,k )> . To ensure positivity, we require
that α0,k > 0 and α1,k ≥ 0. Covariance-stationarity in each regime is obtained by requiring
that α1,k < 1. The ARCH specification is identified with the label "sARCH".
GARCH model
The GARCH model of Bollerslev (1986) is given by:
2
hk,t ≡ α0,k + α1,k yt−1 + βk hk,t−1 ,
for k = 1, . . . , K. In this case, we have θ k = (α0,k , α1,k , βk )> . To ensure positivity, we require
that α0,k > 0, α1,k > 0, and βk ≥ 0. Covariance-stationarity in each regime is obtained by
requiring that α1,k + βk < 1. The GARCH specification is identified with the label "sGARCH".
EGARCH model
The Exponential GARCH (EGARCH) of Nelson (1991) is given by:
ln(hk,t ) ≡ α0,k + α1,k |ηk,t−1 | − E [|ηk,t−1 |] + α2,k ηk,t−1 + βk ln(hk,t−1 ) ,
for k = 1, . . . , K, where the expectation E[|ηk,t−1 |] is taken with respect to the distribution
conditional on regime k. In this case, we have θ k = (α0,k , α1,k , α2,k , βk )> . This specification
takes into consideration the so-called leverage effect where past negative observations have
a larger influence on the conditional volatility than past positive observations of the same
magnitude (Black 1976; Christie 1982). Positivity is automatically ensured by the model
specification. Covariance-stationarity in each regime is obtained by requiring that βk < 1.
The EGARCH specification is identified with the label "eGARCH".
GJR model
The GJR model of Glosten, Jagannathan, and Runkle (1993) is also able to capture the
asymmetry in the conditional volatility process. This model is given by:
2
hk,t ≡ α0,k + (α1,k + α2,k I{yt−1 < 0})yt−1 + βk hk,t−1 ,
for k = 1, . . . , K, where I{·} is the indicator function taking value one if the condition holds,
and zero otherwise. In this case, we have θ k = (α0,k , α1,k , α2,k , βk )> . The parameter α2,k
controls the degree of asymmetry in the conditional volatility response to the past shock
in regime k. To ensure positivity, we require that α0,k > 0, α1,k > 0, α2,k ≥ 0, βk ≥ 0.
Covariance-stationarity in each regime is obtained by requiring that α1,k + α2,k E[ηk,t 2 I{η
k,t <
0}] + βk < 1. The GJR specification is identified with the label "gjrGARCH".
6 MSGARCH: Markov-Switching GARCH Models in R
TGARCH model
Zakoian (1994) introduces the TGARCH specification where the conditional volatility is the
dependent variable instead of the conditional variance. This model is given by:
1/2 1/2
hk,t ≡ α0,k + (α1,k I{yt−1 ≥ 0} − α2,k I{yt−1 < 0})yt−1 + βk hk,t−1 ,
for k = 1, . . . , K. In this case, we have θ k = (α0,k , α1,k , α2,k , βk )> . To ensure positivity,
we require that α0,k > 0, α1,k > 0, α2,k > 0 and βk ≥ 0. Covariance-stationarity in each
2 + β 2 − 2β (α 2
regime is obtained by requiring that α1,k k k 1,k + α2,k )E[ηt,k I{ηt,k < 0}] − (α1,k −
2 2
α2,k )E[ηk,t I{ηk,t < 0}] < 1 (see Francq and Zakoian 2011, Section 10.2). The TGARCH
specification is identified with the label "tGARCH".
2 I{η
The quantities E[ηt,k I{ηt,k < 0}] and E[ηt,k t,k < 0}] required for the covariance-stationarity
conditions in the GJR and TGARCH models, and the quantity E [|ηk,t−1 |] required in the
conditional variance equation of the EGARCH model, are implemented following Trottier
and Ardia (2016).
Normal distribution
The probability density function (PDF) of the standard normal distribution is given by:
1 1 2
fN (η) ≡ √ e− 2 η , η ∈ R.
2π
This distribution is identified with the label "norm".
Student-t distribution
The PDF of the standardized Student-t distribution is given by:
ν+1
!− ν+1
Γ 2 η2 2
fS (η; ν) ≡ p 1 + , η ∈ R,
(ν − 2)π Γ ν2 (ν − 2)
where Γ(·) is the Gamma function. The constraint ν > 2 is imposed to ensure that the second
order moment exists. The kurtosis of this distribution is higher for lower ν.5 This distribution
is identified with the label "std".
5
For ν = ∞, the Student-t distribution is equivalent to the normal distribution.
Journal of Statistical Software 7
GED distribution
The PDF of the standardized generalized error distribution (GED) is given by:
1 ν 1/2
νe− 2 |η/λ| Γ(1/ν)
fGED (η; ν) ≡ (1+1/ν) , λ≡ 1/ν
, η ∈ R,
λ2 Γ(1/ν) 4 Γ(3/ν)
where ν > 0 is the shape parameter.6 This distribution is identified with the label "ged".
Skewed distributions
Fernández and Steel (1998) provide a simple way to introduce skewness into any unimodal
standardized distribution, via the additional parameter ξ > 0; if ξ = 1 the distribution turns
out to be symmetric. Trottier and Ardia (2016) derive the moments of the standardized
Fernandez-Steel skewed distributions which are needed in the estimation of the EGARCH,
GJR, and TGARCH models. We refer the reader to that publication for details. The skewed
version of the normal, Student-t, and GED distributions are identified with the labels "snorm",
"sstd", and "sged", respectively.
In Panels A and B of Table 1, we provide a summary of the scedastic functions and conditional
distributions available in the package.
where f (yt | Ψ, It−1 ) denotes the density of yt given past observations, It−1 , and model pa-
rameters Ψ. For MSGARCH, the conditional density of yt is:
K X
X K
f (yt | Ψ, It−1 ) ≡ pi,j zi,t−1 fD (yt | st = j, Ψ, It−1 ) , (4)
i=1 j=1
where zi,t−1 ≡ P[st−1 = i | Ψ, It−1 ] represents the filtered probability of state i at time t − 1
obtained via Hamilton’s filter; see Hamilton (1989) and Hamilton (1994, Chapter 22) for
details. Similarly, for the mixture of GARCH model, the conditional density of yt is:
K
X
f (yt | Ψ, It−1 ) ≡ ωj fD (yt | st = j, Ψ, It−1 ) . (5)
j=1
In both (4) and (5), the conditional density of yt in state/component st = k given Ψ and
It−1 is denoted by fD (yt | st = k, Ψ, It−1 ).
6
Special cases of this distribution are obtained for ν = 1 (Laplace distribution) and ν = 2 (normal distri-
bution). The uniform distribution is obtained in the limit ν → ∞.
8 MSGARCH: Markov-Switching GARCH Models in R
Table 1: Specifications and methods available in the R package MSGARCH. Panel A reports
the conditional volatility models. Panel B reports the PDF of the conditional distributions.
Panel C reports the methods.
estimation, we follow Ardia (2008), by combining the likelihood with a diffuse (truncated)
prior f (Ψ) to build the kernel of the posterior distribution f (Ψ | IT ). As the posterior is of
an unknown form (the normalizing constant is numerically intractable), it must be approxi-
mated by simulation techniques. In the R package MSGARCH, draws from the posterior are
generated with the adaptive random-walk Metropolis sampler of Vihola (2012). For both ML
and MCMC estimations, positivity and covariance-stationarity constraints of the conditional
variance in each regime are ensured during the estimation.8
As detailed in Frühwirth-Schnatter (2006), mixture (and therefore Markov-switching) models
are identified up to a relabeling of the coefficients. For MSGARCH and mixture of GARCH
models, the same applies when the model specification in each regime is the same, and the
prior is symmetric. In the R package MSGARCH, by default the identification is carried out
by ordering the states according to the unconditional variance of each GARCH-type process,
from lower to higher values.
In the case of the Bayesian estimation, the likelihood function is combined with a prior f (Ψ) to
build the kernel of the posterior distribution f (Ψ | IT ). We build our prior from independent
diffuse priors as follows:
f (Ψ) = f (θ 1 , ξ 1 ) · · · f (θ K , ξ K )f (P)
f (θ k , ξ k ) ∝ f (θ k )f (ξ k ) I{(θ k , ξ k ) ∈ CSC k } (k = 1, . . . , K)
f (θ k ) ∝ fN (θ k ; µθ k , diag(σ 2θ )) I{θ k ∈ PC k } (k = 1, . . . , K)
k
where CSC k denotes the covariance-stationarity condition and PC k the positivity condition
in regime k; see Trottier and Ardia (2016). ξk,1 is the asymmetry parameter and ξk,2 the
tail parameter of the skewed Student-t distribution in regime k. fN (•; µ, Σ) denotes the
multivariate normal density with mean vector µ and covariance matrix Σ. Finally, µ• and
σ 2• are vectors of prior means and variances (of appropriate sizes), whose entries are set by
default to zero and to 1,000, respectively.
• variance.spec: A list with the element model, a character vector (of size K, that
is, the number of regimes/components) containing the conditional variance specifica-
tions. Valid models are "sARCH", "sGARCH", "eGARCH", "gjrGARCH" and "tGARCH" (see
Section 2.2 for details). By default, variance.spec = list(model = c("sGARCH",
"sGARCH")).
• switch.spec: A list with elements do.mix and K. The first element, do.mix, is a logical
indicating if the model specification is Markov-switching or mixture of GARCH. If
do.mix = TRUE, a mixture of GARCH (Haas et al. 2004b) is specified, while if do.mix =
FALSE, a MSGARCH (Haas et al. 2004a) is specified. By default do.mix = FALSE. The
second element, K, is an integer which controls for the number of regime/components.
If the length of model in variance.spec and distribution in distribution.spec is
one, then the chosen specification is the same across the K regime/components. By
default, K = NULL, that is, the number of components is determined from the length of
the vector model in variance.spec.
• constraint.spec: A list with elements fixed and regime.const. The first element,
fixed, is a list with numeric entries and named elements. This argument controls
for fixed parameters set by the user. The names of the fixed entries have to co-
incide with the labels associated to the model parameters. For instance, if fixed =
list(beta_1 = 0)), beta_1 will be fixed to 0 during the optimization. The second
element, regime.const, is a character vector. It controls for the parameters which
are set equal across regimes. The names of the entries in the list have to coincide
with the names of the model parameters minus the regime indicator. For instance, if
constraint.spec = list(regime.const = "beta"), all the parameters named beta
will be the same across regimes. Note that both types of constraint cannot be defined
contemporaneously, that is, either fixed or regime.const can be specified. By default,
fixed and regime.const are set to NULL.
• prior: A list with elements mean and sd. The elements mean and sd are both lists with
numeric named elements which allow the user to adjust the prior mean and standard
deviation of the independent (symmetric) truncated normal priors in (6). The names of
the entries in the lists have to coincide with the labels associated to model parameters.
For instance, if prior = list(mean = list(beta_1 = 0.7), sd = list(beta_1 =
0.1)), the prior mean of beta_1 will be set to 0.7 while the prior standard devia-
tion will be set to 0.1.
As an illustration, let us consider the MSGARCH model of Haas et al. (2004a) with K = 2
regimes. This model assumes that conditionally on each regime of the Markov chain, returns
are normally distributed with GARCH(1, 1) variances. It can be easily specified with the
following lines of code:
Journal of Statistical Software 11
R> library("MSGARCH")
R> spec <- CreateSpec()
R> summary(spec)
The output printed in the console provides information regarding: (i) the model, such as
whether a Markov-switching or mixture of GARCH has been selected, (ii) the GARCH-type
specification within each regime, (iii) the number of variance parameters, and (iv) the number
of shape parameters in each regime. The presence of fixed parameters or equal parameters
across regimes set by fixed.pars and regime.const.pars is also displayed.
We now report examples of various MSGARCH models that can be specified in the R pack-
age MSGARCH. We refer the reader to the documentation for additional examples; see
help("CreateSpec").
In this model, the only element that switches according to the Markov chain is the conditional
variance.
• par0: A numeric vector of starting parameters that overwrites the default starting
parameter scheme (see footnote 7 on page 8). The starting parameters should follow
the order of the default parameter of the ‘MSGARCH_SPEC’ object. By default par0 =
NULL.
• do.se: A logical indicating if standard errors are computed. In the case where the stan-
dard errors are not needed, setting do.se = FALSE will speed up estimation. Default
is do.se = TRUE.
• OptimFUN: A custom optimization function set by the user. By default, OptimFUN is set
such that optimization is done via the well-known Broyden-Fletcher-Goldfarb-Shanno
(BFGS) algorithm using the optim() function with method = "BFGS". For a custom
optimizer, we refer to the examples in help("FitML").
The function FitML() outputs an object of class ‘MSGARCH_ML_FIT’ which can be used with
several MSGARCH functionalities (see Section 3.5). We refer to help("FitML") for more
details.
Regarding the function FitMCMC(), the following control parameters may be defined:
9
We follow Ardia (2008) and use non-informative truncated normal priors.
Journal of Statistical Software 13
• nburn: An integer indicating the number of discarded draws (i.e., the burn-in phase).
Default is nburn = 500L.
• nthin: An integer indicating the thinning factor (every nthin draws are kept in the
posterior sample). Default is nthin = 10L.
• do.sort: A logical indicating if the MCMC draws are post-processed and sorted fol-
lowing Geweke (2007). By default, do.sort = TRUE, such that the MCMC draws are
ordered to ensure that the unconditional variance is an increasing function of the state
value. If the user sets do.sort = FALSE, no sorting is imposed, and label switching
can occur (for a given model specification). In this case, the user can extract the
MCMC chain and investigate a suitable identification constraint with the R package
label.switching (Papastamoulis 2016).10
The main purpose of nthin is to diminish the autocorrelation in the MCMC chain. The
argument nburn also serves as pre-optimization step. The total length of the chain is:
nmcmc/nthin. Finally, the chain is converted to a coda object, meaning that all functions for
MCMC analysis available in the R package coda (Plummer, Best, Cowles, and Vines 2006)
are available.
Illustration of FitML()
As an example, we estimate the MSGARCH model of Haas et al. (2004a) on daily observations
of the Deutschmark vs. British Pound (DEM/GBP) foreign exchange log-returns available in
the MSGARCH package. The sample period is from January 3, 1985, to December 31, 1991,
for a total of 1,974 observations. This data set has been promoted as a standard benchmark
for GARCH time series software validation (Brooks, Burke, and Persand 2001). It can be
loaded in the workspace by running:
The output of summary() reports various information regarding model estimation. Esti-
mated parameters are displayed along with significance levels according to their asymptotic
Gaussian distribution. The summary also returns the unconditional distribution (Stable
probabilities) of the Markov chain, π, such that Pπ = π. Finally, the log-likelihood
evaluated at its optimum together with Akaike and Bayesian information criteria are also
reported. Note that the ML estimation results are ordered with respect to the unconditional
variance in each regime, from lower to higher values, when regimes have the same model
specification.
Journal of Statistical Software 15
Illustration of FitMCMC()
The function FitMCMC() outputs an object of class ‘MSGARCH_MCMC_FIT’ which, like the class
‘MSGARCH_ML_FIT’, can be used with several MSGARCH functionalities. We refer the reader
to the documentation for details; see help("FitMCMC").
Bayesian estimation for the MSGARCH model previously specified in the object ms2.garch.n
is easily performed with:
R> set.seed(1234)
R> fit.mcmc <- FitMCMC(spec = ms2.garch.n, data = dem2gbp)
The adaptive MCMC estimation procedure generates draws from the posterior distribution.11
These draws, referred to as the posterior sample, are used to characterize the distribution of
the parameters. As for FitML(), the summary() method is defined for an object of class
‘MSGARCH_MCMC_FIT’ delivered by FitMCMC():
R> summary(fit.mcmc)
------------------------------------------
Posterior mean stable probabilities:
State 1 State 2
0.8042 0.1958
------------------------------------------
Acceptance rate MCMC sampler: 27.6%
nmcmc: 10000
nburn: 5000
nthin: 10
------------------------------------------
DIC: 1986.655
------------------------------------------
Among the various information reported, part of the output is generated by calling the
summary() method of the R package coda (Plummer et al. 2006). This part coincides with:
(i) the posterior mean (Mean), (ii) standard deviation (SD), (iii) naive standard error of the
mean (i.e., ignoring the autocorrelation in the MCMC chain) (SE), (iv) time series standard
error based on an estimate of the spectral density at zero (TSSE), and (v) the relative numer-
ical efficiency (RNE), defined as (SE/TSSE)2 . Other useful statistics are the acceptance rate
of the MCMC sampler and the deviance information criterion (DIC) of Spiegelhalter, Best,
Carlin, and Van der Linde (2002).
3.3. Forecasting
The R package MSGARCH implements functionalities to perform forecasting of the under-
lying time series for which the model has been estimated. Suppose an MSGARCH model is
estimated using the first T observations (y1 , . . . , yT ). Then, the user may be interested in: (i)
forecasting the volatility at time T + h (h > 0), that is, the standard deviation of the random
variable yT +h |IT ; or (ii) forecasting the shape of the distribution of yT +h |IT . Both types of
forecasts can be easily obtained using the function predict() in the R package MSGARCH
starting from an object of class ‘MSGARCH_MLE_FIT’ or ‘MSGARCH_BAY_FIT’ obtained via the
functions FitML() and FitMCMC(), respectively.
Volatility and density forecasts are performed via the predict() method defined for an
object of class ‘MSGARCH_MLE_FIT’ or ‘MSGARCH_BAY_FIT’. The horizon of the prediction, h,
is determined with the integer argument nahead (default: nahead = 1L). For h = 1, the
predictive volatility and density are available in closed form; in other circumstances (if h > 1)
forecasts are obtained by simulation, drawing iteratively a new observation from the (one-step
ahead) predictive distribution and updating the K conditional variance processes accordingly.
The number of draws controlling for the accuracy of the simulations are defined in the ctr
argument. Specifically, the entry nsim in ctr defines the number of draws such that, ctr =
list(nsim = 1e4L) indicates that 10,000 simulations are performed.
If an object of class ‘MSGARCH_BAY_FIT’ is provided, the number of simulations used to draw
from the predictive distribution is equal to the number of draws in the posterior distribu-
tions.12 However, if nsim is specified, then for each posterior draw, nsim observations are
sampled.
12
This is specified in the ctr argument of the FitMCMC() function via the nmcmc argument.
Journal of Statistical Software 17
The predict() method returns an object of class ‘MSGARCH_FORECAST’ with two elements:
vol and draw. The first element, vol, is a numeric vector of length h, containing the standard
deviations of the distributions yT +j |IT for j = 1, . . . , h. The second element, draw, is a matrix
of dimension h × nsim of the simulated MSGARCH process. If we set do.return.draw =
FALSE in the function call, then draw is NULL.
For instance, the following code returns the five-step ahead conditional volatilities and draws
for the dem2gbp log-returns data using the MSGARCH model of Haas et al. (2004a) estimated
in Section 3.2:
The predict() method also accepts the additional numeric argument newdata which allows
us to use a previous fit and to augment the data with new observations before forecasting.
Thus, if the vector of new observations is of size T ∗ , the prediction is made for the random
variable yT +T ∗+h |IT +T ∗ , using the parameter estimates obtained with observations up to
time T .
It is straightforward to estimate these two metrics with the R package MSGARCH, starting
from a fitted object of class ‘MSGARCH_ML_FIT’ or ‘MSGARCH_MCMC_FIT’. Evaluation of VaR and
ES can be performed both in-sample and out-of-sample using the Risk() function. In-sample
evaluation means that we want to investigate the evolution of the two risk measures over the
estimation period, whereas out-of-sample refers to prediction. The α level is controlled via
the alpha argument in Risk(). The argument alpha is a numeric vector such that different
α levels can be evaluated contemporaneously. By default alpha = c(0.01, 0.05). Other
arguments are:
• do.its: A logical indicating if in-sample risk measures are computed. Default is do.its
= FALSE such that out-of-sample risk measures are computed.
• newdata: A numeric vector of new observations (see Section 3.3). By default, newdata
= NULL.
The function Risk() creates an object of class ‘MSGARCH_RISK’ with elements VaR and ES.
Both VaR and ES are a matrix of dimension nahead × length(alpha) containing the risk
measures, VaR and ES, respectively. If do.its = TRUE, these matrices contain the in-sample
levels such that their dimension is T × length(alpha).13
For instance, using the fit.ml object created in Section 3.3, the five-step ahead VaR and ES
measures at the 1% and 5% risk levels are computed as follows:
0.01 0.05
h=1 -1.211 -0.5851
h=2 -1.153 -0.5403
h=3 -1.101 -0.5469
h=4 -1.166 -0.5641
h=5 -1.085 -0.5614
R> risk$ES
13
If newdata is provided, the dimension is (T + T *) × length(alpha), where, as before, T * =
length(newdata).
Journal of Statistical Software 19
0.01 0.05
h=1 -1.549 -0.9403
h=2 -1.556 -0.9024
h=3 -1.588 -0.9075
h=4 -1.587 -0.9265
h=5 -1.551 -0.9068
Note that, if model estimation is performed via MCMC, and hence an object of class
‘MSGARCH_MCMC_FIT’ is provided to Risk(), the VaR and ES measures integrate the parameter
uncertainty; see Hoogerheide and Van Dijk (2010).
$draw
Sim #1 Sim #2
t=1 -0.1322 0.1943
t=2 -0.5581 0.2910
t=3 -0.5703 0.6642
t=4 -0.3568 0.2495
$state
Sim #1 Sim #2
t=1 1 2
t=2 1 2
t=3 2 2
t=4 2 1
$CondVol
, , k=1
Sim #1 Sim #2
t=1 0.2962 0.4212
t=2 0.2866 0.4067
t=3 0.3035 0.3961
20 MSGARCH: Markov-Switching GARCH Models in R
, , k=2
Sim #1 Sim #2
t=1 0.7095 0.7025
t=2 0.7006 0.7047
t=3 0.7919 0.7214
t=4 0.8295 0.8374
The function outputs the simulated MSGARCH process together with the simulated regimes
and the conditional volatilities in each state.
It is worth emphasizing the difference between predict() and simulate(). The function
predict() is used for forecasting the conditional volatility and the predictive distribution
(using the argument do.return.draw = TRUE) while the function simulate() aims at gen-
erating simulation paths for a given MSGARCH model.
To perform in-sample model selection, information criteria such as the Akaike information
criterion (Akaike 1974), the Bayesian information criterion (Schwarz 1978), and the deviance
information criterion (Spiegelhalter et al. 2002) are available. These are all measures of the
parsimony of statistical models in describing a given set of data, where lower values indicate a
better performance in terms of goodness-of-fit. They are estimated with the functions AIC()
and BIC() from the stats package (R Core Team 2018), and DIC() from the MSGARCH
package, respectively.
For instance, the BIC can be computed from the model fit:
R> BIC(fit.ml)
[1] 2005
Finally, the function ExtractStateFit() allows the user to extract single-regime model re-
sults from the fitted object ‘MSGARCH_ML_FIT’ or ‘MSGARCH_MCMC_FIT’. Hence, if the user
estimates a model with K regimes, he can retrieve the information of the K single-regime
layers as a list of length K. For instance, still considering the object fit.ml, if we want to
predict the five-step ahead VaR conditionally of being in the two regimes, we simply write:
State 1 State 2
h=1 -0.4411 -1.293
h=2 -0.4314 -1.515
h=3 -0.4244 -1.633
h=4 -0.4322 -1.724
h=5 -0.4206 -1.742
Journal of Statistical Software 21
Hence, we are able to evaluate the risk exposure of an investment conditionally on differ-
ent regimes of the market. All the other package functionalities, like Volatility() and
predict(), can be applied to the single-regime layers extracted via ExtractStateFit().
This way, scenario analyses can be easily performed.
In Panel C of Table 1, we provide a summary of the various methods available in the package.
4. Empirical illustration
In this section, we illustrate how the R package MSGARCH can be used for model comparison,
state/regime smoothing, and volatility filtering. Estimation via MCMC is also discussed. Our
illustration focuses on an in-sample analysis of the daily log-returns of the major equity index
for the Swiss market, namely the Swiss market index (SMI). MSGARCH models have been
shown to be superior than single-regime counterparts on out-of-sample backtesting results;
see Ardia, Bluteau, Boudt, and Catania (2018) for a large-scale empirical study of their
performance. An example of a backtest implementation is provided at the end of this section.
The dataset can be loaded in the workspace by running data("SMI", package = "MSGARCH")
in the console. The plot of the time series is presented in Figure 1. Well-known stylized facts
observed in financial time series, such as volatility clustering and presence of outliers, are
evident from Figure 1 (see, e.g., McNeil et al. 2015). Furthermore, we also note that large
(absolute) returns are more frequent at the start (1990–1993) and at the end (1997–2000) of
−5
Figure 1: Percentage daily log-returns of the Swiss market index for a period ranging from
November 12, 1990, to October 20, 2000, for a total of 2,500 observations.
22 MSGARCH: Markov-Switching GARCH Models in R
the sample, than in the middle (1993–1997). This suggests that the conditional variance is
time-varying according to a regime-switching specification. For the sake of illustration, we
consider the asymmetric two-state MSGARCH model implemented by Ardia (2008, Chap-
ter 7) and Mullen, Ardia, Gil, Windover, and Cline (2011, Section 5). This is an extension of
the MSGARCH model introduced in Haas et al. (2004a), where a GJR variance specification
with a Student-t distribution is assumed in each regime. The model may be written as:
where k ∈ {1, 2}. Note that the degree of freedom parameter of the Student-t distribution is
fixed across the regimes. Model specification and ML estimation of this model is performed
with the following code:
R> summary(fit.ml)
Parameter estimates indicate that the evolution of the volatility process is heterogeneous
across the two regimes. Indeed, we first note that the two regimes report different uncondi-
tional volatility levels:
R> set.seed(1234)
R> sqrt(250) * sapply(ExtractStateFit(fit.ml), UncVol)
as well as a different reactions to past negative returns: α2,1 ≈ 0.21 vs. α2,2 ≈ 0.15. Also the
volatility persistence in the two regimes is different. The first regime reports α1,1 + 12 α2,1 +β1 ≈
0.63 while the second regime reports α1,2 + 12 α2,2 + β2 ≈ 0.95.14 In summary, the first regime
is characterized by: (i) low unconditional volatility, (ii) strong volatility reaction to past
negative returns, and (iii) low persistence of the volatility process. Differently, the second
regime is characterized by: (i) high unconditional volatility, (ii) weak volatility reaction to
past negative returns, and (iii) high persistence of the volatility process. Clearly, regime
one would be perceived by market participants as “tranquil market conditions” with low
volatility levels, low persistence and high reaction to past negative returns, while regime two
as “turbulent market conditions” with high volatility levels and strong persistence.
b It ], P[St = k|Ψ,
Filtered, predicted, and smoothed probabilities (i.e., P[St = k|Ψ, b It−1 ] and
P[St = k|Ψ, IT ], respectively) can be computed starting from estimated objects using the
b
State() function. State() reports a list of four elements: (i) FiltProb, (ii) PredProb,
(iii) SmoothProb, and (iv) Viterbi. The first three elements are array objects of dimension
T × 1 × K containing the filtered, predicted, and smoothed probabilities at each time t,
respectively. The last element, Viterbi, is a matrix of dimension T ×1 of indices representing
decoded states according to the Viterbi algorithm detailed in Viterbi (1967).15 For instance,
smoothed probabilities of being in the second regime (k = 2) can be computed with the
following code:
14
Recall that E[η 2 I{η < 0}] = 21 when η is symmetrically distributed.
15
The reason why State() outputs arrays of dimension T ×1×K is because when it is evaluated for an object
of class ‘MSGARCH_MCMC_FIT’, the second dimension corresponds to the number of posterior draws. Analogously
for the Viterbi matrix.
24 MSGARCH: Markov-Switching GARCH Models in R
Smoothed probabilities
1.0 ●
● ●
0.8 ● ● ●
●
● ● ● ●
● ● ● ●●
● ● ● ● ● ●●● ● ●●
● ●
● ● ● ● ● ● ● ● ● ● ● ●●● ● ● ●● ● ●
● ● ● ● ● ●
●● ● ●● ● ● ●● ●●● ● ● ● ● ●● ●● ● ● ●
● ●● ●● ● ● ●● ●
● ●● ● ● ●● ● ● ●●
● ●●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ●● ● ●
● ●
● ● ● ●● ●●● ●● ● ● ● ● ● ● ● ● ●
● ● ● ●●● ●●●● ●● ● ● ●
● ● ● ●● ●●● ● ● ● ● ●
● ● ●● ●
●
● ●●●●● ● ●● ● ● ● ●● ●
●●●
●● ● ● ●
●● ● ●
●● ● ● ●
● ● ●● ●●● ●
● ●●● ● ● ● ●● ●●●●● ●● ● ●
●● ●● ● ● ● ● ● ●●●●● ●● ● ● ● ● ●●● ● ● ●● ● ● ●●● ● ● ● ● ● ●● ●
0.6 ● ●
●
●●
●
● ●●
● ●●
●●● ●
● ●●●●
●
●● ● ●
● ●●
●● ●● ●●●●●●● ●
● ●
●
●●
●●
●●
●●
●●
●
●
● ●●●● ●
●
● ●
●
●●
● ●●
●
●●
●
●●● ●●●●●
● ●●
●●● ●
● ●
●
●●
●●●●● ● ●●●
● ●● ● ●
●
●●
●
●
●
●●●●●● ●
● ●● ●● ●
●
●● ● ● ● ●
●● ● ●● ●
● ●
●
●●
●●● ●●●
● ●●
● ●
●●
●●●● ● ●● ●
●● ●
●●●●
●● ●●
●
● ●
●
●● ●
●
●
●
●●●
●●●
●
●
●●● ●● ●●
● ●
●
●
●
●●
●
●● ●●
● ●
●
●
● ●●●● ●
●
● ● ● ●● ●
● ● ●
●
●● ●
●●●●●
●●
●●●●●
●●●●●●● ● ●
● ●●●●●●●●●● ●
●●● ●
●●●●● ● ●●
●
●● ●●● ●
●
● ●● ●● ●●● ●●●●●
●
●
●● ● ●●●●●●●●●● ● ●● ●●● ●●●●
●● ●● ● ●
●●●●●
●
●●
●●
●●● ●
●● ●●●● ●
● ●●●
●
● ● ●
● ●
●
●● ● ●●●● ●●●● ● ●●●● ● ●● ● ● ● ●● ●●●●
● ●
●● ●●● ● ●●●●● ●●●●●● ●●●● ●● ●●●●
● ●
●
●●●●
●
●● ●
●
● ●●● ●●● ● ●
●●● ● ● ●● ● ●●● ● ●● ●●●●● ●● ●●●●
●●● ● ●● ● ●●●●
●● ●●●● ● ●● ●● ● ●● ● ●
●● ●● ● ● ● ●● ● ● ●● ●● ● ● ●● ●●● ●
●●● ●● ● ●
● ●●
●●● ●●● ●●●
●●●
●
●● ●● ●●● ●●●●●● ●● ●●●
●
●● ●●●●
●
● ●● ● ●●●●
● ●
●●
● ●●●● ● ●● ●●
●● ● ●● ●● ●
●●
●
●●●●● ●
●
●●● ● ●●●●
●●● ● ●●●● ●● ● ●● ●●● ●●●●●● ●●
●● ●
● ●●●●● ●● ●●●
●●●●●●● ● ●● ●●●●●● ●●
●● ●
● ●●●●●● ●●● ●●●●●●●●●●
● ●●●●
●●
● ●● ●●● ● ● ●● ●
● ● ●●
● ●●
● ●● ● ●●● ●●●●● ● ●●●● ●
● ●●
●● ●●● ●●●
●●● ●●●
● ●
●● ● ●
●●●
● ●● ●●●●
●●
●●●●
●● ● ● ●●●● ●●
●●●●
● ●●●●● ●●●
●● ●● ●● ● ●●● ●●●● ●
●●●●●●
●●
●
●●●●●
●●●●● ●●●●●●
●●●
●●●●●
● ● ●●● ● ● ●
●●
● ●● ●
●
● ●●● ●●●●● ●●
● ●●●
●
●
●●
●● ●
●●
●●
●● ●●● ●●●●●●● ●● ●● ●●●●● ● ● ●
● ●●● ●●● ● ●● ●●● ●
●● ●●
● ●● ● ●●
●●
●
● ●● ●
●● ●●● ● ●
●
●
●●● ●●● ●●●
● ●●●● ●
●
●●
●
● ●●● ●
●● ●●● ● ●●●●● ● ●
● ●● ●
● ●●
●
●●●
●●●●●●●●●
● ●●
●● ●
●
●
●● ●● ● ●●● ● ● ●●
●●●●● ●●
●●
●
●● ●●● ●●●●
●● ●●● ●
●●●●
●
●
●●
●
●
● ●●
●●●●●●●●● ●●● ● ●●●●●●●
● ●●●● ● ●● ●●●●●●●● ●●
●●●●
●● ●● ●● ●●● ●● ●● ●● ●●
●
●●
●●●●
●●● ●●●● ● ●●
●●●●●●●●
●● ●●
●●●●● ●
● ●● ●●● ●● ●
● ●● ●
●●●●●●●●
●
●●● ●●●
●●● ●● ● ● ●● ●●●
● ● ●
●●
● ●
●●● ●
● ●
●
● ●●
●
●●
●● ●
● ●
● ●●
●
●
● ● ● ● ●
● ● ●●
● ●
●
● ●● ● ● ● ●● ● ●
●● ● ●●
● ●
●
●● ●
●
●
●
●●
●●
●
●●●
●●●●●●
● ●●●● ●●●●●● ● ●
● ●●
● ●
●●
●● ● ●●
●●
● ●●● ● ●
● ● ●
● ●●
●● ● ●
● ●
●
● ●● ●
●
●● ● ● ●● ● ●● ● ●●
● ●● ●
●
● ● ●
● ●● ●●
● ● ● ●
●●
●● ●● ● ● ● ●●● ●●● ● ●●● ●● ●
● ●●●● ●● ●●●
●● ● ●● ● ●
● ●
●●●●● ●
●
●● ● ● ● ●●● ●●
● ●● ●●●●●● ●● ● ●● ●● ●●●● ● ● ●●●● ● ●●● ●● ● ●●● ●●● ●● ● ● ●
● ● ● ● ● ● ● ●●●● ● ● ● ●
● ●●● ● ●●●●●●
●● ●● ●● ● ●
●
●● ●●●●● ●● ●
●●●
●●●●
●● ●● ● ●●
● ● ●
● ●
●●●
●● ●●●●●● ● ●●●● ●● ●●●
●●●●
●● ●● ●● ● ●●
● ●● ●● ●●●
● ●●●●● ●● ●● ● ●● ● ●●● ● ●● ● ● ● ● ●● ●●● ●●● ● ●● ● ●● ●● ●● ●
●●● ●●● ● ● ●●●●●
● ●●●●●●
● ●●
● ●● ●● ●●● ●
●
●
●●
● ●
●●●
●
●● ●●● ● ●●●●● ● ● ●● ●
● ● ● ●● ●
● ● ●●● ● ●● ● ●● ●● ● ● ●●●●● ● ●●● ●
●● ●●● ● ● ● ●
● ●● ● ●● ●● ● ● ● ● ● ●● ● ● ●
● ● ●● ●● ● ● ●● ● ● ●●● ● ● ● ● ●● ●● ● ●
● ●
● ● ● ● ● ● ● ● ● ●● ●● ● ●
● ● ●
●●●
●●●●●● ● ● ● ●●
●●●●
● ● ● ●●
●● ● ●● ● ●●●●●●● ●●● ● ●● ●
● ●●● ● ●
●● ●● ●● ● ●● ● ● ● ● ● ●● ●
● ●●●●●●●● ●● ● ●● ● ● ●● ●
●
●● ●
●● ● ● ● ●● ●
● ● ●● ●
● ●● ● ●● ● ●● ●● ● ● ●● ●
● ● ● ●● ●●●● ●
●●● ●●●●● ●● ● ● ●●●●● ●● ● ●● ● ● ●
●● ●
●
● ● ●● ● ●● ● ● ● ●● ● ●● ●●
● ● ● ● ●● ● ●● ● ●● ● ●●● ● ●● ●
●●
●● ● ● ●●● ● ● ●
● ●● ● ● ● ● ● ● ● ●●● ●● ● ● ●
● ● ● ●● ● ●
●● ● ● ● ●●● ● ●
● ● ● ● ● ● ● ● ●● ● ● ●
0.4 ● ● ●
●
●
●
●
●
●
●
●●
●
●
●
●
●
● ● ● ●●●●
●
● ●
● ● ●●
● ● ● ●●
● ● ●
● ●
● ●● ● ●
●● ● ●
● ●
● ● ● ●
●
● ● ●● ● ●
● ● ●
● ● ●
● ●●
●
● ●
● ● ●
●●
● ●●
0.2 ●●
0.0 ●
50
40
30
20
10
1992 1994 1996 1998 2000
Date
Figure 2: Top: Estimated smoothed probabilities of the second regime, P[st = 2|Ψ, b IT ], for
t = 1, . . . , T . The thin black line depicts the SMI log-returns. Bottom: Filtered conditional
volatilities.
Figure 2 displays the smoothed probabilities of being in regime two (high unconditional volatil-
ity regime), P[St = 2|IT ] for t = 1, . . . , T , superimposed on the SMI log-returns (top graph)
as well as the filtered volatility of the overall process (bottom graph). Filtered (annualized)
volatilities are extracted from estimated object using the function Volatility():
We refer the reader to help("Volatility") for further details. As expected, when the
smoothed probabilities of regime two are near one, the filtered volatility of the process sharply
increases. Interestingly, we further note that the Markov chain evolves persistently over
time and that, in the limit, as reported by the summary() (Stable probabilities), the
probabilities of being in the two states are about 54% and 46%. As documented by Ardia
(2008) and Mullen et al. (2011), ML estimation can be difficult for MSGARCH-type models.
Fortunately, MCMC procedures can be used to explore the joint posterior distribution of
the model parameters, thus avoiding convergence to local maxima commonly encountered
via ML estimation. The Bayesian approach offers additional advantages. For instance, exact
Journal of Statistical Software 25
distributions of nonlinear functions of the model parameters can be obtained at low cost by
simulating from the joint posterior distribution, and parameter uncertainty can be integrated
in the forecasts through the predictive distribution.
To estimate MSGARCH-type models from a Bayesian viewpoint, the R package MSGARCH
relies on the adaptive MCMC sampler of Vihola (2012).16 Specifically, the estimation method
is a random-walk Metropolis-Hastings algorithm with coerced acceptance rate. We observed
excellent performance in the context of (identified) mixture models. Using the ML parameter
estimates as starting values, we can estimate the model by MCMC as follows:
The posterior distribution of mixture and Markov-switching models often exhibits non-ellipti-
cal shapes which lead to non-reliable estimation of the uncertainty of model parameters
(see, e.g., Ardia, Hoogerheide, and Van Dijk 2009). This invalidates the use of the Gaus-
sian asymptotic distribution for inferential purposes in finite samples. Our results display
this characteristic as shown in Figure 3 where we plot 2,500 draws of the posterior sample
for the parameters α1,1 and α1,2 . The blue square reports the posterior mean while the red
triangle reports the ML estimate. An interesting aspect of the Bayesian estimation is that
we can make distributional (probabilistic) statements on any (possibly nonlinear) function
of the model parameters. This is achieved by simulation. For instance, for each draw in
the posterior sample we can compute the unconditional volatility in each regime, to get its
posterior distribution. Figure 4 displays the posterior distributions of the unconditional an-
nualized volatility in each regime. In the low-volatility regime, the distribution is centered
around 8.9% per annum. For the high-volatility regime, the distribution is centered around
32.7% per annum. The 95% confidence bands given by the Bayesian approach are [7.9%,
10.3%] and [25.0%, 46.6%], respectively. Notice that both distributions exhibit positive skew-
ness. Hence, relying on the asymptotic normal approximation with the delta method would
yield erroneous estimates of the 95% confidence band of the unconditional volatility in each
regime. We show now how to include parameter uncertainty in the one-step ahead predictive
density of MSGARCH models. The predictive density is computed via the PredPdf() func-
tion defined for ‘MSGARCH_ML_FIT’ and ‘MSGARCH_MCMC_FIT’ objects. The arguments of the
PredPdf() function are:
0.35 ●●
● ●
● ●
● ● ●●
●
● ● ● ●●
● ● ● ●
● ● ●
●●
●●
● ● ● ● ●
● ● ● ●
● ●● ● ● ●
0.30 ● ●
●
● ●● ● ●●●
● ●
● ● ●●
●●● ● ●
●●● ● ● ●● ● ● ●● ●
● ● ● ●
● ● ●● ●
● ● ● ●
● ● ● ● ●
●● ● ●● ● ●●● ● ●
●● ●
●
●●
● ● ●● ● ●
● ●● ●
● ●● ●
● ● ● ● ● ● ●
●● ● ●● ●●
● ● ●●● ●● ●● ● ● ●
● ● ●
● ● ●● ●● ●● ●● ●
●● ● ● ●
●●●
● ●●● ● ● ●●●● ● ●● ●
●● ● ●
●●
● ●● ●●
● ●
● ● ●●● ● ●● ● ●● ● ● ●● ● ●
● ●● ● ●●● ● ● ●● ● ●
● ●● ●●
●●
●●●● ● ●●●● ● ●● ●
●
● ●● ●●●● ●● ● ● ● ● ●
● ●● ●
●● ● ● ●● ●● ● ●● ● ● ●●●●
● ●
● ●● ● ● ● ● ● ●
● ● ●●●● ● ● ● ●
● ●● ●● ● ●● ● ●
0.25 ● ●● ● ● ● ●● ●● ● ●●●●● ● ●
alpha2_1
● ●●●
● ● ●● ● ●● ●
● ● ● ●●● ● ●● ●● ● ●● ●● ● ● ●
● ● ●● ●● ●●●●
● ● ● ● ●●● ● ● ●● ● ●● ●● ● ● ●
● ● ● ● ● ●● ● ● ●●●●● ●●
●●● ● ●● ● ●
●●●
●● ● ●●● ● ●● ●
●
●
●
●
●●●● ●●●
●
●
●●● ● ● ●● ●●●● ● ● ● ●● ●
● ● ● ● ● ● ● ●
●
●● ●● ●● ●● ●●
● ● ● ●●
●●● ●●● ● ●●●●
●● ●● ●●●●● ●
● ●●
● ●●
● ●● ● ● ●
●● ●● ● ● ●
● ● ●● ● ●●● ●
● ●
● ● ● ●
●●
●
●●● ●●●●●●●
●●●
●
●● ●●
● ●●● ● ●● ●● ● ● ● ● ●
●●●
●●● ● ●● ● ● ● ●●
●
● ●● ●● ● ● ●
●● ●● ● ●●● ● ● ●● ●●● ●●● ● ● ●●
● ● ●●●● ●
●
●●●●●
●
●●●●●● ●
● ●●
● ●● ●● ● ● ●●●
●●●
● ● ●●●● ●●● ●● ●●● ●
●
● ● ●● ●●● ● ● ● ● ●
● ● ●
●
● ● ●● ● ●●●● ●●
●● ●●● ●●●●
● ● ●● ●● ●●● ●
●●● ●● ●
● ● ●
● ●●
●● ●● ●●●●●
●●●●●●●●● ● ● ● ● ● ●
● ●
● ●●
●●
● ●● ●● ● ●●●●● ● ● ● ● ● ● ●● ●●
● ●
● ● ● ●● ● ● ●● ●●●
●● ●●●●● ● ● ●● ●
●● ●● ● ● ●●●●● ● ●●
●● ● ●●●● ●●● ●
●●●● ● ●●
●●
●
● ●●● ●
●
● ● ●
●● ●●
● ● ●●●●● ●●●●●●
● ●● ● ●●● ●
●●
● ●● ●●● ● ●●● ●●● ● ●●
●● ● ●●● ● ● ● ● ● ● ● ● ● ● ●
● ●● ● ●● ●
● ●●
●
●●●● ●
● ●●● ●●● ●
●● ●●●
●
●● ●●
● ●● ● ●
● ● ● ●●
●● ●
● ●● ●● ●● ●●●●
●●●● ● ●●●●●●● ● ● ● ●● ● ● ●● ● ● ● ●
● ●● ●●●● ●●● ● ●● ● ● ● ● ● ●● ●●
●
●●●● ●●
●
●●
●● ● ● ● ● ● ●
0.20 ● ● ● ●● ●● ● ● ●● ●● ●
●●●●● ●● ●●● ●● ● ●● ● ●● ●
● ● ●●● ●●●●● ●
● ●● ● ●●●
● ●● ●● ●●● ●
●●●●●
●●●● ● ● ●
● ● ●
●●
●● ● ●
● ●● ●●●
● ●●
● ●●●● ●● ●● ● ●●● ● ●
●
●●●
● ●●
●
●
●
●
●●
● ●
●
● ●●● ● ●
● ●
● ● ● ● ● ●●● ●●●●● ● ● ● ●● ● ● ● ●
● ●● ●●●●
● ●● ●● ●● ●●● ●● ●
●●●
●
● ●●●● ●● ●● ●● ● ●
●● ● ● ●● ●● ●●●●● ● ●●
● ●●●
●
●●● ●●●● ●● ●● ●●
● ●●● ● ● ● ● ●●●●
● ●
●●● ●● ●●●
●●●●●● ●
●● ● ●● ● ● ● ●●● ● ● ●● ● ●
●
● ● ●●●● ●●● ● ●●●
● ●●● ●●● ●● ●●● ● ● ●●●
● ● ●● ●
● ● ●
●● ●●
●●● ●●
● ●● ● ●
●
●
●●
●●● ● ● ●●●● ●
●●●
●●● ●●●●●●●● ●●●● ●● ●
● ●● ● ●
● ●
● ● ● ● ●●
●● ●● ● ●● ●● ●● ●
●
● ●●● ●●●●● ●● ●
●
● ● ● ● ●
● ● ●● ● ● ●
●
●
● ● ●● ● ● ● ●
●●●●
●●● ● ●●●● ● ● ● ●
● ●
● ● ● ● ●
● ● ● ● ● ●● ●●●● ●● ● ● ●● ●●● ●●● ● ●●
● ●●● ● ● ●●●● ● ●
● ● ● ●●● ●● ● ● ● ●●
●●●● ●● ● ●●●●● ●●● ●●● ● ●● ● ●●
●● ●● ● ●● ● ●
● ●● ● ● ●● ● ●●●● ●
●
●●● ● ● ● ●● ● ● ● ● ●● ●●● ●
● ● ●● ● ● ●● ●● ●● ● ●● ● ●● ●● ●● ●●● ●● ●●
● ● ● ●
● ● ●
●
● ●● ● ● ●● ●
● ● ●●● ●● ●●●●
● ● ●● ●● ● ● ●●● ●
●
● ● ●● ● ● ●●●●● ● ● ● ● ●
● ●● ● ●
●
● ●● ●● ●●● ● ●
● ●
●
●● ● ●● ●● ●●
● ●●●●●
● ●●
● ●
●●
●
● ● ● ● ●● ●● ●● ● ● ● ● ●
0.15 ●
●●● ● ●
●● ●
● ● ● ●● ● ●
● ● ● ● ●
●● ● ● ● ● ●
●● ● ● ●● ● ●
● ● ●
● ●● ●
●● ● ● ● ●● ● ●
● ● ●● ● ● ● ●● ● ● ● ● ● ● ●● ●●
● ● ● ● ● ●
● ● ● ●
●
●● ●
●
●
● ● ● ● ●● ●
● ●● ● ●
● ●● ●
● ● ●● ● ● ● ●
● ● ●● ●
● ● ● ● ●
● ● ● ●●
● ● ●
● ●
● ● ●●
● ● ●
0.10
0.0005 0.0010 0.0015
alpha1_1
Figure 3: Scatter plot of posterior draws from the marginal distribution of (α1,1 , α1,2 )> ob-
tained with the adaptive random walk strategy. The blue square reports the posterior mean,
and the red triangle reports the ML estimate. The graph is based on 2,500 draws from the
joint posterior sample.
Additional arguments are: nahead, do.its, and ctr; see help("PredPdf"). As for other
functions available in the R package MSGARCH, when an object of class ‘MSGARCH_MCMC_FIT’
is used, the output is computed accounting for parameter uncertainty. For instance, if we
want to evaluate the one-step ahead predictive density in the range of values from −5 to 0,
we run:
where pred.ml and pred.mcmc are numeric vectors of length 1,000. We stress that PredPdf()
28 MSGARCH: Markov-Switching GARCH Models in R
Regime 1 Regime 2
0.8
0.08
0.6
0.06
0.4
0.04
0.2
0.02
0.0 0.00
8 9 10 11 20 30 40 50 60 70 80
Volatility (%) Volatility (%)
Figure 4: Histograms of the posterior distribution for the unconditional volatility in each
regime. Both graphs are based on 2,500 draws from the joint posterior sample. The blue
square reports the posterior mean, and the red triangle reports the ML estimate.
is also defined for objects of class ‘MSGARCH_SPEC’ such that, after providing the vector of
parameters par, and a series of observations data, the predictive distribution can be evaluated
also for non-estimated models.17 Another possibility is to extract the posterior draws from
an estimated object of class ‘MSGARCH_MCMC_FIT’ and to compute the predictive density for
each of them. This way, we can investigate the impact of the parameter uncertainty on
the conditional distribution as, for example, in Ardia, Kolly, and Trottier (2017). This is
performed with the following commands:
Figure 5: Left tail of the one-step ahead predictive distribution for the SMI log-returns. The
solid blue line reports the predictive Bayesian density (integrating the parameter uncertainty),
the dashed red line reports the ML conditional density, and the solid light-blue lines the
conditional densities obtained for each of the 2,500 draws in the posterior sample.
In Figure 5, we display the left tail of the one-step ahead distribution for the log-returns. We
see why integrating parameter uncertainty can be useful for left-tail prediction. The Bayesian
predictive density (solid blue line) is a particular average of the predictive densities that can
be formed with individual posterior MCMC draws (thin solid blue lines). It is generally more
conservative than the predictive density with plugged ML estimates (dashed red line) and
offers additional flexibility by accounting for all likely scenarios within the model structure.
As a last illustration in our empirical section, we provide the code for a backtest analysis of
the ms2.gjr.s model against its single-regime counterpart. First we create the single-regime
model and gather both specifications in a list.
Then we define the backtest settings. We decide to test the performance of the models over
1,000 out-of-sample observations and focus on the one-step ahead value-at-risk forecasts at
30 MSGARCH: Markov-Switching GARCH Models in R
VaR 5% − GJR−std ●
VaR 5% − MS2−GJR−std
6
●
4 ● ●
●
●
●
● ●
● ●
● ●
● ●
● ● ● ● ●
● ●
● ● ● ● ● ●●
● ● ● ● ● ●
● ● ● ● ●
● ●● ● ●
2 ● ● ●
●
● ●
● ●
●
● ●
● ●
● ●
● ● ● ● ●
● ● ● ●
● ● ● ● ● ● ●●●
●
● ● ● ●
●
● ● ● ● ● ● ●● ●
● ● ● ● ●
● ● ● ●● ● ● ●● ● ● ● ●● ● ●
● ●● ● ● ● ●●● ● ● ● ● ● ● ● ● ●
● ● ● ●
●
● ● ●● ●● ● ● ●
● ● ● ●
● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ●●
● ● ●● ● ● ●● ●●● ● ●
●
● ●
●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ●● ● ● ● ● ● ● ●●● ●
●● ● ●●● ● ●●● ● ● ● ●● ● ● ● ●●● ● ●●
● ● ● ●
● ● ● ● ● ● ● ●
●
● ● ● ●● ● ● ● ● ●● ●● ● ●●
● ●●
●● ● ● ● ● ● ● ● ●● ● ● ● ● ●
● ● ● ● ● ●●
● ●
● ● ● ● ●
●
● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●
● ● ● ● ● ● ● ● ● ●● ● ● ● ● ● ● ● ● ●● ● ● ● ● ●● ● ● ●● ●● ●
●●
● ●● ●● ● ● ●●
● ● ●● ●● ●
●
● ● ●● ●
●
●●
● ● ● ● ● ● ●
● ●● ●
● ● ●● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●
●●●● ●● ● ●● ●● ● ● ● ● ● ●● ● ● ● ● ● ● ● ●● ● ● ● ●●●
● ●●
●● ●● ● ● ● ● ● ● ●● ● ●● ● ● ●●
0 ●● ●●
●● ● ●● ●
●
●
●●
● ●
●●
●
●●● ● ●
●
● ● ●● ●●
●
●
● ● ●● ●
● ●
● ● ●
● ●
● ●●
●
●
● ●
●●
● ● ●● ●
● ● ●●
●●
● ● ●
● ●
●
●
●
●● ●
● ●
● ●●
●
●
●● ●
●● ●
●
●● ●●
● ● ● ●●● ● ● ●● ●● ● ●
●●
●
● ● ●●
● ● ● ● ●● ● ●
●● ● ● ● ● ●● ● ● ● ● ● ● ● ● ● ● ● ● ●● ● ●
●● ● ● ● ● ● ●●● ● ● ● ● ●
● ●
● ● ●
● ●● ● ● ● ● ● ●● ● ● ●● ● ● ●● ● ● ●● ● ●●● ● ●
● ● ● ● ● ●
● ●● ●● ● ●●● ● ●●● ●● ● ● ● ● ● ● ● ●
● ● ●●● ●●● ● ● ● ● ● ● ● ●●●
●● ● ● ●● ●● ● ●
● ● ●●
● ● ● ● ● ● ●
● ● ●● ● ● ● ●● ●● ● ● ●● ● ● ●
● ● ● ● ● ● ● ● ● ● ●
● ● ● ● ● ●
● ● ● ●
●
● ● ●● ● ● ●● ● ● ● ● ● ●
●
● ● ● ● ●
● ● ● ● ● ●● ● ● ● ●
●
● ● ● ● ● ●
●● ● ● ● ● ● ●
● ●
● ●
● ● ● ● ●● ●
●● ● ● ● ● ●● ● ● ● ●
● ● ● ● ● ●
● ● ● ●● ● ● ● ●
● ● ● ● ● ●
● ● ●
● ● ● ● ●
● ● ● ●
● ● ● ●
●
−2 ● ● ●
●●
● ●
●
● ● ● ●
●
● ●
● ●●
● ● ●
● ● ● ●
● ●
● ● ● ● ●
● ● ●●
●
● ● ● ●
●
● ●
●
● ● ●
● ●
●
−4 ●
●
● ●
●
●
●
●
●
● ●
Figure 6: One-day ahead VaR forecasts at the 5% risk level provided by the Markov-switching
(solid blue line) and single-regime (dashed red line) specifications together with the realized
returns (black dots).
the 5% risk level. Forecasts are based on rolling windows of 1,500 observations, and models
are re-estimated every 100 observations for speed of illustration purposes.
We initialize the vector of out-of-sample returns and the matrix of VaR forecasts. Then, we
loop over the observations in the out-of-sample window. For each new observation, we use
the last 1,500 data to predict the one-step ahead VaR at the 5% level, and store it. Models
are estimated by ML every 100 observations in the out-of-sample window.
In Figure 6 we display the resulting VaR forecasts of the two models together with the realized
returns. We notice the discrepancy between the forecasts in 1998. The economically relevant
question is then to evaluate which of the VaR forecasts are most accurate in terms of correctly
predicting the α-quantile loss such that we expect to have a proportion α of exceedances. We
use the R package GAS (Ardia et al. 2019b) to compute the p values of two backtesting
hypothesis tests of correct conditional coverage of the VaR: the conditional coverage (CC)
test by Christoffersen (1998) and the dynamic quantile (DQ) test by Engle and Manganelli
(2004). Both tests aim at determining if the VaR forecasts achieve correct unconditional
coverage and if the violations of the VaR are independent over time. Both should be fulfilled
under correct model specification.
R> library("GAS")
R> CC.pval <- DQ.pval <- vector("double", length(models))
R> for (j in 1:length(models)) {
+ test <- GAS::BacktestVaR(data = y.ots, VaR = VaR[, j],
+ alpha = alpha)
+ CC.pval[j] <- test$LRcc[2]
+ DQ.pval[j] <- test$DQ$pvalue
+ }
R> names(CC.pval) <- names(DQ.pval) <- c("GJR-std", "MS2-GJR-std")
R> print(CC.pval)
For both tests, we notice the best performance of the Markov-switching specification.
GJR-std MS2-GJR-std
0.02092 0.08402
R> print(DQ.pval)
GJR-std MS2-GJR-std
0.03478 0.14137
32 MSGARCH: Markov-Switching GARCH Models in R
5. Conclusion
We introduced the R package MSGARCH which allows users to estimate, simulate, and
perform forecasts with Markov-switching GARCH models in the R statistical software. We
detailed how to create various single-regime and regime-switching specifications with different
scedastic functions and conditional distributions. We documented how to perform maximum
likelihood and Bayesian estimations of these models. In an empirical illustration with financial
returns, we showed how to estimate, select, and forecast with this class of models.
The R language has become an important vehicle for knowledge transfer in time series analysis
over the last years. We hope the R package MSGARCH will be useful for academics and
practitioners to improve their conditional volatility and density forecasts in the broad range
of applications involving regime changes in volatility dynamics.
Finally, if you use the R package MSGARCH, please cite the software in publications using
citation(package = "MSGARCH").
Computational details
The results in this paper were obtained using R 3.5.0 (R Core Team 2018) with the pack-
ages coda version 0.19-1 (Plummer et al. 2006), GAS version 0.2.6 (Ardia et al. 2019b),
numDeriv version 2016.8-1 (Gilbert and Varadhan 2016), MSGARCH version 2.3 (Ardia
et al. 2019a), Rcpp version 0.12.16 (Eddelbuettel et al. 2018; Eddelbuettel and François
2011), RcppArmadillo version 0.8.500.0 (Eddelbuettel et al. 2017; Eddelbuettel and Sanderson
2014), and zoo version 1.8-1 (Zeileis and Grothendieck 2005). Computations were performed
on Windows 10 x86 64-w64-mingw32/x64 (64-bit) with Intel(R) Xeon(R) CPU E5-2650 2x
2.30 GHz. Code for the computations is available in the R script v91i04.R, available in
the supplementary materials and also in the Examples folder of the GitHub repository at
https://github.com/keblu/MSGARCH.
The results in this paper rely on simulations from an adaptive MCMC scheme. Therefore,
results depend on the set.seed value and on the linear algebra library used, as the adaptive
scheme requires Cholesky decomposition and eigenvalue calculation. While this would have
a negligible impact for a single draw, the difference accumulates over the MCMC iterations,
and can lead to different MCMC posterior results than the ones reported in this paper. An
upper bound on the magnitude of those differences is difficult to evaluate. In the comparison
between Windows 10 and Ubuntu 18.04.3, as reported in the supplementary material and in
the folder Examples on the GitHub repository, we find differences of up to the third digit
for the MCMC results of Section 3.2 and up to the second digit for the MCMC results of
Section 4.
In the script v91i04-timing.R, we provide a timing comparison between the ML and MCMC
estimation strategies. The estimation of a two-regime MSGARCH model with normal inno-
vations on the SMI dataset (2,500 observations) is around ten times faster with the ML
approach than with the MCMC approach (2.8 seconds instead of 26.7 seconds). We also per-
form a comparison between the package MSGARCH and the R package bayesGARCH (Ardia
and Hoogerheide 2010) in the case of a single-regime GARCH(1, 1) model with normal in-
novations. We observe that MSGARCH is not only competitive in terms of computational
time but also for accuracy (measured with the effective number of draws). With the default
settings (5,000 burn-in draws, 10,000 MCMC draws and a thinning of 10, thus a posterior
Journal of Statistical Software 33
sample of size 1,000), the estimation with MSGARCH is about ten times faster (6.5 against
69.1 seconds) and the effective number of draws is 3.1 times larger.
R (R Core Team 2018) itself and all packages used are available from the Comprehensive R
Archive Network (CRAN) at http://CRAN.R-project.org/. The MSGARCH version under
development is available on the website at http://keblu.github.io/MSGARCH/.
Acknowledgments
The authors are grateful to the Associate Editor (Rob J. Hyndman) and two anonymous
referees for useful comments. They also thank Carol Alexander, Samuel Borms, Muriel Buri,
Peter Carl, Dirk Eddelbuettel, Laurent Fastnacht, Félix-Antoine Fortin, Alexios Ghalanos,
Richard Gerlach, Lennart Hoogerheide, Eliane Maalouf, Brian Peterson, Enrico Schumann,
Tobias Setz, Max Tchirikov, conference participants at R/Finance 2017 (Chicago), the 37th
International Symposium on Forecasting (Cairns), useR! 2017 (Brussels), Quant Insights 2017
(London), MAFE 2018 (Madrid), eRum 2018 (Budapest), and seminar participants at HEC
Liège, Paris-Dauphine, and IAE-AMSE Aix-Marseille. We acknowledge Industrielle-Alliance,
International Institute of Forecasters (https://forecasters.org), Google Summer of Code
(https://summerofcode.withgoogle.com), FQRSC (http://www.frqsc.gouv.qc.ca, grant
2015-NP-179931), swissuniversities (https://www.swissuniversities.ch), IVADO (https:
//ivado.ca), and the Swiss National Science Foundation (http://www.snf.ch, grant 179281)
for their financial support, and Calcul Québec (https://www.calculquebec.ca) for compu-
tational support.
References
Akaike H (1974). “A New Look at the Statistical Model Identification.” IEEE Transactions
on Automatic Control, 19(6), 716–723. doi:10.1007/978-1-4612-1694-0_16.
Ardia D (2008). Financial Risk Management with Bayesian Estimation of GARCH Models:
Theory and Applications, volume 612 of Lecture Notes in Economics and Mathematical
Systems. Springer-Verlag, Berlin Heidelberg. doi:10.1007/978-3-540-78657-3.
Ardia D, Hoogerheide LF, Van Dijk HK (2009). “Adaptive Mixture of Student-t Distributions
as a Flexible Candidate Distribution for Efficient Simulation: The R Package AdMit.”
Journal of Statistical Software, 29(3), 1–32. doi:10.18637/jss.v029.i03.
Ardia D, Kolly J, Trottier DA (2017). “The Impact of Parameter and Model Uncertainty
on Market Risk Predictions from GARCH-Type Models.” Journal of Forecasting, 36(7),
808–823. doi:10.1002/for.2472.
Black F (1976). “Studies of Stock Price Volatility Changes.” In Proceedings of the 1976 Meet-
ings of the Business and Economics Statistics Section, pp. 177–181. American Statistical
Association.
Brooks C, Burke SP, Persand G (2001). “Benchmarks and the Accuracy of GARCH
Model Estimation.” International Journal of Forecasting, 17(1), 45–56. doi:10.1016/
s0169-2070(00)00070-4.
Cai J (1994). “A Markov Model of Switching-Regime ARCH.” Journal of Business & Eco-
nomic Statistics, 12(3), 309–316. doi:10.2307/1392087.
Christie AA (1982). “The Stochastic Behavior of Common Stock Variances: Value, Leverage
and Interest Rate Effects.” Journal of Financial Economics, 10(4), 407–432. doi:10.1016/
0304-405x(82)90018-6.
Eddelbuettel D (2019). CRAN Task View: Empirical Finance. Version 2019-03-07, URL
https://CRAN.R-project.org/view=Finance.
Hoogerheide L, Van Dijk HK (2010). “Bayesian Forecasting of Value at Risk and Expected
Shortfall Using Adaptive Importance Sampling.” International Journal of Forecasting,
26(2), 231–247. doi:10.1016/j.ijforecast.2010.01.007.
Hyndman RJ (2019). CRAN Task View: Time Series Analysis. Version 2019-08-25, URL
https://CRAN.R-project.org/view=TimeSeries.
Kastner G (2016). “Dealing with Stochastic Volatility in Time Series Using the R Package
stochvol.” Journal of Statistical Software, 69(5), 1–30. doi:10.18637/jss.v069.i05.
Kim CJ, Nelson CR (1999). “Has the U.S. Economy Become More Stable? A Bayesian
Approach Based on a Markov-Switching Model of the Business Cycle.” Review of Economics
and Statistics, 81(4), 608–616. doi:10.1162/003465399558472.
McNeil AJ, Frey R, Embrechts P (2015). Quantitative Risk Management: Concepts, Tech-
niques and Tools. 2nd edition. Princeton University Press.
Mullen KM, Ardia D, Gil DL, Windover D, Cline J (2011). “DEoptim: An R Package for
Global Optimization by Differential Evolution.” Journal of Statistical Software, 40(6), 1–26.
doi:10.18637/jss.v040.i06.
Nobel Media (2003). “The Prize in Economic Sciences 2003 – Press Release.” URL
https://www.nobelprize.org/nobel_prizes/economic-sciences/laureates/2003/
press.html.
Papastamoulis P (2016). “label.switching: An R Package for Dealing with the Label Switching
Problem in MCMC Outputs.” Journal of Statistical Software, 69(1), 1–24. doi:10.18637/
jss.v069.c01.
Plummer M, Best N, Cowles K, Vines K (2006). “coda: Convergence Diagnosis and Output
Analysis for MCMC.” R News, 6(1), 7–11. URL https://www.R-project.org/doc/Rnews/
Rnews_2006-1.pdf.
Schwarz G (1978). “Estimating the Dimension of a Model.” The Annals of Statistics, 6(2),
461–464.
Spiegelhalter DJ, Best NG, Carlin BP, Van der Linde A (2002). “Bayesian Measures of
Model Complexity and Fit.” Journal of the Royal Statistical Society B, 64(4), 583–639.
doi:10.1111/1467-9868.00353.
Trapletti A, Hornik K (2017). tseries: Time Series Analysis and Computational Finance.
R package version 0.10-42, URL https://CRAN.R-project.org/package=tseries.
Vihola M (2012). “Robust Adaptive Metropolis Algorithm with Coerced Acceptance Rate.”
Statistics and Computing, 22(5), 997–1008. doi:10.1007/s11222-011-9269-5.
Viterbi A (1967). “Error Bounds for Convolutional Codes and an Asymptotically Optimum
Decoding Algorithm.” IEEE Transactions on Information Theory, 13(2), 260–269. doi:
10.1109/tit.1967.1054010.
Zeileis A, Grothendieck G (2005). “zoo: S3 Infrastructure for Regular and Irregular Time
Series.” Journal of Statistical Software, 14(6), 1–27. doi:10.18637/jss.v014.i06.
Affiliation:
David Ardia (corresponding author)
Department of Decision Sciences
HEC Montréal
3000, Ch. de la Côte-Sainte-Catherine, Montréal (Québec) H3T 2A7, Canada
E-mail: [email protected]
Keven Bluteau
Institute of Financial Analysis
University of Neuchâtel
Rue A.-L. Breguet 2, 2000 Neuchâtel, Switzerland
and
Solvay Business School
Vrije Universiteit Brussel, Belgium
E-mail: [email protected]
Kris Boudt
Department of Economics
Ghent University
Sint-Pietersplein 5, 9000 Gent, Belgium
and
Solvay Business School
Vrije Universiteit Brussel, Belgium and
Econometrics and Finance Department
Vrije Universiteit Amsterdam, The Netherlands
E-mail: [email protected]
Leopoldo Catania
Department of Economics and Business Economics
Aarhus University & CREATES
Fuglesangs Allé 4, 8210, Aarhus V, Denmark
E-mail: [email protected]
Denis-Alexandre Trottier
Faculty of Business Administration
Laval University
Pavillon Palasis-Prince
2325, rue de la Terrasse, Québec, G1V 0A6, Canada
E-mail: [email protected]