I am using lavaan to analyse customer survey data. There are several questions in the survey data, which can be factored into categories (e.g. friendliness, efficiency) etc. There is an overall satisfaction score, so cfa or sem can be used nicely.

My problem lies in constructing a feature table from the responses, given the original survey design. In the survey design, most questions (80%) are answered by ALL participants. However, some questions divide the participants into two distinct groups. For examples, participants are asked a question, such as: "did you purchase experience A?"? If they answer "yes", they are given specific follow up questions such as rate experience A by value, quality etc. If they answered "no", the follow-up questions are different (e.g. "why not"). This creates two distinct groups in the survey (those who answered "yes" to expereince A, and those who did not).

One option is to split the analysis by groupings within lavaan, so I construct a model for those who purchased experience A, and a separate model those who did not. The problem with this approach, is I cannot compare the 80% features corresponding to questions which all participants answered in the one analysis. This means I lose power in the analysis through reduced sample size.

Is it an option to construct factors, whereby factor1 is constructed from experience A-yes, and factor2 from the other respondents. Is there a better way to think about constructing my feature table from which to run the cfa analysis?


This is a bit tricky. You have a branching survey, and because of that you have missingness.

You can often use full information maximum likelihood (FIML) estimation. An assumption of FIML is that your data are missing at random [MAR] (or missing completely at random [MCAR]). Your data are MAR because another variable in the model predicts missingness - if you say not to Question 1, you don't answer question 2. I've used in surveys of things like drug use:

  • Have you smoked cannabis in the past month?
  • If so, how much?

You then have two outcomes: one (a logistic regression) for use, and a second (linear? Poisson?) for amount - but amount only applies to those who actually smoked.

Another example is discrete time survival models. Each month we ask if a person left treatment in the past month, and about some other variables. If you left treatment in Month 1, you can't answer the questions in Month 2.

  • $\begingroup$ Thanks Jeremy. It is tricky. My outcome variable is satisfaction, or NPS. I am a little concerned about imputation because the answer is missing not because the respondent had the experience, but did not respond. Instead, we know the respondent did not have the experience. I can perhaps conflate the branches into a nominal response value for one variable, eg "yes-good", " yes-ok", "no-too expensive", " no-lack of time ". Then each response value can be converted into a binary variable in a feature table. Otherwise, I can treat them as separate groups of participants (less preferable) $\endgroup$
    – Ilana L
    Feb 27 '17 at 7:12
  • $\begingroup$ Why not FIML? FIML isn't imputation. $\endgroup$ Feb 27 '17 at 11:36
  • $\begingroup$ It has the same assumptions as imputation. It's basically imputation. $\endgroup$ Apr 7 at 19:51
  • $\begingroup$ It often gives equivalent answers to imputation, but I wouldn't say it is imputation. There are times you can use FIML and you can't use imputation (and vice versa). $\endgroup$ Apr 8 at 20:03

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.