Avoid side effects on globals (prior CLI and write_latex_prior_table commands).

time-shift
Stéphane Adjemian (Hermes) 2016-06-16 11:57:16 +02:00
parent 2c074d7cd2
commit 789f21257e
2 changed files with 33 additions and 32 deletions

View File

@ -59,7 +59,7 @@ if (size(estim_params_.var_endo,1) || size(estim_params_.corrn,1))
end
% Fill or update bayestopt_ structure
[xparam1,estim_params_,bayestopt_,lb,ub,M_] = set_prior(estim_params_,M_,options_);
[xparam1, EstimatedParams, BayesOptions, lb, ub, Model] = set_prior(estim_params_, M_, options_);
% Temporarly change qz_criterium option value
@ -69,24 +69,24 @@ if isempty(options_.qz_criterium)
changed_qz_criterium_flag = 1;
end
M_.dname = M_.fname;
Model.dname = Model.fname;
% Temporarly set options_.order equal to one
order = options_.order;
options_.order = 1;
if ismember('plot', varargin)
plot_priors(bayestopt_,M_,estim_params_,options_)
plot_priors(BayesOptions, Model, EstimatedParams, options_)
donesomething = true;
end
if ismember('table', varargin)
print_table_prior(lb, ub, options_, M_, bayestopt_, estim_params_);
print_table_prior(lb, ub, options_, Model, BayesOptions, EstimatedParams);
donesomething = true;
end
if ismember('simulate', varargin) % Prior simulations (BK).
results = prior_sampler(0,M_,bayestopt_,options_,oo_,estim_params_);
results = prior_sampler(0, Model, BayesOptions, options_, oo_, EstimatedParams);
% Display prior mass info
skipline(2)
disp(['Prior mass = ' num2str(results.prior.mass)])
@ -103,26 +103,27 @@ if ismember('simulate', varargin) % Prior simulations (BK).
end
if ismember('optimize', varargin) % Prior optimization.
optimize_prior(options_, M_, oo_, bayestopt_, estim_params_);
optimize_prior(options_, Model, oo_, BayesOptions, EstimatedParams);
donesomething = true;
end
if ismember('moments', varargin) % Prior simulations (2nd order moments).
% Set estimated parameters to the prior mode...
xparam1 = bayestopt_.p5;
xparam1 = BayesOptions.p5;
% ... Except for uniform priors!
k = find(isnan(xparam1));
xparam1(k) = bayestopt_.p5(k);
xparam1(k) = BayesOptions.p5(k);
% Update vector of parameters and covariance matrices
M_ = set_all_parameters(xparam1,estim_params_,M_);
Model = set_all_parameters(xparam1, EstimatedParams, Model);
% Check model.
check_model(M_);
check_model(Model);
% Compute state space representation of the model.
oo_.dr=set_state_space(oo_.dr, M_, options_);
oo__ = oo_;
oo__.dr = set_state_space(oo__.dr, Model, options_);
% Solve model
[dr,info, M_ ,options_ , oo_] = resol(0, M_ , options_ ,oo_);
[dr, info, Model , options__ , oo__] = resol(0, Model , options_ ,oo__);
% Compute and display second order moments
oo_=disp_th_moments(oo_.dr,[],M_,options_,oo_);
oo__ = disp_th_moments(oo__.dr, [], Model, options__, oo__);
skipline(2)
donesomething = true;
end
@ -137,7 +138,7 @@ if ~donesomething
error('prior: Unexpected arguments!')
end
function format_string = build_format_string(PriorStandardDeviation,LowerBound,UpperBound)
function format_string = build_format_string(PriorStandardDeviation, LowerBound, UpperBound)
format_string = ['%s & %s & %6.4f &'];
if ~isnumeric(PriorStandardDeviation)
format_string = [ format_string , ' %s &'];

View File

