Predetermined variable declaration alternatives

Hello,

In a deterministic setup, could you please help me understand why I get close but different numerical results when I use the predetermined_variables command or not (see my example below).

Thanks a lot for your help.

Best regards,
Thibaut

Formulation 1:

[…]

model;
# I = K(-1)((q-1)/((1+a)b))^(1/a);
# w = alpha
K(-1)^(alpha-1)+a
b*(I/K(-1))^(a+1);
K = K(-1) + (I-delta*K(-1))dt;
q(+1) = q + (r+delta)qdt - w
dt;
end;

[…]

simul(periods=100);

Formulation 2

[…]

predetermined_variables K;

[…]

model;
# I = K*((q-1)/((1+a)b))^(1/a);
# w = alpha
K^(alpha-1)+ab(I/K)^(a+1);
K(+1) = K + (I-delta*K)dt;
q(+1) = q + (r+delta)qdt - w
dt;
end;

[…]

simul(periods=100);

Is the difference bigger than the termination criterion of the perfect foresight solver? If yes, I would need to see the codes.

Thank you Johannes.

Please find the code below.

I have added the options tolx=1e-12 and tolf=1e-12 in the simul command but the results are exactly the same. The second value for K for example is 20.916777 in the first formulation, and 20.892891 in the second.

I was expected both formulations to be strictly equivalent. Are the computations not strictly the same? Could you please explain me why?

Thanks a lot
Thibaut

var K q;
//predetermined_variables K;

parameters
a b delta r alpha dt
K_inf q_inf;

a=1;
b=1;
delta = 0.023;
alpha = 0.33;
r = 0.01;
dt=1;
q_inf = 1+(1+a)*b*delta^a;
K_inf = (((r+delta)*q_inf-a*b*delta^(a+1))/alpha)^(1/(alpha-1));

// Model block without predetermined_variables statement
model;
# I = K(-1)*((q-1)/((1+a)*b))^(1/a);
# w = alpha*K(-1)^(alpha-1)+a*b*(I/K(-1))^(a+1);
K = K(-1) + (I-delta*K(-1))*dt;
q(+1) = q + (r+delta)*q*dt - w*dt;
end;

// Model block with predetermined_variables statement
/*
model;
# I = K*((q-1)/((1+a)*b))^(1/a);
# w = alpha*K^(alpha-1)+a*b*(I/K)^(a+1);
K(+1) = K + (I-delta*K)*dt;
q(+1) = q + (r+delta)*q*dt - w*dt;
end;\
*/

steady_state_model;
K = K_inf;
q = q_inf;
end;

initval;
K = 20;
q = q_inf;
end;

endval;
K = K_inf;
q = q_inf;
end;

check;

simul(periods=100, tolx=1e-12, tolf=1e-12, no_homotopy);

rplot K;
rplot q;

dynatype(K_saddle_path_values) K;
dynatype(q_saddle_path_values) q;

This is a bug. You can keep track of it at https://github.com/DynareTeam/dynare/issues/1602

Thank you!

Hello,

I can read in the NEWS file that this bug has been corrected in version 4.5.5.

However, I have downloaded version 4.5.6 (log says “Starting Dynare (version 4.5.6).”) and I experience exactly the same bug with the exact same values for K in the example above (20.916777 versus 20.892891).

Could you please help me understand?

Thanks a lot !

Regards,

Thibaut

Indeed, it seems it was only fixed in the unstable version. See https://git.dynare.org/Dynare/dynare/issues/1602

Thank you Johannes.
I saw Houtan’s comment saying it will be in 4.5.7.
Do you have any broad idea of when will 4.5.7 be released?

Hopefully this or next week.