GMM Control Settings

Goals

This tutorial will explain the options available in the gmmControl structure and their usage. After this tutorial, you should be able to :

The gmmControl Structure

GAUSS GMM estimation implements pre-determined default modeling parameters to allow you to estimate models with minimal programming. However, you are also able to set custom modeling options using the gmmControl structure. Using the gmmControl structure requires three steps:

  1. Declare an instance of the gmmControl structure.
//Declare 'gctl' to be a 'gmmControl' structure
struct gmmControl gctl;
  1. Fill the created structure with default parameter values using gmmControlCreate.
//Fill 'gctl' with default settings
gctl = gmmControlCreate();
  1. Change the desired modeling parameters using the appropriate gmmControl members.
gctl.method = "iterative";

Modeling method: gctl.method

One of the options that can be controlled with the gmmControl structure is which computation method is used. This is done using the gmmControl structure member gctl.method. There are four modeling options, each discussed in more detail below, that you may use:

  • One-step GMM
  • Two-step GMM
  • Iterative GMM
  • Continuously updating GMM.

One-step GMM

One-step GMM estimation is the simplest estimation technique. It uses the initial weighting matrix in the GMM objective function and estimation is achieved in "one-step" without updating the weighting matrix.

To specify one-step GMM estimation in GAUSS the member method in the gmmControl structure should be set equal to "onestep".

//Specify one-step estimation
gctl.method = "onestep";

Two-step GMM (Default method)

Like one-step estimation, two-step GMM starts with the initial weighting matrix in the GMM objective function. The weight matrix is then updated using the first-step parameter estimates are obtained. Final estimates are found using the updated weight matrix and the parameter estimates from the first step in the objective function.

To specify two-step GMM estimation in GAUSS the member method in the gmmControl structure should be set equal to "twostep":

//Specify two-step estimation
gctl.method = "twostep";

Iterative GMM

Iterative estimation follows the same steps outlined above for two-step GMM estimation:

  1. Pick the initial weight matrix.
  2. Estimate the parameters using the weight initial matrix.
  3. Update the weight matrix using the estimated parameters.
  4. Update parameter estimates using new weight matrix.

However, iterative GMM repeats steps 2-4 until a specified level of convergence is achieved. To specify iterative GMM estimation in GAUSS the member method in the gmmControl structure should be set equal to "iter":

//Specify iterative GMM estimation
gctl.method = "iter";

The iterative estimation process is completed when the change in either the weight matrix or the parameter estimates is less than the specified tolerance levels or the maximum number of iterations is reached. By default, both the weight matrix and parameter tolerances are 1e-5. The default maximum number of iterations is set to 500. These defaults can be changed using the gmmControl struct members gctl.gIter.paramTol, gctl.gIter.wTol, and gctl.gIter.maxIters. For example, consider changing the maximum number of iterations from 500 to 1000:

//Set maximum number of iterations for
//iterative GMM to 1000
gctl.gIter.maxIters = 1000;

Continuous Updating GMM

Continuous updating GMM simultaneously estimates both the weight matrix and parameters using the GMM objective function:

$$ Q(\theta) = T^{-1}\sum_{t=1}^{T}f(\nu_t,\theta_0)'g(\theta)T^{-1}\sum_{t=1}^{T}f(\nu_t,\theta_0) $$

To specify continuously updating GMM estimation in GAUSS the member method in the gmmControl structure should be set equal to "cu":

//Specify continuous updating GMM
gctl.method = "cu";

Initial Weight Matrix: gctl.wInit and gctl.wInitMat

Two members of the gmmControl structure are used to control the initial weight matrix used in the GMM estimation, gctl.wInit and gmm.wInitMat. The member gctl.wInit is a string indicator used to set an internally computed initial weight matrix type.

The gmmFit procedure

  • The default weight matrix for the gmmFit procedure is a $K x K$ identity matrix where $K$ is equal to the number of moments.
  • The only alternative to using the identity matrix is to specify an alternative initial weight matrix using the gmmControl structure member gctl.wInitMat. The specified matrix must be positive definite. For example, consider using an initial weight matrix equal to $\frac{1}{N}(X'X)^{-1}$ in the gmmFit procedure.
//Set initial weight matrix
gctl.wInitMat = invpd( (1/rows(X)) * (X'X) );

The gmmFitIV procedure

  • The default weight matrix for the gmmFitIV procedure is based on the matrix of exogenous variables. Assuming the model's exogenous variables are stored in the matrix, $z$, gmmFitIV uses an initial weight matrix equal to $\frac{1}{N}(z'z)^{-1}$.
  • The weight matrix can be changed to the identity matrix by setting the gmmControl structure member gctl.wInit equal to "identity".
//Use identity matrix as initial weight matrix
gctl.wInit = "identity";

GMM Weight Matrix: gctl.wType

The weight matrix used in the gmmFit and gmmFitIV procedures is controlled using the gctl.wType control structure member. The default GMM weight matrices for both GMM procedures assume serially uncorrelated sequences. However, in addition to the default weighting matrix, a heteroskedastic and autocorrelated robust weighting matrix may be implemented using the gmmControl structure member gctl.wType:

//HAC Weighting Matrix
gctl.wType = "HAC";

The default HAC weighting kernel is the Bartlett kernel. However, the Parzen or Quadratic Spectral kernel may also be specified by changing the gmmControl structure member gctl.hacKernel

//Set HAC Kernel to Parzen
gctl.hacKernel = "parzen";

Conclusion

Congratulations! You have:

  • Declared an instance of the gmmControl structure.
  • Specified the GMM modeling method.
  • Set the initial weighting matrix.
  • Set the weight matrix method.

Now that we have been introduced to the GMM, the GAUSS GMM procedures and their control settings, our next tutorial will work through our first application, GMM for OLS with exogenous regressors.

Have a Specific Question?

Get a real answer from a real person

Need Support?

Get help from our friendly experts.