🐛 Fix wrong computations when identification(useautocorr)
parent
926a54388e
commit
347be1f89a
|
@ -241,12 +241,11 @@ if order == 1
|
||||||
end
|
end
|
||||||
|
|
||||||
%% Compute dMOMENTS
|
%% Compute dMOMENTS
|
||||||
if ~no_identification_moments
|
if ~no_identification_moments
|
||||||
if useautocorr
|
E_yy = pruned.Var_y; dE_yy = pruned.dVar_y;
|
||||||
E_yy = pruned.Corr_y; dE_yy = pruned.dCorr_y;
|
if useautocorr
|
||||||
E_yyi = pruned.Corr_yi; dE_yyi = pruned.dCorr_yi;
|
E_yyi = pruned.Corr_yi; dE_yyi = pruned.dCorr_yi;
|
||||||
else
|
else
|
||||||
E_yy = pruned.Var_y; dE_yy = pruned.dVar_y;
|
|
||||||
E_yyi = pruned.Var_yi; dE_yyi = pruned.dVar_yi;
|
E_yyi = pruned.Var_yi; dE_yyi = pruned.dVar_yi;
|
||||||
end
|
end
|
||||||
MOMENTS = [MEAN; dyn_vech(E_yy)];
|
MOMENTS = [MEAN; dyn_vech(E_yy)];
|
||||||
|
|
|
@ -82,11 +82,7 @@ pruned = pruned_state_space_system(M, options, oo.dr, indvar, nlags, useautocorr
|
||||||
|
|
||||||
%% out = [vech(cov(Y_t,Y_t)); vec(cov(Y_t,Y_{t-1}); ...; vec(cov(Y_t,Y_{t-nlags})] of indvar variables, in DR order. This is Iskrev (2010)'s J matrix.
|
%% out = [vech(cov(Y_t,Y_t)); vec(cov(Y_t,Y_{t-1}); ...; vec(cov(Y_t,Y_{t-nlags})] of indvar variables, in DR order. This is Iskrev (2010)'s J matrix.
|
||||||
if outputflag == 1
|
if outputflag == 1
|
||||||
if useautocorr
|
out = dyn_vech(pruned.Var_y);
|
||||||
out = dyn_vech(pruned.Corr_y);
|
|
||||||
else
|
|
||||||
out = dyn_vech(pruned.Var_y);
|
|
||||||
end
|
|
||||||
for i = 1:nlags
|
for i = 1:nlags
|
||||||
if useautocorr
|
if useautocorr
|
||||||
out = [out;vec(pruned.Corr_yi(:,:,i))];
|
out = [out;vec(pruned.Corr_yi(:,:,i))];
|
||||||
|
|
|
@ -1032,9 +1032,9 @@ end
|
||||||
indzeros = find(abs(Var_y) < 1e-12); %find values that are numerical zero
|
indzeros = find(abs(Var_y) < 1e-12); %find values that are numerical zero
|
||||||
Var_y(indzeros) = 0;
|
Var_y(indzeros) = 0;
|
||||||
if useautocorr
|
if useautocorr
|
||||||
sy = sqrt(diag(Var_y)); %theoretical standard deviation
|
sdy = sqrt(diag(Var_y)); %theoretical standard deviation
|
||||||
sy = sy(stationary_vars);
|
sdy = sdy(stationary_vars);
|
||||||
sy = sy*sy'; %cross products of standard deviations
|
sy = sdy*sdy'; %cross products of standard deviations
|
||||||
Corr_y = NaN*ones(y_nbr,y_nbr);
|
Corr_y = NaN*ones(y_nbr,y_nbr);
|
||||||
Corr_y(stationary_vars,stationary_vars) = Var_y(stationary_vars,stationary_vars)./sy;
|
Corr_y(stationary_vars,stationary_vars) = Var_y(stationary_vars,stationary_vars)./sy;
|
||||||
Corr_yi = NaN*ones(y_nbr,y_nbr,nlags);
|
Corr_yi = NaN*ones(y_nbr,y_nbr,nlags);
|
||||||
|
@ -1060,10 +1060,9 @@ if compute_derivs
|
||||||
dVar_y_tmp(indzeros) = 0;
|
dVar_y_tmp(indzeros) = 0;
|
||||||
dVar_y(stationary_vars,stationary_vars,jpV) = dVar_y_tmp;
|
dVar_y(stationary_vars,stationary_vars,jpV) = dVar_y_tmp;
|
||||||
if useautocorr
|
if useautocorr
|
||||||
%is this correct?[@wmutschl]
|
dsy = 1/2./sdy.*diag(dVar_y(:,:,jpV));
|
||||||
dsy = 1/2./sy.*diag(dVar_y(:,:,jpV));
|
|
||||||
dsy = dsy(stationary_vars);
|
dsy = dsy(stationary_vars);
|
||||||
dsy = dsy*sy'+sy*dsy';
|
dsy = dsy*sdy'+sdy*dsy';
|
||||||
dCorr_y(stationary_vars,stationary_vars,jpV) = (dVar_y(stationary_vars,stationary_vars,jpV).*sy-dsy.*Var_y(stationary_vars,stationary_vars))./(sy.*sy);
|
dCorr_y(stationary_vars,stationary_vars,jpV) = (dVar_y(stationary_vars,stationary_vars,jpV).*sy-dsy.*Var_y(stationary_vars,stationary_vars))./(sy.*sy);
|
||||||
dCorr_y(stationary_vars,stationary_vars,jpV) = dCorr_y(stationary_vars,stationary_vars,jpV)-diag(diag(dCorr_y(stationary_vars,stationary_vars,jpV)))+diag(diag(dVar_y(stationary_vars,stationary_vars,jpV)));
|
dCorr_y(stationary_vars,stationary_vars,jpV) = dCorr_y(stationary_vars,stationary_vars,jpV)-diag(diag(dCorr_y(stationary_vars,stationary_vars,jpV)))+diag(diag(dVar_y(stationary_vars,stationary_vars,jpV)));
|
||||||
end
|
end
|
||||||
|
@ -1138,6 +1137,9 @@ if compute_derivs
|
||||||
+ dD(stationary_vars,:,jpVi)*E_inovzlagi*C(stationary_vars,:)' + D(stationary_vars,:)*dE_inovzlagi_jpVi*C(stationary_vars,:)' + D(stationary_vars,:)*E_inovzlagi*dC(stationary_vars,:,jpVi)';
|
+ dD(stationary_vars,:,jpVi)*E_inovzlagi*C(stationary_vars,:)' + D(stationary_vars,:)*dE_inovzlagi_jpVi*C(stationary_vars,:)' + D(stationary_vars,:)*E_inovzlagi*dC(stationary_vars,:,jpVi)';
|
||||||
end
|
end
|
||||||
if useautocorr
|
if useautocorr
|
||||||
|
dsy = 1/2./sdy.*diag(dVar_y(:,:,jpVi));
|
||||||
|
dsy = dsy(stationary_vars);
|
||||||
|
dsy = dsy*sdy'+sdy*dsy';
|
||||||
dCorr_yi(stationary_vars,stationary_vars,i,jpVi) = (dVar_yi(stationary_vars,stationary_vars,i,jpVi).*sy-dsy.*Var_yi(stationary_vars,stationary_vars,i))./(sy.*sy);
|
dCorr_yi(stationary_vars,stationary_vars,i,jpVi) = (dVar_yi(stationary_vars,stationary_vars,i,jpVi).*sy-dsy.*Var_yi(stationary_vars,stationary_vars,i))./(sy.*sy);
|
||||||
end
|
end
|
||||||
dAi_jpVi = dAi_jpVi*A + Ai*dA(:,:,jpVi);
|
dAi_jpVi = dAi_jpVi*A + Ai*dA(:,:,jpVi);
|
||||||
|
|
Loading…
Reference in New Issue