252 lines
8.9 KiB
Matlab
252 lines
8.9 KiB
Matlab
|
function [Ui,Vi,n0,np,ixmC0Pres] = ftd_cholesky(lags,nvar,nexo,indxC0Pres)
|
||
|
%vlist = [1:4]; % regarding "xdd", % 1: p; 2: id; 3: ik; 4: y.
|
||
|
%For restricted VARs in the form: y_t'*A0 = x_t'*Ap + e_t', where y_t is a vector of endogenous variables
|
||
|
% and x_t is a vector of lagged endogenous variables and the constant term (last term).
|
||
|
% Note that the columns of A0 and Ap correspnd to equations.
|
||
|
%
|
||
|
% Exporting orthonormal matrices for the deterministic linear restrictions (equation by equation)
|
||
|
% See Waggoner and Zha's Gibbs sampling paper.
|
||
|
%
|
||
|
% q_m: quarter or month
|
||
|
% lags: the maximum length of lag
|
||
|
% nvar: number of endogeous variables
|
||
|
% nexo: number of exogenous variables. If nexo is not supplied, nexo=1 as default for a constant
|
||
|
% indxC0Pres: index for cross-A0-A+ restrictions. if 1: cross-A0-and-A+ restrictions; 0: idfile is all we have
|
||
|
% Example for indxOres==1: restrictions of the form P(t) = P(t-1).
|
||
|
% These restrictions have to be manually and carefully keyed in.
|
||
|
%-----------------
|
||
|
% Ui: nvar-by-1 cell. In each cell, nvar-by-qi orthonormal basis for the null of the ith
|
||
|
% equation contemporaneous restriction matrix where qi is the number of free parameters.
|
||
|
% With this transformation, we have ai = Ui*bi or Ui'*ai = bi where ai is a vector
|
||
|
% of total original parameters and bi is a vector of free parameters. When no
|
||
|
% restrictions are imposed, we have Ui = I. There must be at least one free
|
||
|
% parameter left for the ith equation.
|
||
|
% Vi: nvar-by-1 cell. In each cell, k-by-ri orthonormal basis for the null of the ith
|
||
|
% equation lagged restriction matrix where k is a total of exogenous variables and
|
||
|
% ri is the number of free parameters. With this transformation, we have fi = Vi*gi
|
||
|
% or Vi'*fi = gi where fi is a vector of total original parameters and gi is a
|
||
|
% vector of free parameters. There must be at least one free parameter left for
|
||
|
% the ith equation.
|
||
|
% n0: nvar-by-1, ith element represents the number of free A0 parameters in ith equation
|
||
|
% np: nvar-by-1, ith element represents the number of free A+ parameters in ith equation
|
||
|
% ixmC0Pres: neq_cres-by-1 cell. Effective only if indxC0Pres=1, otherwise equals NaN.
|
||
|
% neq_cres is the number of equations in which cross-A0-A+ restrictions occur.
|
||
|
% In the jth cell representing equation, we have 4 columns:
|
||
|
% 1st: the jth column (equation) of A+ or A0: f_j or a_j
|
||
|
% 2nd: the ith element f_j(i) -- the ith element in the jth column of A+
|
||
|
% 3rd: the hth element a_j(h) -- the hth element in the jth column of A0
|
||
|
% 4th: the number s such that f_j(i) = s * a_j(h) holds.
|
||
|
%
|
||
|
% Tao Zha, May 2000
|
||
|
|
||
|
|
||
|
|
||
|
Ui = cell(nvar,1); % initializing for contemporaneous endogenous variables
|
||
|
Vi = cell(nvar,1); % initializing for lagged and exogenous variables
|
||
|
n0 = zeros(nvar,1); % ith element represents the number of free A0 parameters in ith equation
|
||
|
np = zeros(nvar,1); % ith element represents the number of free A+ parameters in ith equation
|
||
|
|
||
|
if (nargin==2)
|
||
|
nexo = 1; % 1: constant as default where nexo must be a nonnegative integer
|
||
|
elseif (nargin==3)
|
||
|
indxC0Pres = 0; % default is no cross-A0-and-A+ restrictions.
|
||
|
end
|
||
|
|
||
|
k = lags*nvar+nexo; % maximum number of lagged and exogenous variables in each equation
|
||
|
|
||
|
Qi = zeros(nvar,nvar,nvar); % for nvar contemporaneous equations
|
||
|
Ri = zeros(k,k,nvar); % for nvar lagged and exogenous equations
|
||
|
% Row corresponds to equation. 0 means no restriction.
|
||
|
% 1 means exclusion restriction such that the corresponding parameter is restricted to 0.
|
||
|
|
||
|
%nfvar = 6; % number of foreign (Granger causing) variables
|
||
|
%nhvar = nvar-nfvar; % number of home (affected) variables.
|
||
|
|
||
|
|
||
|
%-------------------------------------------------------------
|
||
|
% Beginning the manual input of the restrictions one quation at a time
|
||
|
%-------------------------------------------------------------
|
||
|
%The restrictions considered here are in the following form where X means unrestricted:
|
||
|
% A0 = [
|
||
|
% X 0 X X
|
||
|
% 0 X X X
|
||
|
% 0 0 X X
|
||
|
% 0 0 0 X
|
||
|
% ];
|
||
|
% Ap = [
|
||
|
% X 0 X X
|
||
|
% 0 X X X
|
||
|
% 0 0 X X
|
||
|
% 0 0 X X (1st lag)
|
||
|
% X 0 X X
|
||
|
% 0 X X X
|
||
|
% 0 0 X X
|
||
|
% 0 0 X X (2nd lag)
|
||
|
% X 0 X X
|
||
|
% 0 X X X
|
||
|
% 0 0 X X
|
||
|
% 0 0 X X (3rd lag)
|
||
|
% X 0 X X
|
||
|
% 0 X X X
|
||
|
% 0 0 X X
|
||
|
% 0 0 X X (4th lag)
|
||
|
% 0 X 0 0 (constant terms)
|
||
|
% ];
|
||
|
|
||
|
if (0)
|
||
|
%------------------------ Lower triangular A0 ------------------------------
|
||
|
%======== The first equation ===========
|
||
|
|
||
|
|
||
|
%======== The second equation ===========
|
||
|
Qi(1:1,:,2) = [
|
||
|
1 0 0 0
|
||
|
];
|
||
|
|
||
|
%======== The third equation ===========
|
||
|
Qi(1:2,:,3) = [
|
||
|
1 0 0 0
|
||
|
0 1 0 0
|
||
|
];
|
||
|
|
||
|
%======== The fourth equation ===========
|
||
|
Qi(1:3,:,4) = [
|
||
|
1 0 0 0
|
||
|
0 1 0 0
|
||
|
0 0 1 0
|
||
|
];
|
||
|
else
|
||
|
%------------------------ Upper triangular A0 ------------------------------
|
||
|
%======== The first equation ===========
|
||
|
Qi(2:4,:,1) = [
|
||
|
0 1 0 0
|
||
|
0 0 1 0
|
||
|
0 0 0 1
|
||
|
];
|
||
|
|
||
|
%======== The second equation ===========
|
||
|
Qi([1 3:4],:,2) = [
|
||
|
1 0 0 0
|
||
|
0 0 1 0
|
||
|
0 0 0 1
|
||
|
];
|
||
|
|
||
|
%======== The third equation ===========
|
||
|
Qi(4:4,:,3) = [
|
||
|
0 0 0 1
|
||
|
];
|
||
|
|
||
|
%======== The fourth equation ===========
|
||
|
end
|
||
|
|
||
|
|
||
|
%-------------------------- Lag restrictions. ------------------------------------------
|
||
|
if (1)
|
||
|
%--- Lag restrictions.
|
||
|
indxeqn = 1; %Which equation.
|
||
|
nrestrs = (nvar-1)*lags+1; %Number of restrictions.
|
||
|
vars_restr = [2:nvar]; %Variables that are restricted: id, ik, and y.
|
||
|
blags = zeros(nrestrs,k); %k=nvar*lags+1
|
||
|
cnt = 0;
|
||
|
for ki = 1:lags
|
||
|
for kj=vars_restr
|
||
|
cnt = cnt+1;
|
||
|
blags(cnt,nvar*(ki-1)+kj) = 1;
|
||
|
end
|
||
|
end
|
||
|
%--- Keep constant zero.
|
||
|
cnt = cnt+1;
|
||
|
blags(cnt,end) = 1; %Constant = 0.
|
||
|
if cnt~=nrestrs
|
||
|
error('Check lagged restrictions in 1st equation!')
|
||
|
end
|
||
|
Ri(1:nrestrs,:,indxeqn) = blags;
|
||
|
|
||
|
%--- Lag restrictions.
|
||
|
indxeqn = 2; %Which equation.
|
||
|
nrestrs = (nvar-1)*lags; %Number of restrictions.
|
||
|
vars_restr = [1 3:nvar]; %Variables that are restricted: id, ik, and y.
|
||
|
blags = zeros(nrestrs,k); %k=nvar*lags+1
|
||
|
cnt = 0;
|
||
|
for ki = 1:lags
|
||
|
for kj=vars_restr
|
||
|
cnt = cnt+1;
|
||
|
blags(cnt,nvar*(ki-1)+kj) = 1;
|
||
|
end
|
||
|
end
|
||
|
Ri(1:nrestrs,:,indxeqn) = blags;
|
||
|
|
||
|
%--- Lag restrictions.
|
||
|
indxeqn = 3; %Which equation.
|
||
|
nrestrs = 1; %Number of restrictions.
|
||
|
blags = zeros(nrestrs,k);
|
||
|
cnt = 0;
|
||
|
%--- Keep constant zero.
|
||
|
cnt = cnt+1;
|
||
|
blags(cnt,end) = 1; %Constant = 0.
|
||
|
if cnt~=nrestrs
|
||
|
error('Check lagged restrictions in 1st equation!')
|
||
|
end
|
||
|
Ri(1:nrestrs,:,indxeqn) = blags;
|
||
|
|
||
|
%--- Lag restrictions.
|
||
|
indxeqn = 4; %Which equation.
|
||
|
nrestrs = 1; %Number of restrictions.
|
||
|
blags = zeros(nrestrs,k);
|
||
|
cnt = 0;
|
||
|
%--- Keep constant zero.
|
||
|
cnt = cnt+1;
|
||
|
blags(cnt,end) = 1; %Constant = 0.
|
||
|
if cnt~=nrestrs
|
||
|
error('Check lagged restrictions in 1st equation!')
|
||
|
end
|
||
|
Ri(1:nrestrs,:,indxeqn) = blags;
|
||
|
end
|
||
|
|
||
|
|
||
|
for n=1:nvar % initializing loop for each equation
|
||
|
Ui{n} = null(Qi(:,:,n));
|
||
|
Vi{n} = null(Ri(:,:,n));
|
||
|
n0(n) = size(Ui{n},2);
|
||
|
np(n) = size(Vi{n},2);
|
||
|
end
|
||
|
|
||
|
|
||
|
|
||
|
%(2)-------------------------------------------------------------
|
||
|
% Cross-A0-and-A+ rerestrictions one quation at a time
|
||
|
% i.e., the first, second, ..., kjth, ..., equation
|
||
|
% This type of restriction is used for the New-Keysian model studied by Leeper and Zha
|
||
|
% "Assessing Simple Policy Rules: A View from a Complete Macroeconomic Model" published
|
||
|
% by St. Louis Fed Review.
|
||
|
%(2)-------------------------------------------------------------
|
||
|
%
|
||
|
if indxC0Pres
|
||
|
neq_cres = 3; % the number of equations in which cross-A0-A+ restrictions occur.
|
||
|
ixmC0Pres = cell(neq_cres,1); % in each cell representing equation, we have 4 columns:
|
||
|
% 1st: the jth column (equation) of A+ or A0: f_j or a_j
|
||
|
% 2nd: the ith element f_j(i) -- the ith element in the jth column of A+
|
||
|
% 3rd: the hth element a_j(h) -- the hth element in the jth column of A0
|
||
|
% 4th: the number s such that f_j(i) = s * a_j(h) holds.
|
||
|
%** 1st equation
|
||
|
ixmC0Pres{1} = [1 2 2 1
|
||
|
1 7 1 1];
|
||
|
%** 2nd equation
|
||
|
ixmC0Pres{2} = [2 2 2 2];
|
||
|
%** 3rd equation
|
||
|
ixmC0Pres{3} = [3 7 1 1
|
||
|
3 2 2 1];
|
||
|
|
||
|
|
||
|
% % 4 columns.
|
||
|
% ncres = 5; % manually key in the number of cross-A0-A+ restrictions
|
||
|
|
||
|
% % 1st: the jth column (equation) of A+ or A0: f_j or a_j
|
||
|
% % 2nd: the ith element f_j(i) -- the ith element in the jth column of A+
|
||
|
% % 3rd: the hth element a_j(h) -- the hth element in the jth column of A0
|
||
|
% % 4th: the number s such that f_j(i) = s * a_j(h) holds.
|
||
|
else
|
||
|
ixmC0Pres = NaN;
|
||
|
end
|
||
|
|