Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

From |
"Brian P. Poi" <[email protected]> |

To |
[email protected] |

Subject |
Re: st: How to incorporate several dependent variables to the moment evaluating function in gmm? |

Date |
Mon, 26 Nov 2012 09:48:27 -0600 |

On 11/26/2012 08:30 AM, Christoph Jäckel wrote:

Hello Stata experts, I'm just learning Stata and I'm struggling with the following problem. I want to map a time-series regression with several dependent variables into a GMM. Let's make a small example. I have two dependent variables y1 and y2 and one explaining factor x1. Then I get the following moments that should all be zero: E[(y1 - a1 - b1 * x1)] E[(y2 - a2 - b2 * x1)] E[(y1 - a1 - b1 * x1)x1] E[(y2 - a2 - b2 * x1)x1] where a1, a2, b1, and b2 are the parameters to estimate. I found this link on the list that deals with several equations in a GMM: http://www.stata.com/statalist/archive/2011-06/msg00363.html However, as far as I can see, the dependent variable is not changed. What I actually want: I want to pass a list of vectors to the moment evaluating function and create the relevant moments for each vector of that list. Those vectors are the dependent variables. I think it's clearer when I show you what I tried so far. _______________ sysuse auto, clear program mygmm version 12 syntax varlist [if] , at(name) mylhs(varlist) local eq1 : word 1 of `mylhs' local eq2 : word 2 of `mylhs' *Approach 1: Breaks with error "varlist not allowed" * quietly replace `eq1' = `eq1' - `at'[1,1] - `at'[1,3]*turn * quietly replace `eq2' = `eq2' - `at'[1,2] - `at'[1,4]*turn *Approach 2: Breaks with error "varlist not allowed" local j=1 foreach lhs of varlist `mylhs' { replace `mylhs' = `mylhs' - `at'[1,j] - `at'[1,2 + j]*turn j = j + 1 } end gmm mygmm, nequations(4) nparameters(4) mylhs(mpg headroom) instruments(turn) winitial(identity) _______________ Here, I took the example from the link above, but I am now trying to have two different dependent variables, namely mpg and headroom. I tried two approaches: the first is pretty similar to the one given in the link, the second just loops to the mylhs list. Both don't work, and I don't quite understand why. I hope I passed the arguments correctly, but to be fair, I'm not sure if I do. I don't quite get the syntax of the example in the link, to start with. What should a moment evaluating function do exactly? What should it return? In the examples I found, it always sets `varlist' to the moments that should be zero, which makes sense to me. For instance, here (http://www.stata.com/features/generalized-method-of-moments/gmm.pdf) on p. 27 the last line is replace `varlist' = `mylhs' - `mu'*`ybar'/`mubar' `if' I think I get this: `varlist' is set to an expression that depends on the parameters and then a search for the parameters is started that should sets `varlist' to zero (since Moments=Parameters). My problem is that my `varlist' is not just one vector as in the examples I found, but a list of factors. Note that the above example is simple enough to just give the formulas: _______________ #delimit ; gmm (mpg - ({alpha1=0} + {beta1=0}*turn)) (headroom - ({alpha2=0} + {beta2=0}*turn)) , inst (turn) onestep winitial(identity) ; #delimit cr _______________ However, I want to run more complicated models and therefore I need to know how to write moment evaluating functions correctly. Any help is greatly appreciated. Christoph

Christoph, You are almost there. The `varlist' in the evaluator function is the list of variables into which you are to place the values of the residual functions. That's different from the list of variables you specify in your mylhs() option. For simplicity, let me swap the order of two of your moment equations:

E[(y1 - a1 - b1 * x1)] E[(y1 - a1 - b1 * x1)x1] E[(y2 - a2 - b2 * x1)] E[(y2 - a2 - b2 * x1)x1]

You have two residual functions: (y1 - a1 - b1 * x1) and (y2 - a2 - b2 * x2), each interacted with a constant term and x1, yielding a total of four moment conditions. When you specify nequations(2) (not 4 as you tried), `varlist' will have two elements where you are to place the two residual functions. Here's working version of your program: sysuse auto, clear program mygmm version 12 syntax varlist [if] , at(name) mylhs(varlist) local eq1 : word 1 of `varlist' local eq2 : word 2 of `varlist' local y1 : word 1 of `mylhs' local y2 : word 2 of `mylhs' quietly replace `eq1' = `y1' - `at'[1,1] - `at'[1,3]*turn quietly replace `eq2' = `y2' - `at'[1,2] - `at'[1,4]*turn end gmm mygmm, nequations(2) nparameters(4) mylhs(mpg headroom) /// instruments(turn) winitial(identity) onestep Because we specified instruments(turn) without any suboptions, both turn and a constant will be used as instruments for each of the residual functions. If you use your code

#delimit ; gmm (mpg - ({alpha1=0} + {beta1=0}*turn)) (headroom - ({alpha2=0} + {beta2=0}*turn)) , inst (turn) onestep winitial(identity) ; #delimit cr

you'll get the same results, except that the second and third parameters will be swapped. In the evaluator program, you take the second element of `at' to be alpha2 and the third element to be beta2. When -gmm- parses your substitutable expression in the latter case, it will come across beta1 before alpha2, and it builds up the parameter vector in the order in which it finds parameters. -- Brian Poi -- [email protected] * * For searches and help try: * http://www.stata.com/help.cgi?search * http://www.stata.com/support/faqs/resources/statalist-faq/ * http://www.ats.ucla.edu/stat/stata/

**References**:

- Prev by Date:
**re: Re: st: Analyzing multiple mediators** - Next by Date:
**Re: st: comparing coefficients across 2 models** - Previous by thread:
**st: How to incorporate several dependent variables to the moment evaluating function in gmm?** - Next by thread:
**Re: st: How to incorporate several dependent variables to the moment evaluating function in gmm?** - Index(es):