dynare/matlab/doc/DsgeLikelihood.html

232 lines
16 KiB
HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head>
<title>Description of DsgeLikelihood</title>
<meta name="keywords" content="DsgeLikelihood">
<meta name="description" content="stephane.adjemian@cepremap.cnrs.fr [09-07-2004]">
<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; DsgeLikelihood.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>DsgeLikelihood
</h1>
<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
<div class="box"><strong>stephane.adjemian@cepremap.cnrs.fr [09-07-2004]</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 [fval,cost_flag,ys,trend_coeff,info] = DsgeLikelihood(xparam1,gend,data) </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"> stephane.adjemian@cepremap.cnrs.fr [09-07-2004]
Adapted from mj_optmumlik.m</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)">
<li><a href="DiffuseLikelihood3.html" class="code" title="function [LIK, lik] = DiffuseLikelihood3(T,R,Q,Pinf,Pstar,Y,trend,start)%//Z,T,R,Q,Pinf,Pstar,Y)">DiffuseLikelihood3</a> M. Ratto added lik in output [October 2005]</li><li><a href="DiffuseLikelihoodH1.html" class="code" title="function [LIK, lik] = DiffuseLikelihoodH1(T,R,Q,H,Pinf,Pstar,Y,trend,start)">DiffuseLikelihoodH1</a> M. Ratto added lik in output</li><li><a href="DiffuseLikelihoodH3.html" class="code" title="function [LIK, lik] = DiffuseLikelihoodH3(T,R,Q,H,Pinf,Pstar,Y,trend,start)">DiffuseLikelihoodH3</a> M. Ratto added lik in output [October 2005]</li><li><a href="DiffuseLikelihoodH3corr.html" class="code" title="function LIK = DiffuseLikelihoodH3corr(T,R,Q,H,Pinf,Pstar,Y,trend,start)">DiffuseLikelihoodH3corr</a> stephane.adjemian@cepremap.cnrs.fr [12-13-2004]</li><li><a href="dynare_resolve.html" class="code" title="function [A,B,ys,info] = dynare_resolve()">dynare_resolve</a> </li><li><a href="kalman_filter.html" class="code" title="function [loglik, per, d] = kalman_filter(varargin)">kalman_filter</a> SYNOPSIS</li><li><a href="lyapunov_symm.html" class="code" title="function [x,ns_var]=lyapunov_symm(a,b)">lyapunov_symm</a> solves x-a*x*a'=b for b (and then x) symmetrical</li><li><a href="priordens.html" class="code" title="function lnprior = priordens(para, pshape, p1, p2, p3, p4)">priordens</a> This procedure computes a prior density for</li></ul>
This function is called by:
<ul style="list-style-image:url(../matlabicon.gif)">
<li><a href="dynare_MC.html" class="code" title="function dynare_MC(var_list_)">dynare_MC</a> </li><li><a href="dynare_estimation.html" class="code" title="function dynare_estimation(var_list_)">dynare_estimation</a> </li><li><a href="initial_estimation_checks.html" class="code" title="function initial_estimation_checks(xparam1,gend,data)">initial_estimation_checks</a> </li><li><a href="metropolis.html" class="code" title="function metropolis(xparam1,vv,gend,data,rawdata,mh_bounds)">metropolis</a> stephane.adjemian@ens.fr [09-02-2005]</li><li><a href="mode_check.html" class="code" title="function mode_check(x,fval,hessian,gend,data,lb,ub)">mode_check</a> </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 [fval,cost_flag,ys,trend_coeff,info] = DsgeLikelihood(xparam1,gend,data)</a>
0002 <span class="comment">% stephane.adjemian@cepremap.cnrs.fr [09-07-2004]</span>
0003 <span class="comment">%</span>
0004 <span class="comment">% Adapted from mj_optmumlik.m</span>
0005 <span class="keyword">global</span> bayestopt_ estim_params_ options_ trend_coeff_ M_ oo_ xparam1_test
0006
0007 fval = [];
0008 ys = [];
0009 trend_coeff = [];
0010 xparam1_test = xparam1;
0011 cost_flag = 1;
0012 nobs = size(options_.varobs,1);
0013 <span class="comment">%------------------------------------------------------------------------------</span>
0014 <span class="comment">% 1. Get the structural parameters &amp; define penalties</span>
0015 <span class="comment">%------------------------------------------------------------------------------</span>
0016 <span class="keyword">if</span> options_.mode_compute ~= 1 &amp; any(xparam1 &lt; bayestopt_.lb)
0017 k = find(xparam1 &lt; bayestopt_.lb);
0018 fval = bayestopt_.penalty+sum((bayestopt_.lb(k)-xparam1(k)).^2);
0019 cost_flag = 0;
0020 <span class="keyword">return</span>;
0021 <span class="keyword">end</span>
0022 <span class="keyword">if</span> options_.mode_compute ~= 1 &amp; any(xparam1 &gt; bayestopt_.ub)
0023 k = find(xparam1 &gt; bayestopt_.ub);
0024 fval = bayestopt_.penalty+sum((xparam1(k)-bayestopt_.ub(k)).^2);
0025 cost_flag = 0;
0026 <span class="keyword">return</span>;
0027 <span class="keyword">end</span>
0028 Q = M_.Sigma_e;
0029 <span class="keyword">for</span> i=1:estim_params_.nvx
0030 k =estim_params_.var_exo(i,1);
0031 Q(k,k) = xparam1(i)*xparam1(i);
0032 <span class="keyword">end</span>
0033 offset = estim_params_.nvx;
0034 <span class="keyword">if</span> estim_params_.nvn
0035 H = zeros(nobs,nobs);
0036 <span class="keyword">for</span> i=1:estim_params_.nvn
0037 k = estim_params_.var_endo(i,1);
0038 H(k,k) = xparam1(i+offset)*xparam1(i+offset);
0039 <span class="keyword">end</span>
0040 offset = offset+estim_params_.nvn;
0041 <span class="keyword">end</span>
0042 <span class="keyword">if</span> estim_params_.ncx
0043 <span class="keyword">for</span> i=1:estim_params_.ncx
0044 k1 =estim_params_.corrx(i,1);
0045 k2 =estim_params_.corrx(i,2);
0046 Q(k1,k2) = xparam1(i+offset)*sqrt(Q(k1,k1)*Q(k2,k2));
0047 Q(k2,k1) = Q(k1,k2);
0048 <span class="keyword">end</span>
0049 [CholQ,testQ] = chol(Q);
0050 <span class="keyword">if</span> testQ <span class="comment">%% The variance-covariance matrix of the structural innovations is not definite positive.</span>
0051 <span class="comment">%% We have to compute the eigenvalues of this matrix in order to build the penalty.</span>
0052 a = diag(eig(Q));
0053 k = find(a &lt; 0);
0054 <span class="keyword">if</span> k &gt; 0
0055 fval = bayestopt_.penalty+sum(-a(k));
0056 cost_flag = 0;
0057 <span class="keyword">return</span>
0058 <span class="keyword">end</span>
0059 <span class="keyword">end</span>
0060 offset = offset+estim_params_.ncx;
0061 <span class="keyword">end</span>
0062 <span class="keyword">if</span> estim_params_.ncn
0063 <span class="keyword">for</span> i=1:estim_params_.ncn
0064 k1 = options_.lgyidx2varobs(estim_params_.corrn(i,1));
0065 k2 = options_.lgyidx2varobs(estim_params_.corrn(i,2));
0066 H(k1,k2) = xparam1(i+offset)*sqrt(H(k1,k1)*H(k2,k2));
0067 H(k2,k1) = H(k1,k2);
0068 <span class="keyword">end</span>
0069 [CholH,testH] = chol(H);
0070 <span class="keyword">if</span> testH
0071 a = diag(eig(H));
0072 k = find(a &lt; 0);
0073 <span class="keyword">if</span> k &gt; 0
0074 fval = bayestopt_.penalty+sum(-a(k));
0075 cost_flag = 0;
0076 <span class="keyword">return</span>
0077 <span class="keyword">end</span>
0078 <span class="keyword">end</span>
0079 offset = offset+estim_params_.ncn;
0080 <span class="keyword">end</span>
0081 M_.params(estim_params_.param_vals(:,1)) = xparam1(offset+1:end);
0082 <span class="comment">% for i=1:estim_params_.np</span>
0083 <span class="comment">% M_.params(estim_params_.param_vals(i,1)) = xparam1(i+offset);</span>
0084 <span class="comment">%end</span>
0085 M_.Sigma_e = Q;
0086 <span class="comment">%------------------------------------------------------------------------------</span>
0087 <span class="comment">% 2. call model setup &amp; reduction program</span>
0088 <span class="comment">%------------------------------------------------------------------------------</span>
0089 [T,R,SteadyState,info] = <a href="dynare_resolve.html" class="code" title="function [A,B,ys,info] = dynare_resolve()">dynare_resolve</a>;
0090 rs = bayestopt_.restrict_state;
0091 <span class="keyword">if</span> info(1) == 1 | info(1) == 2 | info(1) == 5
0092 fval = bayestopt_.penalty+1;
0093 cost_flag = 0;
0094 <span class="keyword">return</span>
0095 <span class="keyword">elseif</span> info(1) == 3 | info(1) == 4 | info(1) == 20
0096 fval = bayestopt_.penalty+info(2)^2;
0097 cost_flag = 0;
0098 <span class="keyword">return</span>
0099 <span class="keyword">end</span>
0100 T = T(rs,rs);
0101 R = R(rs,:);
0102 bayestopt_.mf = bayestopt_.mf1;
0103 <span class="keyword">if</span> options_.loglinear == 1
0104 constant = log(SteadyState(bayestopt_.mfys));
0105 <span class="keyword">else</span>
0106 constant = SteadyState(bayestopt_.mfys);
0107 <span class="keyword">end</span>
0108 <span class="keyword">if</span> bayestopt_.with_trend == 1
0109 trend_coeff = zeros(nobs,1);
0110 <span class="keyword">for</span> i=1:nobs
0111 trend_coeff(i) = evalin(<span class="string">'base'</span>,bayestopt_.trend_coeff{i});
0112 <span class="keyword">end</span>
0113 trend = repmat(constant,1,gend)+trend_coeff*[1:gend];
0114 <span class="keyword">else</span>
0115 trend = repmat(constant,1,gend);
0116 <span class="keyword">end</span>
0117 start = options_.presample+1;
0118 np = size(T,1);
0119 mf = bayestopt_.mf;
0120 <span class="comment">%------------------------------------------------------------------------------</span>
0121 <span class="comment">% 3. Initial condition of the Kalman filter</span>
0122 <span class="comment">%------------------------------------------------------------------------------</span>
0123 <span class="keyword">if</span> options_.lik_init == 1 <span class="comment">% Kalman filter</span>
0124 Pstar = <a href="lyapunov_symm.html" class="code" title="function [x,ns_var]=lyapunov_symm(a,b)">lyapunov_symm</a>(T,R*Q*transpose(R));
0125 Pinf = [];
0126 <span class="keyword">elseif</span> options_.lik_init == 2 <span class="comment">% Old Diffuse Kalman filter</span>
0127 Pstar = 10*eye(np);
0128 Pinf = [];
0129 <span class="keyword">elseif</span> options_.lik_init == 3 <span class="comment">% Diffuse Kalman filter</span>
0130 Pstar = zeros(np,np);
0131 ivs = bayestopt_.i_T_var_stable;
0132 Pstar(ivs,ivs) = <a href="lyapunov_symm.html" class="code" title="function [x,ns_var]=lyapunov_symm(a,b)">lyapunov_symm</a>(T(ivs,ivs),R(ivs,:)*Q* <span class="keyword">...</span>
0133 transpose(R(ivs,:)));
0134 Pinf = bayestopt_.Pinf;
0135 <span class="comment">% by M. Ratto</span>
0136 RR=T(:,find(~ismember([1:np],ivs)));
0137 i=find(abs(RR)&gt;1.e-10);
0138 R0=zeros(size(RR));
0139 R0(i)=sign(RR(i));
0140 Pinf=R0*R0';
0141 <span class="comment">% by M. Ratto</span>
0142 <span class="keyword">end</span>
0143 <span class="comment">%------------------------------------------------------------------------------</span>
0144 <span class="comment">% 4. Likelihood evaluation</span>
0145 <span class="comment">%------------------------------------------------------------------------------</span>
0146 <span class="keyword">if</span> estim_params_.nvn
0147 <span class="keyword">if</span> options_.kalman_algo == 1
0148 LIK = <a href="DiffuseLikelihoodH1.html" class="code" title="function [LIK, lik] = DiffuseLikelihoodH1(T,R,Q,H,Pinf,Pstar,Y,trend,start)">DiffuseLikelihoodH1</a>(T,R,Q,H,Pinf,Pstar,data,trend,start);
0149 <span class="keyword">if</span> isinf(LIK) &amp; ~estim_params_.ncn <span class="comment">%% The univariate approach considered here doesn't</span>
0150 <span class="comment">%% apply when H has some off-diagonal elements.</span>
0151 LIK = <a href="DiffuseLikelihoodH3.html" class="code" title="function [LIK, lik] = DiffuseLikelihoodH3(T,R,Q,H,Pinf,Pstar,Y,trend,start)">DiffuseLikelihoodH3</a>(T,R,Q,H,Pinf,Pstar,data,trend,start);
0152 <span class="keyword">elseif</span> isinf(LIK) &amp; estim_params_.ncn
0153 LIK = <a href="DiffuseLikelihoodH3corr.html" class="code" title="function LIK = DiffuseLikelihoodH3corr(T,R,Q,H,Pinf,Pstar,Y,trend,start)">DiffuseLikelihoodH3corr</a>(T,R,Q,H,Pinf,Pstar,data,trend,start);
0154 <span class="keyword">end</span>
0155 <span class="keyword">elseif</span> options_.kalman_algo == 3
0156 <span class="keyword">if</span> ~estim_params_.ncn <span class="comment">%% The univariate approach considered here doesn't</span>
0157 <span class="comment">%% apply when H has some off-diagonal elements.</span>
0158 LIK = <a href="DiffuseLikelihoodH3.html" class="code" title="function [LIK, lik] = DiffuseLikelihoodH3(T,R,Q,H,Pinf,Pstar,Y,trend,start)">DiffuseLikelihoodH3</a>(T,R,Q,H,Pinf,Pstar,data,trend,start);
0159 <span class="keyword">else</span>
0160 LIK = <a href="DiffuseLikelihoodH3corr.html" class="code" title="function LIK = DiffuseLikelihoodH3corr(T,R,Q,H,Pinf,Pstar,Y,trend,start)">DiffuseLikelihoodH3corr</a>(T,R,Q,H,Pinf,Pstar,data,trend,start);
0161 <span class="keyword">end</span>
0162 <span class="keyword">end</span>
0163 <span class="keyword">else</span>
0164 <span class="keyword">if</span> options_.kalman_algo == 1
0165 nv = size(bayestopt_.Z,1);
0166 LIK = <a href="kalman_filter.html" class="code" title="function [loglik, per, d] = kalman_filter(varargin)">kalman_filter</a>(bayestopt_.Z,zeros(nv,nv),T,R,Q,data,zeros(size(T,1),1),Pstar,<span class="string">'u'</span>);
0167 <span class="comment">% LIK = DiffuseLikelihood1(T,R,Q,Pinf,Pstar,data,trend,start);</span>
0168 <span class="keyword">if</span> isinf(LIK)
0169 LIK = <a href="DiffuseLikelihood3.html" class="code" title="function [LIK, lik] = DiffuseLikelihood3(T,R,Q,Pinf,Pstar,Y,trend,start)%//Z,T,R,Q,Pinf,Pstar,Y)">DiffuseLikelihood3</a>(T,R,Q,Pinf,Pstar,data,trend,start);
0170 <span class="keyword">end</span>
0171 <span class="keyword">elseif</span> options_.kalman_algo == 3
0172 LIK = <a href="DiffuseLikelihood3.html" class="code" title="function [LIK, lik] = DiffuseLikelihood3(T,R,Q,Pinf,Pstar,Y,trend,start)%//Z,T,R,Q,Pinf,Pstar,Y)">DiffuseLikelihood3</a>(T,R,Q,Pinf,Pstar,data,trend,start);
0173 <span class="keyword">end</span>
0174 <span class="keyword">end</span>
0175 <span class="keyword">if</span> imag(LIK) ~= 0
0176 likelihood = bayestopt_.penalty;
0177 <span class="keyword">else</span>
0178 likelihood = LIK;
0179 <span class="keyword">end</span>
0180 <span class="comment">% ------------------------------------------------------------------------------</span>
0181 <span class="comment">% Adds prior if necessary</span>
0182 <span class="comment">% ------------------------------------------------------------------------------</span>
0183 lnprior = <a href="priordens.html" class="code" title="function lnprior = priordens(para, pshape, p1, p2, p3, p4)">priordens</a>(xparam1,bayestopt_.pshape,bayestopt_.p1,bayestopt_.p2,bayestopt_.p3,bayestopt_.p4);
0184 fval = (likelihood-lnprior);</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>