0% found this document useful (0 votes)
127 views25 pages

Kode Script

The document discusses using the Kalman filter to estimate and forecast the Diebold-Li yield curve model. It introduces the Diebold-Li model, outlines the state-space representation used in the toolbox, and formulates the Diebold-Li model in state-space representation. The example then estimates the model parameters, compares results to other techniques, and illustrates forecasting and simulation capabilities.

Uploaded by

Jmc Jkt
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
127 views25 pages

Kode Script

The document discusses using the Kalman filter to estimate and forecast the Diebold-Li yield curve model. It introduces the Diebold-Li model, outlines the state-space representation used in the toolbox, and formulates the Diebold-Li model in state-space representation. The example then estimates the model parameters, compares results to other techniques, and illustrates forecasting and simulation capabilities.

Uploaded by

Jmc Jkt
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 25

%% Using the Kalman Filter to Estimate and Forecast the Diebold-

Li Yield Curve Model


%
% In the aftermath of the financial crisis of 2008, additional
solvency
% regulations have been imposed on many financial firms, placing
greater
% emphasis on the market valuation and accounting of liabilities.
Many firms,
% notably insurance companies and pension funds, write annuity
contracts and
% incur long-term liabilities that call for sophisticated
approaches to model
% and forecast yield curves.
%
% Moreover, as the value of long-term liabilities greatly
increases in low
% interest rate environments, the probability of very low yields
should be
% modeled accurately. In such situations, the use of the Kalman
Filter, with
% its ability to incorporate time-varying coefficients and infer
unobserved
% factors driving the evolution of observed yields, is often
appropriate for
% the estimation of yield curve model parameters and the
subsequent simulation
% and forecasting of yields, which are at the heart of insurance
and pension
% analysis.
%
% The following example illustrates the use of the State-Space
Model (SSM)
% and Kalman filter by fitting the popular Diebold-Li _yields-
only model_ [2]
% to a monthly time series of yield curves derived from
government bond
% data. The example highlights the estimation, simulation,
smoothing, and
% forecasting capabilities of the SSM functionality available in
the
% Econometrics Toolbox(TM), and compares its estimation
performance to that
% of more traditional econometric techniques.
%
% The example first introduces the Diebold-Li model, then
outlines the
% parametric state-space representation supported by the SSM
functionality

1
% of the Econometrics Toolbox, and then illustrates how the
Diebold-Li model
% may be formulated in state-space representation. Once
formulated in
% state-space representation, the example reproduces the in-
sample estimation
% results published in [2], and compares the results obtained to
those of the
% two-step approach as outlined by Diebold and Li in [1].
%
% The example concludes with a simple illustration of the minimum
mean square
% error (MMSE) forecasting and Monte Carlo simulation
capabilities of the SSM
% functionality.
%
% Copyright 2014 The MathWorks, Inc.

%% The Diebold-Li Model Yield Curve Model


%
% The Diebold-Li model is a variant of the Nelson-Siegel model
[3], obtained
% by reparameterizing the original formulation. For observation
date $t$ and
% time to maturity $\tau$, the Diebold-Li model characterizes the
yield
% $y_t(\tau)$ as a function of four parameters:
%
% $$y_t(\tau) = L_t + S_t \left(\frac{1 - e^{-\lambda \tau}}
{\lambda \tau} \right)
% + C_t \left(\frac{1 - e^{-\lambda \tau}}{\lambda \tau} -
e^{-\lambda \tau} \right)$$
%
% in which $L_t$ is the long-term factor, or _level_, $S_t$ is
the short-term
% factor, or _slope_, and $C_t$ is the medium-term factor, or
_curvature_.
% $\lambda$ determines the maturity at which the loading on the
curvature is
% maximized, and governs the exponential decay rate of the model.

%% The State-Space Model (SSM) of the Econometrics Toolbox


%
% The |ssm| function of the Econometrics Toolbox allows users to
specify a
% given problem in state-space representation. Once the
parametric form of
% an SSM is specified, additional related functions allow users
to estimate

2
% model parameters via maximum likelihood, obtain smoothed and
filtered states
% via backward and forward recursion, respectively, obtain
optimal forecasts
% of unobserved (latent) states and observed data, and simulate
sample of
% paths of latent states and observed data via Monte Carlo.
%
% For state vector $x_t$ and observation vector $y_t$, the
parametric form
% of the Econometrics Toolbox SSM is expressed in the following
linear
% state-space representation:
%
% $$ x_t = A_t x_{t-1} + B_t u_t $$
%
% $$ y_t = C_t x_t + D_t \epsilon_t $$
%
% where $u_t$ and $\epsilon_t$ are uncorrelated, unit-variance
white noise
% vector processes. In the above SSM representation, the first
equation is
% referred to as the _state equation_ and the second as the
_observation
% equation_. The model parameters $A_t$, $B_t$, $C_t$ and $D_t$
are referred
% to as the _state transition_, _state disturbance loading_,
_measurement
% sensitivity_, and _observation innovation_ matrices,
respectively.
%
% Although the SSM functions in the Econometrics Toolbox will
accommodate
% time-varying (dynamic) parameters $A_t$, $B_t$, $C_t$ and $D_t$
whose values
% and dimensions change with time, in the Diebold-Li model these
parameters
% are time-invariant (static).

