I am planning to do a multigroup SEM analysis. I gathered survey data and calculated a survey weight. Some of my variables have item nonresponse (mostly around 5% missings).

I´ve decided to use multiple imputation to handle the missing data. First, i used LittleMCAR() test to check for the missingness mechanism. I also used TestMCARNormality() from Jamshidian et al. which has a nonparametric test of MCAR for homogenity of covariances. The latter didn´t reject MCAR, the LittleMCAR test did (p=8.3%). Because i assume my data to be MAR, my data was split in men/women and I applied the LittleMCAR() test for each subgroup. This time MCAR was not rejected in both subgroups.

I´ve read (see: Enders, C., & Gottschall, A. (2011). Multiple Imputation Strategies for Multiple Group Structural Equation Models. Structural Equation Modeling: A Multidisciplinary Journal, 35-54.) that if I plan to do a multigroup SEM analysis, I should do a separate multiple imputation for each group (in this case: men/women). The R package MICE will be used for the imputation.

Now my questions:

1.) Should use the default "massive imputation" predictormatrix from MICE predictorMatrix = (1 - diag(1, ncol(data)), that uses all variables from the dataset as predictors for the imputation model, or should i use quickpred() to generate a predictormatrix? quickpred uses some criteria (like correlation of predictor and target-variable) to select a set of predictors for each variable, that will be imputed.

quickpred(datensatz_gender_0, include=c("weight_trunc"),exclude=c("ID","X","gender"),mincor = 0.1)

2.) Should I include the survey weight in the predictor matrix?

After imputation, the list of imputed datasets will be given to the survey()-package (for weighting purposes), then i will use the lavaan to specify my model, which will use the imputed data survey object. This lavaan model will then be passed to lavaan.survey(), so I can use the survey weights together with the imputed data. As far, as I´ve understood, lavaan.survey will then pool the results...

It would be great, if somebody can give me an answer to this question. Thank you!

  • $\begingroup$ This is an extremely ambitious project that combines three techniques that are complicated per se (SEM, imputation, survey inference). I am not aware of any methodological papers that address all three at the same time, and of all the stuff that was published, I only consider two papers on imputation+survey to be convincing, and probably one paper on SEM+survey. I am not following SEM+imputation literature if there is any; it seems to me that for missing data, SEM folks are creating their own unique estimation procedures. $\endgroup$
    – StasK
    Apr 30, 2015 at 13:28
  • $\begingroup$ Please provide references for the claims you make, and all these "I heard" and "I read". For one thing, the claim that a test for MAR can be non-parametric sounds odd to me; the missing data concepts are intrinsically likelihood-based and often model-specific (and by-the-way, you may want to reconsider your dash-interspersing-habit; it will make your final text difficult-to-read). $\endgroup$
    – StasK
    Apr 30, 2015 at 13:36
  • $\begingroup$ Thank you for your interest and sorry for my bad syntax, i´ll use less dashes. I´m missing literature on the combination of these three topics, too. Using FIML and survey-weights in a SEM doesn´t seem too far off, to me. lavaan.survey or MPLUS can do this. I thought, it must somehow be possible with MI, too. On the nonparametric test for MAR, i used the MissMech-package: jstatsoft.org/v56/i06/paper $\endgroup$
    – SEMson
    Apr 30, 2015 at 14:04
  • $\begingroup$ If these packages can do that, it does not necessarily mean that what they will do will be right for your survey design and your patterns of missing data. I doubt that they were designed for that three-way interaction. $\endgroup$
    – StasK
    Apr 30, 2015 at 14:06

2 Answers 2


