Learn R Programming

miceadds (version 2.10-14)

with.miceadds: Evaluates an Expression for (Nested) Multiply Imputed Datasets

Description

Evaluates an expression for (nested) multiply imputed datasets. These functions extend the following functions: mice::with.mids, base::with, base::within.data.frame, mitools::with.imputationList.

The withPool functions try to pool estimates (by simple averaging) obtained by with or a list of results of imputed datasets.

Usage

# S3 method for mids.1chain
with(data, expr, ...)
# S3 method for datlist
with(data, expr, fun , ...)

# S3 method for mids.nmi with(data, expr, ...) # S3 method for nested.datlist with(data, expr, fun , ...) # S3 method for NestedImputationList with(data, expr, fun , ...)

# S3 method for datlist within(data, expr, ...) # S3 method for imputationList within(data, expr, ...)

# S3 method for nested.datlist within(data, expr, ...) # S3 method for NestedImputationList within(data, expr, ...)

withPool_MI(x, ...)

withPool_NMI(x, ...)

# S3 method for mira.nmi summary(object , ...)

Arguments

data

Object of class mids.1chain, mids.nmi, imputationList or NestedImputationList

expr

Expression with a formula object.

fun

A function taking a data frame argument

Additional parameters to be passed to expr.

object

Object of class mira.nmi.

x

List with vectors or matrices as results of an analysis for (nested) multiply imputed datasets.

Value

with.mids.1chain: List of class mira.

with.mids.nmi: List of class mira.nmi.

with.datlist: List of class imputationResultList.

with.NestedImputationList or with.nested.datlist: List of class NestedImputationResultList.

within.imputationList: List of class imputationList.

within.NestedImputationList: List of class NestedImputationList.

withPool_MI or withPool_NMI: Vector or matrix with pooled estimates

See Also

See the corresponding functionality in base, mice, mitools and mitml packages: mice::with.mids, mitools::with.imputationList, mitml::with.mitml.list, base::with

base::within.data.frame, mitml::within.mitml.list,

mice::summary.mira,

Imputation functions in miceadds: mice.1chain, mice.nmi

Examples

Run this code
# NOT RUN {
#############################################################################
# EXAMPLE 1: One chain nhanes data | application of 'with' and 'within'
#############################################################################

library(mice)
data(nhanes, package="mice")
set.seed(9090)

# nhanes data in one chain
imp <- miceadds::mice.1chain( nhanes , burnin=5 , iter=40 , Nimp=4 )
# apply linear regression
res <- with( imp , expr = stats::lm( hyp ~ age + bmi  ) )
summary(res)
# pool results
summary( mice::pool(res))

# calculate some descriptive statistics
res2 <- with( imp , expr = c("M1"= mean(hyp) , "SD_age"=stats::sd(age) ) )
# pool estimates
withPool_MI(res2)

# with method for datlist
imp1 <- miceadds::datlist_create(imp)
res2b <- with( imp1 , fun = function(data){ 
                    dfr <- data.frame("M" = colMeans(data) ,
                             "Q5" = apply( data, 2, stats::quantile, .05 ),   
                             "Q95" = apply( data, 2, stats::quantile, .95 ) )
                    return(dfr)
                        } )
withPool_MI(res2b)

# convert mids object into an object of class imputationList
datlist <- miceadds::mids2datlist( imp )
datlist <- mitools::imputationList(datlist)

# }
# NOT RUN {
# define formulas for modification of the data frames in imputationList object
datlist2 <- within( datlist , {
                     age.D3 <- 1*(age == 3)
                     hyp_chl <- hyp * chl
                        } )
# look at modified dataset
head( datlist2$imputations[[1]] )

# convert into a datlist
datlist2b <- miceadds::datlist_create( datlist2 )

# apply linear model using expression
mod1a <- with( datlist2 , expr = stats::lm( hyp ~ age.D3 ) )
# do the same but now with a function argument
mod1b <- with( datlist2 , fun = function(data){
                    stats::lm( data$hyp ~ data$age.D3 ) 
                        } )                       
# apply the same model for object datlist2b
mod2a <- with( datlist2b , expr = lm( hyp ~ age.D3 ) )
mod2b <- with( datlist2b , fun = function(data){
                    stats::lm( data$hyp ~ data$age.D3 ) 
                        } )
                                        
mitools::MIcombine(mod1a)
mitools::MIcombine(mod1b)
mitools::MIcombine(mod2a)
mitools::MIcombine(mod2b)

#############################################################################
# EXAMPLE 2: Nested multiple imputation and application of with/within methods
#############################################################################

library(BIFIEsurvey)
data(data.timss2 , package="BIFIEsurvey" )
datlist <- data.timss2        

# remove first four variables
M <- length(datlist)
for (ll in 1:M){
    datlist[[ll]] <- datlist[[ll]][ , -c(1:4) ]
                }
                
# nested multiple imputation using mice
imp1 <- miceadds::mice.nmi( datlist ,  m=4 , maxit=3 )
summary(imp1)
# apply linear model and use summary method for all analyses of imputed datasets
res1 <- with( imp1 , stats::lm( ASMMAT ~ migrant + female ) )	
summary(res1)

# convert mids.nmi object into an object of class NestedImputationList
datlist1 <- miceadds::mids2datlist( imp1 )
datlist1 <- miceadds::NestedImputationList( datlist1 )
# convert into nested.datlist object
datlist1b <- miceadds::nested.datlist_create(datlist1)

# use with function
res1b <- with( datlist1 , stats::glm( ASMMAT ~ migrant + female ) )
# apply for nested.datlist
res1c <- with( datlist1b , stats::glm( ASMMAT ~ migrant + female ) )

# use within function for data transformations
datlist2 <- within( datlist1 , {
                highsc <- 1*(ASSSCI > 600)
                books_dum <- 1*(books>=3)
                rm(scsci)   # remove variable scsci
                    } )

# include random number in each dataset
N <- attr( datlist1b , "nobs")
datlist3 <- within( datlist1b , {                  
                rn <- stats::runif( N , 0, .5 )
                    } )                   
                    
#-- some applications of withPool_NMI
# mean and SD
res3a <- with( imp1 , c( "m1"= mean(ASMMAT) , "sd1" = stats::sd(ASMMAT) ) ) 
withPool_NMI(res3a)  
# quantiles
vars <- c("ASMMAT" , "lang" , "scsci")
res3b <- with( datlist1b , fun = function(data){
                dat <- data[,vars]
                res0 <- sapply( vars , FUN = function(vv){
                    stats::quantile( dat[,vv] , probs = c(.25 , .50 , .75) )        
                                    } )
                t(res0)
                    } )                                 
withPool_NMI(res3b)                                          
# }

Run the code above in your browser using DataLab