Merged with master
parent
7343fa8f99
commit
6d7b72cb0d
|
@ -316,12 +316,16 @@ for i = 1:Size;
|
|||
case 6
|
||||
%% ------------------------------------------------------------------
|
||||
%Solve Forward complete
|
||||
if (maximum_lag > 0)
|
||||
ghx = - jacob(: , n_pred + 1 : n_pred + n_static ...
|
||||
+ n_pred + n_both) \ jacob(: , 1 : n_pred);
|
||||
else
|
||||
ghx = 0;
|
||||
end;
|
||||
if maximum_lag > 0 && n_pred > 0
|
||||
data(i).eigval = eig(- jacob(: , 1 : n_pred) / ...
|
||||
jacob(: , (n_pred + n_static + 1 : n_pred + n_static + n_pred )));
|
||||
data(i).eigval = -eig(ghx(n_static+1:end,:));
|
||||
data(i).rank = 0;
|
||||
full_rank = (rcond(jacob(: , (n_pred + n_static + 1 : n_pred ...
|
||||
+ n_static + n_pred ))) > 1e-9);
|
||||
full_rank = (rcond(ghx(n_static+1:end,:)) > 1e-9);
|
||||
else
|
||||
data(i).eigval = [];
|
||||
data(i).rank = 0;
|
||||
|
@ -330,11 +334,6 @@ for i = 1:Size;
|
|||
dr.eigval = [dr.eigval ; data(i).eigval];
|
||||
dr.full_rank = dr.full_rank && full_rank;
|
||||
if task ~= 1
|
||||
if (maximum_lag > 0)
|
||||
ghx = - jacob(: , 1 : n_pred) / jacob(: , n_pred + n_static + 1 : n_pred + n_static + n_pred + n_both);
|
||||
else
|
||||
ghx = 0;
|
||||
end;
|
||||
if other_endo_nbr
|
||||
fx = data(i).g1_o;
|
||||
% retrieves the derivatives with respect to endogenous
|
||||
|
|
|
@ -363,7 +363,7 @@ estimation_info.structural_innovation_corr_prior_index = {};
|
|||
estimation_info.structural_innovation_corr_options_index = {};
|
||||
estimation_info.structural_innovation_corr.range_index = {};
|
||||
estimation_info.joint_parameter_prior_index = {};
|
||||
estimation_info.joint_parameter = cell2table(cell(0,11));
|
||||
estimation_info.joint_parameter = {'index','domain','interval','mean','median','mode','shape','shift','stdev','truncate','variance'};
|
||||
options_.initial_period = NaN; %dates(1,1);
|
||||
options_.dataset.file = [];
|
||||
options_.dataset.series = [];
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
function [Ui,Vi,n0,np,ixmC0Pres] = exclusions(nvar,nexo,options_ms)
|
||||
function [Ui,Vi,n0,np,ixmC0Pres,Qi] = exclusions(nvar,nexo,options_ms)
|
||||
% function [Ui,Vi,n0,np,ixmC0Pres] = exclusions(nvar,nexo,options_ms)
|
||||
%
|
||||
% INPUTS
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
function indent = sbvar_global_identification_check(options_)
|
||||
% function sbvar_global_identification_check(options_.ms)
|
||||
%
|
||||
% INPUTS
|
||||
% options_ms: (struct) options
|
||||
%
|
||||
% OUTPUTS
|
||||
% ident: (boolean) false = not identified; true = identified
|
||||
%
|
||||
% SPECIAL REQUIREMENTS
|
||||
% none
|
||||
|
||||
% Copyright (C) 2015 Dynare Team
|
||||
%
|
||||
% This file is part of Dynare.
|
||||
%
|
||||
% Dynare is free software: you can redistribute it and/or modify
|
||||
% it under the terms of the GNU General Public License as published by
|
||||
% the Free Software Foundation, either version 3 of the License, or
|
||||
% (at your option) any later version.
|
||||
%
|
||||
% Dynare is distributed in the hope that it will be useful,
|
||||
% but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
% GNU General Public License for more details.
|
||||
%
|
||||
% You should have received a copy of the GNU General Public License
|
||||
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
ident = false;
|
||||
|
||||
if isequal(options_.ms.restriction_fname, 'upper_cholesky') || ...
|
||||
isequal(options_.ms.restriction_fname, 'lower_cholesky')
|
||||
ident = true;
|
||||
if ~options_.noprint
|
||||
disp(' ')
|
||||
disp('SBVAR: Cholesky identification is always identified')
|
||||
disp(' ')
|
||||
end
|
||||
return
|
||||
end
|
||||
nvar = length(options_.varobs); % number of endogenous variables
|
||||
nexo = 1;
|
||||
|
||||
[Uiconst,Viconst,n0,np,ixmC0Pres,Qi] = exclusions(nvar,nexo,options_.ms );
|
||||
|
||||
% order column constraints by rank
|
||||
Qranks = zeros(nvar,2);
|
||||
for j=1:nvar
|
||||
Qranks(j,:) = [j,rank(Qi{j})];
|
||||
end
|
||||
Qranks = sortrows(Qranks,-2);
|
||||
|
||||
ident = true;
|
||||
|
||||
for j=1:nvar
|
||||
i = Qranks(j,1);
|
||||
for k=1:1
|
||||
M = [Qi{i}*rand(size(Qi{i},1),nvar);[eye(j) zeros(j,nvar- ...
|
||||
j)]];
|
||||
disp([j,k,rank(M)])
|
||||
if rank(M) < nvar
|
||||
ident = false
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
if ~options_.noprint
|
||||
disp(' ')
|
||||
if ident
|
||||
disp('The sufficient condition for SBVAR identification is met')
|
||||
else
|
||||
disp('WARNGING: The sufficient condition for SBVAR identification is not met')
|
||||
end
|
||||
disp(' ')
|
||||
end
|
|
@ -37,7 +37,7 @@ function oo_ = sim1_purely_forward(options_, M_, oo_)
|
|||
1, options_.gstep, options_.solve_tolf, ...
|
||||
options_.solve_tolx, options_.simul.maxit, ...
|
||||
options_.debug,oo_.exo_simul, M_.params, oo_.steady_state, ...
|
||||
it);
|
||||
it+M_.maximum_lag);
|
||||
|
||||
if info
|
||||
oo_.deterministic_simulation.status = 0;
|
||||
|
|
|
@ -2157,7 +2157,7 @@ JointPriorStatement::writeOutput(ostream &output, const string &basename) const
|
|||
writeOutputHelper(output, "truncate", lhs_field);
|
||||
writeOutputHelper(output, "variance", lhs_field);
|
||||
|
||||
output << "estimation_info.joint_parameter_tmp = table(key, ..." << endl
|
||||
output << "estimation_info.joint_parameter_tmp = [key, ..." << endl
|
||||
<< " " << lhs_field << ".domain , ..." << endl
|
||||
<< " " << lhs_field << ".interval , ..." << endl
|
||||
<< " " << lhs_field << ".mean , ..." << endl
|
||||
|
@ -2167,15 +2167,9 @@ JointPriorStatement::writeOutput(ostream &output, const string &basename) const
|
|||
<< " " << lhs_field << ".shift , ..." << endl
|
||||
<< " " << lhs_field << ".stdev , ..." << endl
|
||||
<< " " << lhs_field << ".truncate , ..." << endl
|
||||
<< " " << lhs_field << ".variance, ..." << endl
|
||||
<< " 'VariableNames',{'index','domain','interval','mean','median','mode','shape','shift','stdev','truncate','variance'});" << endl;
|
||||
|
||||
output << "if height(estimation_info.joint_parameter)" << endl
|
||||
<< " estimation_info.joint_parameter = [estimation_info.joint_parameter; estimation_info.joint_parameter_tmp];" << endl
|
||||
<< "else" << endl
|
||||
<< " estimation_info.joint_parameter = estimation_info.joint_parameter_tmp;" << endl
|
||||
<< "end" << endl
|
||||
<< "clear estimation_info.joint_parameter_tmp;" << endl;
|
||||
<< " " << lhs_field << ".variance];" << endl
|
||||
<< "estimation_info.joint_parameter = [estimation_info.joint_parameter; estimation_info.joint_parameter_tmp];" << endl
|
||||
<< "estimation_info=rmfield(estimation_info, 'joint_parameter_tmp');" << endl;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -2183,10 +2177,14 @@ JointPriorStatement::writeOutputHelper(ostream &output, const string &field, con
|
|||
{
|
||||
OptionsList::num_options_t::const_iterator itn = options_list.num_options.find(field);
|
||||
output << lhs_field << "." << field << " = {";
|
||||
if (field=="variance")
|
||||
output << "{";
|
||||
if (itn != options_list.num_options.end())
|
||||
output << itn->second;
|
||||
else
|
||||
output << "{}";
|
||||
if (field=="variance")
|
||||
output << "}";
|
||||
output << "};" << endl;
|
||||
}
|
||||
|
||||
|
|
|
@ -290,7 +290,7 @@ ModFile::checkPass()
|
|||
|
||||
// Check if some exogenous is not used in the model block
|
||||
set<int> unusedExo = dynamic_model.findUnusedExogenous();
|
||||
if (unusedExo.size() > 1)
|
||||
if (unusedExo.size() > 0)
|
||||
{
|
||||
warnings << "WARNING: some exogenous (";
|
||||
for (set<int>::const_iterator it = unusedExo.begin();
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
// same as test_lower_cholesky.mod, but using exclusion syntax
|
||||
var R Pie Y;
|
||||
|
||||
varobs Y Pie R;
|
||||
|
||||
svar_identification;
|
||||
exclusion lag 0;
|
||||
equation 1, Pie, Y;
|
||||
exclusion lag 1;
|
||||
equation 2, Y;
|
||||
end;
|
||||
|
||||
sbvar_global_identification_check(options_);
|
||||
|
||||
sbvar(datafile = data,freq=4,initial_year=1959,final_year=2005,nlags=4);
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
// same as test_lower_cholesky.mod, but using exclusion syntax
|
||||
var R Pie Y;
|
||||
|
||||
varobs Y Pie R;
|
||||
|
||||
svar_identification;
|
||||
exclusion lag 0;
|
||||
equation 1, Pie, Y;
|
||||
equation 2, Y;
|
||||
end;
|
||||
|
||||
sbvar_global_identification_check(options_);
|
||||
|
||||
sbvar(datafile = data,freq=4,initial_year=1959,final_year=2005,nlags=4);
|
||||
|
Loading…
Reference in New Issue