I generated 20 imputed data sets to handle missing values. Using SPSS I can't carry out a multiple regression and calculate confidence intervals with this multiply imputated data set. Is there a way to carry out these tests in SPSS? If yes, how? If no, which other software could I use? or is there an alternative?

Background information about the study: I have 156 cases. Each case/person had to answer 202 items. 0.75% of the overall 31512 item answers are missing.

  • $\begingroup$ Your sample size is 156 and you have missing data in 0.75% of cases. Is that correct, because it implies that 1.17 observations have missing data, which cannot be true. If you have only 1 observation with missing data then you have 0,64% missingness. Please clarify $\endgroup$ Jan 31 '20 at 15:44
  • $\begingroup$ Sorry for the unclear formulation. I have 156 cases/persons. Each person answered 202 questionnaire items. That makes 31512 answers in total. 0.75% of these answers are missing. $\endgroup$
    – AppleSeed
    Feb 1 '20 at 10:34
  • $\begingroup$ How did you account for the multiple measures within persons? $\endgroup$ Feb 1 '20 at 10:56
  • $\begingroup$ Sorry, I don't quite understand. What do you mean? What should I account for? $\endgroup$
    – AppleSeed
    Feb 2 '20 at 11:03
  • $\begingroup$ You have repeated measures within persons. Each person took answered more than one item and your measurements are at the item level, I assume. Another way to think about it is: does the same person appear on different rows of your data ? If so you have to account for non-independence within persons, both in the imputation model and the final analysis model. $\endgroup$ Feb 2 '20 at 13:11

Although the information in your question does not quite make sense (0.75% missingness with 156 observations) the answer to your question is that you need to apply Rubin's rules for pooling the analysis on the 20 imputed datasets. Essentially, this involves simply averaging the point estimates but the standard errors are not averaged because there is variation between imputations as well as within inmputations.

You can apply Rubin's rules using any statistical software, but you will have to run the analysis model on each of the imputed datasets and then calculate the pooled values manually (or programatically).

Alternatively you could just use the mice package in R and use the the supplied pool function. For example using the nhanes dataset:

> library(mice)    
> imp <- mice(nhanes, seed = 15)  # perform imputations with defaults

> fit <- with(imp, lm(chl ~ age + bmi))   # fit the analysis model to each imputed dataset
> round(summary(pool(fit), conf.int = TRUE), 3)
            estimate std.error statistic     df p.value    2.5 %  97.5 %
(Intercept)   -7.222    68.901    -0.105  9.462   0.919 -161.933 147.490
age           36.655    10.351     3.541 11.529   0.004   13.998  59.311
bmi            5.199     2.156     2.412  9.332   0.038    0.349  10.050

and this produces the pooled estimates using Rubin's rules, including standard errors, confidence intervals and p values.


There is a new solution: the new R package (hmi, Speidel et al 2020). It handles missing data imputation + pooling of coefficients like mice, but also handles hierarchical designs. This would address the issue of multiple measures/person (a.k.a. longitudinal data, repeated measures, random effects).

A simple demonstration using the sleepstudy dataset would look something like this:

# load required libraries
library(hmi)    # imputation
library(lme4)   # mixed effects models

# simulate 10% missing cells (not 10% missing rows)
# while avoiding rows missing both variables
sleep <- sleepstudy
iremove <- sample(nrow(sleepstudy), size = 0.1*nrow(sleepstudy))
sleep$Reaction[head(iremove, length(iremove)/2)] <- NA
sleep$Days[tail(iremove, length(iremove)/2)] <- NA

# Impute missing data and fit the model
# ! this takes a few minutes to run !
myForm <- formula(Reaction ~ 1 + Days + (1|Subject))
sleep.imp <- hmi(data = sleep, 
                 model_formula = myForm,
                 # family = Gamma(link = "log"),
                 m = 10)

# Get the pooled model coefficients

According to the documentation, pooling is also following Ruben's rule. (Note: I left out diagnostics checks for conciseness but they should be done!)

As an additional side note: If the 202 items are used as predictors in the multiple regression, collinearity is likely an issue.

I hope that helps!


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.