diff --git a/matlab/dsge_var_likelihood.m b/matlab/dsge_var_likelihood.m index 28412b279..47cb44b57 100644 --- a/matlab/dsge_var_likelihood.m +++ b/matlab/dsge_var_likelihood.m @@ -1,9 +1,17 @@ -function [fval,info,exit_flag,grad,hess,SteadyState,trend_coeff,PHI_tilde,SIGMA_u_tilde,iXX,prior] = dsge_var_likelihood(xparam1,DynareDataset,DynareInfo,DynareOptions,Model,EstimatedParameters,BayesInfo,BoundsInfo,DynareResults) -% Evaluates the posterior kernel of the bvar-dsge model. +function [fval,info,exit_flag,grad,hess,SteadyState,trend_coeff,PHI_tilde,SIGMA_u_tilde,iXX,prior] = dsge_var_likelihood(xparam1,DynareDataset,DataSetInfo,DynareOptions,Model,EstimatedParameters,BayesInfo,BoundsInfo,DynareResults) +% Evaluates the posterior kernel of the BVAR-DSGE model. % % INPUTS -% o xparam1 [double] Vector of model's parameters. -% o gend [integer] Number of observations (without conditionning observations for the lags). +% o xparam1 [double] Vector of model's parameters. +% o gend [integer] Number of observations (without conditionning observations for the lags). +% o DynareDataset [dseries] object storing the dataset +% o DataSetInfo [structure] storing informations about the sample. +% o DynareOptions [structure] describing the options +% o Model [structure] decribing the model +% o EstimatedParameters [structure] characterizing parameters to be estimated +% o BayesInfo [structure] describing the priors +% o BoundsInfo [structure] containing prior bounds +% o DynareResults [structure] storing the results % % OUTPUTS % o fval [double] Value of the posterior kernel at xparam1. @@ -54,8 +62,6 @@ function [fval,info,exit_flag,grad,hess,SteadyState,trend_coeff,PHI_tilde,SIGMA_ % You should have received a copy of the GNU General Public License % along with Dynare. If not, see . -persistent dsge_prior_weight_idx - % Initialize some of the output arguments. fval = []; exit_flag = 1; @@ -77,9 +83,7 @@ if ~isempty(xparam1) end % Initialization of of the index for parameter dsge_prior_weight in Model.params. -if isempty(dsge_prior_weight_idx) - dsge_prior_weight_idx = strmatch('dsge_prior_weight', Model.param_names); -end +dsge_prior_weight_idx = strmatch('dsge_prior_weight', Model.param_names); % Get the number of estimated (dsge) parameters. nx = EstimatedParameters.nvx + EstimatedParameters.np; @@ -101,10 +105,9 @@ if ~DynareOptions.noconstant end % Get empirical second order moments for the observed variables. -mYY = evalin('base', 'mYY'); -mYX = evalin('base', 'mYX'); -mXY = evalin('base', 'mXY'); -mXX = evalin('base', 'mXX'); +mYY= DataSetInfo.mYY; +mYX= DataSetInfo.mYX; +mXX= DataSetInfo.mXX; Model = set_all_parameters(xparam1,EstimatedParameters,Model); @@ -206,10 +209,6 @@ end GYY = TheoreticalAutoCovarianceOfTheObservedVariables(:,:,1); -assignin('base','GYY',GYY); -assignin('base','GXX',GXX); -assignin('base','GYX',GYX); - iGXX = inv(GXX); PHI_star = iGXX*transpose(GYX); %formula (22), DS (2004) SIGMA_u_star=GYY - GYX*PHI_star; %formula (23), DS (2004) diff --git a/matlab/dynare_estimation_1.m b/matlab/dynare_estimation_1.m index bfcdf9d55..274ed75a1 100644 --- a/matlab/dynare_estimation_1.m +++ b/matlab/dynare_estimation_1.m @@ -115,10 +115,10 @@ if options_.dsge_var error('Estimation::DsgeVarLikelihood: I cannot estimate a DSGE-VAR model with missing observations!') end if options_.noconstant - var_sample_moments(options_.dsge_varlag, -1, dataset_); + dataset_info=var_sample_moments(options_.dsge_varlag, -1, dataset_, dataset_info); else % The steady state is non zero ==> a constant in the VAR is needed! - var_sample_moments(options_.dsge_varlag, 0, dataset_); + dataset_info=var_sample_moments(options_.dsge_varlag, 0, dataset_, dataset_info); end end diff --git a/matlab/var_sample_moments.m b/matlab/var_sample_moments.m index d5769f355..881d5e93e 100644 --- a/matlab/var_sample_moments.m +++ b/matlab/var_sample_moments.m @@ -1,4 +1,4 @@ -function var_sample_moments(nlag, var_trend_order, dataset_)%datafile,varobs,xls_sheet,xls_range) +function dataset_info=var_sample_moments(nlag, var_trend_order, dataset_, dataset_info)%datafile,varobs,xls_sheet,xls_range) % Computes the sample moments of a VAR model. % % The VAR(p) model is defined by: @@ -37,22 +37,21 @@ function var_sample_moments(nlag, var_trend_order, dataset_)%datafile,varobs,xls % = 0 constant and no linear trend, % = 1 constant and linear trend. % o dataset_ [dseries] The sample. +% o dataset_info [structure] data set information % % OUTPUTS -% o YtY [double] Y'*Y an m*m matrix. -% o XtY [double] X'*Y an (mp+q)*m matrix. -% o YtX [double] Y'*X an m*(mp+q) matrix. -% o XtX [double] X'*X an (mp+q)*(mp+q) matrix. -% o Y [double] Y a T*m matrix. -% o X [double] X a T*(mp+q) matrix. +% dataset_info [structure] containing the following new fields +% o mYY [double] Y'*Y an m*m matrix. +% o mXY [double] X'*Y an (mp+q)*m matrix. +% o mYX [double] Y'*X an m*(mp+q) matrix. +% o mXX [double] X'*X an (mp+q)*(mp+q) matrix. +% o Ydata [double] Y a T*m matrix. +% o Xdata [double] X a T*(mp+q) matrix. % % SPECIAL REQUIREMENTS % None. -% -% REMARKS -% Outputs are saved in the base workspace (not returned by the function). -% Copyright (C) 2007-2014 Dynare Team +% Copyright (C) 2007-2021 Dynare Team % % This file is part of Dynare. % @@ -102,12 +101,17 @@ for t=1:NumberOfObservations end if (var_trend_order == 1) - X(:,end) = transpose(1:NumberOfObservations) + X(:,end) = transpose(1:NumberOfObservations); end - -assignin('base', 'mYY', Y'*Y); -assignin('base', 'mYX', Y'*X); -assignin('base', 'mXY', X'*Y); -assignin('base', 'mXX', X'*X); -assignin('base', 'Ydata', Y); -assignin('base', 'Xdata', X); \ No newline at end of file +dataset_info.mYY=Y'*Y; +dataset_info.mYX=Y'*X; +dataset_info.mXY=X'*Y; +dataset_info.mXX=X'*X; +dataset_info.Ydata=Y; +dataset_info.Xdata=X; +% assignin('base', 'mYY', Y'*Y); +% assignin('base', 'mYX', Y'*X); +% assignin('base', 'mXY', X'*Y); +% assignin('base', 'mXX', X'*X); +% assignin('base', 'Ydata', Y); +% assignin('base', 'Xdata', X); \ No newline at end of file