dynare/matlab/doc/calib.html

221 lines
13 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 calib</title>
<meta name="keywords" content="calib">
<meta name="description" content="">
<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; calib.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>calib
</h1>
<h2><a name="_name"></a>PURPOSE <a href="#_top"><img alt="^" border="0" src="../up.png"></a></h2>
<div class="box"><strong></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 M_.Sigma_e = calib(var_indices,targets,var_weights,nar,cova,M_.Sigma_e) </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"></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="calib_obj.html" class="code" title="function f=calib_obj(M_.Sigma_e,A,ghu1,ghx,ghu,targets,var_weights,iy,nar)">calib_obj</a> targets and iy order: 1) variances 2) correlations</li><li><a href="calib_obj2.html" class="code" title="function objective=calib_obj2(M_.Sigma_e,A,ghu1,ghx,ghu,targets,var_weights,iy,nar)">calib_obj2</a> targets and iy order: 1) variances 2) correlations</li><li><a href="indnv.html" class="code" title="function a=indnv(x,y)">indnv</a> Copyright (C) 2001 Michel Juillard</li><li><a href="resol.html" class="code" title="function [dr,info]=resol(ys,check_flag)">resol</a> Copyright (C) 2001 Michel Juillard</li><li><a href="union.html" class="code" title="function x = union(a,b)">union</a> </li></ul>
This function is called by:
<ul style="list-style-image:url(../matlabicon.gif)">
</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 M_.Sigma_e = calib(var_indices,targets,var_weights,nar,cova,M_.Sigma_e)</a>
0002 <span class="keyword">global</span> oo_ M_ vx
0003
0004 ncstr = 0;
0005 ni = size(var_indices,1);
0006 <span class="keyword">for</span> i=1:nar+3
0007 ncstr = ncstr + size(var_indices{i},1);
0008 <span class="keyword">end</span>
0009 <span class="keyword">if</span> cova
0010 <span class="keyword">if</span> ncstr &lt; M_.exo_nbr*(M_.exo_nbr+1)/2
0011 error([<span class="string">'number of preset variances is smaller than number of shock'</span> <span class="keyword">...</span>
0012 <span class="string">' variances and covariances to be estimated !'</span>])
0013 <span class="keyword">end</span>
0014 <span class="keyword">else</span>
0015 <span class="keyword">if</span> ncstr &lt; M_.exo_nbr
0016 error([<span class="string">'number of preset variances is smaller than number of shock'</span> <span class="keyword">...</span>
0017 <span class="string">' variances to be estimated !'</span>])
0018 <span class="keyword">end</span>
0019 <span class="keyword">end</span>
0020
0021 <span class="comment">% computes approximate solution at order 1</span>
0022 dr = <a href="resol.html" class="code" title="function [dr,info]=resol(ys,check_flag)">resol</a>(oo_.steady_state,0,0,1);
0023
0024 ghx = dr.ghx;
0025 ghu = dr.ghu;
0026 npred = dr.npred;
0027 nstatic = dr.nstatic;
0028 kstate = dr.kstate;
0029 order = dr.order_var;
0030 iv(order) = [1:M_.endo_nbr];
0031 iv = iv';
0032 nx = size(ghx,2);
0033
0034 ikx = [nstatic+1:nstatic+npred];
0035
0036 A = zeros(nx,nx);
0037 A(1:npred,:)=ghx(ikx,:);
0038 offset_r = npred;
0039 offset_c = 0;
0040 i0 = find(kstate(:,2) == M_.maximum_lag+1);
0041 n0 = size(i0,1);
0042 <span class="keyword">for</span> i=M_.maximum_lag:-1:2
0043 i1 = find(kstate(:,2) == i);
0044 n1 = size(i1,1);
0045 j = zeros(n1,1);
0046 <span class="keyword">for</span> j1 = 1:n1
0047 j(j1) = find(kstate(i0,1)==kstate(i1(j1),1));
0048 <span class="keyword">end</span>
0049 A(offset_r+1:offset_r+n1,offset_c+j)=eye(n1);
0050 offset_r = offset_r + n1;
0051 offset_c = offset_c + n0;
0052 i0 = i1;
0053 n0 = n1;
0054 <span class="keyword">end</span>
0055 ghu1 = [ghu(ikx,:);zeros(nx-npred,M_.exo_nbr)];
0056 <span class="comment">% IA = speye(nx*nx)-kron(A,A);</span>
0057 <span class="comment">% kron_ghu = kron(ghu1,ghu1);</span>
0058
0059 <span class="comment">% vx1 such that vec(sigma_x) = vx1 * vec(M_.Sigma_e) (predetermined vars)</span>
0060 vx1 = [];
0061 <span class="comment">% vx1 = IA\kron_ghu;</span>
0062 IA = [];
0063 kron_ghu = [];
0064
0065 <span class="comment">% computes required variables and indices among required variables</span>
0066 iiy = [];
0067 <span class="keyword">for</span> i=1:nar+3
0068 <span class="keyword">if</span> i ~= 3 &amp; ~isempty(var_indices{i})
0069 iiy = <a href="union.html" class="code" title="function x = union(a,b)">union</a>(iiy, iv(var_indices{i}(:,1)));
0070 <span class="keyword">end</span>
0071 <span class="keyword">end</span>
0072 <span class="keyword">if</span> ~isempty(var_indices{2})
0073 iiy = <a href="union.html" class="code" title="function x = union(a,b)">union</a>(iiy, iv(var_indices{2}(:,2)));
0074 <span class="keyword">end</span>
0075 ny = size(iiy,1);
0076
0077 <span class="keyword">for</span> i=1:nar+3
0078 <span class="keyword">if</span> i ~= 3 &amp; ~isempty(var_indices{i})
0079 var_indices{i}(:,1) = <a href="indnv.html" class="code" title="function a=indnv(x,y)">indnv</a>(iv(var_indices{i}(:,1)),iiy);
0080 <span class="keyword">end</span>
0081 <span class="keyword">if</span> i ~= 2 &amp; i ~= 3 &amp; ~isempty(var_indices{i})
0082 var_indices{i} = sub2ind([ny ny],var_indices{i},var_indices{i});
0083 <span class="keyword">end</span>
0084 <span class="keyword">end</span>
0085 <span class="keyword">if</span> ~isempty(var_indices{2})
0086 var_indices{2}(:,2) = <a href="indnv.html" class="code" title="function a=indnv(x,y)">indnv</a>(iv(var_indices{2}(:,2)),iiy);
0087 var_indices{2} = sub2ind([ny ny],var_indices{2}(:,1),var_indices{2}(:,2));
0088 <span class="keyword">end</span>
0089 <span class="keyword">if</span> ~isempty(var_indices{3})
0090 var_indices{3} = sub2ind([M_.exo_nbr M_.exo_nbr],var_indices{3}(:,1),var_indices{3}(:,2));
0091 <span class="keyword">end</span>
0092 <span class="keyword">if</span> isempty(M_.Sigma_e)
0093 M_.Sigma_e = 0.01*eye(M_.exo_nbr);
0094 b = 0.1*ghu1*ghu1';
0095 <span class="keyword">else</span>
0096 b = ghu1*M_.Sigma_e*ghu1';
0097 M_.Sigma_e = chol(M_.Sigma_e+1e-14*eye(M_.exo_nbr));
0098 <span class="keyword">end</span>
0099 options=optimset(<span class="string">'LargeScale'</span>,<span class="string">'on'</span>,<span class="string">'MaxFunEvals'</span>,20000*ny,<span class="string">'TolX'</span>,1e-4, <span class="keyword">...</span>
0100 <span class="string">'TolFun'</span>,1e-4,<span class="string">'Display'</span>,<span class="string">'Iter'</span>,<span class="string">'MaxIter'</span>,10000);
0101 <span class="comment">% [M_.Sigma_e,f]=fminunc(@calib_obj,M_.Sigma_e,options,A,ghu1,ghx(iiy,:),ghu(iiy,:),targets,var_weights,var_indices,nar);</span>
0102 [M_.Sigma_e,f]=fmincon(@<a href="calib_obj.html" class="code" title="function f=calib_obj(M_.Sigma_e,A,ghu1,ghx,ghu,targets,var_weights,iy,nar)">calib_obj</a>,diag(M_.Sigma_e).^2,-eye(M_.exo_nbr),zeros(M_.exo_nbr,1),[],[],[],[],[],options,A,ghu1,ghx(iiy,:),ghu(iiy,:),targets,var_weights,var_indices,nar);
0103 M_.Sigma_e = diag(M_.Sigma_e);
0104
0105 objective = <a href="calib_obj2.html" class="code" title="function objective=calib_obj2(M_.Sigma_e,A,ghu1,ghx,ghu,targets,var_weights,iy,nar)">calib_obj2</a>(diag(M_.Sigma_e),A,ghu1,ghx(iiy,:),ghu(iiy,:),targets,var_weights,var_indices,nar);
0106 disp(<span class="string">'CALIBRATION'</span>)
0107 disp(<span class="string">''</span>)
0108 <span class="keyword">if</span> ~isempty(var_indices{1})
0109 disp(sprintf(<span class="string">'%16s %14s %14s %14s %14s'</span>,<span class="string">'Std. Dev'</span>,<span class="string">'Target'</span>,<span class="string">'Obtained'</span>,<span class="string">'Diff'</span>));
0110 str = <span class="string">' '</span>;
0111 <span class="keyword">for</span> i=1:size(var_indices{1},1)
0112 [i1,i2] = ind2sub([ny ny],var_indices{1}(i));
0113 str = sprintf(<span class="string">'%16s: %14.2f %14.2f %14.2f'</span>,M_.endo_names(order(iiy(i1)),:),targets{1}(i),objective{1}(i),objective{1}(i)-targets{1}(i));
0114 disp(str);
0115 <span class="keyword">end</span>
0116 <span class="keyword">end</span>
0117 <span class="keyword">if</span> ~isempty(var_indices{2})
0118 disp(sprintf(<span class="string">'%32s %14s %14s'</span>,<span class="string">'Correlations'</span>,<span class="string">'Target'</span>,<span class="string">'Obtained'</span>,<span class="string">'Diff'</span>));
0119 str = <span class="string">' '</span>;
0120 <span class="keyword">for</span> i=1:size(var_indices{2},1)
0121 [i1,i2]=ind2sub([ny ny],var_indices{2}(i));
0122 str = sprintf(<span class="string">'%16s,%16s: %14.2f %14.2f %14.2f'</span>,M_.endo_names(order(iiy(i1)),:), <span class="keyword">...</span>
0123 M_.endo_names(order(iiy(i2)),:),targets{2}(i),objective{2}(i),objective{2}(i)-targets{2}(i));
0124 disp(str);
0125 <span class="keyword">end</span>
0126 <span class="keyword">end</span>
0127 <span class="keyword">if</span> ~isempty(var_indices{3})
0128 disp(sprintf(<span class="string">'%32s %16s %16s'</span>,<span class="string">'Constrained shocks (co)variances'</span>,<span class="string">'Target'</span>,<span class="string">'Obtained'</span>));
0129 str = <span class="string">' '</span>;
0130 <span class="keyword">for</span> i=1:size(var_indices{3},1)
0131 [i1,i2]=ind2sub([M_.exo_nbr M_.exo_nbr],var_indices{3}(i));
0132 <span class="keyword">if</span> i1 == i2
0133 str = sprintf(<span class="string">'%32s: %16.4f %16.4f'</span>,M_.exo_name(order(i1),:), <span class="keyword">...</span>
0134 targets{3}(i),objective{3}(i));
0135 <span class="keyword">else</span>
0136 str = sprintf(<span class="string">'%16s,%16s: %16.4f %16.4f'</span>,M_.exo_name(order(i1),:), <span class="keyword">...</span>
0137 M_.exo_name(order(i2), :),targets{3}(i),objective{3}(i));
0138 <span class="keyword">end</span>
0139 disp(str);
0140 <span class="keyword">end</span>
0141 <span class="keyword">end</span>
0142 flag = 1;
0143 <span class="keyword">for</span> j=4:nar+3
0144 <span class="keyword">if</span> ~isempty(var_indices{j})
0145 <span class="keyword">if</span> flag
0146 disp(sprintf(<span class="string">'%16s %16s %16s'</span>,<span class="string">'Autocorrelations'</span>,<span class="string">'Target'</span>,<span class="string">'Obtained'</span>));
0147 str = <span class="string">' '</span>;
0148 flag = 0;
0149 <span class="keyword">end</span>
0150 <span class="keyword">for</span> i=1:size(var_indices{j},1)
0151 [i1,i2] = ind2sub([ny ny],var_indices{j}(i));
0152 str = sprintf(<span class="string">'%16s(%d): %16.4f %16.4f'</span>,M_.endo_names(order(iiy(i1)),:), <span class="keyword">...</span>
0153 j-3,targets{j}(i),objective{j}(i));
0154 disp(str);
0155 <span class="keyword">end</span>
0156 <span class="keyword">end</span>
0157 <span class="keyword">end</span>
0158
0159 disp(<span class="string">''</span>);
0160 disp(<span class="string">'Calibrated variances'</span>)
0161 str = <span class="string">' '</span>;
0162 <span class="keyword">for</span> i=1:M_.exo_nbr
0163 str = [str sprintf(<span class="string">'%16s'</span>,M_.exo_name(i,:))];
0164 <span class="keyword">end</span>
0165 disp(str);
0166 disp(<span class="string">''</span>);
0167 str = <span class="string">' '</span>;
0168 <span class="keyword">for</span> i=1:M_.exo_nbr
0169 str = [str sprintf(<span class="string">'%16f'</span>,M_.Sigma_e(i,i))];
0170 <span class="keyword">end</span>
0171 disp(str);
0172
0173
0174
0175 <span class="comment">% 10/9/02 MJ</span></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>