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-bf33cf982152time-shift
parent
c85730c108
commit
475372a52f
37
matlab/irf.m
37
matlab/irf.m
|
@ -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)
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue