Suppose I have a data set with a certain outcome $Y$, covariates $X$, and a certain status variable $Z$, which can take a finite (small) number of values, say 1, 2 and 3. Any of these variables may be missing in the data set, so I want to multiply impute my data. On top of the imputations from the model $Y|\{X,Z\}$, I want to obtain normalized imputations $Y|\{X,Z=1\}$ -- i.e., force one of my predictor variables to be set to a specific level.

The context is somewhat similar to that of the BMI-liars exercise in Sec. 7.3 in Stef van Buuren's FIMD book. The status $Z$ corresponds to different sources of measurements on $Y$, and I suspect that the status $Z=1$ is the most accurate, so I want to get a feeling of what outcomes on $Y$ would have been if everybody were measured using the source $Z=1$. The difference though is that I don't have any parallel measures, like his self-reported and instrumented BMI. So what I need, computationally, is run the burn-ins, calibrate the imputation model(s), and in the last iteration for $Y$, substitute $Z=1$ instead of its actual or predicted values. There may be a way to create a passive variable that is constant $=1$, but then it would be dropped from the imputation equation as collinear with the intercept term. If I just create a copy of $Y$ and make it missing for $Z \neq 1$, and put $Y$ and $Z$ as predictors, then I get a perfect prediction with singular matrices, so that's a no-go, either.

Any ideas how that can be implemented using reasonably standard packages? I would like to use Stata or R for this.


Here's what Ian White, one of the contributors to Stata's original multiple imputation ice package, suggested:

I assume you believe that the distribution of Y|X "if Z were 1" is equal to the distribution of Y|X in the subgroup with observed Z equal to 1.

I think you can do this as follows.

  1. Impute in the usual way e.g. using ice x y, by(z) m(5) clear

  2. In the imputed dataset, delete all imputed values of y and all observed values of y for which z<>1.

  3. Impute y e.g. using uvis y x, gen(yimp) by(_mj)

  • $\begingroup$ I will try this. At the face of it, it looks like it may work as needed. $\endgroup$
    – StasK
    Aug 20 '13 at 13:10

I think one option would follow by analogy of predict on newdata in R. This supposes using mice to single-impute and then access the final regression model after burn in and convergence. This model is then used to make a one-time prediction as in predict.glm where newdata is a data set in which $Z=1$ has been replaced for all units and $x$ and $y$ are copies from the imputed data.

Alternatively you may be also able to create multiple imputed data sets, giving you sets of parameters which you can use on the new data frame, where again $Z=1$ throughout, giving you multiply imputed data sets for variance control.

This way you get predictions for all units of course, even those units without missing data, but you can replace those predictions again by the originally observed information.

The only difficulty with this approach is how to access the final model in mice. Quick eyeballing of the documentation (p.77) shows the model parameters are not default output in mids objects. This perhaps requires contacting the authors or programming the imputation by chained equations yourself following van Buuren (2012) or perhaps Raghunathan (2001).

Raghunathan, T. E., Lepkowski, J., van Hoewyk, J., & Solenberger, P. (2001). A multivariate technique for multiply imputing missing values using a sequence of regression models. Survey Methodology, 27(1), 85–95.

van Buuren, S. (2012). Flexible Imputation of Missing Data. Boca Raton: CRC Press.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.