Home  /  Products  /  Features  /  Margins plots

Stata makes it easy to graph statistics from fitted models using marginsplot. marginsplot graphs the results from margins, and margins itself can compute functions of fitted values after almost any estimation, linear or nonlinear.

Suppose we’ve just fit a two-way ANOVA of systolic blood pressure on age group, sex, and their interaction. We can estimate the response for each cell with margins:

. margins agegrp#sex

Adjusted predictions                                    Number of obs = 10,351
Model VCE: OLS

Expression: Linear prediction, predict()

Delta-method
Margin   std. err.      t    P>|t|     [95% conf. interval]

agegrp#sex
20-29#Male        123.8862   .6052954   204.67   0.000     122.6997    125.0727
20-29 #
Female        111.2849   .5827553   190.96   0.000     110.1426    112.4272
30-39#Male        124.6818    .728709   171.10   0.000     123.2534    126.1102
30-39 #
Female        116.2207    .692755   167.77   0.000     114.8627    117.5786
40-49#Male        129.0033   .8187185   157.57   0.000     127.3984    130.6081
40-49 #
Female        125.0468   .7859058   159.11   0.000     123.5063    126.5874
50-59#Male        136.0864   .8241405   165.13   0.000     134.4709    137.7019
50-59 #
Female        135.3164   .7703532   175.66   0.000     133.8064    136.8264
60-69#Male        140.7451   .5465096   257.53   0.000     139.6738    141.8163
60-69 #
Female        142.2368   .5236736   271.61   0.000     141.2103    143.2633
70+#Male        146.3951   .9553456   153.24   0.000     144.5224    148.2678
70+#Female        149.6599   .8717829   171.67   0.000      147.951    151.3687



To study the interaction it would be nice to see a graph. We use marginsplot:

. marginsplot

Variables that uniquely identify margins: agegrp sex


marginsplot automatically chooses the y-variable and x-variable and adds confidence intervals. We don’t have to stick with the defaults, though: marginsplot includes a rich set of options for changing axis definitions, labels, curves, confidence intervals, and more.

marginsplot also supports the features of the margins command, including the contrast operators. Let’s contrast women with men in each age group and plot the contrasts:

. margins r.sex@agegrp, contrast(nowald)

Contrasts of adjusted predictions                       Number of obs = 10,351
Model VCE: OLS

Expression: Linear prediction, predict()

Delta-method
Contrast   std. err.     [95% conf. interval]

sex@agegrp
(Female vs Male) 20-29      -12.60132   .8402299     -14.24833    -10.9543
(Female vs Male) 30-39      -8.461161   1.005448     -10.43203   -6.490288
(Female vs Male) 40-49      -3.956451   1.134878     -6.181031   -1.731871
(Female vs Male) 50-59      -.7699782   1.128119     -2.981309    1.441353
(Female vs Male) 60-69       1.491684    .756906      .0080022    2.975367
(Female vs Male) 70+       3.264762   1.293325       .729594     5.79993

. marginsplot, yline(0)

Variables that uniquely identify margins: agegrp

We see that systolic blood pressure is lower in younger women than in younger men. But among the old, the relationship is reversed, and women have higher blood pressure than men.

marginsplot works with nonlinear models, too. Suppose we've fit a logistic regression, modeling the probability of high blood pressure as a function of sex, age group, body mass index, and their interactions. marginsplot can contrast women with men on the probability scale:

. quietly margins r.sex, at(bmi=(10(1)65))

. marginsplot, xlabel(10(10)60) recast(line) recastci(rarea)

Variables that uniquely identify margins: bmi


We’ve only scratched the surface—anything that margins can compute, marginsplot can graph.