Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Syntax for imputation

    I am looking for a way to compare a method I have developed for multiple imputation for lifecourse data (essentially categorical time-series with relatively low rates of transition; see www.ul.ie/sociology/pubs/wp2012-01.pdf and www.ul.ie/sociology/pubs/wp2013-01.pdf) with Patrick Royston's ice and Stata's mi impute. It is very difficult to set up analogous models for real data, so I'm trying a comparison with very simple simulated data (a zero-order Markov process for the state variable, with missingness imposed at random), where the best imputation model is this:

    Xt = f(Xt-1, Xt+1)

    Given the data in wide format, and say T=5, my attempt at this with =mi impute= is as follows:

    Code:
    mi set flong
    mi register imputed m*
    mi impute chained ///
      (mlogit, omit(            i.m3  i.m4  i.m5 ))  m1 ///
      (mlogit, omit(                  i.m4  i.m5 ))  m2 ///
      (mlogit, omit(i.m1                    i.m5 ))  m3 ///
      (mlogit, omit(i.m1  i.m2                   ))  m4 ///
      (mlogit, omit(i.m1  i.m2  i.m3             ))  m5 , add(10) augment
    For ICE, as follows:

    Code:
    ice m.m1 m.m2 m.m3 m.m4 m.m5 ///
      , saving(ice5, replace) persist m(10) ///
      eq(m1:  i.m2      , ///
         m2:  i.m1  i.m3,  ///
         m3:  i.m2  i.m4,  ///
         m4:  i.m3  i.m5, ///
         m5:  i.m4)
    This appears to work in each case, but (particularly for mi impute) it is pretty verbose code (particularly as the length of the sequence increases).

    My question is whether there is a more concise way to specify such a model?
Working...
X