%% State-Space Formulation of the Diebold-Li Model


%
% The Diebold-Li model introduced above is formulated such that
the level,
% slope, and curvature factors follow a vector autoregressive
process of first
% order, or VAR(1), and as such the model immediately forms a
state-space
% system. Using the notation of Diebold, Rudebusch, and Aruoba
[2], the state

3
% transition equation, which governs the dynamics of the state
vector (level,
% slope, and curvature factors), is written as
%
% $$ \begin{pmatrix} {L_t - \mu_L \cr S_t - \mu_S \cr C_t -
\mu_C} \end{pmatrix}
% = \begin{pmatrix} {a_{11} \ a_{12} \ a_{13} \cr a_{21} \ a_{22}
\ a_{23}
% \cr a_{31} \ a_{32} \ a_{33}} \end{pmatrix}
% \begin{pmatrix} {L_{t-1} - \mu_L \cr S_{t-1} - \mu_S \cr C_{t-
1} - \mu_C} \end{pmatrix} +
% \begin{pmatrix} {\eta_t(L) \cr \eta_t(S) \cr \eta_t(C)}
\end{pmatrix} $$
%
% The corresponding observation (measurement) equation is written
as
%
% $$ \begin{pmatrix} {y_t(\tau_1) \cr y_t(\tau_2) \cr \vdots \cr
% y_t(\tau_N)} \end{pmatrix} =
% \begin{pmatrix} {1 \ \frac{1 - e^{-\lambda \tau_1}}{\lambda
\tau_1} \
% \frac{1 - e^{-\lambda \tau_1}}{\lambda \tau_1} - e^{-\lambda
\tau_1} \cr
% 1 \ \frac{1 - e^{-\lambda \tau_2}}{\lambda \tau_2} \
% \frac{1 - e^{-\lambda \tau_2}}{\lambda \tau_2} - e^{-\lambda
\tau_2} \cr
% \vdots \cr
% 1 \ \frac{1 - e^{-\lambda \tau_N}}{\lambda \tau_N} \
% \frac{1 - e^{-\lambda \tau_N}}{\lambda \tau_N} - e^{-\lambda
\tau_N}} \end{pmatrix}
% \begin{pmatrix} {L_t \cr S_t \cr C_t} \end{pmatrix}
% + \begin{pmatrix} {e_t(\tau_1) \cr e_t(\tau_2) \cr \vdots \cr
% e_t(\tau_N)} \end{pmatrix}$$
%
% In vector-matrix notation, the Diebold-Li model is rewritten as
the following
% state-space system for the 3-D vector of mean-adjusted factors
$f_t$ and
% observed yields $y_t$:
%
% $$(f_t - \mu) = A(f_{t-1} - \mu) + \eta_t$$
%
% $$y_t = \Lambda f_t + e_t$$
%
% where the orthogonal, Gaussian white noise processes $\eta_t$
and $e_t$
% are defined such that
%
% $$ \begin{pmatrix} {\eta_t \cr e_t} \end{pmatrix} \sim WN

4
% \begin{pmatrix} {\begin{pmatrix} {0 \cr 0} \end{pmatrix},
\begin{pmatrix}
% {Q \ 0 \cr 0 \ H} \end{pmatrix}} \end{pmatrix} $$
%
% Moreover, the Diebold-Li model is formulated such that the
state equation
% factor disturbances $\eta_t$ are correlated, and therefore the
corresponding
% covariance matrix $Q$ is non-diagonal. In contrast, however,
the model
% imposes diagonality on the covariance matrix $H$ of the
observation equation
% disturbances $e_t$ such that deviations of observed yields at
various
% maturities are uncorrelated.
%
% Define the latent states as the mean-adjusted factors
%
% $$x_t = f_t - \mu$$
%
% and the intercept-adjusted, or deflated, yields
%
% $$y'_t = y_t - \Lambda\mu$$
%
% and substitute into the equations above, and the Diebold-Li
state-space
% system may be rewritten as
%
% $$x_t = Ax_{t-1} + \eta_t$$
%
% $$y'_t = y_t - \Lambda\mu = \Lambda x_t + e_t$$
%
% Now compare the Diebold-Li state-space system to the
formulation supported
% by the SSM functionality of the Econometrics Toolbox,
%
% $$ x_t = A x_{t-1} + B u_t $$
%
% $$ y_t = C x_t + D \epsilon_t $$
%
% From the above state-space systems, we immediately see that the
state
% transition matrix $A$ is the same in both formulations and that
Diebold-Li
% matrix $\Lambda$ is simply the state measurement sensitivity
matrix $C$ in
% the SSM formulation.
%

