2008-09-01 13:44:26 +02:00
function trace_plot ( options_,M_,estim_params_,type,blck,name1,name2)
2015-05-04 10:49:24 +02:00
% This function builds trace plot for the Metropolis-Hastings draws.
2008-09-01 13:44:26 +02:00
%
2015-12-13 16:40:20 +01:00
% INPUTS
2008-09-01 13:44:26 +02:00
%
2008-09-01 16:45:26 +02:00
% options_ [structure] Dynare structure.
% M_ [structure] Dynare structure (related to model definition).
% estim_params_ [structure] Dynare structure (related to estimation).
2015-05-04 10:49:24 +02:00
% type [string] 'DeepParameter', 'MeasurementError' (for measurement equation error),
% 'StructuralShock' (for structural shock)
% or 'PosteriorDensity (for posterior density)'
2008-09-01 16:45:26 +02:00
% blck [integer] Number of the mh chain.
% name1 [string] Object name.
2015-12-13 16:40:20 +01:00
% name2 [string] Object name.
%
% OUTPUTS
2008-09-01 16:45:26 +02:00
% None
2015-12-13 16:40:20 +01:00
%
2008-09-01 13:44:26 +02:00
% SPECIAL REQUIREMENTS
2015-05-04 10:49:24 +02:00
% Copyright (C) 2003-2015 Dynare Team
2008-09-01 13:44:26 +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/>.
2009-12-16 18:17:34 +01:00
2008-09-01 13:44:26 +02:00
% Cet the column index:
2015-05-04 10:49:24 +02:00
if strcmpi ( type , ' PosteriorDensity' )
column = 0 ;
name1 = ' ' ;
2008-09-01 13:44:26 +02:00
else
2015-12-13 16:40:20 +01:00
if nargin < 7
2015-05-04 10:49:24 +02:00
column = name2index ( options_ , M_ , estim_params_ , type , name1 ) ;
else
column = name2index ( options_ , M_ , estim_params_ , type , name1 , name2 ) ;
end
2008-09-01 13:44:26 +02:00
end
if isempty ( column )
return
end
% Get informations about the posterior draws:
2013-11-20 18:03:12 +01:00
MetropolisFolder = CheckPath ( ' metropolis' , M_ . dname ) ;
load_last_mh_history_file ( MetropolisFolder , M_ . fname ) ;
2008-09-01 13:44:26 +02:00
FirstMhFile = 1 ;
FirstLine = 1 ;
TotalNumberOfMhFiles = sum ( record . MhDraws ( : , 2 ) ) ;
TotalNumberOfMhDraws = sum ( record . MhDraws ( : , 1 ) ) ;
clear record ;
% Get all the posterior draws:
PosteriorDraws = GetAllPosteriorDraws ( column , FirstMhFile , FirstLine , TotalNumberOfMhFiles , TotalNumberOfMhDraws , blck ) ;
% Plot the posterior draws:
if strcmpi ( type , ' DeepParameter' )
TYPE = ' parameter ' ;
elseif strcmpi ( type , ' StructuralShock' )
if nargin < 7
TYPE = ' the standard deviation of structural shock ' ;
else
TYPE = ' the correlation between structural shocks ' ;
end
elseif strcmpi ( type , ' MeasurementError' )
if nargin < 7
TYPE = ' the standard deviation of measurement error ' ;
else
TYPE = ' the correlation between measurement errors ' ;
end
2015-05-04 10:49:24 +02:00
elseif strcmpi ( type , ' PosteriorDensity' )
TYPE = ' the posterior density' ;
2008-09-01 13:44:26 +02:00
end
if nargin < 7
2013-04-29 23:15:44 +02:00
FigureName = [ ' Trace plot for ' TYPE name1 ] ;
2008-09-01 13:44:26 +02:00
else
2013-04-29 23:15:44 +02:00
FigureName = [ ' Trace plot for ' TYPE name1 ' and ' name2 ] ;
2008-09-01 13:44:26 +02:00
end
if options_ . mh_nblck > 1
2015-12-13 16:40:20 +01:00
FigureName = [ FigureName , ' (block number ' int2str ( blck ) ' ).' ] ;
2008-09-01 13:44:26 +02:00
end
2013-04-29 23:15:44 +02:00
hh = dyn_figure ( options_ , ' Name' , FigureName ) ;
plot ( 1 : TotalNumberOfMhDraws , PosteriorDraws , ' Color' , [ . 7 . 7 . 7 ] ) ;
2008-09-01 13:44:26 +02:00
% Compute the moving average of the posterior draws:
N = options_ . trace_plot_ma ;
MovingAverage = NaN ( TotalNumberOfMhDraws , 1 ) ;
first = N + 1 ;
last = TotalNumberOfMhDraws - N ;
for t = first : last
2015-12-13 16:40:20 +01:00
MovingAverage ( t ) = mean ( PosteriorDraws ( t - N : t + N ) ) ;
2008-09-01 13:44:26 +02:00
end
hold on
plot ( 1 : TotalNumberOfMhDraws , MovingAverage , ' -k' , ' linewidth' , 2 )
hold off
2013-04-29 23:15:44 +02:00
axis tight
legend ( { ' MCMC draw' ; [ num2str ( N ) ' period moving average' ] } , ' Location' , ' NorthWest' )
% create subdirectory <fname>/graphs if it doesn't exist
if ~ exist ( M_ . fname , ' dir' )
mkdir ( ' .' , M_ . fname ) ;
end
2015-05-04 10:49:24 +02:00
if ~ exist ( [ M_ . fname filesep ' graphs' ] , ' dir' )
2013-04-29 23:15:44 +02:00
mkdir ( M_ . fname , ' graphs' ) ;
end
2015-05-04 10:49:24 +02:00
%get name for plot
if strcmpi ( type , ' PosteriorDensity' )
plot_name = ' Posterior' ;
else
plot_name = get_the_name ( column , 0 , M_ , estim_params_ , options_ ) ;
end
2015-12-13 16:40:20 +01:00
2013-04-29 23:15:44 +02:00
dyn_saveas ( hh , [ M_ . fname , filesep , ' graphs' , filesep , ' TracePlot_' plot_name ] , options_ )
2015-12-13 16:40:20 +01:00
if options_ . TeX
fid = fopen ( [ M_ . fname , ' /graphs/' , M_ . fname , ' _TracePlot_' plot_name , ' .TeX' ] , ' w+' ) ;
if strcmpi ( type , ' DeepParameter' )
tex_names = M_ . param_names_tex ;
base_names = M_ . param_names ;
elseif strcmpi ( type , ' StructuralShock' )
tex_names = M_ . exo_names_tex ;
base_names = M_ . exo_names ;
elseif strcmpi ( type , ' MeasurementError' )
tex_names = M_ . endo_names_tex ;
base_names = M_ . endo_names ;
end
if strcmpi ( type , ' PosteriorDensity' )
FigureName = [ ' Trace plot for ' TYPE name1 ] ;
else
if nargin < 7
FigureName = [ ' Trace plot for ' TYPE ' $' deblank ( tex_names ( strmatch ( name1 , base_names , ' exact' ) , : ) ) ' $' ] ;
else
FigureName = [ ' Trace plot for ' TYPE ' $' deblank ( tex_names ( strmatch ( name1 , base_names , ' exact' ) , : ) ) ' $ and $' deblank ( tex_names ( strmatch ( name2 , base_names , ' exact' ) , : ) ) ' $' ] ;
end
end
if options_ . mh_nblck > 1
FigureName = [ FigureName , ' (block number ' int2str ( blck ) ' ).' ] ;
end
fprintf ( fid , ' %-s\n' , ' \begin{figure}[H]' ) ;
fprintf ( fid , ' %-s\n' , ' \centering' ) ;
fprintf ( fid , ' %-s\n' , [ ' \includegraphics[scale=0.5]{' , [ M_ . fname , ' /graphs/TracePlot_' plot_name ] , ' }\\' ] ) ;
fprintf ( fid , ' %-s\n' , [ ' \caption{' , FigureName , ' }' ] ) ;
fprintf ( fid , ' %-s\n' , ' \end{figure}' ) ;
fclose ( fid ) ;
end