57 lines
2.5 KiB
Matlab
57 lines
2.5 KiB
Matlab
function [resids, grad, state_out, E, M_, out] = match_function(err_0, obs_list,current_obs, opts_simul,...
|
|
M_, oo_, options_)
|
|
% function [resids, grad, stateout, E, M_, out] = match_function(err_0, obs_list,current_obs, opts_simul,...
|
|
% M_, oo_, options_)
|
|
% Outputs:
|
|
% - resids [double] [n_exo by 1] vector of residuals
|
|
% - grad [double] [n by n_exo] gradient (response of observables to shocks)
|
|
% - state_out [double] [ny by 1] value of endogenous variables
|
|
% - E [double] response of endogenous variables to shocks
|
|
% - M_ [structure] Matlab's structure describing the model (M_).
|
|
% - out [structure] Occbin's results structure
|
|
%
|
|
% Inputs
|
|
% - err_ [double] value of shocks
|
|
% - obs_list [cell] names of observables
|
|
% - current_obs [double] [1 by n_obs] current value of observables
|
|
% - opts_simul [structure] Structure with simulation options
|
|
% - M_ [structure] Matlab's structure describing the model (M_).
|
|
% - oo_ [structure] Matlab's structure containing the results (oo_).
|
|
% - options_ [structure] Matlab's structure describing the current options (options_).
|
|
|
|
% Original authors: Pablo Cuba-Borda, Luca Guerrieri, Matteo Iacoviello, and Molin Zhong
|
|
% Original file downloaded from:
|
|
% http://www.lguerrieri.com/jae-replication.zip
|
|
% Adapted for Dynare by Dynare Team.
|
|
%
|
|
% This code is in the public domain and may be used freely.
|
|
% However the authors would appreciate acknowledgement of the source by
|
|
% citation of any of the following papers:
|
|
%
|
|
% Pablo Cuba-Borda, Luca Guerrieri, and Matteo Iacoviello (2019): "Likelihood evaluation of models
|
|
% with occasionally binding constraints", Journal of Applied Econometrics,
|
|
% 34(7), 1073-1085
|
|
|
|
opts_simul.SHOCKS = err_0';
|
|
options_.occbin.simul=opts_simul;
|
|
options_.occbin.simul.full_output=1;
|
|
options_.noprint = 1;
|
|
[~, out, ss] = occbin.solver(M_,oo_,options_);
|
|
state_out= out.piecewise(1,:)' - out.ys;
|
|
|
|
E = ss.R(:,opts_simul.exo_pos);
|
|
grad = ss.R(opts_simul.varobs_id,opts_simul.exo_pos);
|
|
|
|
nobs = size(obs_list,1);
|
|
resids = zeros(nobs,1);
|
|
|
|
if ~out.error_flag
|
|
% -- add observation block in model ---%
|
|
% % put in model file
|
|
resids = (out.piecewise(1,opts_simul.varobs_id)-current_obs)'; %-out.endo_ss.(obs_list{this_obs});
|
|
else
|
|
resids = resids+100;
|
|
end
|
|
|
|
end
|