{smcl}
{cmd:help mimrgns}
{hline}
{title:Title}
{p 4 8 2}
{cmd:mimrgns} {hline 2} {helpb margins} after {helpb mi estimate}
{title:Syntax}
{p 4 8 2}
Use after {cmd:mi estimate}
{p 8 16 2}
{cmd:mimrgns}
[{help fvvarlist:{it:marginlist}}]
{ifin}
{weight}
[ {cmd:,} {it:options} ]
{p 4 8 2}
Use after {cmd:mi estimate , saving() esample()}
{p 8 16 2}
{cmd:mimrgns} [{help fvvarlist:{it:marginlist}}]
{ifin} {weight}
{helpb using} {it:{help filename:miestfile}}
{cmd:, esample(}{it:{help varname}}{cmd:)}
[ {it:options} ]
{p 4 10 2}
where {it:miestfile}{cmd:.ster} contains estimation results
previously saved by
{p 8 16 2}
{cmd:mi estimate , saving(}{it:miestfile}{cmd:)}
{cmd:esample(}{it:newvarname}{cmd:)}
{synoptset 20 tabbed}{...}
{marker opts}{...}
{synopthdr}
{synoptline}
{syntab:Main}
{p2coldent:* {cmd:esample(}{it:{help varname}}{cmd:)}}specify {it:varname}
identifying the estimation sample
{p_end}
{synopt:{cmd:{ul:pr}edict(default)}}use {cmd:margins}' default
prediction; {cmd:mimrgns}' default is {cmd:predict(xb)}
{p_end}
{synopt:{opt eform}}display (final) estimates in exponentiated form
{p_end}
{synopt:{opt cmdmargins}}set {cmd:r(cmd)} to {cmd:margins}; required
before {helpb marginsplot}
{p_end}
{synopt:{opt noestimate}}do not re-estimate margins; only allowed
with {opt cmdmargins}
{p_end}
{syntab:margins}
{synopt:{it:{help mimrgns##marg_opts:margins_options}}}options allowed
with the {cmd:margins} command
{syntab:mi}
{synopt:{opt nosmall}}do not use small-sample correction for
degrees of freedom
{p_end}
{synopt:{opt dots}}same as with {helpb mi_estimate:mi estimate}
{p_end}
{synopt:{opt noi:sily}}same as with {helpb mi_estimate:mi estimate}
{p_end}
{synopt:{opt trace}}same as with {helpb mi_estimate:mi estimate}
{p_end}
{synopt:{opt errorok}}same as with {helpb mi_estimate:mi estimate}
{p_end}
{synopt:{opt esampvaryok}}same as with {helpb mi_estimate:mi estimate}
{p_end}
{synoptline}
{p2colreset}{...}
{p 4 6 2}* {opt esample()} is required with the second syntax
and not allowed with the first syntax
{title:Description}
{pstd}
{cmd:mimrgns} runs {cmd:margins} after {cmd:mi estimate} and obtains margins
of responses in multiply imputed datasets.
{pstd}
The command generalizes
{browse "http://www.stata.com/statalist/archive/2010-03/msg01021.html":Isabel Canette and Yulia Marchenko's}
approach, which has later been adopted by the
{browse "https://stats.idre.ucla.edu/stata/faq/how-can-i-get-margins-and-marginsplot-with-multiply-imputed-data/":UCLA Statistical Consulting Group}. See
{help mimrgns##remarks:Remarks below}.
{pstd}
The first syntax mirrors the regular {cmd:margins} command; when specified,
{cmd:mimrgns} runs both the estimation command and {cmd:margins} on the
imputed datasets. The second ({cmd:using}) syntax is preferred; it obtains
results from {it:miestfile} and only runs {cmd:margins} on the imputed
datasets.
{title:Remarks}
{pstd}
There might be good reasons why Stata's {cmd:margins} command does not work
after {cmd:mi estimate}. If you have not read
{mansection MI miestimatepostestimationRemarksUsingthecommand-specificpostestimationtools:{it:Using the command-specific postestimation tools}}
in {manhelp mi_estimate_postestimation MI:mi estimate postestimation}, please
do so.
{pstd}
Instead of applying {cmd:margins} to the (final) MI estimates, {cmd:mimrgns}
treats {cmd:margins} itself as an estimation command and combines its results
according to Rubin's rules.
{marker par3}{...}
{phang}
{cmd:{ul:Nonlinear predictions}}
{p_end}
{pstd}
Applying Rubin's rules to {cmd:margins}' results assumes asymptotic
normality. Assuming asymptotic normality is appropriate for linear
predictions and for average marginal effects (White, Royston and Wood 2011)
but might not be appropriate otherwise (also see
{mansection MI mipredictRemarks:{it:Example 3: Obtain MI estimates of probabilities}}
in {manhelp mi_predict MI:mi predict}). By default, {cmd:mimrgns} uses linear
predictions for all estimation commands.
{marker par4}{...}
{phang}
{cmd:{ul:Graph results from mimrgns}}
{p_end}
{pstd}
In principle, {helpb marginsplot} works after {cmd:mimrgns}. However,
there are two issues to consider. First, the plotted
{help mimrgns##df:confidence intervals are based on}
{help mimrgns##df:inappropriate degrees of freedom}. {cmd:mimrgns}
leaves the correct degrees of freedom in {cmd:r(df)} (or {cmd:r(df_vs)},
with the {opt pwcompare} option). Although the differences should be small
for large sample sizes, consider alternatives to {cmd:marginsplot} that
allow specifying the degrees of freedom used to calculate confidence
intervals, e.g., Jann's {stata findit coefplot:{bf:coefplot}}. Second,
graphs might be based on {help mimrgns##at:summary statistics that vary}
{help mimrgns##at:across imputed datasets}. {cmd:mimrgns} uses dataset
specific summary statistics, requested in {helpb at()} options, but
reports their combined point estimate in the legend.
{phang}
{cmd:{ul:Further restrictions}}
{p_end}
{pstd}
{cmd:mimrgns} does not support joint hypothesis tests with
the {help margins_contrast:{bf:contrast}} option.
{pstd}
{cmd:mimrgns} does not save all results that {cmd:margins} saves. This
might lead to error messages when running post estimation commands, e.g.,
{helpb mi test}. Even if no error messages appear, such results might not
be appropriate.
{title:Options}
{it:{dlgtab:Main}}
{phang}
{opt esample(varnme)} specifies the observations to be used in the
estimation; {it:varname} is the same variable that was previously
created by {cmd:mi estimate , esample({it:newvarname})}. The option
is required with the second syntax and not allowed with the first
syntax.
{phang}
{cmd:predict(default)} specifies that, instead of {cmd:mimrgns}
default {cmd:predict(xb)}, the default prediction of the {cmd:margins}
command is used. This option will usually result in nonlinear predictions
for which Rubin's rules might not be appropriate; see
{help mimrgns##par3:{ul:Nonlinear predictions}}.
{phang}
{opt eform} displays (final) coefficients in exponentiated form. This
option does not affect any calculations.
{phang}
{opt cmdmargins} sets {cmd:r(cmd)} (or {cmd:e(cmd)}, with {opt post})
to {cmd:margins}. This option is required before {cmd:marginsplot}
(Stata 12 or higher) is used; see
{help mimrgns##par4:{ul:Graph results from mimrgns}}.
{phang}
{opt noestimate} is only for use with {opt cmdmargins} and does not
re-estimate margins. When you did not specify {opt cmdmargins} at
estimation time, you may still (re-)set {cmd:r(cmd)} to {cmd:margins}
typing
{p 16 16 2}{cmd:. mimrgns , cmdmargins noestimate}{p_end}
{marker marg_opts}{...}
{it:{dlgtab:margins}}
{phang}
{it:{help margins##options:margins_options}} are options allowed with
the {cmd:margins} command.
{marker at}{...}
{phang2}
Option {opt at()} is allowed and may request summary statistics, such as
the mean, minimum, or maximum of covariates. However, when covariates are
multiply imputed there is no longer one mean (minimum, maximum, ...); there
are now {it:M} of them. {cmd:mimrgns} fixes covariates at the imputed
dataset specific statistic for calcutations but reports the combined point
estimate as a single value. A note is issued below the results table as a
reminder.
{phang2}
In general, {cmd:mimrgns} passes any options thru to {cmd:margins}. Therefore,
options affect the estimation in each imputed dataset. For most options, this
is what you want. Some options, such as most {it:contrast_options} and option
{opt nose} are not allowed. Also, most of {cmd:margins}' undocumented options
are not allowed.
{it:{dlgtab:mi_options}}
{phang}
{opt nosmall} does not use the small-sample correction for the degrees of
freedom. See the corresponding {help mi estimate##options:mi estimate option}
for more details.
{phang}
{opt dots}, {opt noisily} and {opt trace} are the corresponding
{help mi estimate:mi estimate {it:reporting_options}}.
{phang}
{opt errorok} and {opt esampvaryok} are the respective
{help mi estimate##options:mi estimate options}. With the first syntax,
you must repeat these options if you have specified them with
{cmd:mi estimate} before.
{title:Examples}
{pstd}
Setup
{phang2}{stata webuse mheart1s20:. webuse mheart1s20}{p_end}
{phang2}{stata mi convert flong:. mi convert flong}{p_end}
{pstd}
Estimate a logistic regression model and save the results
(Note: saves a file to disk!)
{phang2}
{stata "mi estimate , saving(miestfile) esample(esample) : logit attack i.smokes age bmi i.hsgrad i.female":. mi estimate , saving(miestfile) esample(esample) : logit attack i.smokes age bmi i.hsgrad i.female}
{p_end}
{pstd}
Obtain average marginal effects (linear predictions)
{phang2}
{stata mimrgns using miestfile , esample(esample) dydx(*):. mimrgns using miestfile , esample(esample) dydx(*)}
{p_end}
{pstd}
Obtain average marginal effects in terms of predicted probabilities
(but see {help mimrgns##par3:{ul:Nonlinear predictions}}).
{phang2}
{stata mimrgns using miestfile , esample(esample) predict(pr) dydx(*):. mimrgns using miestfile , esample(esample) predict(pr) dydx(*)}
{p_end}
{pstd}
Create age categories and re-run the logistic regression
{phang2}{stata "mi xeq : generate ageg = irecode(age, 20, 40 ,60, 80)":. mi xeq : generate ageg = irecode(age, 20, 40 ,60, 80)}{p_end}
{phang2}{stata "mi estimate : logit attack i.smokes i.ageg bmi i.hsgrad i.female":. mi estimate : logit attack i.smokes i.ageg bmi i.hsgrad i.female}{p_end}
{pstd}
Obtain pairwise comparisons of predictive margins
{phang2}{stata mimrgns ageg , pwcompare:. mimrgns ageg , pwcompare}{p_end}
{pstd}
Contrasts of predictive margins
{phang2}{stata mimrgns ar.ageg:. mimrgns ar.ageg}{p_end}
{pstd}
Erase {cmd:miestfile.ster}, created above.
{phang2}{stata erase miestfile.ster:. erase miestfile.ster}{p_end}
{title:Saved results}
{pstd}
{cmd:mimrgns} saves in {cmd:r()} some of the results that
{help margins##saved_results:{bf:margins}} saves without the
{cmd:post} option.
{pstd}
{cmd:mimrgns} additionally saves the following in {cmd:r()}:
{pstd}
Macros{p_end}
{synoptset 24 tabbed}{...}
{synopt:{cmd:r(est_cmdline_mi)}}{cmd:e(cmdline_mi)} from {cmd:mi estimate}{p_end}
{synopt:{cmd:r(est_cmdline_margins)}}{cmd:margins} command{p_end}
{title:Addendum}
{marker df}{...}
{pstd}
{bf:Confidence intervals with marginsplot}
{pstd}
{cmd:marginsplot} internally replays results from the last {cmd:margins}
command. It then uses the replayed results to recalculate confidence
intervals (but not point estimates and standard errors). However, the
replayed results are those obtained by {cmd:margins} in the last imputed
dataset, not the ones reported by {cmd:mimrgns}. Thus, {cmd:marginsplot}
does not use the correct degrees of freedom. Unfortunately, there is no
way of passing the appropriate degrees of freedom to {cmd:marginsplot};
therefore, there is no way to get correct confidence intervals from
{cmd:marginsplot} after {cmd:mimrgns}. Fortunately, the differences are
often small and you can assess them as described on
{browse "https://www.statalist.org/forums/forum/general-stata-discussion/general/1481264-mimrgns-and-marginsplot":Statalist}.
{title:References}
{pstd}
Jann, B. 2013. Plotting regression coefficients and other estimates in
Stata. {it:University of Bern Social Sciences Working Papers Nr. 1}. Available
from {browse "http://ideas.repec.org/p/bss/wpaper/1.html"}
{pstd}
White, I. R., Royston, P., Wood, M. A. 2011. Multiple imputation using
chained equations: Issues and guidance for practice. {it:Statistics in Medicine}
30:377-399.
{pstd}
Stata FAQ. How can I get margins and marginsplot with multiply
imputated data? UCLA: Statistical Consulting Group. from
{browse "http://www.ats.ucla.edu/stat/stata/faq/ologit_mi_marginsplot.htm"}
{title:Acknowledgments}
{pstd}
Jessica Stroope reported a bug with the {cmd:pwcompare(effects)} option.
{pstd}
Liz Hensor reported a bug with the {opt at} legend when {opt over()}
was specified.
{pstd}
Filip Safr reported a bug when {opt predict()} was called
with more than one argument.
{pstd}
Wolf Edler reported problems when using {cmd:mimrgns} via a
remote access that would not allow {cmd:{it:*}.class} files
to be uploaded. This led to internal changes; {cmd:mimrgns}
does no longer rely on such files.
{pstd}
Robbie Dembo reported a bug when {cmd:mimrgns} was called
after {cmd:xt{it:*}} models fit with the {opt i()} option.
{pstd}
Xiao Yang (StataCorp) tracked down a bug that had gone
unnoticed under Windows but prevented {cmd:mimrgns}
from running under Linux.
{pstd}
Jesper Wulff reported a bug with
{it:contrast-options} and {it:pwcompare-options} in
Stata 13 (or higher).
{pstd}
Part of the code is borrowed (verbatim) from StataCorp's
{cmd:_marg_report} routine.
{pstd}
Evan Kontopantelis suggested support for contrast
operators and reporting the {opt at} legend.
{pstd}
Timothy Mak identified a bug with mixed models.
{pstd}
Oliver Klein originally stimulated the {cmd:mimrgns} command.
{title:Author}
{pstd}
Daniel Klein{break}
German Centre for Higher Education Research and Science Studies (DZHW){break}
Research Data Centre{break}
klein.daniel.81@gmail.com
{title:Also see}
{psee}
Online: {helpb mi}, {helpb margins}{p_end}
{psee}
if installed: {helpb coefplot}{p_end}