Correction of a bug related to the penalty on dsge_prior_weight.

git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@1378 ac1d8469-bf42-47a9-8791-bf33cf982152
time-shift
adjemian 2007-07-26 08:50:38 +00:00
parent 9549b0dd42
commit a1c0424585
1 changed files with 8 additions and 11 deletions

View File

@ -12,7 +12,7 @@ ns = nvx+nvn+ncx+ncn;
NumberOfObservedVariables = size(options_.varobs,1);
NumberOfLags = options_.varlag;
k = NumberOfObservedVariables*NumberOfLags ;
NumberOfParameters = NumberOfObservedVariables*NumberOfLags ;
mYY = evalin('base', 'mYY');
mYX = evalin('base', 'mYX');
@ -23,11 +23,8 @@ fval = [];
cost_flag = [];
ys = [];
trend_coeff = [];
xparam1_test = xparam1;
cost_flag = 1;
nobs = size(options_.varobs,1);
if options_.mode_compute ~= 1 & any(xparam1 < bayestopt_.lb)
k = find(xparam1 < bayestopt_.lb);
@ -65,8 +62,8 @@ M_.Sigma_e = Q;
%% Weight of the dsge prior:
dsge_prior_weight = M_.params(strmatch('dsge_prior_weight',M_.param_names));
if dsge_prior_weight<(k+NumberOfObservedVariables)/nobs;
fval = bayestopt_.penalty*min(1e3,(k+NumberOfObservedVariables)/nobs-dsge_prior_weight);
if dsge_prior_weight<(NumberOfParameters+NumberOfObservedVariables)/gend;
fval = bayestopt_.penalty*min(1e3,(NumberOfParameters+NumberOfObservedVariables)/gend-dsge_prior_weight);
info = 51
cost_flag = 0;
return;
@ -113,7 +110,7 @@ for lag = 1:NumberOfLags
tmp = T*tmp;
TheoreticalAutoCovarianceOfTheObservedVariables(:,:,lag+1) = tmp(mf,mf);
end
GYX = zeros(NumberOfObservedVariables,k);
GYX = zeros(NumberOfObservedVariables,NumberOfParameters);
for i=1:NumberOfLags
GYX(:,(i-1)*NumberOfObservedVariables+1:i*NumberOfObservedVariables) = ...
TheoreticalAutoCovarianceOfTheObservedVariables(:,:,i+1);
@ -155,12 +152,12 @@ if ~isinf(dsge_prior_weight)
NumberOfObservedVariables*NumberOfLags ...
+1-(1:NumberOfObservedVariables)')));
lik = .5*NumberOfObservedVariables*log(det(dsge_prior_weight*gend*GXX+mXX)) ...
+ .5*((dsge_prior_weight+1)*gend-k)*log(det((dsge_prior_weight+1)*gend*SIGMAu)) ...
+ .5*((dsge_prior_weight+1)*gend-NumberOfParameters)*log(det((dsge_prior_weight+1)*gend*SIGMAu)) ...
- .5*NumberOfObservedVariables*log(det(dsge_prior_weight*gend*GXX)) ...
- .5*(dsge_prior_weight*gend-k)*log(det(dsge_prior_weight*gend*(GYY-GYX*inv(GXX)*GYX'))) ...
- .5*(dsge_prior_weight*gend-NumberOfParameters)*log(det(dsge_prior_weight*gend*(GYY-GYX*inv(GXX)*GYX'))) ...
+ .5*NumberOfObservedVariables*gend*log(2*pi) ...
- .5*log(2)*NumberOfObservedVariables*((dsge_prior_weight+1)*gend-k) ...
+ .5*log(2)*NumberOfObservedVariables*(dsge_prior_weight*gend-k) ...
- .5*log(2)*NumberOfObservedVariables*((dsge_prior_weight+1)*gend-NumberOfParameters) ...
+ .5*log(2)*NumberOfObservedVariables*(dsge_prior_weight*gend-NumberOfParameters) ...
- prodlng1 + prodlng2;
else % codé par SM (sûrement pas exact... Que font ici les moments empiriques ?).
tmp1 = GYX;