Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down at the end of May, and its replacement, statalist.org is already up and running.


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

Re: st: -gmm- Heckman problem


From   Nick Cox <njcoxstata@gmail.com>
To   "statalist@hsphsun2.harvard.edu" <statalist@hsphsun2.harvard.edu>
Subject   Re: st: -gmm- Heckman problem
Date   Wed, 19 Sep 2012 01:30:35 +0100

Thanks for fixing the post. The nesting of macros implies that the listing of instruments here includes, in either case, an expression, whereas the syntax is that only a varlist is allowed in that place. At a minimum, I guess all your instruments must already exist as variables at the time of calling -heckman-. Whether your (implied) instruments make sense I can't say.

Nick

Use -macro list- before your final command to see the consequences of your definitions.

Nick

On 18 Sep 2012, at 22:12, shetty sandeep <getsane@hotmail.com> wrote:

Hello Nick,

I am sorry about not using the initial capitals for proper nouns. I will keep that in mind.

The $mills in the previous email is a typo only in the email and not in the code. In the code it is $mil - this I define. I am pasting the full code again. When I run the code (pasted below) I get some errors. I describe them below.

---------------------
*Main code
global xb "{b1}*tage+{b2}*sqage+{b3}*child_less_18+{b4}*marry+{b5} *faminc+{b6}*efnp+{b7}*metro+{b8}*race+{b9}*firmsize+{b0}"
global phi "normalden($xb)"
global  Phi "normal($xb)"
global mil "$phi/ $Phi" // calculating the Inverse Mills ratio global a1 "($phi/($Phi*(1-$Phi)))*(trad-$Phi)" // derivative of the selection likelihood. Here trad is the dummy for observed log(wage)

//eq 2
global xb2 "{beta1}*tage+{beta2}*sqage+{beta3}*marry+{beta4}*metro+ {beta5}*race+{beta6}*firmsize+{beta0}" // wage equation


//First gmm command
gmm (eq1:$a1)(eq2:lnwage-$xb2-{gamma}*($phi/$Phi)), ///
instruments(eq1: tage sqage child_less_18 marry faminc efnp metro race firmsize) /// instruments(eq2: tage sqage marry metro race firmsize $mil) winitial (identity)
------------------------

When I run the above gmm command where instruments for the second equation includes $mil, I get the following error

normalden({b1}*tage+{b2}*sqage+{b3}*rfoklt18+{b4}*marry+{b5}*faminc+ {b6}*efnp+{b7}*metro+{b8}*r
ace+{b9}*firmsize+{b0})/normal
numlist in operator invalid

I have checked the other parts of the code and this error is mainly to do with the $mil as an instrument in the gmm command.

Secondly,
When I run the gmm code replacing $mil with $phi and $Phi as instruments as below

gmm (eq1:$a1)(eq2:lnwage-$xb2-{gamma}*($phi/$Phi)), ///
instruments(eq1: tage sqage rfoklt18 marry faminc efnp metro race firmsize) /// instruments(eq2: tage sqage marry metro race firmsize $phi $Phi) winitial(identity)

I get the following error as "{ Invalid name"

I would like to know why is this the case and how should I specify the Inverse Mills ratio ($mil) as an instrument in the -gmm- command?

Thank you for any help.

----------------------------------------
From: njcoxstata@gmail.com
To: statalist@hsphsun2.harvard.edu
Subject: Re: st: -gmm- heckman problem
Date: Tue, 18 Sep 2012 21:02:20 +0100

According to this, you define $mil, but don't use it, and try to use
$mills, but don't define it. Otherwise put, what you are showing us
appears to be incomplete at best, or even incorrect. Even if that's
typos as far as you are concerned, nevertheless it's hard to figure
out what you expect us to figure out if you don't show us code that
should be expected to work.

Pedantry corner: Heckman is a
major figure, and Mills was a minor figure; either way their names get
initial capitals.

Nick



On 18 Sep 2012, at 20:42, shetty sandeep <getsane@hotmail.com> wrote:


I am trying to estimate a heckman wage model using gmm. But I am
facing a problem with the stata -gmm- command. I consistently get an
error as "{ invalid name". The inverse mills ratio in the second
stage moment condition seems to be the problem. My code is pasted
below. It is likely that I may have some conceptual issues with gmm
heckman. Any help is greatly appreciated.

~~~~~~~~~~~~code~~~~~~~~~~
global xb "{b1}*tage+{b2}*sqage+{b3}*child18+{b4}*marry+{b5}*faminc+
{b6}*famsize+{b7}*metro+{b8}*race+{b9}*firmsize+{b0}" //>0
global phi "normalden($xb)" //>0
global Phi "normal($xb)" //>0
global mil "$phi/$Phi" //>0
global a1 "($phi/($Phi*(1-$Phi)))*(trad-$Phi)" // derivative of the
selection likelihood
//eq 2
global xb2 "{beta1=0.02}*tage+{beta2=-0.0004}*sqage+{beta3=-0.007}
*marry+{beta4}*metro+{beta5}*race+{beta6=1}*firmsize+{beta0=1}" //
wage equation
gmm (eq1: $a1)(eq2: lwr1-$xb2-{gamma}*($phi/$Phi)), ///
instruments(eq1: tage sqage child18 marry faminc famsize metro race
firmsize) ///
instruments(eq2: tage sqage marry metro race firmsize $phi $Phi)
winitial(identity)
~~~~~~~~~~~~~~~~~~~~~~~~~~

I have also tried using $mills as an instrument in which case I get
an error as "numlist in operator invalid". I figured out that the
division operator "/ " in instruments option of gmm is reserved for
lags.

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/statalist/faq
*   http://www.ats.ucla.edu/stat/stata/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index