Skip to Main Content

Graphing predicted probabilities with two interaction terms | Stata Code Fragments

This example uses the
hsb2 data file to illustrate how to graph predicted probabilities against
a predictor variable with two interaction terms.

use https://stats.idre.ucla.edu/stat/stata/notes/hsb2, clear
gen hon = (write>60)
xi: logit hon i.female*math i.ses*math
. xi: logit hon i.female*math i.ses*math, nolog

Logistic regression                               Number of obs   =        200
                                                  LR chi2(7)      =      67.89
                                                  Prob > chi2     =     0.0000
Log likelihood = -77.408332                       Pseudo R2       =     0.3049

------------------------------------------------------------------------------
         hon |      Coef.   Std. Err.      z    P>|z|     [95% Conf. Interval]
-------------+----------------------------------------------------------------
  _Ifemale_1 |  -1.893752   3.340903    -0.57   0.571    -8.441802    4.654298
        math |   .1195186   .0702875     1.70   0.089    -.0182424    .2572797
_IfemXmath_1 |   .0493777   .0582462     0.85   0.397    -.0647827    .1635382
     _Ises_2 |  -.8678234   3.984084    -0.22   0.828    -8.676484    6.940837
     _Ises_3 |  -1.761901   4.431971    -0.40   0.691    -10.44841    6.924603
_IsesXmath_2 |   .0077363   .0718919     0.11   0.914    -.1331693    .1486419
_IsesXmath_3 |   .0397258   .0785011     0.51   0.613    -.1141335    .1935851
       _cons |    -8.2049   3.886223    -2.11   0.035    -15.82176   -.5880425
------------------------------------------------------------------------------
preserve
*for female = 0
gen yhat1 = _b[_cons] + math*_b[math] /* ses ==1 */
gen p1 = exp(yhat1)/(1+exp(yhat1))

gen yhat2 = _b[_cons] + math*_b[math] + _b[_Ises_2] + math*_b[_IsesXmath_2] /* ses ==2 */
gen p2 = exp(yhat2)/(1+exp(yhat2))

gen yhat3 = _b[_cons] + math*_b[math] + _b[_Ises_3] + math*_b[_IsesXmath_3] /* ses ==3 */
gen p3 = exp(yhat3)/(1+exp(yhat3))

sort math
twoway (line p1 math) (line p2 math) (line p3 math), name(female1, replace)
Image graph_interaction_two_terms_1

restore 
preserve 
*for female = 1
gen yhat1 = _b[_cons] + math*_b[math] +_b[_Ifemale_1] /* ses ==1 */
gen p1 = exp(yhat1)/(1+exp(yhat1))

gen yhat2 = _b[_cons] + math*_b[math] + _b[_Ises_2] + math*_b[_IsesXmath_2] ///
        + _b[_Ifemale_1] + math*_b[_IfemXmath_1] /* ses ==2 */
gen p2 = exp(yhat2)/(1+exp(yhat2))

gen yhat3 = _b[_cons] + math*_b[math] + _b[_Ises_3] + math*_b[_IsesXmath_3] ///
         + _b[_Ifemale_1] + math*_b[_IfemXmath_1] /* ses ==3 */
gen p3 = exp(yhat3)/(1+exp(yhat3))

sort math
twoway (line p1 math) (line p2 math) (line p3 math) , name(female2, replace)

Image graph_interaction_two_terms_2

restore