221 lines
13 KiB
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 © 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> > calib.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>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 < 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 < 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 & ~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 & ~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 & i ~= 3 & ~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> © 2003</address>
|
|
</body>
|
|
</html> |