0001 function y=PCL_Part_info_irf( H, varobs, ivar, M_, dr, irfpers,ii)
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
0031
0032 OBS = [];
0033 for i=1:rows(varobs)
0034 OBS = [OBS find(strcmp(deblank(varobs(i,:)), cellstr(M_.endo_names))) ];
0035 end
0036 NOBS = length(OBS);
0037
0038 G1=dr.PI_ghx;
0039 impact=dr.PI_ghu;
0040 nmat=dr.PI_nmat;
0041 CC=dr.PI_CC;
0042 NX=M_.exo_nbr;
0043 FL_RANK=dr.PI_FL_RANK;
0044 NY=M_.endo_nbr;
0045 LL = sparse(1:NOBS,OBS,ones(NOBS,1),NY,NY);
0046
0047 ss=size(G1,1);
0048 pd=ss-size(nmat,1);
0049 SDX=M_.Sigma_e^0.5;
0050 if isempty(H)
0051 H=M_.H;
0052 end
0053 VV=H;
0054 MM=impact*SDX;
0055
0056
0057
0058 L1=LL*dr.PI_TT1;
0059 L2=LL*dr.PI_TT2;
0060
0061 MM1=MM(1:ss-FL_RANK,:);
0062 U11=MM1*MM1';
0063
0064
0065 U22=0;
0066
0067
0068
0069
0070
0071
0072
0073
0074 G12=G1(NX+1:ss-2*FL_RANK,:);
0075 KK1=L1*G12;
0076 K1=KK1(:,1:ss-FL_RANK);
0077 K2=KK1(:,ss-FL_RANK+1:ss)+L2;
0078
0079
0080 A11=G1(1:pd,1:pd);
0081 A22=G1(pd+1:end, pd+1:end);
0082 A12=G1(1:pd, pd+1:end);
0083 A21=G1(pd+1:end,1:pd);
0084 Lambda= nmat*A12+A22;
0085 I_L=inv(Lambda);
0086 BB=A12*inv(A22);
0087 FF=K2*inv(A22);
0088 QQ=BB*U22*BB' + U11;
0089 UFT=U22*FF';
0090 AA=A11-BB*A21;
0091 CCCC=A11-A12*nmat;
0092 DD=K1-FF*A21;
0093 EE=K1-K2*nmat;
0094 RR=FF*UFT+VV;
0095 if ~any(RR)
0096
0097
0098
0099
0100 RR=eye(size(RR,1))*1.0e-6;
0101 end
0102 SS=BB*UFT;
0103 VKLUFT=VV+K2*I_L*UFT;
0104 ALUFT=A12*I_L*UFT;
0105 FULKV=FF*U22*I_L'*K2'+VV;
0106 FUBT=FF*U22*BB';
0107 nmat=nmat;
0108
0109 AQDS=AA*QQ*DD'+SS;
0110 DQDR=DD*QQ*DD'+RR;
0111 I_DQDR=inv(DQDR);
0112 AQDQ=AQDS*I_DQDR;
0113 ff=AA-AQDQ*DD;
0114 hh=AA*QQ*AA'-AQDQ*AQDS';
0115 rr=DD*QQ*DD'+RR;
0116 ZSIG0=disc_riccati_fast(ff,DD,rr,hh);
0117 PP=ZSIG0 +QQ;
0118
0119 exo_names=M_.exo_names(M_.exo_names_orig_ord,:);
0120
0121 DPDR=DD*PP*DD'+RR;
0122 I_DPDR=inv(DPDR);
0123 PDIDPDRD=PP*DD'*I_DPDR*DD;
0124 GG=[CCCC (AA-CCCC)*(eye(ss-FL_RANK)-PDIDPDRD); zeros(ss-FL_RANK) AA*(eye(ss-FL_RANK)-PDIDPDRD)];
0125 imp=[impact(1:ss-FL_RANK,:); impact(1:ss-FL_RANK,:)];
0126
0127
0128 I_PD=(eye(ss-FL_RANK)-PDIDPDRD);
0129 LL0=[ EE (DD-EE)*I_PD];
0130 VV = [ dr.PI_TT1 dr.PI_TT2];
0131 stderr=diag(M_.Sigma_e^0.5);
0132 irfmat=zeros(size(dr.PI_TT1 ,1),irfpers+1);
0133 irfst=zeros(size(GG,1),irfpers+1);
0134 irfst(:,1)=stderr(ii)*imp(:,ii);
0135 for jj=2:irfpers+1;
0136 irfst(:,jj)=GG*irfst(:,jj-1);
0137 irfmat(:,jj-1)=VV*irfst(NX+1:ss-FL_RANK,jj);
0138 end
0139 y = irfmat(:,1:irfpers);
0140
0141 save ([M_.fname '_PCL_PtInfoIRFs_' num2str(ii) '_' deblank(exo_names(ii,:))], 'irfmat','irfst');