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

# Re: st: marginal effects for simultaneous changes in interacted variables

 From jpitblado@stata.com (Jeff Pitblado, StataCorp LP) To statalist@hsphsun2.harvard.edu Subject Re: st: marginal effects for simultaneous changes in interacted variables Date Wed, 31 Oct 2012 18:03:07 -0500

```David Quinn <dxquinnx@gmail.com> 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