with.miceadds {miceadds} | R Documentation |
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 class 'mids.1chain'
with(data, expr, ...)
## S3 method for class 'datlist'
with(data, expr, fun, ...)
## S3 method for class 'mids.nmi'
with(data, expr, ...)
## S3 method for class 'nested.datlist'
with(data, expr, fun, ...)
## S3 method for class 'NestedImputationList'
with(data, expr, fun, ...)
## S3 method for class 'datlist'
within(data, expr, ...)
## S3 method for class 'imputationList'
within(data, expr, ...)
## S3 method for class 'nested.datlist'
within(data, expr, ...)
## S3 method for class 'NestedImputationList'
within(data, expr, ...)
withPool_MI(x, ...)
withPool_NMI(x, ...)
## S3 method for class 'mira.nmi'
summary(object, ...)
Arguments
data |
Object of class |
expr |
Expression with a formula object. |
fun |
A function taking a data frame argument |
... |
Additional parameters to be passed to |
object |
Object of class |
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
Author(s)
Slightly modified code of mice::with.mids
,
mice::summary.mira
,
base::within.data.frame
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
,
Imputation functions in miceadds:
mice.1chain
, mice.nmi
Examples
## 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)
# 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)
## End(Not run)