sur: fix input checks
parent
4399972a2d
commit
030737b9c0
|
@ -55,6 +55,10 @@ if nargin < 4
|
|||
else
|
||||
model_name = ['sur_model_number_' num2str(length(fieldnames(oo_.sur)) + 1)];
|
||||
end
|
||||
else
|
||||
if ~isvarname(model_name)
|
||||
error('the fourth argument, if passed, must be a string')
|
||||
end
|
||||
end
|
||||
|
||||
if nargin < 3
|
||||
|
@ -64,7 +68,9 @@ end
|
|||
if nargin < 2
|
||||
param_names = {};
|
||||
else
|
||||
assert(iscellstr(param_names), 'the 2nd argument must be a cellstr');
|
||||
if ~iscellstr(param_names)
|
||||
error('the 2nd argument must be a cellstr')
|
||||
end
|
||||
end
|
||||
|
||||
maxit = 100;
|
||||
|
|
|
@ -423,6 +423,7 @@ MODFILES = \
|
|||
dynare-command-options/ramst.mod
|
||||
|
||||
OLS_MODFILES = \
|
||||
ecb/SUR/sur_noniterative.mod \
|
||||
ecb/SUR/panel_var_diff_NB_simulation_test.mod \
|
||||
ecb/SUR/panel_var_diff_NB_simulation_zero_eq.mod \
|
||||
ecb/pooled_ols/panel_var_diff_NB_simulation_test.mod \
|
||||
|
|
|
@ -0,0 +1,217 @@
|
|||
// --+ options: json=compute +--
|
||||
|
||||
/* REMARK
|
||||
** ------
|
||||
**
|
||||
** You need to have the first line on top of the mod file. The options defined on this line are passed
|
||||
** to the dynare command (you can add other options, separated by spaces or commas). The option defined
|
||||
** here is mandatory for the decomposition. It forces Dynare to output another representation of the
|
||||
** model in JSON file (additionaly to the matlab files) which is used here to manipulate the equations.
|
||||
*/
|
||||
|
||||
var
|
||||
U2_Q_YED
|
||||
U2_G_YER
|
||||
U2_STN
|
||||
U2_ESTN
|
||||
U2_EHIC
|
||||
DE_Q_YED
|
||||
DE_G_YER
|
||||
DE_EHIC
|
||||
|
||||
;
|
||||
|
||||
varexo
|
||||
res_U2_Q_YED
|
||||
res_U2_G_YER
|
||||
res_U2_STN
|
||||
res_U2_ESTN
|
||||
res_U2_EHIC
|
||||
res_DE_Q_YED
|
||||
res_DE_G_YER
|
||||
res_DE_EHIC
|
||||
;
|
||||
|
||||
parameters
|
||||
u2_q_yed_ecm_u2_q_yed_L1
|
||||
u2_q_yed_ecm_u2_stn_L1
|
||||
u2_q_yed_u2_g_yer_L1
|
||||
u2_q_yed_u2_stn_L1
|
||||
u2_g_yer_ecm_u2_q_yed_L1
|
||||
u2_g_yer_ecm_u2_stn_L1
|
||||
u2_g_yer_u2_q_yed_L1
|
||||
u2_g_yer_u2_g_yer_L1
|
||||
u2_g_yer_u2_stn_L1
|
||||
u2_stn_ecm_u2_q_yed_L1
|
||||
u2_stn_ecm_u2_stn_L1
|
||||
u2_stn_u2_q_yed_L1
|
||||
u2_stn_u2_g_yer_L1
|
||||
u2_estn_u2_estn_L1
|
||||
u2_ehic_u2_ehic_L1
|
||||
|
||||
de_q_yed_ecm_de_q_yed_L1
|
||||
de_q_yed_ecm_u2_stn_L1
|
||||
de_q_yed_de_g_yer_L1
|
||||
de_q_yed_u2_stn_L1
|
||||
de_g_yer_ecm_de_q_yed_L1
|
||||
de_g_yer_ecm_u2_stn_L1
|
||||
de_g_yer_de_q_yed_L1
|
||||
de_g_yer_de_g_yer_L1
|
||||
de_g_yer_u2_stn_L1
|
||||
de_ehic_de_ehic_L1
|
||||
|
||||
|
||||
;
|
||||
|
||||
u2_q_yed_ecm_u2_q_yed_L1 = -0.82237516589315 ;
|
||||
u2_q_yed_ecm_u2_stn_L1 = -0.323715338568976 ;
|
||||
u2_q_yed_u2_g_yer_L1 = 0.0401361895021084 ;
|
||||
u2_q_yed_u2_stn_L1 = 0.058397703958446 ;
|
||||
u2_g_yer_ecm_u2_q_yed_L1 = 0.0189896046977421 ;
|
||||
u2_g_yer_ecm_u2_stn_L1 = -0.109597659887432 ;
|
||||
u2_g_yer_u2_q_yed_L1 = 0.0037667967632025 ;
|
||||
u2_g_yer_u2_g_yer_L1 = 0.480506381923644 ;
|
||||
u2_g_yer_u2_stn_L1 = -0.0722359286123494 ;
|
||||
u2_stn_ecm_u2_q_yed_L1 = -0.0438500662608356 ;
|
||||
u2_stn_ecm_u2_stn_L1 = -0.153283917138772 ;
|
||||
u2_stn_u2_q_yed_L1 = 0.0328744983772825 ;
|
||||
u2_stn_u2_g_yer_L1 = 0.292121949736756 ;
|
||||
u2_estn_u2_estn_L1 = 1 ;
|
||||
u2_ehic_u2_ehic_L1 = 1 ;
|
||||
|
||||
de_q_yed_ecm_de_q_yed_L1 = -0.822375165893149 ;
|
||||
de_q_yed_ecm_u2_stn_L1 = -0.323715338568977 ;
|
||||
de_q_yed_de_g_yer_L1 = 0.0401361895021082 ;
|
||||
de_q_yed_u2_stn_L1 = 0.0583977039584461 ;
|
||||
de_g_yer_ecm_de_q_yed_L1 = 0.0189896046977422 ;
|
||||
de_g_yer_ecm_u2_stn_L1 = -0.109597659887433 ;
|
||||
de_g_yer_de_q_yed_L1 = 0.00376679676320256;
|
||||
de_g_yer_de_g_yer_L1 = 0.480506381923643 ;
|
||||
de_g_yer_u2_stn_L1 = -0.0722359286123494 ;
|
||||
de_ehic_de_ehic_L1 = 1 ;
|
||||
|
||||
|
||||
model(linear);
|
||||
[name = 'eq1']
|
||||
diff(U2_Q_YED) = u2_q_yed_ecm_u2_q_yed_L1 * (U2_Q_YED(-1) - U2_EHIC(-1))
|
||||
+ u2_q_yed_ecm_u2_stn_L1 * (U2_STN(-1) - U2_ESTN(-1))
|
||||
+ u2_q_yed_u2_g_yer_L1 * diff(U2_G_YER(-1))
|
||||
+ u2_q_yed_u2_stn_L1 * diff(U2_STN(-1))
|
||||
+ res_U2_Q_YED ;
|
||||
[name = 'eq2']
|
||||
diff(U2_G_YER) = u2_g_yer_ecm_u2_q_yed_L1 * (U2_Q_YED(-1) - U2_EHIC(-1))
|
||||
+ u2_g_yer_ecm_u2_stn_L1 * (U2_STN(-1) - U2_ESTN(-1))
|
||||
+ u2_g_yer_u2_q_yed_L1 * diff(U2_Q_YED(-1))
|
||||
+ u2_g_yer_u2_g_yer_L1 * diff(U2_G_YER(-1))
|
||||
+ u2_g_yer_u2_stn_L1 * diff(U2_STN(-1))
|
||||
+ res_U2_G_YER ;
|
||||
[name = 'eq3']
|
||||
diff(U2_STN) = u2_stn_ecm_u2_q_yed_L1 * (U2_Q_YED(-1) - U2_EHIC(-1))
|
||||
+ u2_stn_ecm_u2_stn_L1 * (U2_STN(-1) - U2_ESTN(-1))
|
||||
+ u2_stn_u2_q_yed_L1 * diff(U2_Q_YED(-1))
|
||||
+ u2_stn_u2_g_yer_L1 * diff(U2_G_YER(-1))
|
||||
+ res_U2_STN ;
|
||||
[name = 'eq4']
|
||||
U2_ESTN = u2_estn_u2_estn_L1 * U2_ESTN(-1)
|
||||
+ res_U2_ESTN ;
|
||||
[name = 'eq5']
|
||||
U2_EHIC = u2_ehic_u2_ehic_L1 * U2_EHIC(-1)
|
||||
+ res_U2_EHIC ;
|
||||
[name = 'eq6']
|
||||
diff(DE_Q_YED) = de_q_yed_ecm_de_q_yed_L1 * (DE_Q_YED(-1) - DE_EHIC(-1))
|
||||
+ de_q_yed_ecm_u2_stn_L1 * (U2_STN(-1) - U2_ESTN(-1))
|
||||
+ de_q_yed_de_g_yer_L1 * diff(DE_G_YER(-1))
|
||||
+ de_q_yed_u2_stn_L1 * diff(U2_STN(-1))
|
||||
+ res_DE_Q_YED ;
|
||||
[name = 'eq7']
|
||||
diff(DE_G_YER) = de_g_yer_ecm_de_q_yed_L1 * (DE_Q_YED(-1) - DE_EHIC(-1))
|
||||
+ de_g_yer_ecm_u2_stn_L1 * (U2_STN(-1) - U2_ESTN(-1))
|
||||
+ de_g_yer_de_q_yed_L1 * diff(DE_Q_YED(-1))
|
||||
+ de_g_yer_de_g_yer_L1 * diff(DE_G_YER(-1))
|
||||
+ de_g_yer_u2_stn_L1 * diff(U2_STN(-1))
|
||||
+ res_DE_G_YER ;
|
||||
[name = 'eq8']
|
||||
DE_EHIC = DE_EHIC(-1) + res_DE_EHIC ;
|
||||
|
||||
|
||||
|
||||
end;
|
||||
|
||||
shocks;
|
||||
var res_U2_Q_YED = 0.005;
|
||||
var res_U2_G_YER = 0.005;
|
||||
var res_U2_STN = 0.005;
|
||||
var res_U2_ESTN = 0.005;
|
||||
var res_U2_EHIC = 0.005;
|
||||
var res_DE_Q_YED = 0.005;
|
||||
var res_DE_G_YER = 0.005;
|
||||
var res_DE_EHIC = 0.005;
|
||||
end;
|
||||
|
||||
NSIMS = 1000;
|
||||
|
||||
options_.noprint = 1;
|
||||
calibrated_values = M_.params;
|
||||
verbatim;
|
||||
Sigma_e = M_.Sigma_e;
|
||||
end;
|
||||
assert(NSIMS > 1);
|
||||
options_.bnlms.set_dynare_seed_to_default = false;
|
||||
|
||||
nparampool = length(M_.params);
|
||||
BETA = zeros(NSIMS, nparampool);
|
||||
for i=1:NSIMS
|
||||
firstobs = rand(3, length(M_.endo_names));
|
||||
M_.params = calibrated_values;
|
||||
M_.Sigma_e = Sigma_e;
|
||||
simdata = simul_backward_model(dseries(firstobs, dates('1995Q1'), M_.endo_names), 10000);
|
||||
simdata = simdata(simdata.dates(5001:6000));
|
||||
names=regexp(simdata.name, 'res\w*');
|
||||
idxs = [];
|
||||
for j=1:length(names)
|
||||
if isempty(names{j})
|
||||
idxs = [idxs j];
|
||||
end
|
||||
end
|
||||
sur(simdata{idxs}, {}, {}, 'mymodel', true);
|
||||
BETA(i, :) = M_.params';
|
||||
end
|
||||
|
||||
tmp = mean(BETA)' - calibrated_values;
|
||||
good = [-0.000851256219733
|
||||
-0.000643255670073
|
||||
-0.000078774226193
|
||||
-0.000420026410496
|
||||
0.000262319820667
|
||||
-0.000245434738588
|
||||
-0.000076193984629
|
||||
-0.001732502219600
|
||||
-0.001142802053612
|
||||
0.000120684867379
|
||||
-0.000577323101449
|
||||
-0.000750502207473
|
||||
-0.000277709424315
|
||||
-0.000622119904600
|
||||
-0.000635564841533
|
||||
-0.000249342272071
|
||||
-0.000443999454424
|
||||
-0.000187590389264
|
||||
-0.000441672489341
|
||||
-0.000015259855753
|
||||
0.000091236076295
|
||||
-0.000236028177813
|
||||
-0.000838101091676
|
||||
0.000815800740293
|
||||
0];
|
||||
if sum(abs(tmp-good)) > 1e-14
|
||||
error(['sum of tmp - good was: ' num2str(sum(abs(tmp-good)))]);
|
||||
end
|
||||
|
||||
for i=1:nparampool
|
||||
figure
|
||||
hold on
|
||||
title(strrep(M_.param_names(i,:), '_', '\_'));
|
||||
histogram(BETA(:,i),50);
|
||||
line([calibrated_values(i) calibrated_values(i)], [0 NSIMS/10], 'LineWidth', 2, 'Color', 'r');
|
||||
hold off
|
||||
end
|
Loading…
Reference in New Issue