5
% The relationship between the disturbances, however, and
therefore the
% parameterization of the $B$ and $D$ matrices of the SSM
formulation, is
% more subtle. To see this relationship, notice that
%
% $$\eta_t = Bu_t$
%
% $$e_t = D\epsilon_t$$
%
% Since the disturbances in each model must be the same, the
covariance of
% $\eta_t$ in the Diebold-Li formulation must equal the
covariance of the
% scaled white noise SSM process $Bu_t$. Similarly, the
covariance of $e_t$
% must equal that of the process $D\epsilon_t$. Moreover, since
the $u_t$
% and $\epsilon_t$ disturbances in the SSM formulation are
defined as
% uncorrelated, unit-variance white noise vector processes, their
covariance
% matrices are identity matrices.
%
% Therefore, in an application of the _linear transformation
property_ of
% Gaussian random vectors, the covariances of the Diebold-Li
formulation are
% related to the parameters of the SSM formulation such that
%
% $$Q = BB'$$
%
% $$H = DD'$$
%
% To formulate the Diebold-Li model in a manner amenable to
estimation by
% the Econometrics Toolbox, users must first create an SSM model
with the
% |ssm| function. Moreover, an SSM model may be created with
unknown
% parameters defined explicitly or implicitly.
%
% To create an SSM model explicitly, all required matrices $A$,
$B$, $C$, and
% $D$ must be supplied. In the explicit approach, unknown
parameters appear
% as |NaN| values to indicate the presence and placement of
unknown values;
% each |NaN| entry corresponds to a unique parameter to estimate.

6
%
% Although creating a model explicitly by directly specifying
parameters
% $A$, $B$, $C$, and $D$ is sometimes more convenient than
specifying a model
% implicitly, the utility of an explicit approach is limited in
that each
% estimated parameter affects and is uniquely associated with a
single element
% of a coefficient matrix.
%
% To create a model implicitly, users must specify a parameter
mapping function
% which maps an input parameter vector to model parameters $A$,
$B$, $C$, and
% $D$. In the implicit approach, the mapping function alone
defines the model,
% and is particularly convenient for estimating complex models
and for imposing
% various parameter constraints.
%
% Moreover, the SSM framework does not store non-zero offsets of
state variables
% or any parameters associated with regression components in the
observation
% equation. Instead, a regression component is estimated by
deflating the
% observations $y_t$. Similarly, other related SSM functions,
such as |filter|,
% |smooth|, |forecast|, and |simulate|, assume that observations
are already
% manually deflated, or preprocessed, to account for any offsets
or regression
% component in the observation equation.
%
% Since the Diebold-Li model includes a non-zero offset (mean)
for each of
% the three factors, which represents a simple yet common
regression component,
% this example uses a mapping function. Moreover, the mapping
function also
% imposes a symmetry constraint on the covariance matrix $Q =
BB'$ and a
% diagonality constraint of the covariance matrix $H = DD'$, both
of which
% are particularly well-suited to an implicit approach. In
addition, the
% mapping function also allows us to estimate the $\lambda$ decay
rate parameter

7
% as well.
%
% Note that this state-space formulation, and the corresponding
approach to
% include a regression component, is not unique. For example,
the factor
% offsets could also be included by increasing the dimensionality
of the
% state vector.
%
% In the approach taken in this example, the inclusion of the
factor offsets
% in the state equation of the SSM representation introduces a
regression
% component in the observation equation. To allow for this
adjustment, this
% example uses a parameter mapping function to deflate the
observed yields
% during model estimation. The advantage of this approach is
that the
% dimensionality of state vector of unobserved factors remains 3,
and therefore
% directly corresponds to the 3-D _yields-only_ factor model of
Diebold,
% Rudebusch, and Aruoba [2]. The disadvantage is that, because
the estimation
% is performed on the deflated yields, other SSM functions must
also account
% for this adjustment by deflating and subsequently inflating the
yields.

%% The Yield Curve Data


%
% The yield data consists of a time series of 29 years of monthly
_unsmoothed
% Fama-Bliss_ US Treasury zero-coupon yields, as used and
discussed in [1]
% and [2], for maturities of 3, 6, 9, 12, 15, 18, 21, 24, 30, 36,
48, 60, 72,
% 84, 96, 108, and 120 months. The yields are expressed in
percent and
% recorded at the end of each month, beginning January 1972 and
ending
% December 2000 for a total of 348 monthly curves of 17
maturities each. For
% additional details regarding the unsmoothed Fama-Bliss yields,
see the
% bibliography.
%

8
% The following analysis uses the entire Diebold-Li data set to
reproduce the
% estimation results published in [2], and compares the two-step
and SSM
% approaches.
%
% As an alternative, the data set could also be partitioned into
an _in-sample_
% period used to estimate each model, and an _out-of-sample_
period reserved
% to assess forecast performance. In concept, such a forecast
accuracy
% analysis could be conducted in a manner similar to that
published in
% Tables 4-6 of Diebold and Li [1]. However, to do so would take
far too
% long to complete, and is therefore unsuitable for a live MATLAB
example.

