Stata The Stata listserver
[Date Prev][Date Next][Thread Prev][Thread Next][Date index][Thread index]

Re: st: dmlogit command


From   May Boggess <mboggess@stata.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: dmlogit command
Date   08 Apr 2004 17:45:15 -0500

On Thursday, Puja asked:

> How does the dmlogit2 command calculate marginal effects for dummy 
> variables - as an infinitisimally small change or a unit/discrete change 
> from 0 to 1?

Yes, it treats all variables as continuous. We can confirm this by using
-mfx- with the -nodiscrete- option:

clear
sysuse auto
set seed 123
gen dum=uniform()>0.4
mlogit rep dis dum, nolog
mfx, predict(outcome(5) p) varlist(dum)
mfx, predict(outcome(5) p) nodiscrete
dmlogit2 rep dis dum

To compute the marginal effect of a dummy variable by hand is done as
follows:

clear
sysuse auto
set seed 123
gen dum=uniform()>0.4
mlogit rep dis dum, nolog
mfx, predict(outcome(5) p)  nose
sum dis if e(sample)
replace dis=r(mean)
sum dum if e(sample)
replace dum=r(mean)
predict y, outcome(5) p
list y in 1 
replace dum=1
predict double p5_1, outcome(5) p
replace dum=0
predict  double  p5_0, outcome(5) p
di "marginal effect of dum = " p5_1-p5_0

There is an example using this technique in the FAQ:

http://www.stata.com/support/faqs/stat/mfx_svy.html

Getting the standard error of the marginal effect by hand is trickier. 

With some effort we can use -nlcom- to do this, because it can compute
the standard error of any function of the coefficients of the model by
the delta method. Most of the effort in this approach is figuring out
the actual formula for the marginal effect. The formula for the 
predicted probability is in the manual [R] mlogit, and using that we
have the following:

clear
sysuse auto
set seed 123
gen dum=uniform()>0.4
drop if rep==1
mlogit rep dum, nolog
mfx, predict(outcome(5) p)

replace dum=0
predict p5_0,outcome(5) p
gen myp5_0 = exp([5]_b[_cons])/ /*
  */ (1+exp([2]_b[_cons])+ /*
  */ exp([4]_b[_cons])+ /*
  */ exp([5]_b[_cons]))
sum  myp5_0  p5_0 

replace dum=1
predict p5_1,outcome(5) p
gen myp5_1 = exp([5]_b[_cons]+[5]_b[dum])/ /*
  */ (1+exp([2]_b[_cons]+[2]_b[dum])+ /*
  */ exp([4]_b[_cons]+[4]_b[dum])+ /*
  */ exp([5]_b[_cons]+[5]_b[dum]))
sum  myp5_1  p5_1 

di "marginal effect of dum = " p5_1-p5_0

nlcom exp([5]_b[_cons]+[5]_b[dum])/ /*
  */ (1+exp([2]_b[_cons]+[2]_b[dum])+ /*
  */ exp([4]_b[_cons]+[4]_b[dum])+ /*
  */ exp([5]_b[_cons]+[5]_b[dum])) /*
  */ - exp([5]_b[_cons])/ /*
  */ (1+exp([2]_b[_cons])+ /*
  */ exp([4]_b[_cons])+ /*
  */ exp([5]_b[_cons]))

--May
mmb@stata.com




*
*   For searches and help try:
*   http://www.stata.com/support/faqs/res/findit.html
*   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   |   What's new   |   Site index