diff --git a/matlab/identification_analysis.m b/matlab/identification_analysis.m index a6a84bad56ec7ba5b1cf3ff1f4fb652c84c91c4b..ff773195cf7810d42f5618469f271a4b3b0f7140 100644 --- a/matlab/identification_analysis.m +++ b/matlab/identification_analysis.m @@ -147,22 +147,23 @@ if info(1) == 0 %no errors in solution if init %check stationarity if ~no_identification_moments - ind_dMOMENTS = (find(max(abs(dMOMENTS'),[],1) > tol_deriv)); %index for non-zero rows - if isempty(ind_dMOMENTS) && any(any(isnan(dMOMENTS))) + if any(any(isnan(MOMENTS))) if options_.diffuse_filter == 1 % use options_ as it inherits diffuse_filter from options_ident if set by user - error('There are NaN in the dMOMENTS matrix. Make sure that for non-stationary models stationary transformations of non-stationary observables are used for checking identification. [TIP: use first differences].' ) + error('There are NaN''s in the theoretical moments. Make sure that for non-stationary models stationary transformations of non-stationary observables are used for checking identification. [TIP: use first differences].') else - error('There are NaN in the dMOMENTS matrix. Please check whether your model has units roots, and you forgot to set diffuse_filter=1.' ) + error('There are NaN''s in the theoretical moments. Please check whether your model has units roots, and you forgot to set diffuse_filter=1.' ) end end - if any(any(isnan(MOMENTS))) - error('There are NaN''s in the theoretical moments: make sure that for non-stationary models stationary transformations of non-stationary observables are used for checking identification. [TIP: use first differences].') + ind_dMOMENTS = (find(max(abs(dMOMENTS'),[],1) > tol_deriv)); %index for non-zero rows + if isempty(ind_dMOMENTS) && any(any(isnan(dMOMENTS))) + error('There are NaN in the dMOMENTS matrix.' ) end + end if ~no_identification_spectrum ind_dSPECTRUM = (find(max(abs(dSPECTRUM'),[],1) > tol_deriv)); %index for non-zero rows - if isempty(ind_dSPECTRUM) && any(any(isnan(dSPECTRUM))) - warning_SPECTRUM = 'WARNING: There are NaN in the dSPECTRUM matrix. Please check whether your model has units roots and your forgot to set diffuse_filter=1.\n'; + if any(any(isnan(dSPECTRUM))) + warning_SPECTRUM = 'WARNING: There are NaN in the dSPECTRUM matrix. Note that identification based on spectrum does not support non-stationary models (yet).\n'; warning_SPECTRUM = [warning_SPECTRUM ' Skip identification analysis based on spectrum.\n']; fprintf(warning_SPECTRUM); %reset options to neither display nor plot dSPECTRUM anymore @@ -172,8 +173,8 @@ if info(1) == 0 %no errors in solution end if ~no_identification_minimal ind_dMINIMAL = (find(max(abs(dMINIMAL'),[],1) > tol_deriv)); %index for non-zero rows - if isempty(ind_dMINIMAL) && any(any(isnan(dMINIMAL))) - warning_MINIMAL = 'WARNING: There are NaN in the dMINIMAL matrix. Please check whether your model has units roots and you forgot to set diffuse_filter=1.\n'; + if any(any(isnan(dMINIMAL))) + warning_MINIMAL = 'WARNING: There are NaN in the dMINIMAL matrix. Note that identification based on minimal system does not support non-stationary models (yet).\n'; warning_MINIMAL = [warning_MINIMAL ' Skip identification analysis based on minimal system.\n']; fprintf(warning_MINIMAL); %reset options to neither display nor plot dMINIMAL anymore @@ -182,8 +183,8 @@ if info(1) == 0 %no errors in solution end end if no_identification_moments && no_identification_minimal && no_identification_spectrum - %display error if all three criteria fail - error('identification_analyis: Stationarity condition(s) failed and/or diffuse_filter option missing'); + %display error if all three criteria fail + error(sprintf('identification_analyis: Stationarity condition(s) failed and/or diffuse_filter option missing.\nMake sure that for non-stationary models stationary transformations of non-stationary observables are used for checking identification.\n[TIP: use first differences].')); end % Check order conditions