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]
Re: st: marginal effects for simultaneous changes in interacted variables
From
[email protected] (Jeff Pitblado, StataCorp LP)
To
[email protected]
Subject
Re: st: marginal effects for simultaneous changes in interacted variables
Date
Wed, 31 Oct 2012 18:03:07 -0500
David Quinn <[email protected]> is using -margins- with -logit- results,
trying to get the change in the predictive margin when x1 and x2 are
both equal 0 to x1 and x2 both equal 1:
> I am estimating a logit model as such: Y=X1 + X2 + X1*X2 + X3.
>
> X1 and X2 are binary predictors, and I have interacted them using
> factor notation. X3 is a
> control variable.
>
> I'd like to assess the discrete change/marginal effects in my
> dependent variable when X1 and X2 simultaneously move from 0 to 1,
> setting x3 asobserved.
>
> I used the following margins command to calculate this change:
>
> margins, dydx(X1) at(X2=(0 1))
>
> But this is not giving me the change that I desire. It's giving me
> the following two changes: 1.) From X1=0, X2=0 to X1=1, X2=0; and 2.)
> >From X1=0, X2=1 to X1=1, X2=1.
>
> But what I want is the change from X1=0, X2=0 to X1=1, X2=1.
>
> When you use King et al's Clarify program, you can select specific
> values for which the change is to be calculated for multiple variables
> of interest simultaneously, but I cannot seem to get margins to do
> this.
>
> How do I use margins to calculate the change that I desire?
I'll use the auto data with some generated variables, so I can show the steps
to get what David wants:
. sysuse auto
. gen x1 = mpg > 20
. gen x2 = head > 3
. logit for x1##x2 turn
In the above I generated binary predictors x1 and x2, used -foreign- for the
binary response, and -turn- as a control variable.
Here are the results from logit:
***** BEGIN:
Logistic regression Number of obs = 74
LR chi2(4) = 44.34
Prob > chi2 = 0.0000
Log likelihood = -22.86412 Pseudo R2 = 0.4923
------------------------------------------------------------------------------
foreign | Coef. Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
1.x1 | -1.807144 1.223086 -1.48 0.140 -4.204349 .5900617
1.x2 | -.9829927 1.491344 -0.66 0.510 -3.905974 1.939989
|
x1#x2 |
1 1 | -2.262084 2.344498 -0.96 0.335 -6.857215 2.333047
|
turn | -.7399175 .2046417 -3.62 0.000 -1.141008 -.3388272
_cons | 28.62676 8.020097 3.57 0.000 12.90766 44.34586
------------------------------------------------------------------------------
***** END:
Now David wants to compare the predictive margin where x1 and x2 are both 0 to
the predictive margin when they are both 1.
Here we use the interaction between x1 and x2 as the margining term to yield
the predictive margins that David wants:
***** BEGIN:
. margins x1#x2
Predictive margins Number of obs = 74
Model VCE : OIM
Expression : Pr(foreign), predict()
------------------------------------------------------------------------------
| Delta-method
| Margin Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
x1#x2 |
0 0 | .4344516 .0756514 5.74 0.000 .2861776 .5827255
0 1 | .3543279 .1092121 3.24 0.001 .140276 .5683798
1 0 | .2823868 .0419118 6.74 0.000 .2002411 .3645325
1 1 | .0519108 .0556121 0.93 0.351 -.0570869 .1609085
------------------------------------------------------------------------------
***** END:
Now that we have (more than) the predictive margins of interest, we can use
contrast operators or the -contrast- option to get -margins- to compute the
discrete differences between them.
The problem with this approach is that we only care about the '0 0' and '1 1'
margins, so instead we'll use two separate -at()- options. The first -at()-
option will identify the '0 0' predictive margin, then second will identify
the '1 1' predictive margin.
***** BEGIN:
. margins, at(x1=0 x2=0) at(x1=1 x2=1)
Predictive margins Number of obs = 74
Model VCE : OIM
Expression : Pr(foreign), predict()
1._at : x1 = 0
x2 = 0
2._at : x1 = 1
x2 = 1
------------------------------------------------------------------------------
| Delta-method
| Margin Std. Err. z P>|z| [95% Conf. Interval]
-------------+----------------------------------------------------------------
_at |
1 | .4344516 .0756514 5.74 0.000 .2861776 .5827255
2 | .0519108 .0556121 0.93 0.351 -.0570869 .1609085
------------------------------------------------------------------------------
***** END:
If David is using Stata 11, he'll have to use the -post- option get get
-margins- to post its results to -e()- and then use -lincom- to compute the
discrete change.
In Stata 12, David can use the -contrast()- option and specify how he wants
margins to contrast the levels of -_at-. Here we use the reference category
operator, which will always use the first level as the base in the comparison:
***** BEGIN:
. margins, at(x1=0 x2=0) at(x1=1 x2=1) contrast(at(r))
Contrasts of predictive margins
Model VCE : OIM
Expression : Pr(foreign), predict()
1._at : x1 = 0
x2 = 0
2._at : x1 = 1
x2 = 1
------------------------------------------------
| df chi2 P>chi2
-------------+----------------------------------
_at | 1 16.49 0.0000
------------------------------------------------
--------------------------------------------------------------
| Delta-method
| Contrast Std. Err. [95% Conf. Interval]
-------------+------------------------------------------------
_at |
(2 vs 1) | -.3825407 .0942169 -.5672024 -.1978791
--------------------------------------------------------------
***** END:
--Jeff
[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/