help mimpt

Title

mimpt -- Impute missing values,
persist in case of non-convergence

Syntax

mimpt
...
,
add(#)
skipnonconvergence(#)
[ options ]

where ... is the standard mi impute syntax

* add(#) specify number of imputations to add; same as
with mi impute

* skipnonconvergence(#) specify how many non-convergence
errors to ignore

blocksize(#) specify number of imputations to add at a time;
default is blocksize(1)

impute_options any options for
mi impute

* add(#) is required

* skipnonconvergence(#) is required

Description

mimpt is a wrapper for mi impute that does not stop if the
imputation model fails to converge. Instead of stopping if the imputation
model fails to converge, mimpt repeats the imputation process for
the respective dataset.

The problem: Multiple imputations via chained equations
often fails because one of the models, usually mlogit, fails to
converge. If this happens, Stata's mi impute command will stop with the
respective error message and return code r(430). Stata's
mi impute will also discard all imputations that have been added so far.

Non-convergence of the imputation model might indicate problems. If a model
fails to converge early on during the imputation process or if a model fails
to converge repeatedly, the model should be inspected and fixed. If, however,
the model fails to converge in, say, iteration 7 on m=42, the respective
model has successfully converged 416 times (assuming the default burin-in)
before it failed once. Chances are, there is no systematic problem with that
model; chances are, the model will converge again in iteration 8 on
m=42. It is this situation for which mimpt is designed. Instead of
stopping the imputation process altogether and discarding all 41 completed
datasets, mimpt repeats the imputation process for m=42
(but see option blocksize()).

Disclaimer: I am not aware of any literature that discusses potential problems
when (occasional) non-convergence is ignored during the imputation process. I
believe that this approach is preferable to what is currently the only
alternative: modify the respective model. Modifying the respective model will
have a much larger impact on the imputations because the modifications affect
every iteration in every imputed dataset. Ignoring occasional non-convergence
appears to be much less invasive.

Options

add(#) is the same as with mi impute and
specifies the number of imputations to add.

skipnonconvergence(#) is required and it specifies how many
non-convergence errors are ignored. If the imputation model fails
to converge more often than #, mimpt will stop with return
code r(430) and discard all imputed datasets.

blocksize(#) specifies the number of imputations to add at a time. This
is a technical option that is best explained technically. Let M be the
number of imputations specified in option add(M), and let s be the
number specified in option blocksize(s). mimpt calls
mi impute M/s times. If a model fails to converge, mimpt
repeats at least 1 at at most s imputations. For example, if we specify
add(10) and blocksize(5), and a model fails to converge on m=7,
mimpt repeats the imputation process for m=6 and m=7.

blocksize() does not affect the number of imputed datasets, M. If
the imputation model fails to converge at least once, different values of
blocksize() are likely to produce different results.

Examples

Generic

. mimpt ... mlogit ... , add(100) skipnonconvergence(5)

Stored results

mimpt does not save anything in r(). Results in r() are
those of the last call to mi impute.

Author

Daniel Klein

University of Kassel

klein.daniel.81@gmail.com

Also see

Online: mi, mi impute

if installed: ice