2008-09-02 17:52:55 +02:00
function varlist = check_list_of_variables ( options_, M_, varlist)
% This function defines, if necessary, the list of endogenous variables
2017-05-16 15:10:20 +02:00
% for which the posterior statistics have to be computed.
2008-09-02 17:52:55 +02:00
%
2017-05-16 15:10:20 +02:00
%
% INPUTS
2008-09-02 17:52:55 +02:00
%
2017-10-10 10:05:59 +02:00
% options_ [structure] Dynare structure.
% M_ [structure] Dynare structure (related to model definition).
% varlist [cell of char arrays] Array of strings with name of the endogenous variables.
2017-05-16 15:10:20 +02:00
%
% OUTPUTS
2017-10-10 10:05:59 +02:00
% varlist [cell of char arrays]
2017-05-16 15:10:20 +02:00
%
2008-09-02 17:52:55 +02:00
% SPECIAL REQUIREMENTS
2022-04-13 13:15:19 +02:00
% Copyright © 2003-2018 Dynare Team
2008-09-02 17:52:55 +02:00
%
% 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
2021-06-09 17:33:48 +02:00
% along with Dynare. If not, see <https://www.gnu.org/licenses/>.
2008-09-02 17:52:55 +02:00
2018-01-24 18:22:45 +01:00
% Get uniques
2018-11-13 17:58:42 +01:00
[ ~ , ~ , index_uniques ] = varlist_indices ( varlist , M_ . endo_names ) ;
2017-10-10 10:05:59 +02:00
varlist = varlist ( index_uniques ) ;
2014-02-03 10:03:17 +01:00
2017-10-10 10:05:59 +02:00
msg = false ;
2010-06-24 12:53:10 +02:00
if options_ . dsge_var && options_ . bayesian_irf
2009-12-16 18:17:34 +01:00
if ~ isempty ( varlist )
for i = 1 : size ( varlist , 1 )
2017-10-10 10:05:59 +02:00
idx = strmatch ( varlist { i } , options_ . varobs , ' exact' ) ;
2009-12-16 18:17:34 +01:00
if isempty ( idx )
2017-10-10 10:05:59 +02:00
disp ( sprintf ( ' %s is not an observed variable!' , varlist { i } ) )
msg = true ;
2008-09-02 17:52:55 +02:00
end
end
2017-10-10 10:05:59 +02:00
if ~ isequal ( size ( varlist ) , length ( options_ . varobs ) )
msg = true ;
2008-09-02 17:52:55 +02:00
end
2009-12-16 18:17:34 +01:00
if msg
2013-07-10 17:12:34 +02:00
skipline ( )
2009-12-16 18:17:34 +01:00
disp ( ' Posterior IRFs will be computed for all observed variables.' )
2013-07-10 17:12:34 +02:00
skipline ( )
2008-09-02 17:52:55 +02:00
end
2009-12-16 18:17:34 +01:00
end
2017-10-10 10:05:59 +02:00
varlist = options_ . varobs ;
2009-12-16 18:17:34 +01:00
return
end
2014-02-04 14:49:06 +01:00
if ~ isempty ( varlist ) && ~ isempty ( options_ . endo_vars_for_moment_computations_in_estimation )
2021-07-22 12:22:53 +02:00
error ( ' You cannot use the consider_all_endogenous, consider_all_endogenous_and_auxiliary or consider_all_observed options when listing variables after the estimation command' )
2014-02-04 14:49:06 +01:00
elseif isempty ( varlist ) && ~ isempty ( options_ . endo_vars_for_moment_computations_in_estimation )
2014-02-03 10:29:55 +01:00
if strcmp ( options_ . endo_vars_for_moment_computations_in_estimation , ' all_endogenous_variables' )
2017-10-10 10:05:59 +02:00
varlist = M_ . endo_names ( 1 : M_ . orig_endo_nbr ) ;
2021-07-22 12:22:53 +02:00
elseif strcmp ( options_ . endo_vars_for_moment_computations_in_estimation , ' all_endogenous_and_auxiliary_variables' )
varlist = M_ . endo_names ;
2014-02-03 10:29:55 +01:00
elseif strcmp ( options_ . endo_vars_for_moment_computations_in_estimation , ' only_observed_variables' )
2017-10-10 10:05:59 +02:00
varlist = options_ . varobs ;
2014-02-03 10:29:55 +01:00
else
error ( ' Unknown option' )
end
elseif isempty ( varlist ) && isempty ( options_ . endo_vars_for_moment_computations_in_estimation )
2013-07-10 17:12:34 +02:00
skipline ( )
2012-05-30 16:28:00 +02:00
disp ( [ ' You did not declare endogenous variables after the estimation/calib_smoother command.' ] )
2017-10-10 10:05:59 +02:00
cas = ' ' ;
2009-12-16 18:17:34 +01:00
if options_ . bayesian_irf
cas = ' Posterior IRFs' ;
end
if options_ . moments_varendo
if isempty ( cas )
cas = ' Posterior moments' ;
else
2017-10-10 10:05:59 +02:00
cas = [ cas , ' , posterior moments' ] ;
2008-09-02 17:52:55 +02:00
end
2009-12-16 18:17:34 +01:00
end
if options_ . smoother
if isempty ( cas )
2012-05-30 16:28:00 +02:00
cas = ' Smoothed variables' ;
2009-12-16 18:17:34 +01:00
else
2017-10-10 10:05:59 +02:00
cas = [ cas , ' , smoothed variables' ] ;
2008-09-02 17:52:55 +02:00
end
2009-12-16 18:17:34 +01:00
end
if ~ isempty ( options_ . filter_step_ahead )
if isempty ( cas )
2012-05-30 16:28:00 +02:00
cas = ' k-step ahead filtered variables' ;
2009-12-16 18:17:34 +01:00
else
2017-10-10 10:05:59 +02:00
cas = [ cas , ' , k-step ahead filtered variables' ] ;
2008-09-02 17:52:55 +02:00
end
end
2009-12-16 18:17:34 +01:00
if options_ . forecast
if isempty ( cas )
2012-05-30 16:28:00 +02:00
cas = ' Forecasts' ;
2008-09-02 17:52:55 +02:00
else
2017-10-10 10:05:59 +02:00
cas = [ cas , ' and forecasts' ] ;
2008-09-02 17:52:55 +02:00
end
2009-12-16 18:17:34 +01:00
end
if ~ isempty ( cas )
2017-10-10 10:05:59 +02:00
str = sprintf ( ' %s will be computed for the %s endogenous variables of your model' , cas , num2str ( M_ . orig_endo_nbr ) ) ;
str = sprintf ( ' %s, this can take a long time ....' , str ) ;
format_text ( str , 10 )
2013-07-10 12:02:12 +02:00
if options_ . nointeractive
% Default behaviour is to consider all the endogenous variables.
2017-10-10 10:05:59 +02:00
varlist = M_ . endo_names ( 1 : M_ . orig_endo_nbr ) ;
2013-07-10 12:02:12 +02:00
else
choice = [ ] ;
while isempty ( choice )
2013-07-10 17:12:34 +02:00
skipline ( 2 )
2013-07-10 12:02:12 +02:00
disp ( ' Choose one of the following options:' )
2013-07-10 17:12:34 +02:00
skipline ( )
2013-07-10 12:02:12 +02:00
disp ( ' [1] Consider all the endogenous variables.' )
disp ( ' [2] Consider all the observed endogenous variables.' )
disp ( ' [3] Stop Dynare and change the mod file.' )
2021-07-22 12:22:53 +02:00
disp ( ' [4] Consider all the endogenous and auxiliary variables.' )
2013-07-10 17:12:34 +02:00
skipline ( )
2013-07-10 12:02:12 +02:00
choice = input ( ' options [default is 1] = ' ) ;
if isempty ( choice )
choice = 1 ;
end
if choice == 1
2017-10-10 10:05:59 +02:00
varlist = M_ . endo_names ( 1 : M_ . orig_endo_nbr ) ;
2013-07-10 12:02:12 +02:00
elseif choice == 2
2017-10-10 10:05:59 +02:00
varlist = options_ . varobs ;
2013-07-10 12:02:12 +02:00
elseif choice == 3
2018-01-24 18:22:45 +01:00
varlist = cell ( 0 ) ;
2021-07-22 12:22:53 +02:00
elseif choice == 4
varlist = M_ . endo_names ;
2013-07-10 12:02:12 +02:00
else
2013-07-10 17:12:34 +02:00
skipline ( )
2021-07-22 12:22:53 +02:00
disp ( ' YOU HAVE TO ANSWER 1, 2, 3 or 4!' )
2013-07-10 17:12:34 +02:00
skipline ( )
2013-07-10 12:02:12 +02:00
end
2009-12-16 18:17:34 +01:00
end
2008-09-02 17:52:55 +02:00
end
2018-01-24 18:22:45 +01:00
if isempty ( varlist )
2013-09-09 11:40:01 +02:00
edit ( [ M_ . fname ' .mod' ] )
end
skipline ( )
2008-09-02 17:52:55 +02:00
end
2009-12-16 18:17:34 +01:00
end
function format_text ( remain, max_number_of_words_per_line)
index = 0 ;
line_of_text = [ ] ;
while ~ isempty ( remain )
[ token , remain ] = strtok ( remain ) ;
index = index + 1 ;
if isempty ( line_of_text )
line_of_text = token ;
else
line_of_text = [ line_of_text , ' ' , token ] ;
end
if index == max_number_of_words_per_line
2008-09-02 17:52:55 +02:00
disp ( line_of_text )
2009-12-16 18:17:34 +01:00
index = 0 ;
line_of_text = [ ] ;
end
end
if index < max_number_of_words_per_line
disp ( line_of_text )
end