mice.1chain.Rd
This function modifies the mice::mice
function to
multiply impute a dataset using a long chain instead of multiple parallel chains
which is the approach employed in mice::mice
.
mice.1chain(data, burnin=10, iter=20, Nimp=10, method=NULL, where=NULL, visitSequence=NULL, blots=NULL, post=NULL, defaultMethod=c("pmm", "logreg", "polyreg", "polr"), printFlag=TRUE, seed=NA, data.init=NULL, ...) # S3 method for mids.1chain summary(object,...) # S3 method for mids.1chain print(x, ...) # S3 method for mids.1chain plot(x, plot.burnin=FALSE, ask=TRUE, ...)
data | Numeric matrix |
---|---|
burnin | Number of burn-in iterations |
iter | Total number of imputations (larger than |
Nimp | Number of imputations |
method | See |
where | See |
visitSequence | See |
blots | See |
post | See |
defaultMethod | See |
printFlag | See |
seed | See |
data.init | See |
object | Object of class |
x | Object of class |
plot.burnin | An optional logical indicating whether burnin iterations should be included in the traceplot |
ask | An optional logical indicating a user request for viewing next plot |
... | See |
A list with following entries
Objects of class mids
List of multiply imputed datasets
Original and imputed dataset in the long format
List of mids
objects for every imputation
Trace of means for all imputed variables
Trace of variances for all imputed variables
Multiple imputation can also be used for determining causal effects (see Example 3; Schafer & Kang, 2008).
if (FALSE) { ############################################################################# # EXAMPLE 1: One chain nhanes data ############################################################################# library(mice) data(nhanes, package="mice") set.seed(9090) # nhanes data in one chain imp.mi1 <- miceadds::mice.1chain( nhanes, burnin=5, iter=40, Nimp=4, method=rep("norm", 4 ) ) summary(imp.mi1) # summary of mids.1chain plot( imp.mi1 ) # trace plot excluding burnin iterations plot( imp.mi1, plot.burnin=TRUE ) # trace plot including burnin iterations # select mids object imp.mi2 <- imp.mi1$midsobj summary(imp.mi2) # summary of mids # apply mice functionality lm.mids mod <- with( imp.mi2, stats::lm( bmi ~ age ) ) summary( mice::pool( mod ) ) ############################################################################# # EXAMPLE 2: One chain (mixed data: numeric and factor) ############################################################################# library(mice) data(nhanes2, package="mice") set.seed(9090) # nhanes2 data in one chain imp.mi1 <- miceadds::mice.1chain( nhanes2, burnin=5, iter=25, Nimp=5 ) # summary summary( imp.mi1$midsobj ) ############################################################################# # EXAMPLE 3: Multiple imputation with counterfactuals for estimating # causal effects (average treatment effects) # Schafer, J. L., & Kang, J. (2008). Average causal effects from nonrandomized # studies: a practical guide and simulated example. # Psychological Methods, 13, 279-313. ############################################################################# data(data.ma01) dat <- data.ma01[, 4:11] # define counterfactuals for reading score for students with and # without migrational background dat$read.migrant1 <- ifelse( paste(dat$migrant)==1, dat$read, NA ) dat$read.migrant0 <- ifelse( paste(dat$migrant)==0, dat$read, NA ) # define imputation method impmethod <- rep("pls", ncol(dat) ) names(impmethod) <- colnames(dat) # define predictor matrix pm <- 4*(1 - diag( ncol(dat) ) ) # 4 - use all interactions rownames(pm) <- colnames(pm) <- colnames(dat) pm[ c( "read.migrant0", "read.migrant1"), ] <- 0 # do not use counterfactuals for 'read' as a predictor pm[, "read.migrant0"] <- 0 pm[, "read.migrant1"] <- 0 # define control variables for creation of counterfactuals pm[ c( "read.migrant0", "read.migrant1"), c("hisei","paredu","female","books") ] <- 4 ## > pm ## math read migrant books hisei paredu female urban read.migrant1 read.migrant0 ## math 0 4 4 4 4 4 4 4 0 0 ## read 4 0 4 4 4 4 4 4 0 0 ## migrant 4 4 0 4 4 4 4 4 0 0 ## books 4 4 4 0 4 4 4 4 0 0 ## hisei 4 4 4 4 0 4 4 4 0 0 ## paredu 4 4 4 4 4 0 4 4 0 0 ## female 4 4 4 4 4 4 0 4 0 0 ## urban 4 4 4 4 4 4 4 0 0 0 ## read.migrant1 0 0 0 4 4 4 4 0 0 0 ## read.migrant0 0 0 0 4 4 4 4 0 0 0 # imputation using mice function and PLS imputation with # predictive mean matching method 'pmm6' imp <- mice::mice( dat, method=impmethod, predictorMatrix=pm, maxit=4, m=5, pls.impMethod="pmm5" ) #*** Model 1: Raw score difference mod1 <- with( imp, stats::lm( read ~ migrant ) ) smod1 <- summary( mice::pool(mod1) ) ## > smod1 ## est se t df Pr(>|t|) lo 95 hi 95 nmis fmi lambda ## (Intercept) 510.21 1.460 349.37 358.26 0 507.34 513.09 NA 0.1053 0.1004 ## migrant -43.38 3.757 -11.55 62.78 0 -50.89 -35.87 404 0.2726 0.2498 #*** Model 2: ANCOVA - regression adjustment mod2 <- with( imp, stats::lm( read ~ migrant + hisei + paredu + female + books) ) smod2 <- summary( mice::pool(mod2) ) ## > smod2 ## est se t df Pr(>|t|) lo 95 hi 95 nmis fmi lambda ## (Intercept) 385.1506 4.12027 93.477 3778.66 0.000e+00 377.0725 393.229 NA 0.008678 0.008153 ## migrant -29.1899 3.30263 -8.838 87.46 9.237e-14 -35.7537 -22.626 404 0.228363 0.210917 ## hisei 0.9401 0.08749 10.745 160.51 0.000e+00 0.7673 1.113 733 0.164478 0.154132 ## paredu 2.9305 0.79081 3.706 41.34 6.190e-04 1.3338 4.527 672 0.339961 0.308780 ## female 38.1719 2.26499 16.853 1531.31 0.000e+00 33.7291 42.615 0 0.041093 0.039841 ## books 14.0113 0.88953 15.751 154.71 0.000e+00 12.2541 15.768 423 0.167812 0.157123 #*** Model 3a: Estimation using counterfactuals mod3a <- with( imp, stats::lm( I( read.migrant1 - read.migrant0) ~ 1 ) ) smod3a <- summary( mice::pool(mod3a) ) ## > smod3a ## est se t df Pr(>|t|) lo 95 hi 95 nmis fmi lambda ## (Intercept) -22.54 7.498 -3.007 4.315 0.03602 -42.77 -2.311 NA 0.9652 0.9521 #*** Model 3b: Like Model 3a but using student weights mod3b <- with( imp, stats::lm( I( read.migrant1 - read.migrant0) ~ 1, weights=data.ma01$studwgt ) ) smod3b <- summary( mice::pool(mod3b) ) ## > smod3b ## est se t df Pr(>|t|) lo 95 hi 95 nmis fmi lambda ## (Intercept) -21.88 7.605 -2.877 4.3 0.04142 -42.43 -1.336 NA 0.9662 0.9535 #*** Model 4: Average treatment effect on the treated (ATT, migrants) # and non-treated (ATN, non-migrants) mod4 <- with( imp, stats::lm( I( read.migrant1 - read.migrant0) ~ 0 + as.factor( migrant) ) ) smod4 <- summary( mice::pool(mod4) ) ## > smod4 ## est se t df Pr(>|t|) lo 95 hi 95 nmis fmi lambda ## as.factor(migrant)0 -23.13 8.664 -2.669 4.27 0.052182 -46.59 0.3416 NA 0.9682 0.9562 ## as.factor(migrant)1 -19.95 5.198 -3.837 19.57 0.001063 -30.81 -9.0884 NA 0.4988 0.4501 # ATN=-23.13 and ATT=-19.95 }