(I'm the creator of lavaan.survey)

As Stas already indicated, the combination (multiple imputation * complex sampling) can be tricky business. The main papers are Kott (1995) and Kim, Brick & Fuller (2006).

Here are some considerations:

  • As mentioned by Stas, all the usual best practices of MI apply. Considering the below, I would probably not use quickpred() initially. There is a risk it will discard things that you actually need. It might help to make some reasonable subselection though.

  • If you have weights, these need to be included in the imputation model as a covariate (Kim et al. 2006, p. 518). Since you are doing multiple group analysis ("domain estimation"), you also need to include the interaction between the group dummies and the weights in the imputation model (p. 519).

  • If you have strata and clusters, things become more complicated. The imputation model needs to account for the resulting correlation between the observations. If not you will get the wrong standard errors (Kim et al. 2006: p. 514). A model-based way of doing this might be to include strata as fixed effects and clusters as random effects in a Bayesian imputation model. A more survey-like approach would be to follow Stas' suggestion and use a resampling procedure that respects the strata and clusters. For example, in bootstrapping and with just the clusters, you would sample a random cluster (PSU) with replacement and then individuals (2SUS) with replacement within the sampled clusters.

Another advantage of Stas' resampling suggestion, even without strata and clusters, is that you will account for the uncertainty about the parameters of the imputation model including that caused by the weights. I am not sure if mice does this accurately by default. This is usually a relatively small additional term in the variance but it might make a difference.

Once you have the multiply imputed datasets, you can just pass these as an imputationList to lavaan.survey (see the JSS lavaan.survey paper). lavaan.survey will then do all the usual MI pooling calculations for you. So you don't need to manually fit a model separately for each imputation!

Hope this helps,

All the best, Daniel

P.S. Thanks to Stas and @Gaming_dude who brought this post to my attention. I would be happy to continue the conversation (here, lavaan Google discussion group, twitter, email..)!

  • $\begingroup$ Daniel, thank you very much for this hugely useful answer. To be honest, i´ll have some reading to do until i understand the resampling strategy proposed by Stas. My knowledge in these spheres is - as you both might quess from my question - limited. If i understood correctly, i shouldn´t impute seperately, but explicitly model the interaction of weight and grouping variable in the imputation model. Is this still advisable, if i used gender as covariate when i calculated the nonresponse-weight? (I hope that´s not stupid to ask). $\endgroup$
    – SEMson
    May 6, 2015 at 11:17
  • 1
    $\begingroup$ @Daniel, welcome to CV. Can you please edit your answer and provide links to the references you gave? $\endgroup$
    – StasK
    May 6, 2015 at 15:01
  • $\begingroup$ @StasK: Thanks, done. SEMson: I think imputing separately should work also, since you implicitly include both the main and interaction effects of weight and group. $\endgroup$ May 7, 2015 at 12:24
  • $\begingroup$ You've got to be kidding me with the links to my citeulike library :). I was not aware of Kott's paper though. $\endgroup$
    – StasK
    May 7, 2015 at 15:09
  • $\begingroup$ @StasK Honestly had not noticed that! I just followed the lead above of using citeulike and searched for the paper... :) $\endgroup$ May 10, 2015 at 14:26

If I were dealing with this in my project, and I am grateful that I don't have to, this is what I would have done.

  1. Take a survey bootstrap sample that respects my survey design -- see Rao and Wu 1988.
  2. For each bootstrap replicate, impute the missing data once, see Shao and Sitter 1996.
  3. Within each imputation, follow the best practices for SEM imputation, which would probably mean: do the imputation separately for men and women, so that the unique features within the group are preserved for the subsequent multiple group analysis; include all variables that are in the SEM model as predictors in the imputation model; include the survey design variables (strata, clusters, weights, possibly non-linear functions of weights) into the imputation model.
  4. Run your analysis in lavaan.survey using the weight corresponding to the current bootstrap replicate.
  5. Repeat 1-4 to obtain design-consistent, imputation-adjusted standard errors.

I don't know what is going to happen to the tests like the goodness of fit that SEM people are so crazy about (and that always rejects anyway). Judging from the technical description of lavaan.survey in JSS (Oberski 2014), there's a way to pass the variance estimation step 5 to lavaan.survey so that it could estimate the variance of the estimating equations $\Gamma$ and then form all of these traditional tests. Whether, and how, that is doable is beyond me though. I don't quite see the mechanism of aligning the replicate weights with imputations, but may be it is in place somewhere.


Oberski 2014: http://www.citeulike.org/user/ctacmo/article/13599829

Rao and Wu 1988: http://www.citeulike.org/user/ctacmo/article/582039

Shao and Sitter 1996: http://www.citeulike.org/user/ctacmo/article/1269394

  • $\begingroup$ Thank you for your answer. I´m not allowed to upvote at this time, but i will do this later. Perhaps, you can add an answer, what purpose the bootstrap procedure has in this case? $\endgroup$
    – SEMson
    Apr 30, 2015 at 15:19
  • $\begingroup$ The bootstrap is not just "take a sample of size $n$ with replacement" bootstrap; it has to reflect the sampling design, if there were any (i.e., stratification and PSUs/clusters in the sample). $\endgroup$
    – StasK
    May 1, 2015 at 18:28
  • $\begingroup$ Hello @StasK, I'm facing a similar problem in my dataset: lots of missing on the key explanatory variable of interest (price) + multiple endogenous regressors (insurance coverage, income, etc.) for a multinomial outcome (type of health care provider visited), so I think I will have to use -sem- to estimate my final model. I work in Stata and recognise your name from Statalist...is there an equivalent for lavaan.survey in Stata? $\endgroup$ May 5, 2015 at 23:07
  • $\begingroup$ I imagine svy: sem and svy: gsem should work. $\endgroup$
    – StasK
    May 5, 2015 at 23:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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