0001 function [fval,DLIK,Hess,exit_flag,ys,trend_coeff,info,Model,DynareOptions,BayesInfo,DynareResults] = dsge_likelihood(xparam1,DynareDataset,DynareOptions,Model,EstimatedParameters,BayesInfo,DynareResults,derivatives_info)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144 persistent penalty
0145
0146
0147 fval = [];
0148 ys = [];
0149 trend_coeff = [];
0150 exit_flag = 1;
0151 info = 0;
0152 singularity_flag = 0;
0153 DLIK = [];
0154 Hess = [];
0155
0156 if DynareOptions.estimation_dll
0157 [fval,exit_flag,ys,trend_coeff,info,params,H,Q] ...
0158 = logposterior(xparam1,DynareDataset, DynareOptions,Model, ...
0159 EstimatedParameters,BayesInfo,DynareResults);
0160 Model.params = params;
0161 if ~isequal(Model.H,0)
0162 Model.H = H;
0163 end
0164 Model.Sigma_e = Q;
0165 DynareResults.dr.ys = ys;
0166 return
0167 end
0168
0169
0170 analytic_derivation = DynareOptions.analytic_derivation;
0171 if nargout==1,
0172 analytic_derivation=0;
0173 end
0174
0175
0176
0177
0178
0179
0180 if ~isequal(DynareOptions.mode_compute,1) && any(xparam1<BayesInfo.lb)
0181 k = find(xparam1<BayesInfo.lb);
0182 fval = penalty+sum((BayesInfo.lb(k)-xparam1(k)).^2);
0183 exit_flag = 0;
0184 info = 41;
0185 if analytic_derivation,
0186 DLIK=ones(length(xparam1),1);
0187 end
0188 return
0189 end
0190
0191
0192 if ~isequal(DynareOptions.mode_compute,1) && any(xparam1>BayesInfo.ub)
0193 k = find(xparam1>BayesInfo.ub);
0194 fval = penalty+sum((xparam1(k)-BayesInfo.ub(k)).^2);
0195 exit_flag = 0;
0196 info = 42;
0197 if analytic_derivation,
0198 DLIK=ones(length(xparam1),1);
0199 end
0200 return
0201 end
0202
0203
0204 Q = Model.Sigma_e;
0205 H = Model.H;
0206 for i=1:EstimatedParameters.nvx
0207 k =EstimatedParameters.var_exo(i,1);
0208 Q(k,k) = xparam1(i)*xparam1(i);
0209 end
0210 offset = EstimatedParameters.nvx;
0211 if EstimatedParameters.nvn
0212 for i=1:EstimatedParameters.nvn
0213 k = EstimatedParameters.var_endo(i,1);
0214 H(k,k) = xparam1(i+offset)*xparam1(i+offset);
0215 end
0216 offset = offset+EstimatedParameters.nvn;
0217 else
0218 H = zeros(DynareDataset.info.nvobs);
0219 end
0220
0221
0222 if EstimatedParameters.ncx
0223 for i=1:EstimatedParameters.ncx
0224 k1 =EstimatedParameters.corrx(i,1);
0225 k2 =EstimatedParameters.corrx(i,2);
0226 Q(k1,k2) = xparam1(i+offset)*sqrt(Q(k1,k1)*Q(k2,k2));
0227 Q(k2,k1) = Q(k1,k2);
0228 end
0229
0230 [CholQ,testQ] = chol(Q);
0231 if testQ
0232
0233 a = diag(eig(Q));
0234 k = find(a < 0);
0235 if k > 0
0236 fval = penalty+sum(-a(k));
0237 exit_flag = 0;
0238 info = 43;
0239 return
0240 end
0241 end
0242 offset = offset+EstimatedParameters.ncx;
0243 end
0244
0245
0246 if EstimatedParameters.ncn
0247 for i=1:EstimatedParameters.ncn
0248 k1 = DynareOptions.lgyidx2varobs(EstimatedParameters.corrn(i,1));
0249 k2 = DynareOptions.lgyidx2varobs(EstimatedParameters.corrn(i,2));
0250 H(k1,k2) = xparam1(i+offset)*sqrt(H(k1,k1)*H(k2,k2));
0251 H(k2,k1) = H(k1,k2);
0252 end
0253
0254 [CholH,testH] = chol(H);
0255 if testH
0256
0257 a = diag(eig(H));
0258 k = find(a < 0);
0259 if k > 0
0260 fval = penalty+sum(-a(k));
0261 exit_flag = 0;
0262 info = 44;
0263 return
0264 end
0265 end
0266 offset = offset+EstimatedParameters.ncn;
0267 end
0268
0269
0270 if EstimatedParameters.np > 0
0271 Model.params(EstimatedParameters.param_vals(:,1)) = xparam1(offset+1:end);
0272 end
0273
0274
0275 Model.Sigma_e = Q;
0276 Model.H = H;
0277
0278
0279
0280
0281
0282
0283 [T,R,SteadyState,info,Model,DynareOptions,DynareResults] = dynare_resolve(Model,DynareOptions,DynareResults,'restrict');
0284
0285
0286 if info(1) == 1 || info(1) == 2 || info(1) == 5 || info(1) == 7 || info(1) == 22 || info(1) == 24
0287 fval = penalty+1;
0288 info = info(1);
0289 exit_flag = 0;
0290 if analytic_derivation,
0291 DLIK=ones(length(xparam1),1);
0292 end
0293 return
0294 elseif info(1) == 3 || info(1) == 4 || info(1)==6 ||info(1) == 19 || info(1) == 20 || info(1) == 21 || info(1) == 23
0295 fval = penalty+info(2);
0296 info = info(1);
0297 exit_flag = 0;
0298 if analytic_derivation,
0299 DLIK=ones(length(xparam1),1);
0300 end
0301 return
0302 end
0303
0304
0305 BayesInfo.mf = BayesInfo.mf1;
0306
0307
0308 if DynareOptions.noconstant
0309 constant = zeros(DynareDataset.info.nvobs,1);
0310 else
0311 if DynareOptions.loglinear
0312 constant = log(SteadyState(BayesInfo.mfys));
0313 else
0314 constant = SteadyState(BayesInfo.mfys);
0315 end
0316 end
0317
0318
0319 if BayesInfo.with_trend
0320 trend_coeff = zeros(DynareDataset.info.nvobs,1);
0321 t = DynareOptions.trend_coeffs;
0322 for i=1:length(t)
0323 if ~isempty(t{i})
0324 trend_coeff(i) = evalin('base',t{i});
0325 end
0326 end
0327 trend = repmat(constant,1,DynareDataset.info.ntobs)+trend_coeff*[1:DynareDataset.info.ntobs];
0328 else
0329 trend = repmat(constant,1,DynareDataset.info.ntobs);
0330 end
0331
0332
0333 start = DynareOptions.presample+1;
0334 Z = BayesInfo.mf;
0335 no_missing_data_flag = ~DynareDataset.missing.state;
0336 mm = length(T);
0337 pp = DynareDataset.info.nvobs;
0338 rr = length(Q);
0339 kalman_tol = DynareOptions.kalman_tol;
0340 riccati_tol = DynareOptions.riccati_tol;
0341 Y = DynareDataset.data-trend;
0342
0343
0344
0345
0346 kalman_algo = DynareOptions.kalman_algo;
0347
0348
0349 if (kalman_algo == 2) || (kalman_algo == 4)
0350 if isequal(H,0)
0351 H = zeros(pp,1);
0352 mmm = mm;
0353 else
0354 if all(all(abs(H-diag(diag(H)))<1e-14))
0355 H = diag(H);
0356 mmm = mm;
0357 else
0358 Z = [Z, eye(pp)];
0359 T = blkdiag(T,zeros(pp));
0360 Q = blkdiag(Q,H);
0361 R = blkdiag(R,eye(pp));
0362 Pstar = blkdiag(Pstar,H);
0363 Pinf = blckdiag(Pinf,zeros(pp));
0364 H = zeros(pp,1);
0365 mmm = mm+pp;
0366 end
0367 end
0368 end
0369
0370
0371 diffuse_periods = 0;
0372 correlated_errors_have_been_checked = 0;
0373 singular_diffuse_filter = 0;
0374 switch DynareOptions.lik_init
0375 case 1
0376 if kalman_algo~=2
0377
0378 kalman_algo = 1;
0379 end
0380 if DynareOptions.lyapunov_fp == 1
0381 Pstar = lyapunov_symm(T,Q,DynareOptions.lyapunov_fixed_point_tol,DynareOptions.lyapunov_complex_threshold, 3, R);
0382 elseif DynareOptions.lyapunov_db == 1
0383 Pstar = disclyap_fast(T,R*Q*R',DynareOptions.lyapunov_doubling_tol);
0384 elseif DynareOptions.lyapunov_srs == 1
0385 Pstar = lyapunov_symm(T,Q,DynareOptions.lyapunov_fixed_point_tol,DynareOptions.lyapunov_complex_threshold, 4, R);
0386 else
0387 Pstar = lyapunov_symm(T,R*Q*R',DynareOptions.qz_criterium,DynareOptions.lyapunov_complex_threshold);
0388 end;
0389 Pinf = [];
0390 a = zeros(mm,1);
0391 Zflag = 0;
0392 case 2
0393 if kalman_algo ~= 2
0394
0395 kalman_algo = 1;
0396 end
0397 Pstar = DynareOptions.Harvey_scale_factor*eye(mm);
0398 Pinf = [];
0399 a = zeros(mm,1);
0400 Zflag = 0;
0401 case 3
0402
0403 if kalman_algo == 0
0404 kalman_algo = 3;
0405 elseif ~((kalman_algo == 3) || (kalman_algo == 4))
0406 error(['diffuse filter: options_.kalman_algo can only be equal ' ...
0407 'to 0 (default), 3 or 4'])
0408 end
0409
0410 [Z,T,R,QT,Pstar,Pinf] = schur_statespace_transformation(Z,T,R,Q,DynareOptions.qz_criterium);
0411 Zflag = 1;
0412
0413 if (kalman_algo==3)
0414
0415 if no_missing_data_flag
0416 [dLIK,dlik,a,Pstar] = kalman_filter_d(Y, 1, size(Y,2), ...
0417 zeros(mm,1), Pinf, Pstar, ...
0418 kalman_tol, riccati_tol, DynareOptions.presample, ...
0419 T,R,Q,H,Z,mm,pp,rr);
0420 else
0421 [dLIK,dlik,a,Pstar] = missing_observations_kalman_filter_d(DynareDataset.missing.aindex,DynareDataset.missing.number_of_observations,DynareDataset.missing.no_more_missing_observations, ...
0422 Y, 1, size(Y,2), ...
0423 zeros(mm,1), Pinf, Pstar, ...
0424 kalman_tol, riccati_tol, DynareOptions.presample, ...
0425 T,R,Q,H,Z,mm,pp,rr);
0426 end
0427 diffuse_periods = length(dlik);
0428 if isinf(dLIK)
0429
0430 singular_diffuse_filter = 1;
0431 end
0432 end
0433 if singular_diffuse_filter || (kalman_algo==4)
0434
0435 if isequal(H,0)
0436 H1 = zeros(pp,1);
0437 mmm = mm;
0438 else
0439 if all(all(abs(H-diag(diag(H)))<1e-14))
0440 H1 = diag(H);
0441 mmm = mm;
0442 else
0443 Z = [Z, eye(pp)];
0444 T = blkdiag(T,zeros(pp));
0445 Q = blkdiag(Q,H);
0446 R = blkdiag(R,eye(pp));
0447 Pstar = blkdiag(Pstar,H);
0448 Pinf = blckdiag(Pinf,zeros(pp));
0449 H1 = zeros(pp,1);
0450 mmm = mm+pp;
0451 end
0452 end
0453
0454 correlated_errors_have_been_checked = 1;
0455
0456 [dLIK,dlik,a,Pstar] = univariate_kalman_filter_d(DynareDataset.missing.aindex,...
0457 DynareDataset.missing.number_of_observations,...
0458 DynareDataset.missing.no_more_missing_observations, ...
0459 Y, 1, size(Y,2), ...
0460 zeros(mmm,1), Pinf, Pstar, ...
0461 kalman_tol, riccati_tol, DynareOptions.presample, ...
0462 T,R,Q,H1,Z,mmm,pp,rr);
0463 diffuse_periods = length(dlik);
0464 end
0465 case 4
0466 if kalman_algo ~= 2
0467 kalman_algo = 1;
0468 end
0469 if isequal(H,0)
0470 [err,Pstar] = kalman_steady_state(transpose(T),R*Q*transpose(R),transpose(build_selection_matrix(Z,np,length(Z))));
0471 else
0472 [err,Pstar] = kalman_steady_state(transpose(T),R*Q*transpose(R),transpose(build_selection_matrix(Z,np,length(Z))),H);
0473 end
0474 if err
0475 disp(['dsge_likelihood:: I am not able to solve the Riccati equation, so I switch to lik_init=1!']);
0476 DynareOptions.lik_init = 1;
0477 Pstar = lyapunov_symm(T,R*Q*R',DynareOptions.qz_criterium,DynareOptions.lyapunov_complex_threshold);
0478 end
0479 Pinf = [];
0480 otherwise
0481 error('dsge_likelihood:: Unknown initialization approach for the Kalman filter!')
0482 end
0483
0484 if analytic_derivation
0485 no_DLIK = 0;
0486 full_Hess = analytic_derivation==2;
0487 asy_Hess = analytic_derivation==-2;
0488 if asy_Hess,
0489 analytic_derivation=1;
0490 end
0491 DLIK = [];
0492 AHess = [];
0493 if nargin<8 || isempty(derivatives_info)
0494 [A,B,nou,nou,Model,DynareOptions,DynareResults] = dynare_resolve(Model,DynareOptions,DynareResults);
0495 if ~isempty(EstimatedParameters.var_exo)
0496 indexo=EstimatedParameters.var_exo(:,1);
0497 else
0498 indexo=[];
0499 end
0500 if ~isempty(EstimatedParameters.param_vals)
0501 indparam=EstimatedParameters.param_vals(:,1);
0502 else
0503 indparam=[];
0504 end
0505
0506 if full_Hess,
0507 [dum, DT, DOm, DYss, dum2, D2T, D2Om, D2Yss] = getH(A, B, Model,DynareResults,0,indparam,indexo);
0508 else
0509 [dum, DT, DOm, DYss] = getH(A, B, Model,DynareResults,0,indparam,indexo);
0510 end
0511 else
0512 DT = derivatives_info.DT;
0513 DOm = derivatives_info.DOm;
0514 DYss = derivatives_info.DYss;
0515 if isfield(derivatives_info,'full_Hess'),
0516 full_Hess = derivatives_info.full_Hess;
0517 end
0518 if full_Hess,
0519 D2T = derivatives_info.D2T;
0520 D2Om = derivatives_info.D2Om;
0521 D2Yss = derivatives_info.D2Yss;
0522 end
0523 if isfield(derivatives_info,'no_DLIK'),
0524 no_DLIK = derivatives_info.no_DLIK;
0525 end
0526 clear('derivatives_info');
0527 end
0528 iv = DynareResults.dr.restrict_var_list;
0529 DYss = [zeros(size(DYss,1),offset) DYss];
0530 DT = DT(iv,iv,:);
0531 DOm = DOm(iv,iv,:);
0532 DYss = DYss(iv,:);
0533 DH=zeros([size(H),length(xparam1)]);
0534 DQ=zeros([size(Q),length(xparam1)]);
0535 DP=zeros([size(T),length(xparam1)]);
0536 if full_Hess,
0537 for j=1:size(D2Yss,1),
0538 tmp(j,:,:) = blkdiag(zeros(offset,offset), squeeze(D2Yss(j,:,:)));
0539 end
0540 D2Yss = tmp;
0541 D2T = D2T(iv,iv,:,:);
0542 D2Om = D2Om(iv,iv,:,:);
0543 D2Yss = D2Yss(iv,:,:);
0544 D2H=zeros([size(H),length(xparam1),length(xparam1)]);
0545 D2P=zeros([size(T),length(xparam1),length(xparam1)]);
0546 end
0547 for i=1:EstimatedParameters.nvx
0548 k =EstimatedParameters.var_exo(i,1);
0549 DQ(k,k,i) = 2*sqrt(Q(k,k));
0550 dum = lyapunov_symm(T,DOm(:,:,i),DynareOptions.qz_criterium,DynareOptions.lyapunov_complex_threshold);
0551 kk = find(abs(dum) < 1e-12);
0552 dum(kk) = 0;
0553 DP(:,:,i)=dum;
0554 if full_Hess
0555 for j=1:i,
0556 dum = lyapunov_symm(T,D2Om(:,:,i,j),DynareOptions.qz_criterium,DynareOptions.lyapunov_complex_threshold);
0557 kk = (abs(dum) < 1e-12);
0558 dum(kk) = 0;
0559 D2P(:,:,i,j)=dum;
0560 D2P(:,:,j,i)=dum;
0561 end
0562 end
0563 end
0564 offset = EstimatedParameters.nvx;
0565 for i=1:EstimatedParameters.nvn
0566 k = EstimatedParameters.var_endo(i,1);
0567 DH(k,k,i+offset) = 2*sqrt(H(k,k));
0568 if full_Hess
0569 D2H(k,k,i+offset,i+offset) = 2;
0570 end
0571 end
0572 offset = offset + EstimatedParameters.nvn;
0573 for j=1:EstimatedParameters.np
0574 dum = lyapunov_symm(T,DT(:,:,j+offset)*Pstar*T'+T*Pstar*DT(:,:,j+offset)'+DOm(:,:,j+offset),DynareOptions.qz_criterium,DynareOptions.lyapunov_complex_threshold);
0575 kk = find(abs(dum) < 1e-12);
0576 dum(kk) = 0;
0577 DP(:,:,j+offset)=dum;
0578 if full_Hess
0579 DTj = DT(:,:,j+offset);
0580 DPj = dum;
0581 for i=1:j,
0582 DTi = DT(:,:,i+offset);
0583 DPi = DP(:,:,i+offset);
0584 D2Tij = D2T(:,:,i,j);
0585 D2Omij = D2Om(:,:,i,j);
0586 tmp = D2Tij*Pstar*T' + T*Pstar*D2Tij' + DTi*DPj*T' + DTj*DPi*T' + T*DPj*DTi' + T*DPi*DTj' + DTi*Pstar*DTj' + DTj*Pstar*DTi' + D2Omij;
0587 dum = lyapunov_symm(T,tmp,DynareOptions.qz_criterium,DynareOptions.lyapunov_complex_threshold);
0588 dum(abs(dum)<1.e-12) = 0;
0589 D2P(:,:,i+offset,j+offset) = dum;
0590 D2P(:,:,j+offset,i+offset) = dum;
0591 end
0592 end
0593 end
0594 if analytic_derivation==1,
0595 analytic_deriv_info={analytic_derivation,DT,DYss,DOm,DH,DP};
0596 else
0597 analytic_deriv_info={analytic_derivation,DT,DYss,DOm,DH,DP,D2T,D2Yss,D2Om,D2H,D2P};
0598 end
0599 else
0600 analytic_deriv_info={0};
0601 end
0602
0603
0604
0605
0606
0607 if ((kalman_algo==1) || (kalman_algo==3))
0608 if no_missing_data_flag
0609 if DynareOptions.block == 1
0610 [err, LIK] = block_kalman_filter(T,R,Q,H,Pstar,Y,start,Z,kalman_tol,riccati_tol, Model.nz_state_var, Model.n_diag, Model.nobs_non_statevar);
0611 mexErrCheck('block_kalman_filter', err);
0612 else
0613 [LIK,lik] = kalman_filter(Y,diffuse_periods+1,size(Y,2), ...
0614 a,Pstar, ...
0615 kalman_tol, riccati_tol, ...
0616 DynareOptions.presample, ...
0617 T,Q,R,H,Z,mm,pp,rr,Zflag,diffuse_periods, ...
0618 analytic_deriv_info{:});
0619
0620 end
0621 else
0622 [LIK,lik] = missing_observations_kalman_filter(DynareDataset.missing.aindex,DynareDataset.missing.number_of_observations,DynareDataset.missing.no_more_missing_observations,Y,diffuse_periods+1,size(Y,2), ...
0623 a, Pstar, ...
0624 kalman_tol, DynareOptions.riccati_tol, ...
0625 DynareOptions.presample, ...
0626 T,Q,R,H,Z,mm,pp,rr,Zflag,diffuse_periods);
0627 end
0628 if analytic_derivation,
0629 LIK1=LIK;
0630 LIK=LIK1{1};
0631 end
0632 if isinf(LIK)
0633 if kalman_algo == 1
0634 kalman_algo = 2;
0635 else
0636 kalman_algo = 4;
0637 end
0638 else
0639 if DynareOptions.lik_init==3
0640 LIK = LIK + dLIK;
0641 if analytic_derivation==0 && nargout==2,
0642 lik = [dlik; lik];
0643 end
0644 end
0645 end
0646 end
0647
0648 if (kalman_algo==2) || (kalman_algo==4)
0649
0650
0651 if ~correlated_errors_have_been_checked
0652 if isequal(H,0)
0653 H = zeros(pp,1);
0654 mmm = mm;
0655 if analytic_derivation,
0656 DH = zeros(pp,length(xparam1));
0657 end
0658 else
0659 if all(all(abs(H-diag(diag(H)))<1e-14))
0660 H = diag(H);
0661 mmm = mm;
0662 if analytic_derivation,
0663 for j=1:pp,
0664 tmp(j,:)=DH(j,j,:);
0665 end
0666 DH=tmp;
0667 end
0668 else
0669 Z = [Z, eye(pp)];
0670 T = blkdiag(T,zeros(pp));
0671 Q = blkdiag(Q,H);
0672 R = blkdiag(R,eye(pp));
0673 Pstar = blkdiag(Pstar,H);
0674 Pinf = blckdiag(Pinf,zeros(pp));
0675 H = zeros(pp,1);
0676 mmm = mm+pp;
0677 end
0678 end
0679 if analytic_derivation,
0680 analytic_deriv_info{5}=DH;
0681 end
0682 end
0683
0684 [LIK, lik] = univariate_kalman_filter(DynareDataset.missing.aindex,DynareDataset.missing.number_of_observations,DynareDataset.missing.no_more_missing_observations,Y,diffuse_periods+1,size(Y,2), ...
0685 a,Pstar, ...
0686 DynareOptions.kalman_tol, ...
0687 DynareOptions.riccati_tol, ...
0688 DynareOptions.presample, ...
0689 T,Q,R,H,Z,mmm,pp,rr,Zflag,diffuse_periods,analytic_deriv_info{:});
0690 if analytic_derivation,
0691 LIK1=LIK;
0692 LIK=LIK1{1};
0693 end
0694 if DynareOptions.lik_init==3
0695 LIK = LIK+dLIK;
0696 if analytic_derivation==0 && nargout==2,
0697 lik = [dlik; lik];
0698 end
0699 end
0700 end
0701
0702 if analytic_derivation
0703 if no_DLIK==0
0704 DLIK = LIK1{2};
0705
0706 end
0707 if full_Hess,
0708 Hess = -LIK1{3};
0709
0710
0711 end
0712 if asy_Hess,
0713 [Hess] = AHessian(T,R,Q,H,Pstar,Y,DT,DYss,DOm,DH,DP,start,Z,kalman_tol,riccati_tol);
0714 end
0715 end
0716
0717
0718 if isnan(LIK)
0719 info = 45;
0720 exit_flag = 0;
0721 return
0722 end
0723 if imag(LIK)~=0
0724 likelihood = penalty;
0725 else
0726 likelihood = LIK;
0727 end
0728
0729
0730
0731
0732 if analytic_derivation
0733 if full_Hess,
0734 [lnprior, dlnprior, d2lnprior] = priordens(xparam1,BayesInfo.pshape,BayesInfo.p6,BayesInfo.p7,BayesInfo.p3,BayesInfo.p4);
0735 Hess = Hess - d2lnprior;
0736 else
0737 [lnprior, dlnprior] = priordens(xparam1,BayesInfo.pshape,BayesInfo.p6,BayesInfo.p7,BayesInfo.p3,BayesInfo.p4);
0738 end
0739 if no_DLIK==0
0740 DLIK = DLIK - dlnprior';
0741 end
0742 else
0743 lnprior = priordens(xparam1,BayesInfo.pshape,BayesInfo.p6,BayesInfo.p7,BayesInfo.p3,BayesInfo.p4);
0744 end
0745 fval = (likelihood-lnprior);
0746
0747
0748 DynareOptions.kalman_algo = kalman_algo;
0749
0750
0751 penalty = fval;
0752
0753 if analytic_derivation==0 && nargout==2,
0754 lik=lik(start:end,:);
0755 DLIK=[-lnprior; lik(:)];
0756 end