# Interpretation (correctness) of forecast

Hi,
I’m trying to produce a deterministic path using the forecast command together with the histval block.

When I compute the forecast (iteration on the state-space model) directly I get different results for many variables than those produced by “forecast”.

To be sure I use the same iteration to produce IRFs and the results are identical to the IRFs produced by Dynare. I take from that that the representation of the state space (ie A) is correct.

Absent shocks, is it correct that Dynare generates a forecast starting from the initial condition Y_0 by simply iterating the following?

``````Y(1)=Y_0;
for cnt=2:horizon
Y(cnt)=A*Y(cnt-1);
end;
``````

where A is the transition matrix that can generate the correct IRFs mentioned above.

Note that if the variable that is “perturbed” in vector Y_0 is exogenous, the path of that variable is correct, but not that of the other variables.

Note also that if I have all innovations set to zero (ie M_.Sigma_e=zero matrix) and have that

``````histval;
TFP(0)=0; % steady state value of TFP is zero
TFP(-1)=0;
end;
``````

Then the forecast produces a path for endogenous variables but a zero for TFP. I run steady_ before stoch_simul and forecast.

If I omit the histval block, then no path is produced (flat lines).

Thanks

Yes, Dynare iterates forward on the state space representation. How did you set the initial condition? Every state not initialized will be set to 0. An example is

``````var y, c, k, a, h, b;
varexo e, u;

parameters beta, rho, alpha, delta, theta, psi, tau;

alpha = 0.36;
rho   = 0.95;
tau   = 0.025;
beta  = 0.99;
delta = 0.025;
psi   = 0;
theta = 2.95;

phi   = 0.1;

model;
c*theta*h^(1+psi)=(1-alpha)*y;
k = beta*(((exp(b)*c)/(exp(b(+1))*c(+1)))
*(exp(b(+1))*alpha*y(+1)+(1-delta)*k));
y = exp(a)*(k(-1)^alpha)*(h^(1-alpha));
k = exp(b)*(y-c)+(1-delta)*k(-1);
a = rho*a(-1)+tau*b(-1) + e;
b = tau*a(-1)+rho*b(-1) + u;
end;

initval;
y = 1.08068253095672;
c = 0.80359242014163;
h = 0.29175631001732;
k = 11.08360443260358;
a = 0;
b = 0;
e = 0;
u = 0;
end;
steady;

shocks;
var e; stderr 0.009;
var u; stderr 0.009;
var e, u = phi*0.009*0.009;
end;

stoch_simul(order=1);

histval;
a(0)=1;
k(0) = 11.08360443260358;
end;
forecast;
``````

Thanks Johannes,
I run steady before histval. Is that enough to set the states at their steady state value?
Cheers
Gianni

No, that is not sufficient, because you override this by `histval`.

Sorry to be slow. So do I have to list all states in histval even if they are not different than the steady state?

Indeed. Alternatively, forget about the `histval`-block and directly fill the contents of `M_.endo_histval`, starting from the last steady state in `stoch_simul`:

``````stoch_simul(order=1);

M_.endo_histval=oo_.dr.ys;
M_.endo_histval(strmatch('k',M_.endo_names,'exact'))=11.08360443260358;
M_.endo_histval(strmatch('a',M_.endo_names,'exact'))=1;
forecast;
``````

Thank. That’s an excellent idea
Cheers