Page 1 of 1

Define macro-variable depending on parameter value

PostPosted: Wed Feb 26, 2014 4:54 pm
by htxm1586
I am running second order approximation and letting dynare to calculate unconditional utility. I'm using CRRA utility, specifying utility function depends on whether risk aversion parameter equals 1 or not. I'm trying to write the following code:

...
parameters rho
rho=1;
@#define logutility=rho
...
model;
@#if logutility
U=log(exp(c)-exp((1+epsilon)*h)/(1+epsilon))+beta*U(+1);
@#else
U=(exp(c)-exp((1+epsilon)*h)/(1+epsilon))^(1-rho)/(1-rho)+beta*U(+1);
@#endif
end;
...

However, Dynare returns msg "unknown variable rho". To my understanding, I cannot specify "@#define logutility=rho" because rho is a parameter, not a macro-variable, so it cannot show up within "@#define".

I wonder if there is a way to circumvent this problem?

Re: Define macro-variable depending on parameter value

PostPosted: Sun Mar 02, 2014 11:40 am
by jpfeifer
Try the following
Code: Select all
parameters rho_par;

@#define rho=1

rho_par=rho;
...
model;
@#if rho==1
U=log(exp(c)-exp((1+epsilon)*h)/(1+epsilon))+beta*U(+1);
@#else
U=(exp(c)-exp((1+epsilon)*h)/(1+epsilon))^(1-
rho_par)/(1-
rho_par)+beta*U(+1);
@#endif
end;


You directly set rho for the preprocessor in the second line. From there, the value is assigned to the parameter rho_par, which you can then access.

This follows the example in agtrend.mod.