Fixes to avoid error on non-stationary variables not observed.

This works on a rather complex model, with 4 RW trends and 80 equations (QUEST III). Hopefully ...

git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@2141 ac1d8469-bf42-47a9-8791-bf33cf982152
time-shift
ratto 2008-10-09 07:21:43 +00:00
parent b3c8df4aec
commit 2ff703ca40
2 changed files with 21 additions and 4 deletions

View File

@ -245,7 +245,7 @@ function [fval,cost_flag,ys,trend_coeff,info] = DsgeLikelihood(xparam1,gend,data
[QQ,RR,EE] = qr(Z*ST(:,1:nk),0);
k = find(abs(diag(RR)) < 1e-8);
if length(k) > 0
[k1,junk] = find(EE(:,k));
k1 = find(ismember(EE,k)); %find(EE(:,k));
% [junk,k1] = max(abs(v(:,k)));
dd =ones(nk,1);
dd(k1) = zeros(length(k1),1);

View File

@ -175,10 +175,12 @@ function [alphahat,etahat,epsilonhat,ahat,SteadyState,trend_coeff,aK,T,R,P,PK,d,
Z = QT(mf,:);
R1 = QT'*R;
[u,s,v]=svd(Z*ST(:,1:nk),0);
k = find(abs(diag(s)) < 1e-8);
% [u,s,v]=svd(Z*ST(:,1:nk),0);
[QQ,RR,EE] = qr(Z*ST(:,1:nk),0);
k = find(abs(diag(RR)) < 1e-8);
if length(k) > 0
[junk,k1] = max(abs(v(:,k)));
k1 = find(ismember(EE,k)); %find(EE(:,k));
% [junk,k1] = max(abs(v(:,k)));
dd =ones(nk,1);
dd(k1) = zeros(length(k1),1);
Pinf(1:nk,1:nk) = diag(dd);
@ -280,3 +282,18 @@ function [alphahat,etahat,epsilonhat,ahat,SteadyState,trend_coeff,aK,T,R,P,PK,d,
end
end
end
aE=T*alphahat;
global ss_
ss_.T=T;
ss_.R=R;
ss_.a=alphahat(:,end);
ss_.a1=alphahat(:,1);
ss_.ss=SteadyState(oo_.dr.order_var);
for j= (length(ss_.ss)+1):length(T),
ss_.ss(j)=ss_.ss(find(T(j,:)));
end
ss_.etahat=etahat;
% ss_.af=af;
ss_.aE=aE;