X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?p=CreaPhase.git;a=blobdiff_plain;f=octave_packages%2Feconometrics-1.0.8%2Fgmm_results.m;fp=octave_packages%2Feconometrics-1.0.8%2Fgmm_results.m;h=c5d0a1b51593538563ee2d6847fac892bfcac7aa;hp=0000000000000000000000000000000000000000;hb=c880e8788dfc484bf23ce13fa2787f2c6bca4863;hpb=1705066eceaaea976f010f669ce8e972f3734b05 diff --git a/octave_packages/econometrics-1.0.8/gmm_results.m b/octave_packages/econometrics-1.0.8/gmm_results.m new file mode 100644 index 0000000..c5d0a1b --- /dev/null +++ b/octave_packages/econometrics-1.0.8/gmm_results.m @@ -0,0 +1,105 @@ +# Copyright (C) 2003,2004,2005 Michael Creel +# +# This program 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 2 of the License, or +# (at your option) any later version. +# +# This program 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 this program; If not, see . + +# usage: [theta, V, obj_value] = +# gmm_results(theta, data, weight, moments, momentargs, names, title, unscale, control, nslaves) +# +# inputs: +# theta: column vector initial parameters +# data: data matrix +# weight: the GMM weight matrix +# moments: name of function computes the moments +# (should return nXg matrix of contributions) +# momentargs: (cell) additional inputs needed to compute moments. +# May be empty ("") +# names: vector of parameter names +# e.g., names = char("param1", "param2"); +# title: string, describes model estimated +# unscale: (optional) cell that holds means and std. dev. of data +# (see scale_data) +# control: (optional) BFGS or SA controls (see bfgsmin and samin). May be empty (""). +# nslaves: (optional) number of slaves if executed in parallel +# (requires MPITB) +# +# outputs: +# theta: GMM estimated parameters +# V: estimate of covariance of parameters. Assumes the weight matrix +# is optimal (inverse of covariance of moments) +# obj_value: the value of the GMM objective function +# +# please type "gmm_example" while in octave to see an example + + +function [theta, V, obj_value] = gmm_results(theta, data, weight, moments, momentargs, names, title, unscale, control, nslaves) + + if nargin < 10 nslaves = 0; endif # serial by default + + if nargin < 9 + [theta, obj_value, convergence] = gmm_estimate(theta, data, weight, moments, momentargs, "", nslaves); + else + [theta, obj_value, convergence] = gmm_estimate(theta, data, weight, moments, momentargs, control, nslaves); + endif + + + m = feval(moments, theta, data, momentargs); # find out how many obsns. we have + n = rows(m); + + if convergence == 1 + convergence="Normal convergence"; + else + convergence="No convergence"; + endif + + V = gmm_variance(theta, data, weight, moments, momentargs); + + # unscale results if argument has been passed + # this puts coefficients into scale corresponding to the original data + if nargin > 7 + if iscell(unscale) + [theta, V] = unscale_parameters(theta, V, unscale); + endif + endif + + [theta, V] = delta_method("parameterize", theta, {data, moments, momentargs}, V); + + k = rows(theta); + se = sqrt(diag(V)); + + printf("\n\n******************************************************\n"); + disp(title); + printf("\nGMM Estimation Results\n"); + printf("BFGS convergence: %s\n", convergence); + printf("\nObjective function value: %f\n", obj_value); + printf("Observations: %d\n", n); + + junk = "X^2 test"; + df = n - k; + if df > 0 + clabels = char("Value","df","p-value"); + a = [n*obj_value, df, 1 - chi2cdf(n*obj_value, df)]; + printf("\n"); + prettyprint(a, junk, clabels); + else + disp("\nExactly identified, no spec. test"); + end; + + # results for parameters + a =[theta, se, theta./se, 2 - 2*normcdf(abs(theta ./ se))]; + clabels = char("estimate", "st. err", "t-stat", "p-value"); + printf("\n"); + prettyprint(a, names, clabels); + + printf("******************************************************\n"); +endfunction