Page 2 of 2

Re: hours

PostPosted: Mon Sep 05, 2016 7:22 am
by jpfeifer
Code: Select all
 log_A(ii+1,1)+ log_B(ii+1,1)=log_A(ii,1)+log_B(ii,1);

is not valid Matlab code. In the left you can only have one variable, not a sum.

Re: hours

PostPosted: Mon Sep 05, 2016 10:34 am
by econphd
Dear Jonannes. Thanks. It works now. I think that I did it in correct way. In steady state model block A=1 and B=1. So, I thought that log_A_0=1 and log_B_0=1 should equal to 1, not 0.


// Rebuild non-stationary time series by remultiplying with A_{t} and B_{t}

log_A_0=1; //Initialize Level of Technology at t=0;
log_B_0=1; //Initialize Level of Technology at t=0;
log_A(1,1)=log_A_0; //Level of Tech. after shock in period 1
log_B(1,1)=log_B_0; //Level of Tech. after shock in period 1


// reaccumulate the non-stationary level series

for ii=1:options_.periods
log_A(ii+1,1)=log_A(ii,1);
log_B(ii+1,1)=log_B(ii,1);
y_nonstationary(ii+1,1)=y(ii,1)+log_A(ii,1)+log_B(ii,1);
h_nonstationary(ii+1,1)=h(ii,1)+log_B(ii,1);
c_nonstationary(ii+1,1)=c(ii,1)+log_A(ii,1)+log_B(ii,1);
w_nonstationary(ii+1,1)=w(ii,1)+log_A(ii,1)+log_B(ii,1);
y_h_nonstationary(ii+1,1)=y_h(ii,1)+log_A(ii,1)+log_B(ii,1);

end

Could you please have a look and tell me if I miss anything?

Best,

Re: hours

PostPosted: Tue Sep 06, 2016 10:43 pm
by jpfeifer
I am a bit lost. If A=1 then log_A=0. But the starting point should be meaningless for the dynamics as the IRFs should be in deviations from this point. What I don't see in your code is where you update log_A on the basis of its IRF, i.e. the response to the shock.

Re: hours

PostPosted: Fri Sep 09, 2016 9:20 pm
by econphd
Dear Johannes, thank you. I checked my stationarized model again and noticed that I missed to put shocks in some equations. I do not really know how to fix what you are saying. Could you please give me an idea how to correct that?
Best,

Re: hours

PostPosted: Tue Sep 13, 2016 9:14 am
by jpfeifer
You are relying on the wrong objects. The variables you use like log_A or y are simulated series, not the IRFs. The IRFs would be e.g. log_A_eps_a and y_eps_a.

Re: hours

PostPosted: Tue Oct 04, 2016 12:04 pm
by econphd
Dear Johannes,

Sorry, I am afraid I could not understand your last answer. As I mention before, I am trying to get nonstationary hours and productivity data from this model. Then, I will estimate this simulated data using SVAR. Could you please explain your last answer slightly more and what I need to do? The other thing is that this model gives me negative values for these variables (h_nonstationary, y_h_nonstationary) but I need positive values since I will log the data when I estimate it in SVAR. So, I feel that I made a mistake somewhere or missing somethings? I would really appreciate if you have any suggestions.

Best

Re: hours

PostPosted: Tue Oct 04, 2016 8:38 pm
by jpfeifer
Sorry, I was thinking about IRFS, not simulations. I guess you are looking for something like
Code: Select all
var c k y B h A y_h i w r g_A g_B;
varexo eps_a eps_b;

parameters delta psi alpha beta ;

% Parameter Values

beta = 0.95;       
psi = 0.33;         
alpha = 0.68;         
delta = 0.05;





Model;   

y = k(-1)^(1-alpha)*exp(eps_a+eps_b)^(alpha-1)*h^alpha;           
g_A=eps_a;
g_B=eps_b;
log(A)=log(A(-1)) + eps_a;                                                                     
log(B)=log(B(-1)) + eps_b;                                                                     
r = (1-alpha)*(y/k(-1))*exp(eps_a+eps_b);   
w= alpha*y/h;                                           
c^(-1)= exp(eps_a(+1)*eps_b(+1))^(-1)*beta*c(+1)^(-1)*(1+r(+1)-delta);   
h^(1/psi)*B^(-1) = c^(-1)*w;                                             
y_h = y/h;                                                         
c + k = y + (1-delta)*k(-1)*exp(eps_a+eps_b)^(-1);             
i = y-c;


end;

steady_state_model;
A=1;
B=1;
r=(1/beta)-(1-delta);
y_k=r/(1-alpha);
k_y=(1-alpha)/r;
i_y=(1/y_k)*delta;
c_y=1-i_y;
h= (alpha*1/c_y)^(psi/(1+psi));
k=((h^alpha)/y_k)^(1/alpha);
y=k^(1-alpha)*h^alpha;
c=c_y*y;
i=i_y*y;
w=alpha*(y/h);
y_h =y/h;
end;

shocks;
var eps_a; stderr 1;
var eps_b; stderr 1;
end;
resid(1);
steady;
check;


stoch_simul(order=1,periods=1000,drop=960) y h c w y_h i g_A g_B;


// Rebuild non-stationary time series by remultiplying with A_{t} and B_{t}

log_A_0=0; //Initialize Level of Technology at t=0;
log_B_0=0; //Initialize Level of Technology at t=0;
log_A(1,1)=log_A_0 ; //Level of Tech. after shock in period 1
log_B(1,1)=log_B_0; //Level of Tech. after shock in period 1

