Include prior info in penalty with Bayesian estimation.
This can improve a bit optimization routines when parameter go beyond prior bounds during line search algorithms or when numerical gradient is computed.time-shift
parent
32c6c50d9c
commit
dc7c0fa74d
|
@ -141,7 +141,7 @@ function [fval,DLIK,Hess,exit_flag,ys,trend_coeff,info,Model,DynareOptions,Bayes
|
|||
% In summary, an initial call to the present function, without triggering
|
||||
% any condition, guarantees that 'penalty' is properly initialized when needed.
|
||||
|
||||
persistent penalty
|
||||
persistent penalty prior_penalty
|
||||
|
||||
% Initialization of the returned variables and others...
|
||||
fval = [];
|
||||
|
@ -180,6 +180,10 @@ end
|
|||
if ~isequal(DynareOptions.mode_compute,1) && any(xparam1<BayesInfo.lb)
|
||||
k = find(xparam1<BayesInfo.lb);
|
||||
fval = penalty+sum((BayesInfo.lb(k)-xparam1(k)).^2);
|
||||
xtemp=xparam1;
|
||||
xtemp(k)=BayesInfo.lb(k);
|
||||
prior_correction = max(0,-prior_penalty-priordens(xtemp,BayesInfo.pshape,BayesInfo.p6,BayesInfo.p7,BayesInfo.p3,BayesInfo.p4));
|
||||
fval = fval+prior_correction;
|
||||
exit_flag = 0;
|
||||
info = 41;
|
||||
if analytic_derivation,
|
||||
|
@ -192,6 +196,10 @@ end
|
|||
if ~isequal(DynareOptions.mode_compute,1) && any(xparam1>BayesInfo.ub)
|
||||
k = find(xparam1>BayesInfo.ub);
|
||||
fval = penalty+sum((xparam1(k)-BayesInfo.ub(k)).^2);
|
||||
xtemp=xparam1;
|
||||
xtemp(k)=BayesInfo.ub(k);
|
||||
prior_correction = max(0,-prior_penalty -priordens(xtemp,BayesInfo.pshape,BayesInfo.p6,BayesInfo.p7,BayesInfo.p3,BayesInfo.p4));
|
||||
fval = fval+prior_correction;
|
||||
exit_flag = 0;
|
||||
info = 42;
|
||||
if analytic_derivation,
|
||||
|
@ -749,6 +757,7 @@ DynareOptions.kalman_algo = kalman_algo;
|
|||
|
||||
% Update the penalty.
|
||||
penalty = fval;
|
||||
prior_penalty = -lnprior;
|
||||
|
||||
if analytic_derivation==0 && nargout==2,
|
||||
lik=lik(start:end,:);
|
||||
|
|
Loading…
Reference in New Issue