diff --git a/matlab/convert_dyn_45_to_44.m b/matlab/convert_dyn_45_to_44.m deleted file mode 100644 index 3f0561b5853f21a5c7aea52316009b82eab1562a..0000000000000000000000000000000000000000 --- a/matlab/convert_dyn_45_to_44.m +++ /dev/null @@ -1,192 +0,0 @@ -function oo_ = convert_dyn_45_to_44(M_, options_, oo_,bayestopt_) -%function oo_ = convert_dyn_45_to_44(M_, options_, oo_,bayestopt_) -% Converts oo_ from 4.5 to 4.4 -% -% INPUTS -% M_ [struct] dynare model struct -% options_ [struct] dynare options struct -% oo_ [struct] dynare output struct -% bayestopt_ [struct] structure storing information about priors -% OUTPUTS -% oo_ [struct] dynare output struct -% -% SPECIAL REQUIREMENTS -% none - -% Copyright (C) 2015-2017 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/>. - -%% add initial conditions to Bayesian forecasts -if isfield(oo_,'PointForecast') - var_names=fieldnames(oo_.PointForecast.HPDinf); - moment_names=fieldnames(oo_.PointForecast); - for moment_iter=1:length(moment_names) - for var_iter=1:length(var_names) - if strcmp(moment_names{moment_iter},'deciles') - oo_.MeanForecast.(moment_names{moment_iter}).(var_names{var_iter})=... - [oo_.SmoothedVariables.(moment_names{moment_iter}).(var_names{var_iter})(:,end)*ones(M_.maximum_endo_lag,1) oo_.MeanForecast.(moment_names{moment_iter}).(var_names{var_iter})]; - oo_.PointForecast.(moment_names{moment_iter}).(var_names{var_iter})=... - [oo_.SmoothedVariables.(moment_names{moment_iter}).(var_names{var_iter})(:,end)*ones(M_.maximum_endo_lag,1) oo_.PointForecast.(moment_names{moment_iter}).(var_names{var_iter})]; - else - oo_.MeanForecast.(moment_names{moment_iter}).(var_names{var_iter})=... - [oo_.SmoothedVariables.(moment_names{moment_iter}).(var_names{var_iter})(end)*ones(M_.maximum_endo_lag,1); oo_.MeanForecast.(moment_names{moment_iter}).(var_names{var_iter})]; - oo_.PointForecast.(moment_names{moment_iter}).(var_names{var_iter})=... - [oo_.SmoothedVariables.(moment_names{moment_iter}).(var_names{var_iter})(end)*ones(M_.maximum_endo_lag,1); oo_.PointForecast.(moment_names{moment_iter}).(var_names{var_iter})]; - end - end - end -end - -%% change HPD-fields back to row vectors -if isfield(oo_,'PointForecast') && isfield(oo_.PointForecast,'HPDinf') - names=fieldnames(oo_.PointForecast.HPDinf); - for ii=1:length(names) - oo_.PointForecast.HPDinf.(names{ii})=oo_.PointForecast.HPDinf.(names{ii})'; - oo_.PointForecast.HPDsup.(names{ii})=oo_.PointForecast.HPDsup.(names{ii})'; - end -end - -if isfield(oo_,'MeanForecast') && isfield(oo_.MeanForecast,'HPDinf') - names=fieldnames(oo_.MeanForecast.HPDinf); - for ii=1:length(names) - oo_.MeanForecast.HPDinf.(names{ii})=oo_.MeanForecast.HPDinf.(names{ii})'; - oo_.MeanForecast.HPDsup.(names{ii})=oo_.MeanForecast.HPDsup.(names{ii})'; - end -end - -if isfield(oo_,'UpdatedVariables') && isfield(oo_.UpdatedVariables,'HPDinf') - names=fieldnames(oo_.UpdatedVariables.HPDinf); - for ii=1:length(names) - oo_.UpdatedVariables.HPDinf.(names{ii})=oo_.UpdatedVariables.HPDinf.(names{ii})'; - oo_.UpdatedVariables.HPDsup.(names{ii})=oo_.UpdatedVariables.HPDsup.(names{ii})'; - end -end - -if isfield(oo_,'SmoothedVariables') && isfield(oo_.SmoothedVariables,'HPDinf') - names=fieldnames(oo_.SmoothedVariables.HPDinf); - for ii=1:length(names) - oo_.SmoothedVariables.HPDinf.(names{ii})=oo_.SmoothedVariables.HPDinf.(names{ii})'; - oo_.SmoothedVariables.HPDsup.(names{ii})=oo_.SmoothedVariables.HPDsup.(names{ii})'; - end -end - -if isfield(oo_,'FilteredVariables') && isfield(oo_.FilteredVariables,'HPDinf') - names=fieldnames(oo_.FilteredVariables.HPDinf); - for ii=1:length(names) - oo_.FilteredVariables.HPDinf.(names{ii})=oo_.FilteredVariables.HPDinf.(names{ii})'; - oo_.FilteredVariables.HPDsup.(names{ii})=oo_.FilteredVariables.HPDsup.(names{ii})'; - end -end - -if isfield(oo_,'SmoothedShocks') && isfield(oo_.SmoothedShocks,'HPDinf') - names=fieldnames(oo_.SmoothedShocks.HPDinf); - for ii=1:length(names) - oo_.SmoothedShocks.HPDinf.(names{ii})=oo_.SmoothedShocks.HPDinf.(names{ii})'; - oo_.SmoothedShocks.HPDsup.(names{ii})=oo_.SmoothedShocks.HPDsup.(names{ii})'; - end -end - -%% subtract mean from classical Updated variables -if isfield(oo_,'UpdatedVariables') - names=fieldnames(oo_.UpdatedVariables); - for ii=1:length(names) - %make sure Bayesian fields are not affected - if ~strcmp(names{ii},'Mean') && ~strcmp(names{ii},'Median') && ~strcmp(names{ii},'deciles') ... - && ~strcmp(names{ii},'Var') && ~strcmp(names{ii},'HPDinf') && ~strcmp(names{ii},'HPDsup') - current_var_index=find(strmatch(names{ii},deblank(M_.endo_names),'exact')); - if options_.loglinear == 1 %logged steady state must be used - constant_current_variable=log(oo_.dr.ys(current_var_index)); - elseif options_.loglinear == 0 %unlogged steady state must be used - constant_current_variable=oo_.dr.ys(current_var_index); - end - oo_.UpdatedVariables.(names{ii})=oo_.UpdatedVariables.(names{ii})-constant_current_variable; - if isfield(oo_.Smoother,'Trend') && isfield(oo_.Smoother.Trend,names{ii}) - oo_.UpdatedVariables.(names{ii})=oo_.UpdatedVariables.(names{ii})-oo_.Smoother.Trend.(names{ii}); - end - end - end -end - -%% padd classical filtered variables with redundant zeros and subtract mean -if isfield(oo_,'FilteredVariables') - names=fieldnames(oo_.FilteredVariables); - for ii=1:length(names) - %make sure Bayesian fields are not affected - if ~strcmp(names{ii},'Mean') && ~strcmp(names{ii},'Median') && ~strcmp(names{ii},'deciles') ... - && ~strcmp(names{ii},'Var') && ~strcmp(names{ii},'HPDinf') && ~strcmp(names{ii},'HPDsup') - current_var_index=find(strmatch(names{ii},deblank(M_.endo_names),'exact')); - if options_.loglinear == 1 %logged steady state must be used - constant_current_variable=log(oo_.dr.ys(current_var_index)); - elseif options_.loglinear == 0 %unlogged steady state must be used - constant_current_variable=oo_.dr.ys(current_var_index); - end - oo_.FilteredVariables.(names{ii})=oo_.FilteredVariables.(names{ii})-constant_current_variable; - if isfield(oo_.Smoother,'Trend') && isfield(oo_.Smoother.Trend,names{ii}) - oo_.FilteredVariables.(names{ii})=oo_.FilteredVariables.(names{ii})-oo_.Smoother.Trend.(names{ii}); - end - oo_.FilteredVariables.(names{ii})=[0; oo_.FilteredVariables.(names{ii}); zeros(options_.nk-1,1)]; - end - end -end - -%% resort fields that are in declaration order to decision rule order (previous undocumented behavior) -if ~isempty(options_.nk) && options_.nk ~= 0 && ~isempty(bayestopt_) - if ~((any(bayestopt_.pshape > 0) && options_.mh_replic) || (any(bayestopt_.pshape> 0) && options_.load_mh_file)) %no Bayesian estimation - positions_in_decision_order=oo_.dr.inv_order_var(bayestopt_.smoother_var_list(bayestopt_.smoother_saved_var_list)); - if options_.loglinear == 1 %logged steady state must be used - constant_all_variables=log(oo_.dr.ys(bayestopt_.smoother_var_list(bayestopt_.smoother_saved_var_list))); - elseif options_.loglinear == 0 %unlogged steady state must be used - constant_all_variables=oo_.dr.ys(bayestopt_.smoother_var_list(bayestopt_.smoother_saved_var_list)); - end - if ~(options_.selected_variables_only && ~(options_.forecast > 0)) %happens only when selected_variables_only is not used - oo_.FilteredVariablesKStepAhead(:,positions_in_decision_order,:)=oo_.FilteredVariablesKStepAhead-constant_all_variables; - if ~isempty(PK) %get K-step ahead variances - oo_.FilteredVariablesKStepAheadVariances(:,positions_in_decision_order,positions_in_decision_order,:)=oo_.FilteredVariablesKStepAheadVariances; - end - if ~isempty(decomp) - oo_.FilteredVariablesShockDecomposition(:,positions_in_decision_order,:,:)=oo_.FilteredVariablesShockDecomposition; - end - else - fprintf('\nconvert_dyn_45_to_44:: Due to a bug in Dynare 4.4.3 with the selected_variables_only option, the previous behavior\n') - fprintf('convert_dyn_45_to_44:: cannot be restored for FilteredVariablesKStepAhead, FilteredVariablesKStepAheadVariances, and\n') - fprintf('convert_dyn_45_to_44:: FilteredVariablesShockDecomposition\n') - end - end -end - -if options_.filter_covariance - oo_.Smoother.Variance(oo_.dr.inv_order_var,oo_.dr.inv_order_var,:)=oo_.Smoother.Variance; -end - - -%% set old field posterior_std and remove new field posterior_std_at_mode -if isfield(oo_,'posterior_std_at_mode') - oo_.posterior_std=oo_.posterior_std_at_mode; - oo_=rmfield(oo_,'posterior_std_at_mode'); -end - - -%Deal with OSR -if ~isempty(M_.osr.variable_weights) - evalin('base','optim_weights_=M_.osr.variable_weights') -end -if ~isempty(M_.osr.variable_indices) - evalin('base','obj_var_=M_.osr.variable_indices') -end -if ~isempty(M_.osr.param_names) - evalin('base','osr_params_=char(M_.osr.param_names)') -end diff --git a/matlab/convert_oo_.m b/matlab/convert_oo_.m deleted file mode 100644 index 914cc0adbe36d916f8ecedfb3766df0d248a1dbb..0000000000000000000000000000000000000000 --- a/matlab/convert_oo_.m +++ /dev/null @@ -1,85 +0,0 @@ -function oo_ = convert_oo_(M_, options_, oo_, from_ver, to_ver) -%function oo_ = convert_oo_(M_, options_, oo_, from_ver, to_ver) -% Converts oo_ from oo_.dynare_version to ver -% -% INPUTS -% M_ [struct] dynare model struct -% options_ [struct] dynare options struct -% oo_ [struct] dynare output struct -% from_ver [string] original oo_ output version -% to_ver [string] desired oo_ output version -% -% OUTPUTS -% oo_ [struct] dynare output struct -% -% SPECIAL REQUIREMENTS -% none - -% Copyright (C) 2015-2017 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/>. - -check_valid_ver(to_ver); -check_valid_ver(from_ver); - -MIN_VER = '4.4'; -MAX_VER = '4.5'; - -if ver_less_than(to_ver, MIN_VER) - error(['Can only convert as far back as Dynare ' MIN_VER - '. All versions before have the same oo_ structure.']); -end - -if ver_greater_than(to_ver, MAX_VER) - error(['Can only convert up to Dynare ' MAX_VER]); -end - -min_ver = strsplit(MIN_VER, {'.', '-'}); -max_ver = strsplit(MAX_VER, {'.', '-'}); -from_ver_split = strsplit(from_ver, {'.', '-'}); -to_ver_split = strsplit(to_ver, {'.', '-'}); - -if length(from_ver_split) ~= 2 || length(to_ver_split) ~= 2 - error('The version numbers may only be of the form X.Y'); -end - -if to_ver_split{2} > from_ver_split{2} - new_to_ver = [to_ver_split{1} '.' num2str(str2double(to_ver_split{2})-1)]; -else - new_to_ver = [to_ver_split{1} '.' num2str(str2double(to_ver_split{2})+1)]; -end - -if strcmp(from_ver, to_ver) - return -end - -if ver_greater_than(to_ver, from_ver) - moving_up = 1; -else - moving_up = -1; -end - -oo_ = convert_oo_(M_, options_, oo_, from_ver, new_to_ver) - -if abs(to_ver_split{2} - (from_ver_split{2} - moving_up)) > 1 - new_from_ver = [to_ver_split{1} '.' num2str(str2double(to_ver_split{2}) - moving_up)]; -else - new_from_ver = from_ver; -end - -eval(['oo_ = convert_dyn_' strrep(new_from_ver, '.', '') '_to_' ... - strrep(to_ver, '.', '') '(M_, options_, oo_);']); -end