// reaccumulate the non-stationary level series

for ii=1:options_.periods
    log_A(ii+1,1)=log_A(ii,1)+g_A(ii,1);
    log_B(ii+1,1)=log_B(ii,1)+g_B(ii,1);;
    y_nonstationary(ii+1,1)=y(ii,1)+log_A(ii,1)+log_B(ii,1);
    h_nonstationary(ii+1,1)=h(ii,1)+log_B(ii,1);
    c_nonstationary(ii+1,1)=c(ii,1)+log_A(ii,1)+log_B(ii,1);
    w_nonstationary(ii+1,1)=w(ii,1)+log_A(ii,1)+log_B(ii,1);
    y_h_nonstationary(ii+1,1)=y_h(ii,1)+log_A(ii,1)+log_B(ii,1);
end

Re: hours

PostPosted: Wed Oct 05, 2016 8:29 pm
by econphd
Dear Johannes, yes. this is what I look for but this model still gives me negative values. When I try to estimate this data in SVAR, it gives me this error in below:

Error using bquah (line 65)
Problem with identifying assumptions

So, I thought this error is because of the negative values.
1. Do you think I made a mistake when I stationarized the model or the problem comes from another thing?
In addition, I do not know the reason but drop function does not work in my model. Is there any way to fix that?
Best

Re: hours

PostPosted: Thu Oct 06, 2016 6:16 am
by jpfeifer
You need to provide more detailed information. What do you mean with "negative values" and what does it mean when you write
Error using bquah (line 65)
Problem with identifying assumptions

As this is not a Dynare function I am not familiar with what you are doing.

Re: hours

PostPosted: Thu Oct 06, 2016 9:08 am
by econphd
Dear Johannes,
Regarding the negatives values, the simulated data has negatives values that I obtained from my model in Dynare such as, y_h_nonstationary and h_nonstationary..
-4.97906650373955
-4.17515167608243
-5.79239232538625
-5.29103086176507
-7.04016453180724
-5.39007616179570
-4.04444902163077
-6.79548020288710
-6.55033359569942
-8.33860835239468
........

I thought that this simulated data does not work in Matlab since it has negatives values and it gives me that error in below:

Error using bquah (line 65)
Problem with identifying assumptions

I mean I have a SVAR model using long run restrictions in Matlab. I am running my simulated data in this model and receiving this error in above. in this SVAR model, I need to log the data but I think I cannot log the data which includes negatives values. so, it gave me this error.

I am trying to figure out the problem now. I hope you can give me some suggestions.
Best

Re: hours

PostPosted: Fri Oct 07, 2016 3:56 pm
by jpfeifer
1. If you want log data, then you should model and simulate log data.
2. With linear approximations, you cannot prevent negative values. But you can make them a lot less likely. You currently have a shock process with a huge standard deviation. No wonder you go over any bound.
3. I don't know which problem arises with your identifying assumption.

Re: hours

PostPosted: Tue Nov 01, 2016 5:57 pm
by econphd
Dear Johannes,

1. You meant I need to work with log linearize model. I did not linearize my model but I want Dynare to log linearize it (Thats why I used exp()). In the paper that I am following, they did: "we obtain a system of rational expectations equations that characterizes the equilibrium dynamics of the endogenous variables in the neighborhood of the steady state. It can be solved by standard log-linearization methods, e.g., King, Plosser, and Rebelo (1988), or Sims (2002)..." I thought this is the same what I did.

2. stoch_simul(order=1,periods=1000,drop=960)--- Drop function does not work in dynare. Am I missing something? (I only need 40 years simulated data to estimate it in SVAR. Then, obtain IRFs.)

I would really appreciate if you give me some suggestions.
Best

Re: hours

PostPosted: Wed Nov 02, 2016 8:49 am
by jpfeifer
1. But you did not use the exp() for most of the variables like y.
2. The drop option works exactly as "advertised" in the manual:
Number of points (burnin) dropped at the beginning of simulation before computing
the summary statistics. Note that this option does not affect the simulated series
stored in oo .endo simul and the workspace. Here, no periods are dropped.

Re: hours

PostPosted: Fri Nov 04, 2016 6:24 pm
by econphd
Dear Johannes,

Thanks for that. I can use exp(). However, I also read in guideline in below:

Remark 17 (Dynare’s loglinear option)
While Dynare by default only computes linearizations, it also has the option loglinear
in order to perform log-linearizations at order=1. When using this option, all displayed
results will be for the logged variables, not the original ones.

So, this is a standard log linearization methods. However, after I used this function (loglinear) in my model, the Dynare gave me this errow in below:

You are attempting to simulate/estimate a loglinear approximation of a model, but
the steady state level of the following variables is not strictly positive:
- g_A (00)
- g_B (00)
Undefined function or variable 'isestimation'.

Error in resol (line 121)
if isestimation()

Error in stoch_simul (line 88)
[oo_.dr,info,M_,options_,oo_] = resol(0,M_,options_,oo_);

Error in modfile (line 161)
info = stoch_simul(var_list_);

Error in dynare (line 180)
evalin('base',fname) ;

My question is that I can only use this option when I estimate the model? or if it is okay using it if I simulate the model? If yes for the later one, I would really appreciate if you could give me some suggestion to correct it.

Best

Re: hours

PostPosted: Sat Nov 05, 2016 8:45 am
by jpfeifer
No, you can use that option also for simulation, but it will log ALL variables. Thus, you must not have any variable with 0 or negative steady state. Assuring that can be cumbersome. See the examples at https://github.com/DynareTeam/dynare/tree/master/tests/loglinear