tow or more shocks in IRFs at the same time

This forum is closed. You can read the posts but cannot write. We have migrated the forum to a new location where you will have to reset your password.
Forum rules
This forum is closed. You can read the posts but cannot write. We have migrated the forum to a new location (https://forum.dynare.org) where you will have to reset your password.

tow or more shocks in IRFs at the same time

Postby f_fkm21 » Sat May 13, 2017 9:43 am

Dear all,
I have provided the dynare code for Iran economy, and i exactly want tow or more shocks in IRFs at the same time.
How can i do that?
please guide me
Best regard
fhossein
f_fkm21
 
Posts: 5
Joined: Sat May 13, 2017 9:30 am

Re: tow or more shocks in IRFs at the same time

Postby jpfeifer » Sun May 14, 2017 10:27 am

------------
Johannes Pfeifer
University of Cologne
https://sites.google.com/site/pfeiferecon/
jpfeifer
 
Posts: 6940
Joined: Sun Feb 21, 2010 4:02 pm
Location: Cologne, Germany

Re: tow or more shocks in IRFs at the same time

Postby f_fkm21 » Sun May 14, 2017 3:44 pm


thanks a lot!1 i want to know whether i have to change in the part of model , indeed the exogenous process of model must be changed??
f_fkm21
 
Posts: 5
Joined: Sat May 13, 2017 9:30 am

Re: tow or more shocks in IRFs at the same time

Postby jpfeifer » Sun May 14, 2017 7:12 pm

You need to use the part from line 130 onwards for your model
Code: Select all
//initialize IRF generation
initial_condition_states = repmat(oo_.dr.ys,1,M_.maximum_lag);
shock_matrix = zeros(options_.irf,M_.exo_nbr); %create shock matrix with number of time periods in colums
// set shocks for pure news
shock_matrix(1,strmatch('eps_z_news',M_.exo_names,'exact')) = 1; %set news shock to 1 (use any shock size you want)
shock_matrix(1+8,strmatch('eps_z_surprise',M_.exo_names,'exact')) = -1; %8 periods later use counteracting shock of -1
y2 = simult_(initial_condition_states,oo_.dr,shock_matrix,1);
y_IRF = y2(:,M_.maximum_lag+1:end)-repmat(oo_.dr.ys,1,options_.irf); %deviation from steady state

and adjust the shock_matrix to what you want.
------------
Johannes Pfeifer
University of Cologne
https://sites.google.com/site/pfeiferecon/
jpfeifer
 
Posts: 6940
Joined: Sun Feb 21, 2010 4:02 pm
Location: Cologne, Germany

Re: tow or more shocks in IRFs at the same time

Postby f_fkm21 » Mon May 15, 2017 10:10 am

Thanks for your feedback! I have changed the "shock_matrix" but i could not see to change on the results! Indeed, i don't know what thing of this function must be changed?!
f_fkm21
 
Posts: 5
Joined: Sat May 13, 2017 9:30 am

Re: tow or more shocks in IRFs at the same time

Postby jpfeifer » Mon May 15, 2017 7:10 pm

What do you mean? did you plot the results from
Code: Select all
y_IRF
?
------------
Johannes Pfeifer
University of Cologne
https://sites.google.com/site/pfeiferecon/
jpfeifer
 
Posts: 6940
Joined: Sun Feb 21, 2010 4:02 pm
Location: Cologne, Germany

Re: tow or more shocks in IRFs at the same time

Postby f_fkm21 » Tue May 16, 2017 7:47 am

yes I mean y_IRF!! I changed your code but i could not distinguish when we want to compute IRFs for two shocks "eps_z_surprise" and " eps_z_news", which the function or command in your code must be changed?
How can we recognize that the endogenous variables what response to two shocks at same time and different time?
Thanks for replay
Attachments
example1.mod
(2.07 KiB) Downloaded 60 times
f_fkm21
 
Posts: 5
Joined: Sat May 13, 2017 9:30 am

Re: tow or more shocks in IRFs at the same time

Postby jpfeifer » Thu May 18, 2017 10:03 am

The only thing you were supposed to change was the setting of the shock matrix. You can only set one shock at a time. In your case, you should have used
Code: Select all
shock_matrix(1:2,strmatch('e',M_.exo_names,'exact')) = 2; %set news shock to 1 (use any shock size you want)
shock_matrix(1:2,strmatch('a',M_.exo_names,'exact')) = 2
shock_matrix(1,strmatch('a',M_.exo_names,'exact')) = 1; %8 periods later use counteracting shock of -1

This sets e for the first two period to 2, a for the first two periods to 2 and then resets e in the first period to 1. In contrast, your
Code: Select all
shock_matrix(1:2,strmatch('e',M_.exo_names,'exact'),strmatch('a',M_.exo_names,'exact')) = 2;

was creating a three-dimensional array. You should have used something along the lines of
Code: Select all
var y c k l z r w i;
varexo e a;


parameters beta psi sigma delta alpha rhoz gammax n x i_y k_y;

% set parameter values
sigma=1;                % risk aversion
alpha= 0.33;            % capital share
i_y=0.25;               % investment-output ration
k_y=10.4;               % capital-output ratio
x=0.0055;               % technology growth (per capita output growth)
n=0.0027;               % population growth
rhoz=0.97;              %technology autocorrelation base on linearly detrended Solow residual

model;
exp(c)^(-sigma)=beta/gammax*exp(c(+1))^(-sigma)* (alpha*exp(z(+1))*(exp(k)/exp(l(+1)))^(alpha-1)+(1-delta));
psi*exp(c)^sigma*1/(1-exp(l))=exp(w);
gammax*exp(k)=(1-delta)*exp(k(-1))+exp(i);
exp(y)=exp(i)+exp(c);
exp(y)=exp(z)*exp(k(-1))^alpha*exp(l)^(1-alpha);
exp(w)=(1-alpha)*exp(y)/exp(l);
r=4*alpha*exp(y)/exp(k(-1));
z=rhoz*z(-1)+e + a;
end;

steady_state_model;
    gammax=(1+n)*(1+x);
    delta=i_y/k_y-x-n-n*x; 
    beta=gammax/(alpha/k_y+(1-delta));
    l_ss=0.33;
    k_ss=((1/beta*gammax-(1-delta))/alpha)^(1/(alpha-1))*l_ss;
    i_ss=(x+n+delta+n*x)*k_ss;
    y_ss=k_ss^alpha*l_ss^(1-alpha);
    c_ss=y_ss-i_ss;
    psi=(1-alpha)*(k_ss/l_ss)^alpha*(1-l_ss)/c_ss^sigma;
    i=log(i_ss);
    w=log((1-alpha)*y_ss/l_ss);
    r=4*alpha*y_ss/k_ss;
    y=log(y_ss);
    k=log(k_ss);
    c=log(c_ss);
    l=log(l_ss);
    z=0;
end;

shocks;
    var e=1;
    var a=1;
end;

steady;
check;

stoch_simul(order=1,irf=20)y z;
initial_condition_states = repmat(oo_.dr.ys,1,M_.maximum_lag);
shock_matrix = zeros(options_.irf,M_.exo_nbr); %create shock matrix with number of time periods in columns

shock_matrix(1:2,strmatch('e',M_.exo_names,'exact')) = 2;
shock_matrix(1:2,strmatch('a',M_.exo_names,'exact')) = 2
shock_matrix(1,strmatch('a',M_.exo_names,'exact')) = 1;

y2 = simult_(initial_condition_states,oo_.dr,shock_matrix,1);
y_IRF = y2(:,M_.maximum_lag+1:end)-repmat(oo_.dr.ys,1,options_.irf);


But given that your two shocks in the mod-file are observationally equivalent, you cannot distinguish them in any case.
------------
Johannes Pfeifer
University of Cologne
https://sites.google.com/site/pfeiferecon/
jpfeifer
 
Posts: 6940
Joined: Sun Feb 21, 2010 4:02 pm
Location: Cologne, Germany

Re: tow or more shocks in IRFs at the same time

Postby f_fkm21 » Sat May 20, 2017 12:36 pm

thanks a lot for your explain!
f_fkm21
 
Posts: 5
Joined: Sat May 13, 2017 9:30 am


Return to Dynare help

Who is online

Users browsing this forum: Google [Bot] and 12 guests