Goals
This tutorial will explain the options available in the gmmControl
structure and their usage. After this tutorial, you should be able to :
- Declare an instance of the
gmmControl
structure - Specify the GMM modeling method
- Control the initial weighting matrix
- Set the weight matrix method
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:
- Declare an instance of the
gmmControl
structure.
//Declare 'gctl' to be a 'gmmControl' structure
struct gmmControl gctl;
- Fill the created structure with default parameter values using
gmmControlCreate
.
//Fill 'gctl' with default settings
gctl = gmmControlCreate();
- 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:
- Pick the initial weight matrix.
- Estimate the parameters using the weight initial matrix.
- Update the weight matrix using the estimated parameters.
- 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 membergctl.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 thegmmFit
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 membergctl.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.