File: fn_gibbsglb.m

package info (click to toggle)
dynare 4.6.3-4
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 74,896 kB
  • sloc: cpp: 98,057; ansic: 28,929; pascal: 13,844; sh: 5,947; objc: 4,236; yacc: 4,215; makefile: 2,583; lex: 1,534; fortran: 877; python: 647; ruby: 291; lisp: 152; xml: 22
file content (72 lines) | stat: -rw-r--r-- 2,669 bytes parent folder | download | duplicates (8)
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
function [cT,vR,kdf] = fn_gibbsglb(Sbd,idmat0,nvar,fss)
% [cT,vR,kdf] = gibbsglb(Sbd,idmat0,nvar,fss)
%    Global setup outside the Gibbs loop -- c.f. gibbsvar
%    Ref.:  D.F. Waggoner and T.A. Zha: "Does Normalization Matter for Inference?"
%    See Note Forecast (2) pp. 44-51
%
% Sbd: cell(nvar,1). Sbd=diag(S(1), ..., S(m)).  Already divided by 'fss' for the
%        posterior of a0 or A0(:) in Waggoner and Zha when one has asymmetric prior.
%        Note,"bd" stands for block diagonal.
% idmat0:  identification matrix for A0 with asymmetric prior;  column -- equation.
% nvar:  rank of A0 or # of variables
% fss: effective sample size (in the exponential term) --
%            # of observations + # of dummy observations
%                                   (or nSample - lags + # of dummy observations)
%-------------
% cT{i}: nvar-by-nvar where T'*T=Sbd{i} which is kind of covariance martrix
%          divided by fss already
% vR{i}: nvar-by-q{i} -- orthonormral basis for T*R, which is obtained through
%          single value decomposition of Q*inv(T)
% kdf:  the polynomial power in the Gamma or 1d Wishart distribution, used in
%          "gibbsvar.m"
%
%
% Copyright (C) 1997-2012 Daniel Waggoner and Tao Zha
%
% This 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.
%
% It 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.
%
% If you did not received a copy of the GNU General Public License
% with this software, see <http://www.gnu.org/licenses/>.
%


kdf = fss;  %2;     %fss;

cT = cell(nvar,1);
for k=1:nvar
   cT{k} = chol(Sbd{k});   % upper triangular but lower triangular Choleski
end

Q = cell(nvar,1);
       % Q{i}: nvar-by-nvar with rank nvar-q(i) with ith equation a and
       %       q(i) which is # of non-zero elements in a.  Note: Q*a=0.

vR = cell(nvar,1);
for k=1:nvar
   Q{k} = diag(idmat0(:,k)==0);   % constructing Q{k}
   %
   [jnk1,d1,v1] = svd(Q{k}/cT{k});
   d1max=max(diag(d1));
   if d1max==0
      Idxk=1:nvar;
   else
      Idxk = find(diag(d1)<eps*d1max);
   end
   lenk = length(find(idmat0(:,k)));
   if ( length(Idxk)<lenk )
      warning('Dimension of non-zero A0(:,k) is different from svd(Q*inv(T))')
      disp('Press ctrl-c to abort')
      pause
   else
      jnk1 = v1(:,Idxk);
      vR{k} = jnk1(:,1:lenk);   % orthonormal basis for T*R
   end
end