Multiple Imputation by Chained Equations using One Chain
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 class 'mids.1chain' summary(object,...) ## S3 method for class 'mids.1chain' print(x, ...) ## S3 method for class '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
midsobj |
Objects of class |
datlist |
List of multiply imputed datasets |
datalong |
Original and imputed dataset in the long format |
implist |
List of |
chainMpar |
Trace of means for all imputed variables |
chainVarpar |
Trace of variances for all imputed variables |
Multiple imputation can also be used for determining causal effects (see Example 3; Schafer & Kang, 2008).
############################################################################# # 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 ## Not run: 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 ## End(Not run)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.