Add/adapt unit test for conditional forecasts with initval and histval blocks
parent
1c01bacf36
commit
fe221bbc42
|
@ -2392,25 +2392,28 @@ before (except when a @code{steady} command doesn't follow an
|
|||
In the context of stochastic simulations, @code{histval} allows setting
|
||||
the starting point of those simulations in the state space. As for the case of
|
||||
perfect foresight simulations, all not explicitly specified variables are set to 0.
|
||||
Moreover, as only states enter the recursive policy functions, all values specified for control variables will be ignored.
|
||||
Moreover, as only states enter the recursive policy functions, all values specified for control variables will be ignored. This can be used
|
||||
|
||||
@itemize
|
||||
|
||||
@item
|
||||
in @xref{stoch_simul}, if the @code{periods} options is specified. Note that this only affects the starting point for the simulation, but not for the impulse response functions.
|
||||
in @ref{stoch_simul}, if the @code{periods} options is specified. Note that this only affects the starting point for the simulation, but not for the impulse response functions.
|
||||
|
||||
@item
|
||||
in @xref{forecast} as the initial point at which the forecasts are computed
|
||||
in @ref{forecast} as the initial point at which the forecasts are computed
|
||||
|
||||
@item
|
||||
in @xref{conditional_forecast} as the initial point at which the conditional forecasts are computed
|
||||
@end itemize
|
||||
in @ref{conditional_forecast} as the initial point at which the conditional forecasts are computed
|
||||
|
||||
For @ref{Ramsey} policy, it also specifies the values of the endogenous states at
|
||||
@item
|
||||
in @ref{Ramsey} policy, where it also specifies the values of the endogenous states at
|
||||
which the objective function of the planner is computed. Note that the initial values
|
||||
of the Lagrange multipliers associated with the planner's problem cannot be set
|
||||
(@pxref{planner_objective_value}).
|
||||
|
||||
@end itemize
|
||||
|
||||
|
||||
@examplehead
|
||||
|
||||
@example
|
||||
|
@ -3603,7 +3606,7 @@ solution is computed using the @code{extended_path} command.
|
|||
|
||||
@deffn Command stoch_simul [@var{VARIABLE_NAME}@dots{}];
|
||||
@deffnx Command stoch_simul (@var{OPTIONS}@dots{}) [@var{VARIABLE_NAME}@dots{}];
|
||||
|
||||
@anchor{stoch_simul}
|
||||
@descriptionhead
|
||||
|
||||
@code{stoch_simul} solves a stochastic (@i{i.e.} rational
|
||||
|
|
|
@ -135,6 +135,7 @@ MODFILES = \
|
|||
conditional_forecasts/fs2000_cal.mod \
|
||||
conditional_forecasts/fs2000_est.mod \
|
||||
conditional_forecasts/fs2000_conditional_forecast_initval.mod \
|
||||
conditional_forecasts/fs2000_conditional_forecast_histval.mod \
|
||||
recursive/ls2003.mod \
|
||||
recursive/ls2003_bayesian.mod \
|
||||
recursive/ls2003_bayesian_xls.mod \
|
||||
|
|
|
@ -0,0 +1,105 @@
|
|||
/* Mod file tests the correctness of the conditional_forecast command when used together with histval by
|
||||
* - checking whether the unconditional forecast from the conditional_forecast-command
|
||||
* coincides with the one from the forecast command
|
||||
* - checking whether the conditional forecast coincides with the path of
|
||||
* capital derived when simulating the model with simult_ and the computed exogenous instruments
|
||||
*/
|
||||
|
||||
var m P c e W R k d n l gy_obs gp_obs y dA;
|
||||
varexo e_a e_m;
|
||||
|
||||
parameters alp bet gam mst rho psi del;
|
||||
|
||||
alp = 0.33;
|
||||
bet = 0.99;
|
||||
gam = 0.003;
|
||||
mst = 1.011;
|
||||
rho = 0.7;
|
||||
psi = 0.787;
|
||||
del = 0.02;
|
||||
|
||||
model;
|
||||
dA = exp(gam+e_a);
|
||||
log(m) = (1-rho)*log(mst) + rho*log(m(-1))+e_m;
|
||||
-P/(c(+1)*P(+1)*m)+bet*P(+1)*(alp*exp(-alp*(gam+log(e(+1))))*k^(alp-1)*n(+1)^(1-alp)+(1-del)*exp(-(gam+log(e(+1)))))/(c(+2)*P(+2)*m(+1))=0;
|
||||
W = l/n;
|
||||
-(psi/(1-psi))*(c*P/(1-n))+l/n = 0;
|
||||
R = P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(-alp)/W;
|
||||
1/(c*P)-bet*P*(1-alp)*exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)/(m*l*c(+1)*P(+1)) = 0;
|
||||
c+k = exp(-alp*(gam+e_a))*k(-1)^alp*n^(1-alp)+(1-del)*exp(-(gam+e_a))*k(-1);
|
||||
P*c = m;
|
||||
m-1+d = l;
|
||||
e = exp(e_a);
|
||||
y = k(-1)^alp*n^(1-alp)*exp(-alp*(gam+e_a));
|
||||
gy_obs = dA*y/y(-1);
|
||||
gp_obs = (P/P(-1))*m(-1)/dA;
|
||||
end;
|
||||
|
||||
initval;
|
||||
k = 6;
|
||||
m = mst;
|
||||
P = 2.25;
|
||||
c = 0.45;
|
||||
e = 1;
|
||||
W = 4;
|
||||
R = 1.02;
|
||||
d = 0.85;
|
||||
n = 0.19;
|
||||
l = 0.86;
|
||||
y = 0.6;
|
||||
gy_obs = exp(gam);
|
||||
gp_obs = exp(-gam);
|
||||
dA = exp(gam);
|
||||
end;
|
||||
|
||||
shocks;
|
||||
var e_a; stderr 0.014;
|
||||
var e_m; stderr 0.005;
|
||||
end;
|
||||
|
||||
steady;
|
||||
|
||||
check;
|
||||
|
||||
stoch_simul(irf=0);
|
||||
|
||||
conditional_forecast_paths;
|
||||
var gy_obs;
|
||||
periods 1 2 3:5;
|
||||
values 0.01 -0.02 0;
|
||||
var gp_obs;
|
||||
periods 1 2 3:5;
|
||||
values 1 1.04 0.98;
|
||||
end;
|
||||
|
||||
%set capital to non-steady state value and all other states to steady state
|
||||
histval;
|
||||
k(0) = 6;
|
||||
m(0)=1.01100000000000;
|
||||
P(0)=2.25815456051727;
|
||||
y(0)=0.580764879486831;
|
||||
end;
|
||||
|
||||
conditional_forecast(periods=100,parameter_set=calibration,replic=10000, controlled_varexo=(e_m,e_a));
|
||||
|
||||
plot_conditional_forecast(periods=100) gy_obs gp_obs k;
|
||||
forecast(periods=100);
|
||||
|
||||
%compare unconditional forecasts
|
||||
cond_forecast=load('conditional_forecasts.mat');
|
||||
if max(abs(cond_forecast.forecasts.uncond.Mean.k(2:end)-oo_.forecast.Mean.k))>1e-8
|
||||
error('Unconditional Forecasts do not match')
|
||||
end
|
||||
|
||||
%compare conditional forecasts; histval here sets initval condition for capital different from steady state
|
||||
initial_condition_states = oo_.dr.ys;
|
||||
initial_condition_states(strmatch('k',M_.endo_names,'exact')) = 6;
|
||||
shock_matrix = zeros(options_cond_fcst_.periods ,M_.exo_nbr); %create shock matrix with found controlled shocks
|
||||
shock_matrix(1:5,strmatch('e_a',M_.exo_names,'exact')) = cond_forecast.forecasts.controlled_exo_variables.Mean.e_a; %set controlled shocks to their values
|
||||
shock_matrix(1:5,strmatch('e_m',M_.exo_names,'exact')) = cond_forecast.forecasts.controlled_exo_variables.Mean.e_m; %set controlled shocks to their values
|
||||
|
||||
y_simult = simult_(initial_condition_states,oo_.dr,shock_matrix,1);
|
||||
|
||||
if max(abs(y_simult(strmatch('k',M_.endo_names,'exact'),:)'-cond_forecast.forecasts.cond.Mean.k))>1e-8
|
||||
error('Unconditional Forecasts do not match')
|
||||
end
|
|
@ -3,7 +3,9 @@
|
|||
* coincides with the one from the forecast command
|
||||
* - checking whether the conditional forecast coincides with the path of
|
||||
* capital derived when simulating the model with simult_ and the computed exogenous instruments
|
||||
*/
|
||||
* - initval should not play a role as initial conditions need to be set with histval; with initval
|
||||
* the subsequently computed steady state is used
|
||||
*/
|
||||
|
||||
var m P c e W R k d n l gy_obs gp_obs y dA;
|
||||
varexo e_a e_m;
|
||||
|
@ -84,18 +86,19 @@ forecast(periods=100);
|
|||
|
||||
%compare unconditional forecasts
|
||||
cond_forecast=load('conditional_forecasts.mat');
|
||||
if max(abs(cond_forecast.forecasts.uncond.Mean.k(2:end)-oo_.forecast.Mean.k))>1e-3
|
||||
if max(abs(cond_forecast.forecasts.uncond.Mean.k(2:end)-oo_.forecast.Mean.k))>1e-8
|
||||
error('Unconditional Forecasts do not match')
|
||||
end
|
||||
|
||||
%compare conditional forecasts
|
||||
initial_condition_states = oo_.steady_state;
|
||||
%compare conditional forecasts; initval should not play a role as initial
|
||||
%conditions need to be set with histval;
|
||||
initial_condition_states = oo_.dr.ys;
|
||||
shock_matrix = zeros(options_cond_fcst_.periods ,M_.exo_nbr); %create shock matrix with found controlled shocks
|
||||
shock_matrix(1:5,strmatch('e_a',M_.exo_names,'exact')) = cond_forecast.forecasts.controlled_exo_variables.Mean.e_a; %set controlled shocks to their values
|
||||
shock_matrix(1:5,strmatch('e_m',M_.exo_names,'exact')) = cond_forecast.forecasts.controlled_exo_variables.Mean.e_m; %set controlled shocks to their values
|
||||
|
||||
y_simult = simult_(initial_condition_states,oo_.dr,shock_matrix,1);
|
||||
|
||||
if max(abs(y_simult(strmatch('k',M_.endo_names,'exact'),:)'-cond_forecast.forecasts.cond.Mean.k))>1e-3
|
||||
if max(abs(y_simult(strmatch('k',M_.endo_names,'exact'),:)'-cond_forecast.forecasts.cond.Mean.k))>1e-8
|
||||
error('Unconditional Forecasts do not match')
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue