rr-mice

Perform operation on each imputed dataset in R's MICE


How can I perform an operation (like subsetting or adding a calculated column) on each imputed dataset in an object of class mids from R's package mice? I would like the result to still be a mids object.

Edit: Example

library(mice)
data(nhanes)

# create imputed datasets
imput = mice(nhanes)

The imputed datasets are stored as a list of lists

imput$imp

where there are rows only for the observations with imputation for the given variable.

The original (incomplete) dataset is stored here:

imput$data

For example, how would I create a new variable calculated as chl/2 in each of the imputed datasets, yielding a new mids object?


Solution

  • Another option is to calculate the variables before the imputation and place restrictions on them.

    library(mice)
    
    # Create the additional variable - this will have missing
    nhanes$extra <- nhanes$chl / 2
    
    # Change the method of imputation for extra, so that it always equals chl/2
    # Change the predictor matrix so only chl predicts extra
    ini <- mice(nhanes, max = 0, print = FALSE)
    
    meth <- ini$meth
    meth["extra"] <- "~I(chl / 2)"
    
    pred <- ini$pred  # extra isn't used to predict
    pred["extra", "chl"] <- 1
    
    # Imputations
    imput <- mice(nhanes, seed = 1, pred = pred, meth = meth, print = FALSE)
    

    There are examples in mice: Multivariate Imputation by Chained Equations in R.