dynare/matlab/doc/DiffuseLikelihoodH3.html

329 lines
17 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>Description of DiffuseLikelihoodH3</title>
<meta name="keywords" content="DiffuseLikelihoodH3">
<meta name="description" content="M. Ratto added lik in output [October 2005]">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="generator" content="m2html &copy; 2003 Guillaume Flandin">
<meta name="robots" content="index, follow">
<link type="text/css" rel="stylesheet" href="../m2html.css">
</head>
<body>
<a name="_top"></a>
<div><a href="../index.html">Home</a> &gt; <a href="index.html">.</a> &gt; DiffuseLikelihoodH3.m</div>
<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png">&nbsp;Master index</a></td>
<td align="right"><a href="index.html">Index for .&nbsp;<img alt=">" border="0" src="../right.png"></a></td></tr></table>-->
<h1>DiffuseLikelihoodH3
</h1>
<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
<div class="box"><strong>M. Ratto added lik in output [October 2005]</strong></div>
<h2><a name="_synopsis"></a>SYNOPSIS <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
<div class="box"><strong>function [LIK, lik] = DiffuseLikelihoodH3(T,R,Q,H,Pinf,Pstar,Y,trend,start) </strong></div>
<h2><a name="_description"></a>DESCRIPTION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
<div class="fragment"><pre class="comment"> M. Ratto added lik in output [October 2005]
changes by M. Ratto
introduced new global variable id_ for termination of DKF
introduced a persistent fmax, in order to keep track the max order of
magnitude of the 'zero' values in Pinf at DKF termination
new icc counter for Finf steps in DKF
new termination for DKF
likelihood terms for Fstar must be cumulated in DKF also when Pinf is non
zero. this bug is fixed.
stephane.adjemian@cepremap.cnrs.fr [07-19-2004]
See &quot;Filtering and Smoothing of State Vector for Diffuse State Space
Models&quot;, S.J. Koopman and J. Durbin (2003, in Journal of Time Series
Analysis, vol. 24(1), pp. 85-98).
Case where F_{\infty,t} is singular ==&gt; Univariate treatment of multivariate
time series.
THE PROBLEM:
y_t = Z_t * \alpha_t + \varepsilon_t
\alpha_{t+1} = T_t * \alpha_t + R_t * \eta_t
with:
\alpha_1 = a + A*\delta + R_0*\eta_0
m*q matrix A and m*(m-q) matrix R_0 are selection matrices (their
columns constitue all the columns of the m*m identity matrix) so that
A'*R_0 = 0 and A'*\alpha_1 = \delta
We assume that the vector \delta is distributed as a N(0,\kappa*I_q)
for a given \kappa &gt; 0. So that the expectation of \alpha_1 is a and
its variance is P, with
P = \kappa*P_{\infty} + P_{\star}
P_{\infty} = A*A'
P_{\star} = R_0*Q_0*R_0'
P_{\infty} is a m*m diagonal matrix with q ones and m-q zeros.
and where:
y_t is a pp*1 vector
\alpha_t is a mm*1 vector
\varepsilon_t is a pp*1 multivariate random variable (iid N(0,H_t))
\eta_t is a rr*1 multivariate random variable (iid N(0,Q_t))
a_1 is a mm*1 vector
Z_t is a pp*mm matrix
T_t is a mm*mm matrix
H_t is a pp*pp matrix
R_t is a mm*rr matrix
Q_t is a rr*rr matrix
P_1 is a mm*mm matrix
FILTERING EQUATIONS:
v_t = y_t - Z_t* a_t
F_t = Z_t * P_t * Z_t' + H_t
K_t = T_t * P_t * Z_t' * F_t^{-1}
L_t = T_t - K_t * Z_t
a_{t+1} = T_t * a_t + K_t * v_t
P_{t+1} = T_t * P_t * L_t' + R_t*Q_t*R_t'
DIFFUSE FILTERING EQUATIONS:
a_{t+1} = T_t*a_t + K_{\ast,t}v_t
P_{\infty,t+1} = T_t*P_{\infty,t}*T_t'
P_{\ast,t+1} = T_t*P_{\ast,t}*L_{\ast,t}' + R_t*Q_t*R_t'
K_{\ast,t} = T_t*P_{\ast,t}*Z_t'*F_{\ast,t}^{-1}
v_t = y_t - Z_t*a_t
L_{\ast,t} = T_t - K_{\ast,t}*Z_t
F_{\ast,t} = Z_t*P_{\ast,t}*Z_t' + H_t</pre></div>
<!-- crossreference -->
<h2><a name="_cross"></a>CROSS-REFERENCE INFORMATION <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
This function calls:
<ul style="list-style-image:url(../matlabicon.gif)">
</ul>
This function is called by:
<ul style="list-style-image:url(../matlabicon.gif)">
<li><a href="DsgeLikelihood.html" class="code" title="function [fval,cost_flag,ys,trend_coeff,info] = DsgeLikelihood(xparam1,gend,data)">DsgeLikelihood</a> stephane.adjemian@cepremap.cnrs.fr [09-07-2004]</li></ul>
<!-- crossreference -->
<h2><a name="_source"></a>SOURCE CODE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
<div class="fragment"><pre>0001 <a name="_sub0" href="#_subfunctions" class="code">function [LIK, lik] = DiffuseLikelihoodH3(T,R,Q,H,Pinf,Pstar,Y,trend,start)</a>
0002 <span class="comment">% M. Ratto added lik in output [October 2005]</span>
0003 <span class="comment">% changes by M. Ratto</span>
0004 <span class="comment">% introduced new global variable id_ for termination of DKF</span>
0005 <span class="comment">% introduced a persistent fmax, in order to keep track the max order of</span>
0006 <span class="comment">% magnitude of the 'zero' values in Pinf at DKF termination</span>
0007 <span class="comment">% new icc counter for Finf steps in DKF</span>
0008 <span class="comment">% new termination for DKF</span>
0009 <span class="comment">% likelihood terms for Fstar must be cumulated in DKF also when Pinf is non</span>
0010 <span class="comment">% zero. this bug is fixed.</span>
0011 <span class="comment">%</span>
0012 <span class="comment">% stephane.adjemian@cepremap.cnrs.fr [07-19-2004]</span>
0013 <span class="comment">%</span>
0014 <span class="comment">% See &quot;Filtering and Smoothing of State Vector for Diffuse State Space</span>
0015 <span class="comment">% Models&quot;, S.J. Koopman and J. Durbin (2003, in Journal of Time Series</span>
0016 <span class="comment">% Analysis, vol. 24(1), pp. 85-98).</span>
0017 <span class="comment">%</span>
0018 <span class="comment">% Case where F_{\infty,t} is singular ==&gt; Univariate treatment of multivariate</span>
0019 <span class="comment">% time series.</span>
0020 <span class="comment">%</span>
0021 <span class="comment">% THE PROBLEM:</span>
0022 <span class="comment">%</span>
0023 <span class="comment">% y_t = Z_t * \alpha_t + \varepsilon_t</span>
0024 <span class="comment">% \alpha_{t+1} = T_t * \alpha_t + R_t * \eta_t</span>
0025 <span class="comment">%</span>
0026 <span class="comment">% with:</span>
0027 <span class="comment">%</span>
0028 <span class="comment">% \alpha_1 = a + A*\delta + R_0*\eta_0</span>
0029 <span class="comment">%</span>
0030 <span class="comment">% m*q matrix A and m*(m-q) matrix R_0 are selection matrices (their</span>
0031 <span class="comment">% columns constitue all the columns of the m*m identity matrix) so that</span>
0032 <span class="comment">%</span>
0033 <span class="comment">% A'*R_0 = 0 and A'*\alpha_1 = \delta</span>
0034 <span class="comment">%</span>
0035 <span class="comment">% We assume that the vector \delta is distributed as a N(0,\kappa*I_q)</span>
0036 <span class="comment">% for a given \kappa &gt; 0. So that the expectation of \alpha_1 is a and</span>
0037 <span class="comment">% its variance is P, with</span>
0038 <span class="comment">%</span>
0039 <span class="comment">% P = \kappa*P_{\infty} + P_{\star}</span>
0040 <span class="comment">%</span>
0041 <span class="comment">% P_{\infty} = A*A'</span>
0042 <span class="comment">% P_{\star} = R_0*Q_0*R_0'</span>
0043 <span class="comment">%</span>
0044 <span class="comment">% P_{\infty} is a m*m diagonal matrix with q ones and m-q zeros.</span>
0045 <span class="comment">%</span>
0046 <span class="comment">%</span>
0047 <span class="comment">% and where:</span>
0048 <span class="comment">%</span>
0049 <span class="comment">% y_t is a pp*1 vector</span>
0050 <span class="comment">% \alpha_t is a mm*1 vector</span>
0051 <span class="comment">% \varepsilon_t is a pp*1 multivariate random variable (iid N(0,H_t))</span>
0052 <span class="comment">% \eta_t is a rr*1 multivariate random variable (iid N(0,Q_t))</span>
0053 <span class="comment">% a_1 is a mm*1 vector</span>
0054 <span class="comment">%</span>
0055 <span class="comment">% Z_t is a pp*mm matrix</span>
0056 <span class="comment">% T_t is a mm*mm matrix</span>
0057 <span class="comment">% H_t is a pp*pp matrix</span>
0058 <span class="comment">% R_t is a mm*rr matrix</span>
0059 <span class="comment">% Q_t is a rr*rr matrix</span>
0060 <span class="comment">% P_1 is a mm*mm matrix</span>
0061 <span class="comment">%</span>
0062 <span class="comment">%</span>
0063 <span class="comment">% FILTERING EQUATIONS:</span>
0064 <span class="comment">%</span>
0065 <span class="comment">% v_t = y_t - Z_t* a_t</span>
0066 <span class="comment">% F_t = Z_t * P_t * Z_t' + H_t</span>
0067 <span class="comment">% K_t = T_t * P_t * Z_t' * F_t^{-1}</span>
0068 <span class="comment">% L_t = T_t - K_t * Z_t</span>
0069 <span class="comment">% a_{t+1} = T_t * a_t + K_t * v_t</span>
0070 <span class="comment">% P_{t+1} = T_t * P_t * L_t' + R_t*Q_t*R_t'</span>
0071 <span class="comment">%</span>
0072 <span class="comment">%</span>
0073 <span class="comment">% DIFFUSE FILTERING EQUATIONS:</span>
0074 <span class="comment">%</span>
0075 <span class="comment">% a_{t+1} = T_t*a_t + K_{\ast,t}v_t</span>
0076 <span class="comment">% P_{\infty,t+1} = T_t*P_{\infty,t}*T_t'</span>
0077 <span class="comment">% P_{\ast,t+1} = T_t*P_{\ast,t}*L_{\ast,t}' + R_t*Q_t*R_t'</span>
0078 <span class="comment">% K_{\ast,t} = T_t*P_{\ast,t}*Z_t'*F_{\ast,t}^{-1}</span>
0079 <span class="comment">% v_t = y_t - Z_t*a_t</span>
0080 <span class="comment">% L_{\ast,t} = T_t - K_{\ast,t}*Z_t</span>
0081 <span class="comment">% F_{\ast,t} = Z_t*P_{\ast,t}*Z_t' + H_t</span>
0082 <span class="keyword">global</span> bayestopt_ options_
0083
0084 mf = bayestopt_.mf;
0085 pp = size(Y,1);
0086 mm = size(T,1);
0087 smpl = size(Y,2);
0088 a = zeros(mm,1);
0089 QQ = R*Q*transpose(R);
0090 t = 0;
0091 lik = zeros(smpl+1,1);
0092 lik(smpl+1) = smpl*pp*log(2*pi); <span class="comment">%% the constant of minus two times the log-likelihood</span>
0093 notsteady = 1;
0094 crit = options_.kalman_tol;
0095 crit1 = 1.e-6;
0096 newRank = rank(Pinf,crit1);
0097 icc = 0;
0098 <span class="keyword">while</span> newRank &amp; t &lt; smpl <span class="comment">%% Matrix Finf is assumed to be zero</span>
0099 t = t+1;
0100 <span class="keyword">for</span> i=1:pp
0101 v(i) = Y(i,t)-a(mf(i))-trend(i,t);
0102 Fstar = Pstar(mf(i),mf(i))+H(i,i);
0103 Finf = Pinf(mf(i),mf(i));
0104 Kstar = Pstar(:,mf(i));
0105 <span class="keyword">if</span> Finf &gt; crit &amp; newRank
0106 icc = icc + 1;
0107 Kinf = Pinf(:,mf(i));
0108 a = a + Kinf*v(i)/Finf;
0109 Pstar = Pstar + Kinf*transpose(Kinf)*Fstar/(Finf*Finf) - <span class="keyword">...</span>
0110 (Kstar*transpose(Kinf)+Kinf*transpose(Kstar))/Finf;
0111 Pinf = Pinf - Kinf*transpose(Kinf)/Finf;
0112 lik(t) = lik(t) + log(Finf);
0113 <span class="comment">% start new termination criterion for DKF</span>
0114 <span class="keyword">if</span> ~isempty(options_.diffuse_d),
0115 newRank = (icc&lt;options_.diffuse_d);
0116 <span class="comment">%if newRank &amp; any(diag(Pinf(mf,mf))&gt;crit)==0; % M. Ratto this line is BUGGY</span>
0117 <span class="keyword">if</span> newRank &amp; (any(diag(Pinf(mf,mf))&gt;crit)==0 &amp; rank(Pinf,crit1)==0);
0118 options_.diffuse_d = icc;
0119 newRank=0;
0120 disp(<span class="string">'WARNING: Change in OPTIONS_.DIFFUSE_D in univariate DKF'</span>)
0121 disp([<span class="string">'new OPTIONS_.DIFFUSE_D = '</span>,int2str(icc)])
0122 disp(<span class="string">'You may have to reset the optimisation'</span>)
0123 <span class="keyword">end</span>
0124 <span class="keyword">else</span>
0125 <span class="comment">%newRank = any(diag(Pinf(mf,mf))&gt;crit); % M. Ratto this line is BUGGY</span>
0126 newRank = (any(diag(Pinf(mf,mf))&gt;crit) | rank(Pinf,crit1));
0127 <span class="keyword">if</span> newRank==0,
0128 P0= T*Pinf*transpose(T);
0129 <span class="comment">%newRank = any(diag(P0(mf,mf))&gt;crit); % M. Ratto this line is BUGGY</span>
0130 newRank = (any(diag(P0(mf,mf))&gt;crit) | rank(P0,crit1)); <span class="comment">% M. Ratto 10 Oct 2005</span>
0131 <span class="keyword">if</span> newRank==0,
0132 options_.diffuse_d = icc;
0133 <span class="keyword">end</span>
0134 <span class="keyword">end</span>
0135 <span class="keyword">end</span>,
0136 <span class="comment">% end new termination and checks for DKF and fmax</span>
0137 <span class="keyword">elseif</span> Finf &gt; crit
0138 <span class="comment">%% Note that : (1) rank(Pinf)=0 implies that Finf = 0, (2) outside this loop (when for some i and t the condition</span>
0139 <span class="comment">%% rank(Pinf)=0 is satisfied we have P = Pstar and F = Fstar and (3) Finf = 0 does not imply that</span>
0140 <span class="comment">%% rank(Pinf)=0. [stphane,11-03-2004].</span>
0141 <span class="comment">%if rank(Pinf) == 0</span>
0142 <span class="comment">% the likelihood terms should alwasy be cumulated, not only</span>
0143 <span class="comment">% when Pinf=0, otherwise the lik would depend on the ordering</span>
0144 <span class="comment">% of observed variables</span>
0145 lik(t) = lik(t) + log(Fstar) + v(i)*v(i)/Fstar;
0146 <span class="comment">%end</span>
0147 a = a + Kstar*v(i)/Fstar;
0148 Pstar = Pstar - Kstar*transpose(Kstar)/Fstar;
0149 <span class="keyword">else</span>
0150 <span class="comment">% disp(['zero F term in DKF for observed ',int2str(i),' ',num2str(Fi)])</span>
0151 <span class="keyword">end</span>
0152 <span class="keyword">end</span>
0153 <span class="keyword">if</span> newRank
0154 oldRank = rank(Pinf,crit1);
0155 <span class="keyword">else</span>
0156 oldRank = 0;
0157 <span class="keyword">end</span>
0158 a = T*a;
0159 Pstar = T*Pstar*transpose(T)+QQ;
0160 Pinf = T*Pinf*transpose(T);
0161 <span class="keyword">if</span> newRank
0162 newRank = rank(Pinf,crit1);
0163 <span class="keyword">end</span>
0164 <span class="keyword">if</span> oldRank ~= newRank
0165 disp(<span class="string">'DiffuseLiklihoodH3 :: T does influence the rank of Pinf!'</span>)
0166 <span class="keyword">end</span>
0167 <span class="keyword">end</span>
0168 <span class="keyword">if</span> t == smpl
0169 error([<span class="string">'There isn''t enough information to estimate the initial'</span> <span class="keyword">...</span><span class="comment"> </span>
0170 <span class="string">' conditions of the nonstationary variables'</span>]);
0171 <span class="keyword">end</span>
0172 <span class="keyword">while</span> notsteady &amp; t &lt; smpl
0173 t = t+1;
0174 <span class="keyword">for</span> i=1:pp
0175 v(i) = Y(i,t) - a(mf(i)) - trend(i,t);
0176 Fi = Pstar(mf(i),mf(i))+H(i,i);
0177 <span class="keyword">if</span> Fi &gt; crit
0178 Ki = Pstar(:,mf(i));
0179 a = a + Ki*v(i)/Fi;
0180 Pstar = Pstar - Ki*transpose(Ki)/Fi;
0181 lik(t) = lik(t) + log(Fi) + v(i)*v(i)/Fi;
0182 <span class="keyword">end</span>
0183 <span class="keyword">end</span>
0184 oldP = Pstar;
0185 a = T*a;
0186 Pstar = T*Pstar*transpose(T) + QQ;
0187 notsteady = ~(max(max(abs(Pstar-oldP)))&lt;crit);
0188 <span class="keyword">end</span>
0189 <span class="keyword">while</span> t &lt; smpl
0190 t = t+1;
0191 <span class="keyword">for</span> i=1:pp
0192 v(i) = Y(i,t) - a(mf(i)) - trend(i,t);
0193 Fi = Pstar(mf(i),mf(i))+H(i,i);
0194 <span class="keyword">if</span> Fi &gt; crit
0195 Ki = Pstar(:,mf(i));
0196 a = a + Ki*v(i)/Fi;
0197 Pstar = Pstar - Ki*transpose(Ki)/Fi;
0198 lik(t) = lik(t) + log(Fi) + v(i)*v(i)/Fi;
0199 <span class="keyword">end</span>
0200 <span class="keyword">end</span>
0201 a = T*a;
0202 <span class="keyword">end</span>
0203 LIK = .5*(sum(lik(start:end))-(start-1)*lik(smpl+1)/smpl);
0204</pre></div>
<hr><address>Generated on Fri 16-Jun-2006 09:09:06 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> &copy; 2003</address>
</body>
</html>