232 lines
16 KiB
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 © 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> > <a href="index.html">.</a> > DsgeLikelihood.m</div>
|
||
|
|
||
|
<!--<table width="100%"><tr><td align="left"><a href="../index.html"><img alt="<" border="0" src="../left.png"> Master index</a></td>
|
||
|
<td align="right"><a href="index.html">Index for . <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 & define penalties</span>
|
||
|
0015 <span class="comment">%------------------------------------------------------------------------------</span>
|
||
|
0016 <span class="keyword">if</span> options_.mode_compute ~= 1 & any(xparam1 < bayestopt_.lb)
|
||
|
0017 k = find(xparam1 < 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 & any(xparam1 > bayestopt_.ub)
|
||
|
0023 k = find(xparam1 > 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 < 0);
|
||
|
0054 <span class="keyword">if</span> k > 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 < 0);
|
||
|
0073 <span class="keyword">if</span> k > 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 & 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)>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) & ~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) & 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> © 2003</address>
|
||
|
</body>
|
||
|
</html>
|