Skip to content
Snippets Groups Projects
Commit dfea83e0 authored by Houtan Bastani's avatar Houtan Bastani
Browse files

dmm: if possible, combine two latent vars that impact the same matrix

parent bc7eec96
No related branches found
No related tags found
No related merge requests found
...@@ -38,14 +38,6 @@ end ...@@ -38,14 +38,6 @@ end
fprintf(fid, '%s.nml file generated by Dynare\n', M_.fname); fprintf(fid, '%s.nml file generated by Dynare\n', M_.fname);
fprintf(fid, 'from %s.mod on %d-%d-%d at %d:%d:%d\n', M_.fname, fix(clock)); fprintf(fid, 'from %s.mod on %d-%d-%d at %d:%d:%d\n', M_.fname, fix(clock));
%% SSM
fprintf(fid, '\n&ssm\n');
fprintf(fid, 'nu=%d nv=%d nx=%d d=%d %d dllname=''%s'' check=''%s''', M_.exo_nbr, ...
size(options_.multinomial, 2), options_.dmm.nx, ...
options_.dmm.max_order_of_integration, options_.dmm.num_nonstationary, ...
[cd filesep M_.fname '_dmm.m'], options_.dmm.check_mats);
fprintf(fid, '\n&end\n');
%% Prior %% Prior
fprintf(fid, '\n&prior\n'); fprintf(fid, '\n&prior\n');
nt = size(estimation_info.parameter,2); nt = size(estimation_info.parameter,2);
...@@ -77,6 +69,53 @@ fprintf(fid, 'seed=%d thin=%d burnin=%d simulrec=%d hbl=%d MargLik=''%s''', ... ...@@ -77,6 +69,53 @@ fprintf(fid, 'seed=%d thin=%d burnin=%d simulrec=%d hbl=%d MargLik=''%s''', ...
options_.dmm.calc_marg_lik); options_.dmm.calc_marg_lik);
fprintf(fid, '\n&end\n'); fprintf(fid, '\n&end\n');
%% S* (Latent Variables)
% Check that two latent vars don't impact the same matrix
combine = {};
mats = {'C', 'H', 'G', 'A', 'F', 'R'};
for i=1:length(mats)
if sum(strcmp({options_.dmm.S.mat}, mats{i})) > 1
idxs = strcmp({options_.dmm.S.mat}, mats{i});
canLatentVarsBeCombiend(options_, idxs);
combine = [combine; {mats{i}, idxs}];
end
end
wroteLatVarFor = {};
for i=1:size(options_.dmm.S, 2)
if ~any(strcmp(wroteLatVarFor(:), options_.dmm.S(i).mat))
numStates = 1;
if any(strcmp(combine(:,1), options_.dmm.S(i).mat))
for j=1:size(options_.dmm.S, 2)
if any(strcmp(combine(:,1), options_.dmm.S(i).mat))
numStates = numStates*options_.dmm.S(i).ns;
end
end
else
numStates = options_.dmm.S(i).ns;
end
multidx = find(strcmp({options_.multinomial(:).process}, options_.dmm.S(i).process));
tpidx = find(strcmp(estimation_info.transition_probability_index, options_.multinomial(multidx).probability));
params = estimation_info.transition_probability(tpidx).prior.params;
fprintf(fid, '\n&S%d\n', i);
fprintf(fid, 'dynS%d=''%s'' nS%d=%d hypS%d(1,1)=%s matS%d=''%s''',i,'I',i, ...
numStates, i, num2str(params), i, options_.dmm.S(i).mat);
fprintf(fid, '\n&end\n');
wroteLatVarFor = [wroteLatVarFor options_.dmm.S(i).mat];
end
end
%% SSM
fprintf(fid, '\n&ssm\n');
fprintf(fid, 'nu=%d nv=%d nx=%d d=%d %d dllname=''%s'' check=''%s''', M_.exo_nbr, ...
length(wroteLatVarFor), options_.dmm.nx, ...
options_.dmm.max_order_of_integration, options_.dmm.num_nonstationary, ...
[cd filesep M_.fname '_dmm.m'], options_.dmm.check_mats);
fprintf(fid, '\n&end\n');
%% Dataset %% Dataset
fprintf(fid, '\n&dataset\n'); fprintf(fid, '\n&dataset\n');
data = options_.dmm.dataset; data = options_.dmm.dataset;
...@@ -100,44 +139,7 @@ for i=1:size(data,1) ...@@ -100,44 +139,7 @@ for i=1:size(data,1)
end end
fprintf(fid, '&end\n'); fprintf(fid, '&end\n');
% Check that two latent vars don't impact the same matrix %% Close file
if sum(strcmp({options_.dmm.S.mat}, 'C')) > 1
canLatentVarsBeCombiend(options_, strcmp({options_.dmm.S.mat}, 'C'));
end
if sum(strcmp({options_.dmm.S.mat}, 'H')) > 1
canLatentVarsBeCombiend(options_, strcmp({options_.dmm.S.mat}, 'H'));
end
if sum(strcmp({options_.dmm.S.mat}, 'G')) > 1
canLatentVarsBeCombiend(options_, strcmp({options_.dmm.S.mat}, 'G'));
end
if sum(strcmp({options_.dmm.S.mat}, 'A')) > 1
canLatentVarsBeCombiend(options_, strcmp({options_.dmm.S.mat}, 'A'));
end
if sum(strcmp({options_.dmm.S.mat}, 'F')) > 1
canLatentVarsBeCombiend(options_, strcmp({options_.dmm.S.mat}, 'F'));
end
if sum(strcmp({options_.dmm.S.mat}, 'R')) > 1
canLatentVarsBeCombiend(options_, strcmp({options_.dmm.S.mat}, 'R'));
end
%% S*
for i=1:size(options_.dmm.S, 2)
fprintf(fid, '\n&S%d\n', i);
multidx = find(strcmp({options_.multinomial(:).process}, options_.dmm.S(i).process));
tpidx = find(strcmp(estimation_info.transition_probability_index, options_.multinomial(multidx).probability));
params = estimation_info.transition_probability(tpidx).prior.params;
fprintf(fid, 'dynS%d=''%s'' nS%d=%d hypS%d(1,1)=%d %d matS%d=''%s''',i,'I',i, ...
options_.dmm.S(i).ns, i, params, i, options_.dmm.S(i).mat);
fprintf(fid, '\n&end\n');
end
fclose(fid); fclose(fid);
end end
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment