method_of_moments: refactor J-Test
parent
07b62fe554
commit
e025d56a59
|
@ -0,0 +1,67 @@
|
||||||
|
function oo_ = Jtest(xparam, objective_function, Woptflag, oo_, options_mom_, bayestopt_, Bounds, estim_params_, M_, nobs)
|
||||||
|
% function oo_ = Jtest(xparam, objective_function, Woptflag, oo_, options_mom_, bayestopt_, Bounds, estim_params_, M_, nobs)
|
||||||
|
% -------------------------------------------------------------------------
|
||||||
|
% Computes the J-test statistic and p-value for a GMM/SMM estimation
|
||||||
|
% =========================================================================
|
||||||
|
% INPUTS
|
||||||
|
% xparam: [vector] estimated parameter vector
|
||||||
|
% objective_function: [function handle] objective function
|
||||||
|
% Woptflag: [logical] flag if optimal weighting matrix has already been computed
|
||||||
|
% oo_: [struct] results
|
||||||
|
% options_mom_: [struct] options
|
||||||
|
% bayestopt_: [struct] information on priors
|
||||||
|
% Bounds: [struct] bounds on parameters
|
||||||
|
% estim_params_: [struct] information on estimated parameters
|
||||||
|
% M_: [struct] information on the model
|
||||||
|
% nobs: [scalar] number of observations
|
||||||
|
% -------------------------------------------------------------------------
|
||||||
|
% OUTPUT
|
||||||
|
% oo_: [struct] updated results
|
||||||
|
% -------------------------------------------------------------------------
|
||||||
|
% This function is called by
|
||||||
|
% o mom.run
|
||||||
|
% -------------------------------------------------------------------------
|
||||||
|
% This function calls
|
||||||
|
% o mom.objective_function
|
||||||
|
% o mom.optimal_weighting_matrix
|
||||||
|
% =========================================================================
|
||||||
|
% Copyright © 2023 Dynare Team
|
||||||
|
%
|
||||||
|
% This file is part of Dynare.
|
||||||
|
%
|
||||||
|
% Dynare is 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.
|
||||||
|
%
|
||||||
|
% Dynare 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.
|
||||||
|
%
|
||||||
|
% You should have received a copy of the GNU General Public License
|
||||||
|
% along with Dynare. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
% =========================================================================
|
||||||
|
|
||||||
|
if options_mom_.mom.mom_nbr > length(xparam)
|
||||||
|
% Get optimal weighting matrix for J test, if necessary
|
||||||
|
if ~Woptflag
|
||||||
|
W_opt = mom.optimal_weighting_matrix(oo_.mom.m_data, oo_.mom.model_moments, options_mom_.mom.bartlett_kernel_lag);
|
||||||
|
oo_J = oo_;
|
||||||
|
oo_J.mom.Sw = chol(W_opt);
|
||||||
|
fval = feval(objective_function, xparam, Bounds, oo_J, estim_params_, M_, options_mom_, bayestopt_);
|
||||||
|
else
|
||||||
|
fval = oo_.mom.Q;
|
||||||
|
end
|
||||||
|
% Compute J statistic
|
||||||
|
if strcmp(options_mom_.mom.mom_method,'SMM')
|
||||||
|
Variance_correction_factor = options_mom_.mom.variance_correction_factor;
|
||||||
|
elseif strcmp(options_mom_.mom.mom_method,'GMM')
|
||||||
|
Variance_correction_factor = 1;
|
||||||
|
end
|
||||||
|
oo_.mom.J_test.j_stat = nobs*Variance_correction_factor*fval/options_mom_.mom.weighting_matrix_scaling_factor;
|
||||||
|
oo_.mom.J_test.degrees_freedom = length(oo_.mom.model_moments)-length(xparam);
|
||||||
|
oo_.mom.J_test.p_val = 1-chi2cdf(oo_.mom.J_test.j_stat, oo_.mom.J_test.degrees_freedom);
|
||||||
|
fprintf('\nValue of J-test statistic: %f\n',oo_.mom.J_test.j_stat);
|
||||||
|
fprintf('p-value of J-test statistic: %f\n',oo_.mom.J_test.p_val);
|
||||||
|
end
|
|
@ -569,39 +569,14 @@ if strcmp(options_mom_.mom.mom_method,'GMM') || strcmp(options_mom_.mom.mom_meth
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
% -------------------------------------------------------------------------
|
|
||||||
% Step 8: J test
|
|
||||||
% -------------------------------------------------------------------------
|
|
||||||
if options_mom_.mom.mom_nbr > length(xparam1)
|
|
||||||
%get optimal weighting matrix for J test, if necessary
|
|
||||||
if ~Woptflag
|
|
||||||
W_opt = mom.optimal_weighting_matrix(oo_.mom.m_data, oo_.mom.model_moments, options_mom_.mom.bartlett_kernel_lag);
|
|
||||||
oo_j=oo_;
|
|
||||||
oo_j.mom.Sw = chol(W_opt);
|
|
||||||
[fval] = feval(objective_function, xparam1, Bounds, oo_j, estim_params_, M_, options_mom_);
|
|
||||||
end
|
|
||||||
|
|
||||||
% Compute J statistic
|
|
||||||
if strcmp(options_mom_.mom.mom_method,'SMM')
|
|
||||||
Variance_correction_factor = options_mom_.mom.variance_correction_factor;
|
|
||||||
elseif strcmp(options_mom_.mom.mom_method,'GMM')
|
|
||||||
Variance_correction_factor=1;
|
|
||||||
end
|
|
||||||
oo_.mom.J_test.j_stat = dataset_.nobs*Variance_correction_factor*fval/options_mom_.mom.weighting_matrix_scaling_factor;
|
|
||||||
oo_.mom.J_test.degrees_freedom = length(oo_.mom.model_moments)-length(xparam1);
|
|
||||||
oo_.mom.J_test.p_val = 1-chi2cdf(oo_.mom.J_test.j_stat, oo_.mom.J_test.degrees_freedom);
|
|
||||||
fprintf('\nvalue of J-test statistic: %f\n',oo_.mom.J_test.j_stat)
|
|
||||||
fprintf('p-value of J-test statistic: %f\n',oo_.mom.J_test.p_val)
|
|
||||||
end
|
|
||||||
|
|
||||||
|
|
||||||
% -------------------------------------------------------------------------
|
% -------------------------------------------------------------------------
|
||||||
% display final estimation results
|
% display final estimation results
|
||||||
% -------------------------------------------------------------------------
|
% -------------------------------------------------------------------------
|
||||||
if strcmp(options_mom_.mom.mom_method,'SMM') || strcmp(options_mom_.mom.mom_method,'GMM')
|
if strcmp(options_mom_.mom.mom_method,'SMM') || strcmp(options_mom_.mom.mom_method,'GMM')
|
||||||
% Store results in output structure
|
% Store results in output structure
|
||||||
oo_.mom = display_estimation_results_table(xparam1,SE,M_,options_mom_,estim_params_,bayestopt_,oo_.mom,prior_dist_names,options_mom_.mom.mom_method,lower(options_mom_.mom.mom_method));
|
oo_.mom = display_estimation_results_table(xparam1,SE,M_,options_mom_,estim_params_,bayestopt_,oo_.mom,prior_dist_names,options_mom_.mom.mom_method,lower(options_mom_.mom.mom_method));
|
||||||
|
% J test
|
||||||
|
oo_ = mom.Jtest(xparam1, objective_function, Woptflag, oo_, options_mom_, bayestopt_, Bounds, estim_params_, M_, dataset_.nobs);
|
||||||
title = ['Comparison of data moments and model moments (',options_mom_.mom.mom_method,')'];
|
title = ['Comparison of data moments and model moments (',options_mom_.mom.mom_method,')'];
|
||||||
headers = {'Moment','Data','Model'};
|
headers = {'Moment','Data','Model'};
|
||||||
for jm = 1:size(M_.matched_moments,1)
|
for jm = 1:size(M_.matched_moments,1)
|
||||||
|
|
Loading…
Reference in New Issue