File: name2index.m

package info (click to toggle)
dynare 4.5.7-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 49,408 kB
  • sloc: cpp: 84,998; ansic: 29,058; pascal: 13,843; sh: 4,833; objc: 4,236; yacc: 3,622; makefile: 2,278; lex: 1,541; python: 236; lisp: 69; xml: 8
file content (117 lines) | stat: -rw-r--r-- 4,779 bytes parent folder | download
1
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
function i = name2index(options_, M_, estim_params_, type, name1, name2 )
% Returns the index associated to an estimated object (deep parameter,
% variance of a structural shock or measurement error, covariance between
% two structural shocks, covariance between two measurement errors).
%
% INPUTS:
%   options_        [structure]    Dynare structure.
%   M_              [structure]    Dynare structure (related to model definition).
%   estim_params_   [structure]    Dynare structure (related to estimation).
%   type            [string]       'DeepParameter', 'MeasurementError' (for measurement equation error) or 'StructuralShock' (for structural shock).
%   name1           [string]
%   name2           [string]
% OUTPUTS
%   i               [integer]      column index (in x2, an array of mh draws) associated to name1[,name2].
%
% SPECIAL REQUIREMENTS
%   none

% Copyright (C) 2008-2017 Dynare Team
%
% 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/>.

nvx     = estim_params_.nvx;
nvn     = estim_params_.nvn;
ncx     = estim_params_.ncx;
ncn     = estim_params_.ncn;
npa     = estim_params_.np ;
nnn = nvx+nvn+ncx+ncn+npa;

i = [];

if strcmpi(type,'DeepParameter')
    i = nvx + nvn + ncx + ncn + ...
        strmatch(name1,M_.param_names(estim_params_.param_vals(:,1),:),'exact');
    if nargin>5
        disp('The last input argument is useless!')
    end
    if isempty(i)
        disp([name1 ' is not an estimated deep parameter!'])
    end
    return
end

if strcmpi(type,'StructuralShock')
    if nargin<6% Covariance matrix diagonal term.
        i = strmatch(name1,M_.exo_names(estim_params_.var_exo(:,1),:),'exact');
        if isempty(i)
            disp(['The standard deviation of ' name1  ' is not an estimated parameter!'])
            return
        end
    else% Covariance matrix off-diagonal term
        offset = nvx+nvn;
        try
            list_of_structural_shocks = { M_.exo_names(estim_params_.corrx(:,1),:) , M_.exo_names(estim_params_.corrx(:,2),:) };
            k1 = strmatch(name1,list_of_structural_shocks(:,1),'exact');
            k2 = strmatch(name2,list_of_structural_shocks(:,2),'exact');
            i = offset+intersect(k1,k2);
            if isempty(i)
                k1 = strmatch(name1,list_of_structural_shocks(:,2),'exact');
                k2 = strmatch(name2,list_of_structural_shocks(:,1),'exact');
                i = offset+intersect(k1,k2);
            end
            if isempty(i)
                if isempty(i)
                    disp(['The correlation between ' name1 ' and ' name2 ' is not an estimated parameter!'])
                    return
                end
            end
        catch
            disp(['Off diagonal terms of the covariance matrix are not estimated (state equation)'])
        end
    end
end

if strcmpi(type,'MeasurementError')
    if nargin<6% Covariance matrix diagonal term
        i = nvx + strmatch(name1,M_.endo_names(estim_params_.var_endo(:,1),:),'exact');
        if isempty(i)
            disp(['The standard deviation of the measurement error on ' name1  ' is not an estimated parameter!'])
            return
        end
    else% Covariance matrix off-diagonal term
        offset = nvx+nvn+ncx;
        try
            list_of_measurement_errors = { M_.endo_names(estim_params_.corrn(:,1),:) , M_.endo_names(estim_params_.corrn(:,2),:) };
            k1 = strmatch(name1,list_of_measurement_errors(:,1),'exact');
            k2 = strmatch(name2,list_of_measurement_errors(:,2),'exact');
            i = offset+intersect(k1,k2);
            if isempty(i)
                k1 = strmatch(name1,list_of_measurement_errors(:,2),'exact');
                k2 = strmatch(name2,list_of_measurement_errors(:,1),'exact');
                i = offset+intersect(k1,k2);
            end
            if isempty(i)
                if isempty(i)
                    disp(['The correlation between the measurement errors on ' name1 ' and ' name2 ' is not an estimated parameter!'])
                    return
                end
            end
        catch
            disp('Off diagonal terms of the covariance matrix are not estimated (measurement equation)')
        end
    end
end