2015-08-17 08:57:07 +02:00
function oo_= disp_th_moments ( dr,var_list,M_,options_,oo_)
Fixes for ticket #57
preprocessor:
* add a field "M_.orig_endo_nbr" containing the nbr of endogenous before adding aux vars
* always provide "M_.aux_vars" (define it to "[]" when there is no aux var)
* rename "M_.aux_vars().orig_endo_index" to "M_.aux_vars().orig_index"
M-files:
* for commands which accept a list of variables (stoch_simul, osr, estimation, dynasave, dynatype, datatomfile), when no variable is given, use only the set of original endogenous (without aux vars) as the default
* when displaying the decision rule, when there is aux vars in the state variables, replace them by their original name (with the right lag)
* in "steady", don't display aux vars
* special exception for ramsey policy: all vars (including aux vars) are displayed, because the system of aux vars from ramsey policy is not compatible with the aux vars from the preprocessor
git-svn-id: https://www.dynare.org/svn/dynare/trunk@3166 ac1d8469-bf42-47a9-8791-bf33cf982152
2009-11-25 11:22:39 +01:00
% Display theoretical moments of variables
2009-12-16 18:17:34 +01:00
2017-05-16 14:11:15 +02:00
% Copyright (C) 2001-2017 Dynare Team
2008-08-01 20:53:30 +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
% along with Dynare. If not, see <http://www.gnu.org/licenses/>.
2014-11-14 17:28:17 +01:00
nodecomposition = options_ . nodecomposition ;
2015-10-13 20:20:33 +02:00
if options_ . one_sided_hp_filter
error ( [ ' disp_th_moments:: theoretical moments incompatible with one-sided HP filter. Use simulated moments instead' ] )
end
2009-12-16 18:17:34 +01:00
if size ( var_list , 1 ) == 0
var_list = M_ . endo_names ( 1 : M_ . orig_endo_nbr , : ) ;
end
nvar = size ( var_list , 1 ) ;
ivar = zeros ( nvar , 1 ) ;
for i = 1 : nvar
i_tmp = strmatch ( var_list ( i , : ) , M_ . endo_names , ' exact' ) ;
if isempty ( i_tmp )
2010-01-05 11:46:10 +01:00
error ( [ ' One of the variable specified does not exist' ] ) ;
2009-12-16 18:17:34 +01:00
else
2010-01-05 11:46:10 +01:00
ivar ( i ) = i_tmp ;
2005-02-18 20:54:39 +01:00
end
2009-12-16 18:17:34 +01:00
end
2014-11-14 17:28:17 +01:00
[ oo_ . gamma_y , stationary_vars ] = th_autocovariances ( dr , ivar , M_ , options_ , nodecomposition ) ;
2009-12-16 18:17:34 +01:00
m = dr . ys ( ivar ) ;
non_stationary_vars = setdiff ( 1 : length ( ivar ) , stationary_vars ) ;
2010-10-11 12:24:16 +02:00
m ( non_stationary_vars ) = NaN ;
2005-02-18 20:54:39 +01:00
2009-12-16 18:17:34 +01:00
i1 = find ( abs ( diag ( oo_ . gamma_y { 1 } ) ) > 1e-12 ) ;
s2 = diag ( oo_ . gamma_y { 1 } ) ;
sd = sqrt ( s2 ) ;
2017-05-27 19:26:12 +02:00
if options_ . order == 2 && ~ M_ . hessian_eq_zero
2005-02-18 20:54:39 +01:00
m = m + oo_ . gamma_y { options_ . ar + 3 } ;
2009-12-16 18:17:34 +01:00
end
z = [ m sd s2 ] ;
oo_ . mean = m ;
oo_ . var = oo_ . gamma_y { 1 } ;
2017-09-09 08:42:08 +02:00
ME_present = 0 ;
if ~ all ( M_ . H == 0 )
[ observable_pos_requested_vars , index_subset , index_observables ] = intersect ( ivar , options_ . varobs_id , ' stable' ) ;
if ~ isempty ( observable_pos_requested_vars )
ME_present = 1 ;
end
end
2014-10-31 18:10:39 +01:00
if size ( stationary_vars , 1 ) > 0
2014-11-14 17:28:17 +01:00
if ~ nodecomposition
oo_ . variance_decomposition = 100 * oo_ . gamma_y { options_ . ar + 2 } ;
2017-09-09 08:42:08 +02:00
if ME_present
ME_Variance = diag ( M_ . H ) ;
oo_ . variance_decomposition_ME = oo_ . variance_decomposition ( index_subset , : ) .* repmat ( diag ( oo_ . var ( index_subset , index_subset ) ) ./ ( diag ( oo_ . var ( index_subset , index_subset ) ) + ME_Variance ( index_observables ) ) , 1 , M_ . exo_nbr ) ;
oo_ . variance_decomposition_ME ( : , end + 1 ) = 100 - sum ( oo_ . variance_decomposition_ME , 2 ) ;
end
2014-11-14 17:28:17 +01:00
end
2014-04-07 11:32:39 +02:00
if ~ options_ . noprint %options_.nomoments == 0
2013-03-17 23:36:43 +01:00
if options_ . order == 2
2015-07-13 11:51:07 +02:00
title = ' APPROXIMATED THEORETICAL MOMENTS' ;
2013-03-17 23:36:43 +01:00
else
2014-04-07 11:32:39 +02:00
title = ' THEORETICAL MOMENTS' ;
2013-03-17 23:36:43 +01:00
end
2015-08-10 17:43:58 +02:00
title = add_filter_subtitle ( title , options_ ) ;
2014-04-07 11:32:39 +02:00
headers = char ( ' VARIABLE' , ' MEAN' , ' STD. DEV.' , ' VARIANCE' ) ;
labels = deblank ( M_ . endo_names ( ivar , : ) ) ;
lh = size ( labels , 2 ) + 2 ;
2016-05-31 11:39:21 +02:00
dyntable ( options_ , title , headers , labels , z , lh , 11 , 4 ) ;
2015-08-17 13:12:22 +02:00
if options_ . TeX
labels = deblank ( M_ . endo_names_tex ( ivar , : ) ) ;
lh = size ( labels , 2 ) + 2 ;
2016-05-31 08:22:19 +02:00
dyn_latex_table ( M_ , options_ , title , ' th_moments' , headers , labels , z , lh , 11 , 4 ) ;
2015-08-17 13:12:22 +02:00
end
2014-04-07 11:32:39 +02:00
2014-11-14 17:28:17 +01:00
if M_ . exo_nbr > 1 && ~ nodecomposition
2014-10-31 18:10:39 +01:00
skipline ( )
2014-04-07 11:32:39 +02:00
if options_ . order == 2
2017-05-16 15:10:20 +02:00
title = ' APPROXIMATED VARIANCE DECOMPOSITION (in percent)' ;
2014-04-07 11:32:39 +02:00
else
title = ' VARIANCE DECOMPOSITION (in percent)' ;
end
2015-08-10 17:43:58 +02:00
title = add_filter_subtitle ( title , options_ ) ;
2014-04-07 11:32:39 +02:00
headers = M_ . exo_names ;
headers ( M_ . exo_names_orig_ord , : ) = headers ;
headers = char ( ' ' , headers ) ;
lh = size ( deblank ( M_ . endo_names ( ivar ( stationary_vars ) , : ) ) , 2 ) + 2 ;
2016-05-31 11:39:21 +02:00
dyntable ( options_ , title , headers , deblank ( M_ . endo_names ( ivar ( stationary_vars ) , ...
2017-05-16 15:10:20 +02:00
: ) ) , 100 * ...
2014-10-31 18:10:39 +01:00
oo_ . gamma_y { options_ . ar + 2 } ( stationary_vars , : ) , lh , 8 , 2 ) ;
2017-09-09 08:42:08 +02:00
if ME_present
[ stationary_observables , pos_index_subset ] = intersect ( index_subset , stationary_vars , ' stable' ) ;
headers_ME = char ( headers , ' ME' ) ;
dyntable ( options_ , [ title , ' WITH MEASUREMENT ERROR' ] , headers_ME , deblank ( M_ . endo_names ( ivar ( stationary_observables ) , ...
: ) ) , oo_ . variance_decomposition_ME ( pos_index_subset , : ) , lh , 8 , 2 ) ;
end
2015-08-17 13:12:22 +02:00
if options_ . TeX
headers = M_ . exo_names_tex ;
headers = char ( ' ' , headers ) ;
labels = deblank ( M_ . endo_names_tex ( ivar ( stationary_vars ) , : ) ) ;
lh = size ( labels , 2 ) + 2 ;
2016-05-31 08:22:19 +02:00
dyn_latex_table ( M_ , options_ , title , ' th_var_decomp_uncond' , headers , labels , 100 * oo_ . gamma_y { options_ . ar + 2 } ( stationary_vars , : ) , lh , 8 , 2 ) ;
2017-09-09 08:42:08 +02:00
if ME_present
headers_ME = char ( headers , ' ME' ) ;
dyn_latex_table ( M_ , options_ , [ title , ' WITH MEASUREMENT ERROR' ] , ' th_var_decomp_uncond_ME' , headers_ME , labels , oo_ . variance_decomposition_ME ( pos_index_subset , : ) , lh , 8 , 2 ) ;
end
2015-08-17 13:12:22 +02:00
end
2014-10-31 18:10:39 +01:00
end
2005-02-18 20:54:39 +01:00
end
2017-05-16 15:10:20 +02:00
2009-10-29 18:16:10 +01:00
conditional_variance_steps = options_ . conditional_variance_decomposition ;
if length ( conditional_variance_steps )
2014-04-07 11:32:39 +02:00
StateSpaceModel . number_of_state_equations = M_ . endo_nbr ;
StateSpaceModel . number_of_state_innovations = M_ . exo_nbr ;
StateSpaceModel . sigma_e_is_diagonal = M_ . sigma_e_is_diagonal ;
[ StateSpaceModel . transition_matrix , StateSpaceModel . impulse_matrix ] = kalman_transition_matrix ( dr , ( 1 : M_ . endo_nbr ) ' , M_ . nstatic + ( 1 : M_ . nspred ) ' , M_ . exo_nbr ) ;
StateSpaceModel . state_innovations_covariance_matrix = M_ . Sigma_e ;
StateSpaceModel . order_var = dr . order_var ;
2017-09-09 08:42:08 +02:00
StateSpaceModel . measurement_error = M_ . H ;
StateSpaceModel . observable_pos = options_ . varobs_id ;
[ oo_ . conditional_variance_decomposition , oo_ . conditional_variance_decomposition_ME ] = conditional_variance_decomposition ( StateSpaceModel , conditional_variance_steps , ivar ) ;
2017-05-16 15:10:20 +02:00
2014-04-07 11:32:39 +02:00
if options_ . noprint == 0
display_conditional_variance_decomposition ( oo_ . conditional_variance_decomposition , conditional_variance_steps , ...
2017-05-16 15:10:20 +02:00
ivar , M_ , options_ ) ;
2017-09-09 08:42:08 +02:00
if ME_present
display_conditional_variance_decomposition ( oo_ . conditional_variance_decomposition_ME , conditional_variance_steps , ...
observable_pos_requested_vars , M_ , options_ ) ;
end
2014-04-07 11:32:39 +02:00
end
2009-10-29 18:16:10 +01:00
end
2009-12-16 18:17:34 +01:00
end
2011-08-29 17:35:35 +02:00
if length ( i1 ) == 0
2013-07-10 17:12:34 +02:00
skipline ( )
2011-08-29 17:35:35 +02:00
disp ( ' All endogenous are constant or non stationary, not displaying correlations and auto-correlations' )
2013-07-10 17:12:34 +02:00
skipline ( )
return
2011-08-29 17:35:35 +02:00
end
2010-10-11 12:30:19 +02:00
if options_ . nocorr == 0 && size ( stationary_vars , 1 ) > 0
2017-05-30 19:25:30 +02:00
corr = NaN ( size ( oo_ . gamma_y { 1 } ) ) ;
corr ( i1 , i1 ) = oo_ . gamma_y { 1 } ( i1 , i1 ) ./ ( sd ( i1 ) * sd ( i1 ) ' ) ;
if options_ . contemporaneous_correlation
2015-08-10 21:36:48 +02:00
oo_ . contemporaneous_correlation = corr ;
end
2017-05-16 12:42:01 +02:00
if ~ options_ . noprint
2013-07-10 17:12:34 +02:00
skipline ( )
2013-03-18 22:58:06 +01:00
if options_ . order == 2
2017-05-16 15:10:20 +02:00
title = ' APPROXIMATED MATRIX OF CORRELATIONS' ;
2013-03-18 22:58:06 +01:00
else
title = ' MATRIX OF CORRELATIONS' ;
end
2015-08-10 17:43:58 +02:00
title = add_filter_subtitle ( title , options_ ) ;
2011-02-04 17:17:48 +01:00
labels = deblank ( M_ . endo_names ( ivar ( i1 ) , : ) ) ;
headers = char ( ' Variables' , labels ) ;
lh = size ( labels , 2 ) + 2 ;
2017-05-30 19:25:30 +02:00
dyntable ( options_ , title , headers , labels , corr ( i1 , i1 ) , lh , 8 , 4 ) ;
2015-08-17 13:12:22 +02:00
if options_ . TeX
labels = deblank ( M_ . endo_names_tex ( ivar ( i1 ) , : ) ) ;
headers = char ( ' Variables' , labels ) ;
lh = size ( labels , 2 ) + 2 ;
2017-05-30 19:25:30 +02:00
dyn_latex_table ( M_ , options_ , title , ' th_corr_matrix' , headers , labels , corr ( i1 , i1 ) , lh , 8 , 4 ) ;
2015-08-17 13:12:22 +02:00
end
2005-02-18 20:54:39 +01:00
end
2011-02-04 17:17:48 +01:00
end
if options_ . ar > 0 && size ( stationary_vars , 1 ) > 0
2005-02-18 20:54:39 +01:00
z = [ ] ;
for i = 1 : options_ . ar
2009-12-16 18:17:34 +01:00
oo_ . autocorr { i } = oo_ . gamma_y { i + 1 } ;
z ( : , i ) = diag ( oo_ . gamma_y { i + 1 } ( i1 , i1 ) ) ;
2005-02-18 20:54:39 +01:00
end
2017-05-16 12:42:01 +02:00
if ~ options_ . noprint
2017-05-16 15:10:20 +02:00
skipline ( )
2013-03-18 22:58:06 +01:00
if options_ . order == 2
2017-05-16 15:10:20 +02:00
title = ' APPROXIMATED COEFFICIENTS OF AUTOCORRELATION' ;
2013-03-18 22:58:06 +01:00
else
title = ' COEFFICIENTS OF AUTOCORRELATION' ;
end
2015-08-10 17:43:58 +02:00
title = add_filter_subtitle ( title , options_ ) ;
2017-05-16 15:10:20 +02:00
labels = deblank ( M_ . endo_names ( ivar ( i1 ) , : ) ) ;
2011-02-04 17:17:48 +01:00
headers = char ( ' Order ' , int2str ( [ 1 : options_ . ar ] ' ) ) ;
lh = size ( labels , 2 ) + 2 ;
2016-05-31 11:39:21 +02:00
dyntable ( options_ , title , headers , labels , z , lh , 8 , 4 ) ;
2015-08-17 13:12:22 +02:00
if options_ . TeX
2017-05-16 15:10:20 +02:00
labels = deblank ( M_ . endo_names_tex ( ivar ( i1 ) , : ) ) ;
2015-08-17 13:12:22 +02:00
headers = char ( ' Order ' , int2str ( [ 1 : options_ . ar ] ' ) ) ;
lh = size ( labels , 2 ) + 2 ;
2016-05-31 08:22:19 +02:00
dyn_latex_table ( M_ , options_ , title , ' th_autocorr_matrix' , headers , labels , z , lh , 8 , 4 ) ;
2015-08-17 13:12:22 +02:00
end
2017-05-16 15:10:20 +02:00
end
2009-12-16 18:17:34 +01:00
end