Add/adapt unit test for conditional forecasts with initval and histval blocks

time-shift
Johannes Pfeifer 2014-12-08 08:51:47 +01:00 committed by Johannes Pfeifer
parent 1c01bacf36
commit fe221bbc42
4 changed files with 124 additions and 12 deletions

View File

@ -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

View File

@ -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 \

View File

@ -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

View File

@ -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