set_all_parameters.m 3.42 KB
Newer Older
1
function M = set_all_parameters(xparam1,estim_params,M)
2

3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
%@info:
%! @deftypefn {Function File} {@var{M} =} dynSeries (@var{xparams1},@var{estim_params},@var{M})
%! @anchor{set_all_parameters}
%! @sp 1
%! Update parameter values (deep parameters and covariance matrices).
%! @sp 2
%! @strong{Inputs}
%! @sp 1
%! @table @ @var
%! @item xparam1
%! N*1 vector of doubles, the values of the N estimated parameters.
%! @item estim_params
%! Dynare structure describing the estimated parameters.
%! @item M
%! Dynare structure describing the model.
%! @end table
%! @sp 1
%! @strong{Outputs}
%! @sp 1
%! @table @ @var
%! @item M
%! Dynare structure describing the model, with updated parameters and covariances matrices.
%! @end table
%! @sp 2
%! @strong{This function is called by:}
%! @sp 1
%! @ref{DsgeSmoother}, @ref{dynare_estimation_1}, @ref{@@gsa/filt_mc_}, @ref{identification_analysis}, @ref{PosteriorFilterSmootherAndForecast}, @ref{prior_posterior_statistics_core}, @ref{prior_sampler}
%! @sp 2
%! @strong{This function calls:}
%! @sp 2
%! @end deftypefn
%@eod:
35

Sébastien Villemot's avatar
Sébastien Villemot committed
36
% Copyright (C) 2003-2012 Dynare Team
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
%
% This file is part of Dynare.
%
% Dynare is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% Dynare is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with Dynare.  If not, see <http://www.gnu.org/licenses/>.

53
54
55
56
57
58
59
nvx = estim_params.nvx;
ncx = estim_params.ncx;
nvn = estim_params.nvn;
ncn = estim_params.ncn;
np = estim_params.np;
Sigma_e = M.Sigma_e;
H = M.H;
60
61
62

% setting shocks variance
if nvx
63
    var_exo = estim_params.var_exo;
64
65
66
67
68
69
70
71
72
73
    for i=1:nvx
        k =var_exo(i,1);
        Sigma_e(k,k) = xparam1(i)^2;
    end
end
% update offset
offset = nvx;

% setting measument error variance
if nvn
74
    var_endo = estim_params.var_endo;
75
76
77
78
79
80
81
82
83
84
    for i=1:nvn
        k = var_endo(i,1);
        H(k,k) = xparam1(i+offset)^2;
    end
end

% update offset
offset = nvx+nvn;

% setting shocks covariances
85
if ~isempty(M.Correlation_matrix)
86
    Sigma_e = diag(sqrt(diag(Sigma_e)))*M.Correlation_matrix*diag(sqrt(diag(Sigma_e))); % use of old correlation matrix is correct due to the diagonal structure and later only using the hence correctly updated diagonal entries of Sigma_e
87
end
88
if ncx
89
    corrx = estim_params.corrx;
90
91
92
    for i=1:ncx
        k1 = corrx(i,1);
        k2 = corrx(i,2);
93
94
        M.Correlation_matrix(k1,k2) = xparam1(i+offset);
        M.Correlation_matrix(k2,k1) = M.Correlation_matrix(k1,k2);
95
96
97
98
99
100
101
102
103
        Sigma_e(k1,k2) = xparam1(i+offset)*sqrt(Sigma_e(k1,k1)*Sigma_e(k2,k2));
        Sigma_e(k2,k1) = Sigma_e(k1,k2);
    end
end

% update offset
offset = nvx+nvn+ncx;
% setting measurement error covariances
if ncn
104
    corrn = estim_params.corrn;
105
106
107
108
109
110
111
112
113
114
115
116
117
    for i=1:ncn
        k1 = corr(i,1);
        k2 = corr(i,2);
        H(k1,k2) = xparam1(i+offset)*sqrt(H(k1,k1)*H(k2,k2));
        H(k2,k1) = H(k1,k2);
    end
end

% update offset
offset = nvx+ncx+nvn+ncn;
% setting structural parameters
%
if np
118
    M.params(estim_params.param_vals(:,1)) = xparam1(offset+1:end);
119
120
end

121
122
123
% updating matrices in M
if nvx || ncx
    M.Sigma_e = Sigma_e;
124
125
end
if nvn
126
127
    M.H = H;
end