# The Moment Equation

### Goals

This tutorial covers the use of user-defined moment equations with gmmFit. After this tutorial, you should be able to

## The Moment Equation

The gmmFit procedure requires a pointer to a user-specified moment procedure as an input. There are several concepts to keep in mind when creating your moment procedure:

• Procedures are created in GAUSS by placing commands to be executed between the proc statement and endp statement.
• Values are returned from a function using the retp statement.
• Moment procedures must have the parameter vectors as the first input, a data matrix as a second input and must have a single return.

All moment procedures should take the general form :

//Procedure definition for moment equation
proc (1) = meqn(b, yt, ...);

…

retp(g);
endp;

## Estimating a Linear Model

Consider the case of a linear model:

1. The moments for this model are given by $E[x_t u_t(\theta_0)] = 0$ with $u_t(\theta_0) = y_t - \beta_t x_t$.
2. This inputs for this equation will include the parameter vector, b, the dependent variable matrix, yt, and the independent variable matrix, xt.
//Procedure definition for moment equation
proc (1) = meqn(b, yt, xt);

local ut, dt;

/**  OLS resids         **/
ut = yt - b[1] - b[2]*xt[., 2] - b[3]*xt[., 3];

/**  Moment conditions  **/
dt = ut.*xt;

retp(dt);

endp;

The corresponding call to gmmFit takes a pointer to the moment equation, meqn, as the first input, followed by the y and x matrices.

//Perform estimation
call gmmFit(&meqn, y, x, gctl);

## Estimating an Instrumental Variables Model

Now suppose that we suspect that there is an issue with endogenous variables and wish to use instrumental variables:

1. The moments for this model are given by $E[z u_t(\theta_0)] = 0$ with $u_t(\theta_0) = y_t - \beta_t x_t$.
2. This inputs for this equation now include the parameter vector, b, the dependent variable matrix, yt, the independent variable matrix, xt, and the instruments matrix,zt.
//Procedure definition for moment equation
proc (1) = meqn(b, yt, xt, zt);

local ut, dt;

/**  OLS residuals       **/
ut = yt - b[1] - b[2]*xt[., 2] - b[3]*xt[., 3];

/**  Moment conditions  **/
dt = ut.*zt;

retp(dt);

endp;

The corresponding call to gmmFit again includes a pointer to the moment equation meqn but this time must also include the inputs y, x, and z.

//Perform estimation
call gmmFit(&meqn, y, x, z, gctl);

## Using Multiple Moments

Finally, let's consider the case where we wish to include multiple moment equations. For this example, we will estimate the degrees of freedom of a t-distribution is the second and fourth moments :

1. The moments for this model are given by $E[y^2 - \frac{\nu}{\nu -2}] = 0$ and $E[y^4 - \frac{3\nu^2}{(\nu -2)(\nu - 4)}] = 0$.
2. This inputs for this equation include just the parameter vector, b, the dependent variable matrix, yt. No additional inputs are required.
3. When multiple moments are included, they must be concatenated together and returned as a single output from the moment equation.
//Procedure definition for moment equation
proc(1) = meqn(b, yt);

local g1, g2;

g1 = yt.^2 - b/(b-2);
g2 = yt.^4 - (3*b^2)/((b-2)*(b-4));

retp(g1~g2);

endp;

The corresponding call to gmmFit includes a pointer to the moment equation meqn and y.

//Perform estimation
call gmmFit(&meqn, y);

### Conclusion

Congratulations! You have:

• Defined a moment equation for use in the gmmFit procedure.
• Created a custom moment equation to estimate a linear model.
• Created a custom moment function to estimate an instrumental variables model.
• Estimated a model with multiple moment equations.

The next tutorial describes the model control settings available in the gmmControl structure.

### Have a Specific Question?

Get a real answer from a real person

### Need Support?

Get help from our friendly experts.