0001 function ms_write_markov_file(fname, options)
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030 n_chains = length(options.ms.ms_chain);
0031 nvars = size(options.varobs,1);
0032
0033 fh = fopen(fname,'w');
0034
0035
0036
0037
0038 fprintf(fh,'//== Markov State Variables with Simple Restrictions ==//\n\n');
0039
0040
0041
0042 fprintf(fh,'//== Number Observations ==//\n');
0043 fprintf(fh,'0\n\n');
0044
0045 fprintf(fh,'//== Number independent state variables ==//\n');
0046 fprintf(fh,'%d\n\n',n_chains);
0047
0048 for i_chain = 1:n_chains
0049
0050
0051
0052
0053 fprintf(fh,'//== Number of states for state_variable[%d] ==//\n', ...
0054 i_chain);
0055 n_states = length(options.ms.ms_chain(i_chain).regime);
0056 fprintf(fh,'%d\n\n',n_states);
0057
0058
0059
0060
0061
0062
0063 fprintf(fh,['//== Transition matrix prior for state_variable[%d] ==//\n'], ...
0064 i_chain);
0065 Alpha = ones(n_states,n_states);
0066 for i_state = 1:n_states
0067 p = 1-1/options.ms.ms_chain(i_chain).regime(i_state).duration;
0068 Alpha(i_state,i_state) = p*(n_states-1)/(1-p);
0069 fprintf(fh,'%22.16f',Alpha(i_state,:));
0070 fprintf(fh,'\n');
0071 end
0072
0073 fprintf(fh,['\n//== Dirichlet dimensions for state_variable[%d] ' ...
0074 '==//\n'],i_chain);
0075
0076 fprintf(fh,'%d ',repmat(2,1,n_states));
0077 fprintf(fh,'\n\n');
0078
0079
0080
0081 fprintf(fh,['//== Column restrictions for state_variable[%d] ' ...
0082 '==//\n'],i_chain);
0083 for i_state = 1:n_states
0084 if i_state == 1
0085 M = eye(n_states,2);
0086 elseif i_state == n_states
0087 M = [zeros(n_states-2,2); eye(2)];
0088 else
0089 M = zeros(n_states,2);
0090 M(i_state+[-1 1],1) = ones(2,1)/2;
0091 M(i_state,2) = 1;
0092 disp(M)
0093 end
0094 for j_state = 1:n_states
0095 fprintf(fh,'%f ',M(j_state,:));
0096 fprintf(fh,'\n');
0097 end
0098 fprintf(fh,'\n');
0099 end
0100 end
0101
0102
0103
0104
0105
0106 fprintf(fh,'//== Number Variables ==//\n');
0107 fprintf(fh,'%d\n\n',nvars);
0108
0109
0110 fprintf(fh,'//== Number Lags ==//\n');
0111 fprintf(fh,'%d\n\n',options.ms.nlags);
0112
0113
0114 fprintf(fh,'//== Exogenous Variables ==//\n');
0115 fprintf(fh,'1\n\n');
0116
0117
0118
0119
0120 fprintf(fh,['//== Controlling states variables for coefficients ==//\' ...
0121 'n']);
0122
0123 for i_var = 1:nvars
0124 for i_chain = 1:n_chains
0125 if ~isfield(options.ms.ms_chain(i_chain),'svar_coefficients') ...
0126 || isempty(options.ms.ms_chain(i_chain).svar_coefficients)
0127 i_equations = 0;
0128 else
0129 i_equations = ...
0130 options.ms.ms_chain(i_chain).svar_coefficients.equations;
0131 end
0132 if strcmp(i_equations,'ALL') || any(i_equations == i_var)
0133 fprintf(fh,'%d ',1);
0134 else
0135 fprintf(fh,'%d ',0);
0136 end
0137 end
0138 fprintf(fh,'\n');
0139 end
0140
0141
0142
0143 fprintf(fh,'\n//== Controlling states variables for variance ==//\n');
0144 for i_var = 1:nvars
0145 for i_chain = 1:n_chains
0146 if ~isfield(options.ms.ms_chain(i_chain),'svar_variances') ...
0147 || isempty(options.ms.ms_chain(i_chain).svar_variances)
0148 i_equations = 0;
0149 else
0150 i_equations = ...
0151 options.ms.ms_chain(i_chain).svar_variances.equations;
0152 end
0153 if strcmp(i_equations,'ALL') || any(i_equations == i_var)
0154 fprintf(fh,'%d ',1);
0155 else
0156 fprintf(fh,'%d ',0);
0157 end
0158 end
0159 fprintf(fh,'\n');
0160 end
0161
0162 fclose(fh);