# Multinomial Logit Interaction Term

i have a multinomial logit model of the form

$y= \alpha + young + year + \lambda_i + (young*year)+ \mu$

where $y$ represents three possible labour market states that an individual can be in.

$\lambda_i$ is a vector of explanatory covariates determining the $ith$ individuals labour force participation decision.

My question of interest is whether the effect of the young (dummy taking 1 if individual is <25) variable changes over the years. I have specified a set of interaction terms between each individual year and the young variable.

Am I okay to interpret the coefficients on these interaction terms as the same as normal MNL coefficients.

ie. the effect of young = (young*year) + $\beta$young(1).

• Interactions in nonlinear model can get tricky to interpret. You should take a look at Ed Norton's papers. The logic carries over to the multinomial setting. Also, what software are you using? – Dimitriy V. Masterov Jul 22 '15 at 17:46
• Thank you for this. Not only are his papers useful but he provides nice Stata code, which is the package I'm using. But in general (assuming I'm interpreting them correctly as per Norton's methodology) - is it plausible to interpret, for instance, 2005*young interaction terms as the effect of being young in 2005 relative to all other years? – StephenB Jul 23 '15 at 8:39
• The point of the papers I linked to is that it is not possible in general to just look at the interaction, even to get the sign. Also, I think you probably meant relative to the omitted base year, rather than relative to all other years. – Dimitriy V. Masterov Jul 23 '15 at 20:32

In a multinomial logit model, the marginal effect for person $i$ on outcome $j$ of small increase in continuous variable $x$ is given by

$$\frac{\partial p_{ij}}{\partial x_i}=p_{ij} \cdot (\beta_j -\sum_{h=1}^{J} p_{ih}\beta_h ),$$ where $$p_{ij}=\frac{\exp \{\alpha_j + \beta_j \cdot x_i \}}{\sum_{h=1}^{J}\exp \{\alpha_h + \beta_h \cdot x_i \}}$$

Probabilities $p$s are always between 0 and 1, but the $\beta$s are not restricted. This means that even the signs of the regression coefficients do not always give you the sign of the marginal effect unless $\beta_j>\beta_h$ for all $h \ne j$. This also means that it makes no sense to test that some index function coefficient is zero. This is even more complicated when you have interactions and are considering discrete changes in $x$ from 0 to 1, like in your problem.

Since you are using Stata, I would use margins for this type of calculation. Here's an example where we are interested in how the choice of insurance (indemnity, prepaid, and no insurance) varies for males at 3 different sites. This is analogous to your young and year example.

First, we load the the data and fit the multinomial logit:

. set more off

. webuse sysdsn1, clear
(Health insurance data)

. mlogit insure age i.male##i.site i.nonwhite, nolog base(3)

Multinomial logistic regression                 Number of obs     =        615
LR chi2(14)       =      46.61
Prob > chi2       =     0.0000
Log likelihood = -532.54722                     Pseudo R2         =     0.0419

------------------------------------------------------------------------------
insure |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
Indemnity    |
age |   .0090385   .0113968     0.79   0.428    -.0132988    .0313759
1.male |  -1.060296   .5298673    -2.00   0.045    -2.098817   -.0217749
|
site |
2  |   .8432527   .5457434     1.55   0.122    -.2263847     1.91289
3  |  -.1611359   .4425271    -0.36   0.716    -1.028473    .7062012
|
male#site |
1 2  |   1.284123   1.227825     1.05   0.296     -1.12237    3.690615
1 3  |   1.296877   .8588095     1.51   0.131    -.3863584    2.980113
|
1.nonwhite |    -.21532    .427724    -0.50   0.615    -1.053644    .6230035
_cons |   1.467145   .6117873     2.40   0.016     .2680636    2.666226
-------------+----------------------------------------------------------------
Prepaid      |
age |  -.0028698   .0115394    -0.25   0.804    -.0254866     .019747
1.male |  -.5103284   .5178961    -0.99   0.324    -1.525386    .5047293
|
site |
2  |   .9029364   .5485803     1.65   0.100    -.1722612    1.978134
3  |  -.7150258   .4525702    -1.58   0.114    -1.602047    .1719956
|
male#site |
1 2  |    1.46878   1.213818     1.21   0.226    -.9102592    3.847819
1 3  |   1.101186   .8621461     1.28   0.202    -.5885891    2.790961
|
1.nonwhite |   .7470731     .42232     1.77   0.077    -.0806589    1.574805
_cons |     1.7564   .6157457     2.85   0.004     .5495609     2.96324
-------------+----------------------------------------------------------------
Uninsure     |  (base outcome)
------------------------------------------------------------------------------