load Data_DieboldLi
maturities = maturities(:); % ensure a column vector
yields = Data(1:end,:); % in-sample yields for estimation

%% Two-Step Estimation of the Diebold-Li Model


%
% In their original paper [1], Diebold and Li estimate the
parameters of
% their yield curve model using a two-step approach:
%
% * With $\lambda$ held fixed, estimate the level, slope, and
curvature
% parameters for each monthly yield curve. This process is
repeated for all
% observed yield curves, and provides a 3-D time series of
estimates of the
% unobserved level, slope, and curvature factors.
%
% * Fit a first-order autoregressive model to the time series of
factors
% derived in the first step.
%
% By fixing $\lambda$ in the first step, what would otherwise be
a non-linear
% least squares estimation is replaced by a relatively simple
ordinary least
% squares (OLS) estimation. Within the Nelson-Siegel framework,
it is
% customary to set $\lambda$ = 0.0609, which implies that the
value at which

9
% the loading on the curvature (medium-term factor) is maximized
occurs at
% 30 months.
%
% Moreover, since the yield curve is parameterized as a function
of the
% factors, forecasting the yield curve is equivalent to
forecasting the
% underlying factors and evaluating the Diebold-Li model as a
function of
% the factor forecasts.
%
% The first step equates the 3 factors (level, slope, and
curvature) to the
% regression coefficients obtained by OLS, and accumulates a 3-D
time series
% of estimated factors by repeating the OLS fit for each observed
yield curve.
% The OLS step is performed below, and the regression
coefficients and
% residuals of the linear model fit are stored for later use.

lambda0 = 0.0609;
X = [ones(size(maturities))
(1-exp(-lambda0*maturities))./(lambda0*maturities) ...
((1-exp(-lambda0*maturities))./(lambda0*maturities)-exp(-
lambda0*maturities))];

beta = zeros(size(yields,1),3);
residuals = zeros(size(yields,1),numel(maturities));

