1
$\begingroup$

I am hoping to use multiple imputation to deal with missing continuous data (measured on a scale of 0-100) before conducting exploratory factor analysis (EFA), and to obtain factor scores for each individual case. I would ideally like to be able to subject the factor scores to further analyses (regression and possibly latent profile analysis).

I have tried multiple imputation in R: package mifa calls package mice to use predictive mean matching (PMM), and combines correlation matrices from the multiply imputed datasets. The averaged correlation matrix is then passed to package psych for EFA (I used Principal Axis Factoring and direct oblimin rotation). However, I can only get factor weights this way, not individual factor scores. I understand that Generalized Procrustes rotation might solve this problem (see the question Factor analysis on multiply imputed data).

Why does the program FACTOR, which uses Procrustes rotation, throw up such varied factor solutions on consecutive runs?

I thought FACTOR might get around my lack of expertise with Procrustes rotation. It does hot-deck imputation, then performs multiple EFAs (I used ULS and direct Oblimin rotation), performs Procrustes rotation, then averages both the factor solutions and individuals’ factor scores. However, the result differs substantially with every run, and this doesn’t seem right. At first I thought that this is because FACTOR doesn’t allow a seed to be set prior to imputation. But as an experiment I tried the R-based solution above with no seed, and got a very stable factor solution across runs, both when using 5 imputations and when using 100. The FACTOR solutions are also very far from the solution I obtain when I use the data with missingness, which is not the case when using mifa/mice/psych in R. My best current guess is that this is something to do with the Procrustes rotation step in FACTOR, especially the rotation of the solutions towards one another, but I have no real idea whether that's the case.

Are there tutorials or materials for non-advanced readers for Generalized Procrustes rotation?

I have tried and failed to understand how to implement it in R for my situation (e.g. using package shapes), so I searched for tutorials but have failed to find any.

Which of these two alternatives to Procrustes rotation least damages the factor solution and standard errors of factor scores?

Option 1: pick a single imputed dataset and use the factor solution and factor scores for that single imputation (by passing it to psych). This negates the advantage of realistic SEs that one gets from multiple imputation. It might perhaps nevertheless have advantages over other single imputation methods (as discussed in the question Predictive Mean Matching as Single Imputation?: better handling of non-normal data and no imputation of implausible values. 

Option 2: average across the multiply imputed datasets themselves, then run FA on the averaged dataset and obtain a single set of factor scores. The poorly estimated standard errors would still apply, but is this suggestion worse than Option 1 because it would inflate correlations?

Further background on the data:

Most of the variables are skewed, many with a high mass near 0 or 100. 95% of the 60 variables have missing data, which results from selection of a ‘don’t know’ option. The proportion of missing data ranges from 0-10.9% on each variable, with a mean of 3.4%. The missing data are MAR or MCAR, multivariate and non-monotone. Additionally, I have been using 8 covariates during imputation (age, gender, certain other beliefs, etc.)

During EFA I encounter some very low communalities (below .2). My understanding is that I therefore need to run the EFA multiple times, removing the variable with the lowest communality each time before re-running. On dry runs, this means I end up with about 23 variables in the final factor solution.

$\endgroup$

Your Answer

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

Browse other questions tagged or ask your own question.