v4: merge changes to dynare_estimation.m

git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@1183 ac1d8469-bf42-47a9-8791-bf33cf982152
time-shift
michel 2007-02-11 12:48:41 +00:00
parent 5fa4cb9eac
commit 4e1122f014
9 changed files with 41 additions and 25 deletions

View File

@ -113,7 +113,7 @@ while newRank & t < smpl
% options_.diffuse_d=i; %this is buggy
% end
% end new terminiation criteria by M. Ratto
else
elseif Fstar(i,t) > crit
%% Note that : (1) rank(Pinf)=0 implies that Finf = 0, (2) outside this loop (when for some i and t the condition
%% rank(Pinf)=0 is satisfied we have P = Pstar and F = Fstar and (3) Finf = 0 does not imply that
%% rank(Pinf)=0. [stéphane,11-03-2004].

View File

@ -55,8 +55,7 @@ while rank(Pinf(:,:,t+1),crit1) & t<smpl
iFinf(:,:,t) = inv(Pinf(mf,mf,t));
Kinf(:,:,t) = T*Pinf(:,mf,t)*iFinf(:,:,t);
a(:,t+1) = T*a(:,t) + Kinf(:,:,t)*v(:,t);
aK(1,:,t+1) = a(:,t+1);
for jnk=2:nk,
for jnk=1:nk,
aK(jnk,:,t+jnk) = T^(jnk-1)*a(:,t+1);
end
Linf(:,:,t) = T - Kinf(:,:,t)*Z;
@ -85,8 +84,7 @@ while notsteady & t<smpl
K(:,:,t) = T*P(:,mf,t)*iF(:,:,t);
L(:,:,t) = T-K(:,:,t)*Z;
a(:,t+1) = T*a(:,t) + K(:,:,t)*v(:,t);
aK(1,:,t+1) = a(:,t+1);
for jnk=2:nk,
for jnk=1:nk,
aK(jnk,:,t+jnk) = T^(jnk-1)*a(:,t+1);
end
P(:,:,t+1) = T*P(:,:,t)*transpose(T)-T*P(:,mf,t)*transpose(K(:,:,t)) + QQ;
@ -106,8 +104,7 @@ while t<smpl
t=t+1;
v(:,t) = Y(:,t) - a(mf,t) - trend(:,t);
a(:,t+1) = T*a(:,t) + K_s*v(:,t);
aK(1,:,t+1) = a(:,t+1);
for jnk=2:nk,
for jnk=1:nk,
aK(jnk,:,t+jnk) = T^(jnk-1)*a(:,t+1);
end
end

View File

@ -26,17 +26,24 @@ v = zeros(pp,smpl);
a = zeros(mm,smpl+1);
a1 = a;
aK = zeros(nk,mm,smpl+nk);
Fstar = zeros(pp,smpl);
Finf = zeros(pp,smpl);
if isempty(options_.diffuse_d),
smpl_diff = 1;
else
smpl_diff=rank(Pinf1);
end
Fstar = zeros(pp,smpl_diff);
Finf = zeros(pp,smpl_diff);
Ki = zeros(mm,pp,smpl);
Li = zeros(mm,mm,pp,smpl);
Linf = zeros(mm,mm,pp,smpl);
L0 = zeros(mm,mm,pp,smpl);
Kstar = zeros(mm,pp,smpl);
Linf = zeros(mm,mm,pp,smpl_diff);
L0 = zeros(mm,mm,pp,smpl_diff);
Kstar = zeros(mm,pp,smpl_diff);
P = zeros(mm,mm,smpl+1);
P1 = P;
Pstar = zeros(spstar(1),spstar(2),smpl+1); Pstar(:,:,1) = Pstar1;
Pinf = zeros(spinf(1),spinf(2),smpl+1); Pinf(:,:,1) = Pinf1;
Pstar = zeros(spstar(1),spstar(2),smpl_diff+1); Pstar(:,:,1) = Pstar1;
Pinf = zeros(spinf(1),spinf(2),smpl_diff+1); Pinf(:,:,1) = Pinf1;
Pstar1 = Pstar;
Pinf1 = Pinf;
crit = options_.kalman_tol;
@ -106,7 +113,7 @@ while newRank & t < smpl
% options_.diffuse_d=i; % this line is buggy!
% end
% end new terminiation criteria by M. Ratto
else
elseif Fstar(i,t) > crit
%% Note that : (1) rank(Pinf)=0 implies that Finf = 0, (2) outside this loop (when for some i and t the condition
%% rank(Pinf)=0 is satisfied we have P = Pstar and F = Fstar and (3) Finf = 0 does not imply that
%% rank(Pinf)=0. [stéphane,11-03-2004].
@ -149,8 +156,8 @@ while notsteady & t<smpl
P1(:,:,t) = P(:,:,t);
for i=1:pp
v(i,t) = Y(i,t) - a(mf(i),t) - trend(i,t);
Fi(i,t) = P(mf(i),mf(i),t);
Ki(:,i,t) = P(:,mf(i),t) + H(i,i);
Fi(i,t) = P(mf(i),mf(i),t)+H(i,i);
Ki(:,i,t) = P(:,mf(i),t);
if Fi(i,t) > crit
Li(:,:,i,t) = eye(mm)-Ki(:,i,t)*Z(i,:)/Fi(i,t);
a(:,t) = a(:,t) + Ki(:,i,t)*v(i,t)/Fi(i,t);
@ -253,3 +260,4 @@ else
end
epsilonhat = Y-alphahat(mf,:)-trend;
a=a(:,1:end-1);

View File

@ -28,13 +28,13 @@ function [fval,cost_flag,ys,trend_coeff,info] = DsgeLikelihood(xparam1,gend,data
return;
end
Q = M_.Sigma_e;
H = M_.H;
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);
@ -87,6 +87,7 @@ function [fval,cost_flag,ys,trend_coeff,info] = DsgeLikelihood(xparam1,gend,data
% M_.params(estim_params_.param_vals(i,1)) = xparam1(i+offset);
%end
M_.Sigma_e = Q;
M_.H = H;
%------------------------------------------------------------------------------
% 2. call model setup & reduction program
%------------------------------------------------------------------------------
@ -150,7 +151,7 @@ function [fval,cost_flag,ys,trend_coeff,info] = DsgeLikelihood(xparam1,gend,data
%------------------------------------------------------------------------------
% 4. Likelihood evaluation
%------------------------------------------------------------------------------
if estim_params_.nvn
if any(any(H ~= 0)) % should be replaced by a flag
if options_.kalman_algo == 1
LIK = DiffuseLikelihoodH1(T,R,Q,H,Pinf,Pstar,data,trend,start);
if isinf(LIK) & ~estim_params_.ncn %% The univariate approach considered here doesn't

View File

@ -87,6 +87,7 @@ function [fval,llik,cost_flag,ys,trend_coeff,info] = DsgeLikelihood_hh(xparam1,g
% M_.params(estim_params_.param_vals(i,1)) = xparam1(i+offset);
%end
M_.Sigma_e = Q;
M_.H = H;
%------------------------------------------------------------------------------
% 2. call model setup & reduction program
%------------------------------------------------------------------------------
@ -152,7 +153,7 @@ function [fval,llik,cost_flag,ys,trend_coeff,info] = DsgeLikelihood_hh(xparam1,g
%------------------------------------------------------------------------------
% 4. Likelihood evaluation
%------------------------------------------------------------------------------
if estim_params_.nvn
if any(any(H ~= 0))
if options_.kalman_algo == 1
[LIK, lik] = DiffuseLikelihoodH1(T,R,Q,H,Pinf,Pstar,data,trend,start);
if isinf(LIK) & ~estim_params_.ncn %% The univariate approach considered here doesn't

View File

@ -70,7 +70,7 @@ function [alphahat,etahat,epsilonhat,ahat,SteadyState,trend_coeff,aK] = DsgeSmoo
% -----------------------------------------------------------------------------
% 4. Kalman smoother
% -----------------------------------------------------------------------------
if estim_params_.nvn
if any(any(H ~= 0)) % should be replaced by a flag
if options_.kalman_algo == 1
[alphahat,epsilonhat,etahat,ahat,aK] = DiffuseKalmanSmootherH1(T,R,Q,H,Pinf,Pstar,Y,trend,nobs,np,smpl,mf);
if all(alphahat(:)==0)

View File

@ -3,8 +3,6 @@ function dynare_estimation(var_list_)
global M_ options_ oo_ estim_params_
global bayestopt_ dsge_prior_weight
% temporary fix until M_.H is initialized by the parser
M_.H = [];
options_.varlist = var_list_;
options_.lgyidx2varobs = zeros(size(M_.endo_names,1),1);

View File

@ -13,7 +13,7 @@ function global_initialization()
options_.slowc = 1;
options_.timing = 0;
options_.gstep = 1e-2;
options_.debug = 0
options_.debug = 0;
options_.initval_file = 0;
options_.Schur_vec_tol = 1e-8; % used to find nonstationary variables
% in Schur decomposition of the
@ -134,4 +134,7 @@ function global_initialization()
oo_.endo_simul = [];
oo_.dr = [];
oo_.exo_det_steady_state = [];
oo_.exo_det_simul = [];
oo_.exo_det_simul = [];
% Variance matrix for measurement errors
M_.H = 0;

View File

@ -38,6 +38,10 @@ function [xparam1,estim_params_,bayestopt_,lb,ub]=set_prior(estim_params_)
bayestopt_.name = cellstr(M_.exo_names(estim_params_.var_exo(:,1),:));
end
if nvn
if M_.H == 0
nvarobs = size(options_.varobs,1);
M_.H = zeros(nvarobs,nvarobs);
end
for i=1:nvn
estim_params_.var_endo(i,1) = strmatch(deblank(M_.endo_names(estim_params_.var_endo(i,1),:)),deblank(options_.varobs),'exact');
end
@ -69,6 +73,10 @@ function [xparam1,estim_params_,bayestopt_,lb,ub]=set_prior(estim_params_)
cellstr(M_.exo_names(estim_params_.corrx(:,2),:))))));
end
if ncn
if M_.H == 0
nvarobs = size(options_.varobs,1);
M_.H = zeros(nvarobs,nvarobs);
end
xparam1 = [xparam1; estim_params_.corrn(:,3)];
ub = [ub; max(min(estim_params_.corrn(:,5),1),-1)];
lb = [lb; max(min(estim_params_.corrn(:,4),1),-1)];