Bug fix for univariate KF (nobs was not defined, replaced with pp) + provisions fro eliminating dsge_likelihood_hh function;
parent
bef3377a81
commit
bb02c4d6df
|
@ -337,7 +337,7 @@ kalman_algo = DynareOptions.kalman_algo;
|
||||||
% resetting measurement errors covariance matrix for univariate filters
|
% resetting measurement errors covariance matrix for univariate filters
|
||||||
if (kalman_algo == 2) || (kalman_algo == 4)
|
if (kalman_algo == 2) || (kalman_algo == 4)
|
||||||
if isequal(H,0)
|
if isequal(H,0)
|
||||||
H = zeros(nobs,1);
|
H = zeros(pp,1);
|
||||||
mmm = mm;
|
mmm = mm;
|
||||||
else
|
else
|
||||||
if all(all(abs(H-diag(diag(H)))<1e-14))% ie, the covariance matrix is diagonal...
|
if all(all(abs(H-diag(diag(H)))<1e-14))% ie, the covariance matrix is diagonal...
|
||||||
|
@ -350,7 +350,7 @@ if (kalman_algo == 2) || (kalman_algo == 4)
|
||||||
R = blkdiag(R,eye(pp));
|
R = blkdiag(R,eye(pp));
|
||||||
Pstar = blkdiag(Pstar,H);
|
Pstar = blkdiag(Pstar,H);
|
||||||
Pinf = blckdiag(Pinf,zeros(pp));
|
Pinf = blckdiag(Pinf,zeros(pp));
|
||||||
H = zeros(nobs,1);
|
H = zeros(pp,1);
|
||||||
mmm = mm+pp;
|
mmm = mm+pp;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -402,18 +402,18 @@ switch DynareOptions.lik_init
|
||||||
if (kalman_algo==3)
|
if (kalman_algo==3)
|
||||||
% Multivariate Diffuse Kalman Filter
|
% Multivariate Diffuse Kalman Filter
|
||||||
if no_missing_data_flag
|
if no_missing_data_flag
|
||||||
[dLIK,tmp,a,Pstar] = kalman_filter_d(Y, 1, size(Y,2), ...
|
[dLIK,dlik,a,Pstar] = kalman_filter_d(Y, 1, size(Y,2), ...
|
||||||
zeros(mm,1), Pinf, Pstar, ...
|
zeros(mm,1), Pinf, Pstar, ...
|
||||||
kalman_tol, riccati_tol, DynareOptions.presample, ...
|
kalman_tol, riccati_tol, DynareOptions.presample, ...
|
||||||
T,R,Q,H,Z,mm,pp,rr);
|
T,R,Q,H,Z,mm,pp,rr);
|
||||||
else
|
else
|
||||||
[dLIK,tmp,a,Pstar] = missing_observations_kalman_filter_d(DynareDataset.missing.aindex,DynareDataset.missing.number_of_observations,DynareDataset.missing.no_more_missing_observations, ...
|
[dLIK,dlik,a,Pstar] = missing_observations_kalman_filter_d(DynareDataset.missing.aindex,DynareDataset.missing.number_of_observations,DynareDataset.missing.no_more_missing_observations, ...
|
||||||
Y, 1, size(Y,2), ...
|
Y, 1, size(Y,2), ...
|
||||||
zeros(mm,1), Pinf, Pstar, ...
|
zeros(mm,1), Pinf, Pstar, ...
|
||||||
kalman_tol, riccati_tol, DynareOptions.presample, ...
|
kalman_tol, riccati_tol, DynareOptions.presample, ...
|
||||||
T,R,Q,H,Z,mm,pp,rr);
|
T,R,Q,H,Z,mm,pp,rr);
|
||||||
end
|
end
|
||||||
diffuse_periods = length(tmp);
|
diffuse_periods = length(dlik);
|
||||||
if isinf(dLIK)
|
if isinf(dLIK)
|
||||||
% Go to univariate diffuse filter if singularity problem.
|
% Go to univariate diffuse filter if singularity problem.
|
||||||
singular_diffuse_filter = 1;
|
singular_diffuse_filter = 1;
|
||||||
|
@ -422,7 +422,7 @@ switch DynareOptions.lik_init
|
||||||
if singular_diffuse_filter || (kalman_algo==4)
|
if singular_diffuse_filter || (kalman_algo==4)
|
||||||
% Univariate Diffuse Kalman Filter
|
% Univariate Diffuse Kalman Filter
|
||||||
if isequal(H,0)
|
if isequal(H,0)
|
||||||
H1 = zeros(nobs,1);
|
H1 = zeros(pp,1);
|
||||||
mmm = mm;
|
mmm = mm;
|
||||||
else
|
else
|
||||||
if all(all(abs(H-diag(diag(H)))<1e-14))% ie, the covariance matrix is diagonal...
|
if all(all(abs(H-diag(diag(H)))<1e-14))% ie, the covariance matrix is diagonal...
|
||||||
|
@ -435,21 +435,21 @@ switch DynareOptions.lik_init
|
||||||
R = blkdiag(R,eye(pp));
|
R = blkdiag(R,eye(pp));
|
||||||
Pstar = blkdiag(Pstar,H);
|
Pstar = blkdiag(Pstar,H);
|
||||||
Pinf = blckdiag(Pinf,zeros(pp));
|
Pinf = blckdiag(Pinf,zeros(pp));
|
||||||
H1 = zeros(nobs,1);
|
H1 = zeros(pp,1);
|
||||||
mmm = mm+pp;
|
mmm = mm+pp;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
% no need to test again for correlation elements
|
% no need to test again for correlation elements
|
||||||
correlated_errors_have_been_checked = 1;
|
correlated_errors_have_been_checked = 1;
|
||||||
|
|
||||||
[dLIK,tmp,a,Pstar] = univariate_kalman_filter_d(DynareDataset.missing.aindex,...
|
[dLIK,dlik,a,Pstar] = univariate_kalman_filter_d(DynareDataset.missing.aindex,...
|
||||||
DynareDataset.missing.number_of_observations,...
|
DynareDataset.missing.number_of_observations,...
|
||||||
DynareDataset.missing.no_more_missing_observations, ...
|
DynareDataset.missing.no_more_missing_observations, ...
|
||||||
Y, 1, size(Y,2), ...
|
Y, 1, size(Y,2), ...
|
||||||
zeros(mmm,1), Pinf, Pstar, ...
|
zeros(mmm,1), Pinf, Pstar, ...
|
||||||
kalman_tol, riccati_tol, DynareOptions.presample, ...
|
kalman_tol, riccati_tol, DynareOptions.presample, ...
|
||||||
T,R,Q,H1,Z,mmm,pp,rr);
|
T,R,Q,H1,Z,mmm,pp,rr);
|
||||||
diffuse_periods = length(tmp);
|
diffuse_periods = length(dlik);
|
||||||
end
|
end
|
||||||
case 4% Start from the solution of the Riccati equation.
|
case 4% Start from the solution of the Riccati equation.
|
||||||
if kalman_algo ~= 2
|
if kalman_algo ~= 2
|
||||||
|
@ -588,7 +588,7 @@ if ((kalman_algo==1) || (kalman_algo==3))% Multivariate Kalman Filter
|
||||||
[err, LIK] = block_kalman_filter(T,R,Q,H,Pstar,Y,start,Z,kalman_tol,riccati_tol, Model.nz_state_var, Model.n_diag, Model.nobs_non_statevar);
|
[err, LIK] = block_kalman_filter(T,R,Q,H,Pstar,Y,start,Z,kalman_tol,riccati_tol, Model.nz_state_var, Model.n_diag, Model.nobs_non_statevar);
|
||||||
mexErrCheck('block_kalman_filter', err);
|
mexErrCheck('block_kalman_filter', err);
|
||||||
else
|
else
|
||||||
LIK = kalman_filter(Y,diffuse_periods+1,size(Y,2), ...
|
[LIK,lik] = kalman_filter(Y,diffuse_periods+1,size(Y,2), ...
|
||||||
a,Pstar, ...
|
a,Pstar, ...
|
||||||
kalman_tol, riccati_tol, ...
|
kalman_tol, riccati_tol, ...
|
||||||
DynareOptions.presample, ...
|
DynareOptions.presample, ...
|
||||||
|
@ -607,7 +607,7 @@ if ((kalman_algo==1) || (kalman_algo==3))% Multivariate Kalman Filter
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
LIK = missing_observations_kalman_filter(DynareDataset.missing.aindex,DynareDataset.missing.number_of_observations,DynareDataset.missing.no_more_missing_observations,Y,diffuse_periods+1,size(Y,2), ...
|
[LIK,lik] = missing_observations_kalman_filter(DynareDataset.missing.aindex,DynareDataset.missing.number_of_observations,DynareDataset.missing.no_more_missing_observations,Y,diffuse_periods+1,size(Y,2), ...
|
||||||
a, Pstar, ...
|
a, Pstar, ...
|
||||||
kalman_tol, DynareOptions.riccati_tol, ...
|
kalman_tol, DynareOptions.riccati_tol, ...
|
||||||
DynareOptions.presample, ...
|
DynareOptions.presample, ...
|
||||||
|
@ -622,6 +622,9 @@ if ((kalman_algo==1) || (kalman_algo==3))% Multivariate Kalman Filter
|
||||||
else
|
else
|
||||||
if DynareOptions.lik_init==3
|
if DynareOptions.lik_init==3
|
||||||
LIK = LIK + dLIK;
|
LIK = LIK + dLIK;
|
||||||
|
if analytic_derivation==0 && nargout==2,
|
||||||
|
lik = [dlik; lik];
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -631,7 +634,7 @@ if (kalman_algo==2) || (kalman_algo==4)
|
||||||
% resetting measurement error covariance matrix when necessary %
|
% resetting measurement error covariance matrix when necessary %
|
||||||
if ~correlated_errors_have_been_checked
|
if ~correlated_errors_have_been_checked
|
||||||
if isequal(H,0)
|
if isequal(H,0)
|
||||||
H = zeros(nobs,1);
|
H = zeros(pp,1);
|
||||||
mmm = mm;
|
mmm = mm;
|
||||||
else
|
else
|
||||||
if all(all(abs(H-diag(diag(H)))<1e-14))% ie, the covariance matrix is diagonal...
|
if all(all(abs(H-diag(diag(H)))<1e-14))% ie, the covariance matrix is diagonal...
|
||||||
|
@ -644,20 +647,23 @@ if (kalman_algo==2) || (kalman_algo==4)
|
||||||
R = blkdiag(R,eye(pp));
|
R = blkdiag(R,eye(pp));
|
||||||
Pstar = blkdiag(Pstar,H);
|
Pstar = blkdiag(Pstar,H);
|
||||||
Pinf = blckdiag(Pinf,zeros(pp));
|
Pinf = blckdiag(Pinf,zeros(pp));
|
||||||
H = zeros(nobs,1);
|
H = zeros(pp,1);
|
||||||
mmm = mm+pp;
|
mmm = mm+pp;
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
LIK = univariate_kalman_filter(DynareDataset.missing.aindex,DynareDataset.missing.number_of_observations,DynareDataset.missing.no_more_missing_observations,Y,diffuse_periods+1,size(Y,2), ...
|
[LIK, lik] = univariate_kalman_filter(DynareDataset.missing.aindex,DynareDataset.missing.number_of_observations,DynareDataset.missing.no_more_missing_observations,Y,diffuse_periods+1,size(Y,2), ...
|
||||||
a,Pstar, ...
|
a,Pstar, ...
|
||||||
DynareOptions.kalman_tol, ...
|
DynareOptions.kalman_tol, ...
|
||||||
DynareOptions.riccati_tol, ...
|
DynareOptions.riccati_tol, ...
|
||||||
DynareOptions.presample, ...
|
DynareOptions.presample, ...
|
||||||
T,Q,R,H,Z,mmm,pp,rr,diffuse_periods);
|
T,Q,R,H,Z,mmm,pp,rr,Zflag,diffuse_periods);
|
||||||
if DynareOptions.lik_init==3
|
if DynareOptions.lik_init==3
|
||||||
LIK = LIK+dLIK;
|
LIK = LIK+dLIK;
|
||||||
|
if analytic_derivation==0 && nargout==2,
|
||||||
|
lik = [dlik; lik];
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -695,3 +701,8 @@ DynareOptions.kalman_algo = kalman_algo;
|
||||||
|
|
||||||
% Update the penalty.
|
% Update the penalty.
|
||||||
penalty = fval;
|
penalty = fval;
|
||||||
|
|
||||||
|
if analytic_derivation==0 && nargout==2,
|
||||||
|
lik=lik(start:end,:);
|
||||||
|
DLIK=[-lnprior; lik(:)];
|
||||||
|
end
|
||||||
|
|
Loading…
Reference in New Issue