[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

Re: st: RE: Tobit coefficients

From   "Austin Nichols" <>
Subject   Re: st: RE: Tobit coefficients
Date   Fri, 27 Jul 2007 11:34:55 -0400

Vitor <>:
As I have pointed out before on this list, e.g.
-tobit- is inappropriate if the zeros are not censored values
(representing a negative y* that is observed as y=0).  If the zeros
are simply a point mass in the distribution of a nonnegative dep var,
then -poisson- or -glm- are better options.  In your case, the fact
that many people receive no money from parents does not mean that
their parents would like to take money from them (make a negative
transfer), but are prevented by law from doing so.  I would use
-poisson- to estimate the response of ln(y) including zeros of y in
the estimation,  and then predict as usual.  Why do you need a
prediction conditional on y>0 anyway?  Just to ensure predictions are
nonnegative?  Bad reason!

Though -poisson- is designed for count variables, it works well for
any model where E(y|x)=exp(xb). See Wooldridge
( p.651 and surrounding text:
"A nice property of the Poisson QMLE is that it retains some
efficiency for certain departures from the Poisson assumption."

In any case, the better way to get the predictions is to predict over
the whole estimation sample, but first replace 1) AFTER=1, TREAT=1,
TREAT*AFTER=1, then  2) AFTER=1, TREAT=0, TREAT*AFTER=0, etc. to
generate predictions *for each observation* under different
counterfactuals, then compare the means (the use of -poisson- is
illustrative--any estimation command can be used, even -tobit-):

 sysuse auto, clear
 replace mpg=max(0,mpg-20)
 g treat=rep78>3 if !mi(rep78)
 la var treat "Fake Treatment Var"
 ren for after
 la var after "Fake After Var"
 g ta=treat*after
 poisson mpg len treat after ta
 predict m if e(sample)
 replace treat =1
 replace after=1
 replace ta=treat*after
 predict m11 if e(sample)
 replace treat =0
 replace ta=treat*after
 predict m01 if e(sample)
 replace after=0
 replace ta=treat*after
 predict m00 if e(sample)
 replace treat =1
 replace ta=treat*after
 predict m10 if e(sample)
 su m01
 local m01=r(mean)
 su m11
 local m11=r(mean)
 di "Effect of treat given after=1 is " `m11'-`m01'
 su m00
 local m00=r(mean)
 su m10
 local m10=r(mean)
 di "DD of treat, after switching 0->1, is " `m11'-`m01'-`m10'+`m00'

and so on.  Then you could wrap all that in a rclass -program- and
-bootstrap- it for standard errors on the estimated treatment effects,
not that the diff-in-diff will really identify any true treatment

On 7/27/07, <> wrote:
> Austin, thank you very much for your help.
> Yes, I was talking about -prvalue- from spost package.
> Let me try to explain my situation more clearly. I am
> estimating a classic triple-difference model. So I
> have three dummies: TREAT, AFTER and AFFECTED. I also
> TREAT*AFTER*AFFECTED. And I also have a vector of
> variables (sex, education, etc.)
> My dependent variable (Y) is the amount of money
> received from parents. (many people receive zero). I
> want to have predicted values E(Y|Y>0), and respective
> Standard Errors, for every combination of the three
> dummies:
> 1) TREAT=1, AFTER=1, TREAT=1, TREAT*AFTER=1, ...
> 2) TRATE=0, AFTER=1, TREAT=0, TREAT*AFTER=0, ...
> 3) etc...
*   For searches and help try:

© Copyright 1996–2017 StataCorp LLC   |   Terms of use   |   Privacy   |   Contact us   |   What's new   |   Site index