v4 irf.m, simult_.m: corrected problems with lags > 1

git-svn-id: https://www.dynare.org/svn/dynare/dynare_v4@721 ac1d8469-bf42-47a9-8791-bf33cf982152
time-shift
michel 2006-04-29 09:43:21 +00:00
parent c85730c108
commit 475372a52f
2 changed files with 17 additions and 22 deletions

View File

@ -1,35 +1,30 @@
function y_=irf(dr, e1, long_, drop_, replic, iorder)
function y = irf(dr, e1, long, drop, replic, iorder)
global M_ oo_ options_
old_iter = options_.periods;
options_.periods = long_+1;
temps = repmat(dr.ys,1,M_.maximum_lag);
y_ = 0;
y = 0;
if iorder == 1
y1_ = repmat(dr.ys,1,long_);
ex2_ = zeros(options_.periods,M_.exo_nbr);
ex2_(1,:) = e1';
y2_ = simult_(repmat(dr.ys,1,M_.maximum_lag),dr,ex2_,iorder);
y_ = y2_(:,M_.maximum_lag+1:end)-y1_;
y1 = repmat(dr.ys,1,long);
ex2 = zeros(long,M_.exo_nbr);
ex2(1,:) = e1';
y2 = simult_(temps,dr,ex2,iorder);
y = y2(:,M_.maximum_lag+1:end)-y1;
else
% eliminate shocks with 0 variance
i_exo_var = setdiff([1:M_.exo_nbr],find(diag(M_.Sigma_e) == 0 ));
nxs = length(i_exo_var);
ex1_ = zeros(long_+drop_+M_.maximum_lag,M_.exo_nbr);
ex2_ = ex1_;
ex1 = zeros(long+drop+M_.maximum_lag,M_.exo_nbr);
ex2 = ex1;
chol_S = chol(M_.Sigma_e(i_exo_var,i_exo_var));
for j = 1: replic
randn('seed',j);
ex1_(:,i_exo_var) = randn(long_+drop_+M_.maximum_lag,nxs)*chol_S;
ex2_ = ex1_;
ex2_(drop_+1,:) = ex2_(drop_+1,:)+e1';
y1_ = simult_(repmat(dr.ys,1,M_.maximum_lag),dr,ex1_,iorder);
y2_ = simult_(repmat(dr.ys,1,M_.maximum_lag),dr,ex2_,iorder);
y_ = y_+(y2_(:,M_.maximum_lag+drop_+1:end)-y1_(:,M_.maximum_lag+drop_+1:end));
ex1(:,i_exo_var) = randn(long+drop+M_.maximum_lag,nxs)*chol_S;
ex2 = ex1;
ex2(drop+1,:) = ex2(drop+1,:)+e1';
y1 = simult_(temps,dr,ex1,iorder);
y2 = simult_(temps,dr,ex2,iorder);
y = y+(y2(:,M_.maximum_lag+drop+1:end)-y1(:,M_.maximum_lag+drop+1:end));
end
y_=y_/replic;
y=y/replic;
end
options_.periods = old_iter;
% 01/18/02 MJ corrected for many lags
% 03/11/22 MJ input is now entire shock vector e1 (for orthogonalized IRFs)

View File

@ -3,7 +3,7 @@
function y_=simult_(y0,dr,ex_,iorder)
global M_ options_ it_
iter = size(ex_,1)-M_.maximum_lag;
iter = size(ex_,1);
nx = size(dr.ghu,2);
y_ = zeros(size(y0,1),iter+M_.maximum_lag);
y_(:,1:M_.maximum_lag) = y0;