function [fval,cost_flag,ys,trend_coeff] = DsgeLikelihood(xparam1,gend,data) % stephane.adjemian@cepremap.cnrs.fr [09-07-2004] % % Adapted from mj_optmumlik.m global bayestopt_ estim_params_ options_ trend_coeff_ M_ oo_ global dr1_test_ fval = []; ys = []; trend_coeff = []; cost_flag = 1; nobs = size(options_.varobs,1); %------------------------------------------------------------------------------ % 1. Get the structural parameters & define penalties %------------------------------------------------------------------------------ if options_.mode_compute ~= 1 & any(xparam1 < bayestopt_.lb) k = find(xparam1 < bayestopt_.lb); fval = bayestopt_.penalty*min(1e3,exp(sum(bayestopt_.lb(k)-xparam1(k)))); cost_flag = 0; return; end if options_.mode_compute ~= 1 & any(xparam1 > bayestopt_.ub) k = find(xparam1 > bayestopt_.ub); fval = bayestopt_.penalty*min(1e3,exp(sum(xparam1(k)-bayestopt_.ub(k)))); cost_flag = 0; return; end Q = M_.Sigma_e; for i=1:estim_params_.nvx k =estim_params_.var_exo(i,1); Q(k,k) = xparam1(i)*xparam1(i); end offset = estim_params_.nvx; if estim_params_.nvn H = zeros(nobs,nobs); for i=1:estim_params_.nvn k = estim_params_.var_endo(i,1); H(k,k) = xparam1(i+offset)*xparam1(i+offset); end offset = offset+estim_params_.nvn; end if estim_params_.ncx for i=1:estim_params_.ncx k1 =estim_params_.corrx(i,1); k2 =estim_params_.corrx(i,2); Q(k1,k2) = xparam1(i+offset)*sqrt(Q(k1,k1)*Q(k2,k2)); Q(k2,k1) = Q(k1,k2); end [CholQ,testQ] = chol(Q); if testQ %% The variance-covariance matrix of the structural innovations is not definite positive. %% We have to compute the eigenvalues of this matrix in order to build the penalty. a = diag(eig(Q)); fval = bayestopt_.penalty*min(1e3,exp(sum(-a(a<=0)))); cost_flag = 0; return end offset = offset+estim_params_.ncx; end if estim_params_.ncn for i=1:estim_params_.ncn k1 = options_.lgyidx2varobs(estim_params_.corrn(i,1)); k2 = options_.lgyidx2varobs(estim_params_.corrn(i,2)); H(k1,k2) = xparam1(i+offset)*sqrt(H(k1,k1)*H(k2,k2)); H(k2,k1) = H(k1,k2); end [CholH,testH] = chol(H); if testH a = diag(eig(H)); if nobs == estim_params_.nvn fval = bayestopt_.penalty*min(1e3,exp(sum(-a(a<=0)))); cost_flag = 0; return else if sum(abs(a)