Next, we will look at the average derivatives for each of the three outcomes with respect to male at each of the three sites. Technically, these are not derivatives but finite differences in probabilities since male is binary variable and we told Stata that by using the i. prefix. They are also averages of the finite difference in the estimation sample:

. margins, dydx(male) at(site=(1 2 3))

Average marginal effects                        Number of obs     =        615
Model VCE    : OIM

dy/dx w.r.t. : 1.male
1._predict   : Pr(insure==Indemnity), predict(pr outcome(1))
2._predict   : Pr(insure==Prepaid), predict(pr outcome(2))
3._predict   : Pr(insure==Uninsure), predict(pr outcome(3))

1._at        : site            =           1

2._at        : site            =           2

3._at        : site            =           3

------------------------------------------------------------------------------
|            Delta-method
|      dy/dx   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
1.male       |
_predict#_at |
1 1  |  -.1492951   .0728108    -2.05   0.040    -.2920016   -.0065885
1 2  |   -.159346   .0723512    -2.20   0.028    -.3011517   -.0175403
1 3  |   -.055138   .0875712    -0.63   0.529    -.2267745    .1164984
2 1  |   .0763095   .0765406     1.00   0.319    -.0737074    .2263264
2 2  |   .1747759   .0730055     2.39   0.017     .0316877    .3178641
2 3  |   .0861997   .0843816     1.02   0.307    -.0791852    .2515846
3 1  |   .0729855   .0516839     1.41   0.158    -.0283131    .1742842
3 2  |  -.0154299   .0104982    -1.47   0.142     -.036006    .0051462
3 3  |  -.0310617   .0495625    -0.63   0.531    -.1282025    .0660791
------------------------------------------------------------------------------
Note: dy/dx for factor levels is the discrete change from the base level.


The way to read this is that the additive effect of male on the choice of Indemnity Insurance is a reduction of 0.149, about 15 percentage points. At site 3, that effect is a reduction of 5.5 percentage points (-.055). This means that males are on average less likely to purchase this type of insurance compared to women at all three sites.

Now we use get contrasts of margins. This will calculate the differences in the average marginal effects we saw above and let us know whether they are significant. The way you read this table is that for each of the three insurance outcomes, it compares the average derivatives of male for each site relative to the base site (which is site 1). So we saw that for site 3 the male effect on outcome 1 was -.055138, and for site 1, the average effect was -.1492951. The difference is .0941571. This is what's shown in the "(3 vs 1) 1" row below (along with standard error, p-value and 95% CI):

. margins r.site, dydx(male)

Contrasts of average marginal effects
Model VCE    : OIM

dy/dx w.r.t. : 1.male
1._predict   : Pr(insure==Indemnity), predict(pr outcome(1))
2._predict   : Pr(insure==Prepaid), predict(pr outcome(2))
3._predict   : Pr(insure==Uninsure), predict(pr outcome(3))

-------------------------------------------------
|         df        chi2     P>chi2
--------------+----------------------------------
0b.male       |
site@_predict |
(2 vs 1) 1  |  (omitted)
(2 vs 1) 2  |  (omitted)
(2 vs 1) 3  |  (omitted)
(3 vs 1) 1  |  (omitted)
(3 vs 1) 2  |  (omitted)
(3 vs 1) 3  |  (omitted)
Joint  |  (omitted)
--------------+----------------------------------
1.male        |
site@_predict |
(2 vs 1) 1  |          1        0.01     0.9213
(2 vs 1) 2  |          1        0.88     0.3480
(2 vs 1) 3  |          1        2.49     0.1145
(3 vs 1) 1  |          1        0.69     0.4076
(3 vs 1) 2  |          1        0.01     0.9307
(3 vs 1) 3  |          1        2.13     0.1447
Joint  |          4        3.53     0.4740
-------------------------------------------------