@ -45,16 +45,16 @@ if (size(estim_params_.var_endo,1) || size(estim_params_.corrn,1))
end
% Fill or update bayestopt_ structure
[xparam1, estim_params_, bayestopt_, lb, ub, M_] = set_prior(estim_params_, M_, options_);
[xparam1, EstimatedParameters, BayesOptions, lb, ub, Model] = set_prior(estim_params_, M_, options_);
% Get untruncated bounds
bounds = prior_bounds(bayestopt_, options_.prior_trunc);
bounds = prior_bounds(BayesOptions, options_.prior_trunc);
lb=bounds.lb;
ub=bounds.ub;
PriorNames = { 'Beta' , 'Gamma' , 'Gaussian' , 'Inv. Gamma' , 'Uniform' , 'Inv. Gamma -- 2', '', 'Weibull' };
fidTeX = fopen([M_.fname '_priors_table.tex'],'w+');
fidTeX = fopen([Model.fname '_priors_table.tex'],'w+');
fprintf(fidTeX,'%% TeX-table generated by Dynare write_latex_prior_table.m.\n');
fprintf(fidTeX,'%% Prior Information\n');
fprintf(fidTeX,['%% ' datestr(now,0)]);
@ -107,17 +107,17 @@ fprintf(fidTeX,'\\endlastfoot\n');
% Column 6: the upper bound of the prior density support.
% Column 7: the lower bound of the interval containing 90% of the prior mass.
% Column 8: the upper bound of the interval containing 90% of the prior mass.
PriorIntervals = prior_bounds(bayestopt_,(1-options_.prior_interval)/2) ;
for i=1:size(bayestopt_.name,1)
[tmp,TexName] = get_the_name(i,1,M_,estim_params_,options_);
PriorShape = PriorNames{ bayestopt_.pshape(i) };
PriorMean = bayestopt_.p1(i);
PriorMode = bayestopt_.p5(i);
PriorStandardDeviation = bayestopt_.p2(i);
switch bayestopt_.pshape(i)
PriorIntervals = prior_bounds(BayesOptions,(1-options_.prior_interval)/2) ;
for i=1:size(BayesOptions.name,1)
[tmp,TexName] = get_the_name(i, 1, Model, EstimatedParameters, options_);
PriorShape = PriorNames{ BayesOptions.pshape(i) };
PriorMean = BayesOptions.p1(i);
PriorMode = BayesOptions.p5(i);
PriorStandardDeviation = BayesOptions.p2(i);
switch BayesOptions.pshape(i)
case { 1 , 5 }
LowerBound = bayestopt_.p3(i);
UpperBound = bayestopt_.p4(i);
LowerBound = BayesOptions.p3(i);
UpperBound = BayesOptions.p4(i);
if ~isinf(lb(i))
LowerBound=max(LowerBound,lb(i));
end
@ -125,7 +125,7 @@ for i=1:size(bayestopt_.name,1)
UpperBound=min(UpperBound,ub(i));
end
case { 2 , 4 , 6, 8 }
LowerBound = bayestopt_.p3(i);
LowerBound = BayesOptions.p3(i);
if ~isinf(lb(i))
LowerBound=max(LowerBound,lb(i));
end
@ -135,18 +135,18 @@ for i=1:size(bayestopt_.name,1)
UpperBound = '$\infty$';
end
case 3
if isinf(bayestopt_.p3(i)) && isinf(lb(i))
if isinf(BayesOptions.p3(i)) && isinf(lb(i))
LowerBound = '$-\infty$';
else
LowerBound = bayestopt_.p3(i);
LowerBound = BayesOptions.p3(i);
if ~isinf(lb(i))
LowerBound=max(LowerBound,lb(i));
end
end
if isinf(bayestopt_.p4(i)) && isinf(ub(i))
if isinf(BayesOptions.p4(i)) && isinf(ub(i))
UpperBound = '$\infty$';
else
UpperBound = bayestopt_.p4(i);
UpperBound = BayesOptions.p4(i);
if ~isinf(ub(i))
UpperBound=min(UpperBound,ub(i));
end