for i = 1:size(yields,1)
olsfit = fitlm(X, yields(i,:)', 'Intercept', false);
beta(i,:) = olsfit.Coefficients.Estimate';
residuals(i,:) = olsfit.Residuals.Raw';
end

%%
% Now that the 3-D time series of factors has been computed, the
second step
% fits the time series to a first-order autoregressive (AR)
model. At this
% point, there are two choices for the AR fit:
%
% * Fit each factor to a univariate AR(1) model separately, as in
[1]
%
% * Fit all 3 factors to a VAR(1) model simultaneously, as in [2]
%

10
% Although the Econometrics Toolbox supports both univariate and
multivariate
% AR estimation, in what follows a VAR(1) model is fitted to the
3-D time
% series of factors. For consistency with the SSM formulation,
which works
% with the mean-adjusted factors, the VAR(1) model includes an
additive
% constant to account for the mean of each factor.

model = vgxset('nAR', 1, 'n', 3, 'Constant', true); % 3-D


VAR(1) model to fit
varfit = vgxvarx(model, beta(2:end,:), [], beta(1,:)); %
estimate 3-D VAR(1) model

%% SSM Estimation of the Diebold-Li Model


%
% As discussed above, the Diebold-Li model is estimated using the
implicit
% approach, in which a parameter mapping function is specified.
This
% mapping function maps a parameter vector to SSM model
parameters, deflates
% the observations to account for the means of each factor, and
imposes
% constraints on the covariance matrices.
%
% The following line of code creates an SSM model by passing the
parameter
% mapping function |Example_DieboldLi| to the |ssm| function, and
indicates
% that the mapping function will be called with an input
parameter vector
% _params_. The additional input arguments to the mapping
function specify
% the yield and maturity information statically, and are used to
initialize
% the function in a manner suitable for subsequent use in the
estimation.
% For additional details, see the helper function |
Example_DieboldLi|.

model =
ssm(@(params)Example_DieboldLi(params,yields,maturities));

%%
% The maximum likelihood estimation (MLE) of SSM models via the
Kalman filter
% is notoriously sensitive to the initial parameter values. In
this example,
11
% we use the results of the two-step approach to initialize the
estimation.
%
% Specifically, the initial values passed to the SSM |estimate|
function are
% encoded into a column vector. In this example, the matrix $A$
of the SSM
% model is set to the estimated 3-by-3 AR coefficient matrix of
the VAR(1)
% model stacked in a column-wise manner into the first 9 elements
of the
% column vector.
%
% From the discussion above, the matrix $B$ of the SSM model is a
3-by-3 matrix
% constrained such that $Q = BB'$, and in what follows the
estimate of $B$
% is the lower Cholesky factor of $Q$. Therefore, to ensure that
$Q$ is
% symmetric, positive definite, and allows for non-zero off-
diagonal
% covariances, 6 elements associated with the lower Cholesky
factor of $Q$
% must be allocated in the initial parameter column vector.
However, in what
% follows we initialize the elements of the initial parameter
vector with
% the square root of the estimated innovation variances of the
VAR(1) model.
%
% In other words, when the parameter vector is initialized, we
assume that
% the covariance matrix $Q$ is diagonal, yet still reserve space
for the
% below-diagonal elements of the lower Cholesky factor of the
covariance
% matrix such that $Q = BB'$. Again, the initial parameter
vector is arranged
% such that the elements of $B$ along and below the main diagonal
are stacked
% in a column-wise manner.
%
% Since the covariance matrix $H$ in the Diebold-Li formulation
is diagonal,
% the matrix $D$ of the SSM model is also constrained to be
diagonal such
% that $H = DD'$. Therefore, the elements of the initial
parameter vector

12
% associated with $D$ are set to the square root of the diagonal
elements
% of the sample covariance matrix of the residuals of the VAR(1)
model, one
% such element for each maturity of the input yield data (in this
example
% there are 17 maturities), again stacked in a column-wise
manner.
%
% Note that the $C$ matrix of the SSM model is not estimated
directly, but
% rather is a fully-parameterized function of the estimated decay
rate
% parameter $\lambda$, and is computed internally by the mapping
function.
% Moreover, the $\lambda$ parameter is initialized to the
traditional value
% 0.0609, and is stored in the last element of the initial
parameter column
% vector.
%
% Finally, the elements of the initial parameter vector
associated with the
% factor means are simply set to the sample averages of the
regression
% coefficients obtained by OLS in the first step of the original
two-step
% approach.

A0 = varfit.AR{1}; % get the VAR(1) matrix (stored as a cell


array)
A0 = A0(:); % stack it columnwise
Q0 = varfit.Q; % get the VAR(1) estimated innovations
covariance matrix
B0 = [sqrt(Q0(1,1)); 0; 0; sqrt(Q0(2,2)); 0; sqrt(Q0(3,3))];
H0 = cov(residuals); % sample covariance matrix of VAR(1)
residuals
D0 = sqrt(diag(H0)); % diagonalize the D matrix
mu0 = mean(beta)';
param0 = [A0; B0; D0; mu0; lambda0];

%%
% Now that the initial values have been computed, set some
optimization
% parameters and estimate the model using the Kalman filter by
calling the SSM
% function |estimate|. In this example, the covariance matrix $H
= DD'$ is

13
% diagonal, and so we opt to invoke the univariate treatment of a
multivariate
% series to improve the runtime performance of the estimation.

options =
optimoptions('fminunc','MaxFunEvals',25000,'algorithm','quasi-
newton', ...
'TolFun' ,1e-8,'TolX',1e-8,'MaxIter',1000,'Display','off');

[ssmfit,params] = estimate(model,yields,param0,'Display','off',
...
'options',options,'Univariate',true);

lambda = params(end); % get the estimated decay rate


mu = params(end-3:end-1)'; % get the estimated factor means

%% Comparison of Parameter Estimation Results


%
% Now compare the results obtained from the SSM to those of the
two-step
% approach. In addition to providing a sense of how closely the
results of
% the two approaches agree, the comparison also gives an idea of
how suitable
% the use of the two-step approach is for providing initial
parameter values
% required to estimate the SSM.
%
% First compare the estimated state transition matrix $A$ of the
SSM model
% to the AR(1) coefficient matrix obtained from the VAR model.

disp('SSM State Transition Matrix (A):')


disp('--------------------------------')
disp(ssmfit.A)
disp(' ')

disp('Two-Step State Transition Matrix (A):')


disp('-------------------------------------')
disp(varfit.AR{1})
disp(' ')

%%
% Notice how closely the results agree. In particular, notice
the large
% positive diagonal elements, indicating persistent self-dynamics
of each
% factor, while at the same time the small off-diagonal elements,
indicating
% weak cross-factor dynamics.
14
%%
% Now examine the state disturbance loading matrix $B$ and
compare the
% corresponding innovations covariance matrix $Q = BB'$ obtained
from the
% SSM to the innovations covariance of the VAR(1) model.

home
disp('SSM State Disturbance Loading Matrix (B):')
disp('-----------------------------------------')
disp(ssmfit.B)
disp(' ')

%%

disp('SSM State Disturbance Covariance Matrix (Q = BB''):')


disp('--------------------------------------------------')
disp(ssmfit.B * ssmfit.B')
disp(' ')

disp('Two-Step State Disturbance Covariance Matrix (Q):')


disp('-------------------------------------------------')
disp(varfit.Q)
disp(' ')

%%
% Notice that the estimated covariance matrices are in relatively
close
% agreement, and that the estimated variance increases as we
proceed from
% level to slope to curvature along the main diagonal.

%%
% Finally, compare the factor means obtained from the SSM to
those of the
% two-step approach.

home
disp('SSM Factor Means:')
disp('-----------------')
disp(mu)
disp(' ')

disp('Two-Step Factor Means:')


disp('----------------------')
disp(mu0')
disp(' ')

%%
15
% In this case, the estimated means are in relatively close
agreement for
% the level and slope factors, although the curvature differs
between the
% two approaches.

%% Comparison of Inferred Factors


%
% The unobserved factors, or latent states, which correspond to
the level,
% slope, and curvature factors of the Diebold-Li model, are of
primary interest
% in forecasting the evolution of future yield curves. We now
examine the
% states inferred from each approach.
%
% In the two-step approach, the latent states (factors) are the
regression
% coefficients estimated in the OLS step.
%
% In the SSM approach, the |smooth| function implements Kalman
smoothing
% such that for t = 1,2,...,T the smoothed states are defined as
%
% $$E[x_t|y_T,...,y_1]$$
%
% However, before we invoke the |smooth| function, recall from
the discussion
% above that the SSM framework must account for offset
adjustments made to
% the observed yields during estimation. Specifically, during
estimation the
% parameter mapping function deflates the original observations,
and therefore
% works with the offset-adjusted yields $y'_t = y_t - \Lambda\mu$
rather than
% the original yields.
%
% Moreover, since the adjustment is known only to the mapping
function, the
% estimated SSM model has no explicit knowledge of any
adjustments made to
% the original yields. Therefore, other related SSM functions
such as |filter|,
% |smooth|, |forecast|, and |simulate| must properly account for
any offsets
% or regression component associated with predictors included in
the
% observation equation.

16
%
% Therefore, before we call the |smooth| function to infer the
estimated states
% we must first deflate the original yields by subtracting the
intercept
% associated with the estimated offset, $C\mu = \Lambda\mu$, to
compensate
% for the offset adjustment that occurred during estimation.
However, the
% states then inferred will correspond to the deflated yields,
when in fact
% we are interested in the actual states themselves (the level,
slope, and
% curvature factors), and not their offset-adjusted counterparts.
Therefore,
% after smoothing, the deflated states must be re-adjusted by
adding the
% estimated mean, $\mu$, to the factors.
%
% This process of deflating the observations, and then inflating
the states
% to unwind the deflation, is an important but subtle point.

intercept = ssmfit.C * mu';


deflatedYields = bsxfun(@minus,yields,intercept');
deflatedStates = smooth(ssmfit,deflatedYields);
estimatedStates = bsxfun(@plus,deflatedStates,mu);

%%
% Now that we have inferred the states, we can compare the
individual level,
% slope, and curvature factors derived from the SSM and two-step
approaches.
%
% First examine the level, or long-term factor.

figure
plot(dates, [beta(:,1) estimatedStates(:,1)])
title('Level (Long-Term Factor)')
ylabel('Percent')
datetick x
legend({'Two-Step','State-Space Model'},'location','best')

%%
% Now examine the slope, or short-term factor.

figure
plot(dates, [beta(:,2) estimatedStates(:,2)])
title('Slope (Short-Term Factor)')
ylabel('Percent')
17
datetick x
legend({'Two-Step','State-Space Model'},'location','best')

%%
% Now examine the curvature, or medium-term factor,

figure
plot(dates, [beta(:,3) estimatedStates(:,3)])
title('Curvature (Medium-Term Factor)')
ylabel('Percent')
datetick x
legend({'Two-Step','State-Space Model'},'location','best')

%%
% as well as the estimated decay rate parameter $\lambda$
associated with
% the curvature.

home
disp('SSM Decay Rate (Lambda):')
disp('------------------------')
disp(lambda)
disp(' ')

%%
% Notice that the estimated decay rate parameter is somewhat
larger than the
% value used by the two-step approach (0.0609).
%
% Recall that $\lambda$ determines the maturity at which the
loading on the
% curvature is maximized. In the two-step approach $\lambda$ is
fixed at
% 0.0609, reflecting a somewhat arbitrary decision to maximize
the curvature
% loading at exactly 2.5 years (30 months). In contrast, the SSM
estimates
% the maximum curvature loading to occur at just less than 2
years (23.1
% months), which can be seen by plotting the curvature loading
associated
% with each value of $\lambda$. In either case, its hump-shaped
behavior
% as a function of maturity reveals why the curvature is
interpreted as a
% medium-term factor.

tau = 0:(1/12):max(maturities); % maturity (months)


decay = [lambda0 lambda];
loading = zeros(numel(tau), 2);
18
for i = 1:numel(tau)
loading(i,:) = ((1-exp(-decay*tau(i)))./(decay*tau(i))-exp(-
decay*tau(i)));
end

figure
plot(tau,loading)
title('Loading on Curvature (Medium-Term Factor)')
xlabel('Maturity (Months)')
ylabel('Curvature Loading')
legend({'\lambda = 0.0609 Fixed by Two-Step', ['\lambda = '
num2str(lambda) ' Estimated by SSM'],},'location','best')

%%
% From the graphs above, we see that although differences between
the two
% approaches exist, the factors derived from each approach are
generally in
% reasonably close agreement. That said, the one-step SSM/Kalman
filter
% approach, in which all model parameters are estimated
simultaneously, is
% preferred.

%%
% As a final in-sample performance comparison, we now compare the
means and
% standard deviations of observation equation residuals of the
two approaches
% in a manner similar to Table 2 of [2]. The results are
expressed in basis
% points (bps).
%
% In creating the table below, note that the state measurement
sensitivity
% matrix $C$ in the SSM formulation is also the factor loadings
matrix
% $\Lambda$ found in [2].

residualsSSM = yields - estimatedStates*ssmfit.C';


residuals2Step = yields - beta*X';

residualMeanSSM = 100*mean(residualsSSM)';
residualStdSSM = 100*std(residualsSSM)';
residualMean2Step = 100*mean(residuals2Step)';
residualStd2Step = 100*std(residuals2Step)';

home
disp(' ')
19
disp(' -------------------------------------------------')
disp(' State-Space Model Two-Step')
disp(' ------------------- ------------------')
disp(' Standard Standard')
disp(' Maturity Mean Deviation Mean Deviation')
disp(' (Months) (bps) (bps) (bps) (bps) ')
disp(' -------- -------- --------- ------- ---------')
disp([maturities residualMeanSSM residualStdSSM residualMean2Step
residualStd2Step])

%%
% An examination of the table above reveals that, although the
SMM is not
% always better than the two-step approach at all maturities, it
provides a
% significantly better fit at most intermediate maturities from 6
to 60 months.

%% Forecasting and Monte Carlo Simulation


%
% As a final illustration, we now highlight the minimum mean
square error
% (MMSE) forecasting and Monte Carlo simulation capabilities of
the SSM
% functionality.
%
% Recall that since the Diebold-Li model depends only on the
estimated factors,
% the yield curve is forecasted by forecasting the factors.
However, as
% discussed above, when forecasting or simulating yields we must
compensate
% for the offset adjustment made during SSM estimation, and so
must use the
% deflated yields upon which the estimation is based.
%
% Using the deflated yields, we now call the |forecast| function
to compute
% the MMSE forecasts of the deflated yields 1,2, ..., 12 months
into the
% future. The actual forecasted yields are then computed by
adding the
% estimated offset $C\mu$ to the deflated counterparts.
%
% Note that the yield curve forecast will have a row for each
future period
% in the forecast horizon (12 in this example), and a column for
each maturity
% in each yield curve (17 in this example).

20
horizon = 12; % forecast horizon (months)

[forecastedDeflatedYields,mse] =
forecast(ssmfit,horizon,deflatedYields);
forecastedYields =
bsxfun(@plus,forecastedDeflatedYields,intercept');

%%
% Now that the deterministic MMSE forecasts have been computed
using the
% |forecast| function, we now illustrate how the same results may
be
% approximated using the |simulate| function.
%
% Before performing Monte Carlo simulation, however, we must
first initialize
% the mean vector and covariance matrix of the initial states
(factors) of
% the fitted SSM model to ensure the simulation begins with the
most recent
% information available. To do this, the following code segment
calls the
% |smooth| function to obtain the smoothed states obtained by
backward
% recursion.
%
% Since the following step initializes the fitted mean and
covariance to that
% available at the very end of the historical data set, state
smoothing
% obtained from the |smooth| function, using information from the
entire
% data set, is equivalent to state filtering obtained from the |
filter|
% function, using only information which precedes the last
observation.

[~,~,results] = smooth(ssmfit,deflatedYields); % FILTER could


also be used
ssmfit.Mean0 = results(end).SmoothedStates; % initialize the
mean
cov0 = results(end).SmoothedStatesCov;
ssmfit.Cov0 = (cov0 + cov0')/2; % initialize the
covariance

%%
% Now that the initial mean and covariance of the states have
been set, compute
% out-of-sample forecasts via Monte Carlo simulation.
21
%
% In the following code segment, each sample path represents the
future
% evolution of a simulated yield curve over a 12-month forecast
horizon.
% The simulation is repeated 100,000 times.
%
% In a manner similar to the forecasts computed previously, the
simulated yield
% curve matrix has a row for each future period in the forecast
horizon (12 in
% this example), and a column for each maturity (17 in this
example). However,
% in contrast to the MMSE forecast matrix, the simulated yield
curve matrix
% has a third dimension to store the 100,000 simulated paths.
%
% Again, notice that the deflated yields are actually simulated,
and then
% post-processed to account for the factor offsets.

rng('default')
nPaths = 100000;
simulatedDeflatedYields = simulate(ssmfit, horizon, nPaths);
simulatedYields = bsxfun(@plus, simulatedDeflatedYields,
intercept');

%%
% Now that the yields have been simulated, compute the sample
mean and standard
% deviation of the 100,000 trials. These statistics are the
sample analog
% of the MMSE forecasts and standard errors. To facilitate the
calculation
% of sample means and standard deviations, the matrix of
simulated yields is
% re-ordered such that it now has 100,000 rows, 12 columns, and
17 pages.

simulatedYields = permute(simulatedYields,[3 1 2]); % re-order


for convenience
forecasts = zeros(horizon,numel(maturities));
standardErrors = zeros(horizon,numel(maturities));

for i = 1:numel(maturities)
forecasts(:,i) = mean(simulatedYields(:,:,i));
standardErrors(:,i) = std(simulatedYields(:,:,i));
end

%%
22
% Now visually compare the MMSE forecasts and corresponding
standard errors
% obtained from the |forecast| function along with those obtained
from the
% |simulate| function via Monte Carlo. The results are virtually
identical.

figure
plot(maturities, [forecasts(horizon,:)'
forecastedYields(horizon,:)'])
title('12-Month-Ahead Forecasts: Monte Carlo vs. MMSE')
xlabel('Maturity (Months)')
ylabel('Percent')
legend({'Monte Carlo','Minimum Mean Square
Error'},'location','best')

figure
plot(maturities, [standardErrors(horizon,:)'
sqrt(mse(horizon,:))'])
title('12-Month-Ahead Forecast Standard Errors: Monte Carlo vs.
MMSE')
xlabel('Maturity (Months)')
ylabel('Percent')
legend({'Monte Carlo','Minimum Mean Square
Error'},'location','best')

%%
% Of course, the additional benefit of Monte Carlo simulation is
that it allows
% for a more detailed analysis of the distribution of yields
beyond the mean
% and standard error, and in turn provides additional insight
into how that
% distribution affects the distribution of other variables
dependent upon it.
% For example, in the insurance industry the simulation of yield
curves is
% commonly used to assess the distribution of profits and losses
associated
% with annuities and pension contracts.
%
% The following code segment displays the distribution of the
simulated
% 12-month yield at one, six, and 12 months into the future,
similar in spirit
% to the forecasting experiment shown in Tables 4-6 of [1].

index12 = find(maturities == 12); % page index of 12-month yield


bins = 0:0.2:12;

23
figure
subplot(3,1,1)
hist(simulatedYields(:,1,index12), bins)
axis([0 12 0 15000])
title('Distribution of Simulated 12-Month Yields')
xlabel('Yield 1 Month into the Future (%)')

subplot(3,1,2)
hist(simulatedYields(:,6,index12), bins)
axis([0 12 0 8000])
xlabel('Yield 6 Months into the Future (%)')
ylabel('Bin Count')

subplot(3,1,3)
hist(simulatedYields(:,12,index12), bins)
axis([0 12 0 5000])
xlabel('Yield 12 Months into the Future (%)')

%% Summary
%
% A linear state-space model is a discrete-time, stochastic model
with two
% equations, a state equation that describes the transition of
unobserved
% latent states, and an observation equation that links the
states to the
% observed data and describes how an observer indirectly measures
the latent
% process at each period.
%
% This example formulates the popular _yields-only_ Diebold-Li
term structure
% model in state-space representation, and from a time series of
yield curves
% infers the latent states in an effort to determine the
underlying factors
% driving the evolution of interest rates. The Diebold-Li model
is a dynamic
% model with three factors, the novel insight of which is the
interpretation
% of the factors as level, slope, and curvature.
%
% The example shown above illustrates the mapping of the Diebold-
Li model to
% a form suitable for modeling via the SSM functionality of the
Econometrics
% Toolbox, then further illustrates the parameter estimation,
smoothing,
% forecasting, and Monte Carlo simulation capabilities.

24
%% Bibliography
%
% This example is based on the following papers, the first two of
which may
% be found at
http://www.ssc.upenn.edu/~fdiebold/ResearchPapersChronological.ht
m.
%
% [1] Diebold, F.X and Li, C. (2006), "Forecasting the Term
Structure of
% Government Bond Yields", Journal of Econometrics, 130, 337-
364.
%
% [2] Diebold, F.X., Rudebusch, G.D. and Aruoba, B. (2006), "The
Macroeconomy
% and the Yield Curve: A Dynamic Latent Factor Approach",
Journal of
% Econometrics, 131, 309-338.
%
% [3] Nelson, R.C. and Siegel, A.F (1987), "Parsimonious Modeling
of Yield
% Curves", Journal of Business, 60, 4, 473-489.
%
% Furthermore, the entire unsmoothed Fama-Bliss yield curve
dataset, a subset
% of which is used in [1] and [2], may be found at
% http://www.ssc.upenn.edu/~fdiebold/papers/paper49/FBFITTED.txt.

displayEndOfDemoMessage(mfilename)

25

You might also like