---------------------------------------------------------------
|   Contrast Delta-method
|      dy/dx   Std. Err.     [95% Conf. Interval]
--------------+------------------------------------------------
1.male        |
site@_predict |
(2 vs 1) 1  |  -.0100509   .1017157     -.2094099    .1893081
(2 vs 1) 2  |   .0984664   .1049308     -.1071942    .3041269
(2 vs 1) 3  |  -.0884154   .0560272     -.1982267    .0213959
(3 vs 1) 1  |    .094157   .1136937     -.1286784    .3169925
(3 vs 1) 2  |   .0098902   .1137278     -.2130123    .2327926
(3 vs 1) 3  |  -.1040472   .0713305     -.2438525    .0357581
---------------------------------------------------------------
Note: dy/dx for factor levels is the discrete change from the
base level.


This table also gives you a Joint test for the null that all gender-site interactions are zero. The p-value for that is 0.4740, so you can reject.

You can also consider the multiplicative effects (which are the exponentiated coefficients), compared to the additive effects we looked at above. This is can be achieved like this:

. mlogit, rrr

Multinomial logistic regression                 Number of obs     =        615
LR chi2(14)       =      46.61
Prob > chi2       =     0.0000
Log likelihood = -532.54722                     Pseudo R2         =     0.0419

------------------------------------------------------------------------------
insure |        RRR   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
Indemnity    |
age |    1.00908   .0115003     0.79   0.428     .9867892    1.031873
1.male |   .3463534   .1835213    -2.00   0.045     .1226014    .9784605
|
site |
2  |   2.323914   1.268261     1.55   0.122     .7974113    6.772634
3  |   .8511764   .3766686    -0.36   0.716     .3575525    2.026279
|
male#site |
1 2  |   3.611498   4.434288     1.05   0.296     .3255074     40.0695
1 3  |   3.657857   3.141402     1.51   0.131      .679527    19.69004
|
1.nonwhite |   .8062834   .3448667    -0.50   0.615      .348665     1.86452
_cons |   4.336834    2.65322     2.40   0.016      1.30743    14.38557
-------------+----------------------------------------------------------------
Prepaid      |
age |   .9971343   .0115063    -0.25   0.804     .9748355    1.019943
1.male |   .6002984   .3108922    -0.99   0.324      .217537    1.656537
|
site |
2  |   2.466836   1.353258     1.65   0.100     .8417593     7.22924
3  |   .4891795   .2213881    -1.58   0.114     .2014836    1.187673
|
male#site |
1 2  |   4.343933   5.272743     1.21   0.226     .4024199     46.8907
1 3  |   3.007732   2.593104     1.28   0.202     .5551099    16.29668
|
1.nonwhite |   2.110813   .8914385     1.77   0.077     .9225083      4.8298
_cons |   5.791552   3.566124     2.85   0.004     1.732492     19.3606
-------------+----------------------------------------------------------------
Uninsure     |  (base outcome)
------------------------------------------------------------------------------


The exponentiated value of a coefficients is the relative-risk ratio for a one-unit change in the corresponding variable (risk is measured as the risk of the outcome relative to the base outcome). Personally, I find these harder to interpret, but some people like them and they are easier to calculate.

Code:

set more off
webuse sysdsn1, clear
mlogit insure age i.male##i.site i.nonwhite, nolog base(3)
margins, dydx(male) at(site=(1 2 3))
margins r.site, dydx(male)
mlogit, rrr

• @Dmitriy - thank you very much for this thorough answer. It's helped immensely with the project that I am working on. – StephenB Jul 28 '15 at 11:24