Imputation by a two-level normal model using
Imputes univariate missing data using a two-level normal model with
homogeneous within group variances. Aggregated group effects (i.e. group
means) can be automatically created and included as predictors in the
two-level regression (see argument
type). This function needs the
mice.impute.2l.pan( y, ry, x, type, intercept = TRUE, paniter = 500, groupcenter.slope = FALSE, ... )
Incomplete data vector of length
Vector of missing data pattern (
p) of complete covariates.
Vector of length
ncol(x)identifying random and class variables. Random effects are identified by a '2'. The group variable (only one is allowed) is coded as '-2'. Random effects also include the fixed effect. If for a covariates X1 group means shall be calculated and included as further fixed effects choose '3'. In addition to the effects in '3', specification '4' also includes random effects of X1.
Logical determining whether the intercept is automatically added.
Number of iterations in
pan. Default is 500.
TRUE, in case of group means (
typeis '3' or'4') group mean centering for these predictors are conducted before doing imputations. Default is
Other named arguments.
Implements the Gibbs sampler for the linear two-level model with homogeneous
within group variances which is a special case of a multivariate linear mixed
effects model (Schafer & Yucel, 2002). For a two-level imputation with
heterogeneous within-group variances see
The random intercept is automatically added in
This function does not implement the
where functionality. It
nmis imputation, irrespective of the
argument of the
Schafer J L, Yucel RM (2002). Computational strategies for multivariate linear mixed-effects models with missing values. Journal of Computational and Graphical Statistics. 11, 437-457.
Van Buuren, S., Groothuis-Oudshoorn, K. (2011).
Imputation by Chained Equations in
R. Journal of Statistical
Software, 45(3), 1-67. doi:10.18637/jss.v045.i03
Alexander Robitzsch (IPN - Leibniz Institute for Science and Mathematics Education, Kiel, Germany), email@example.com
Alexander Robitzsch (IPN - Leibniz Institute for Science and Mathematics Education, Kiel, Germany), firstname.lastname@example.org.
# simulate some data # two-level regression model with fixed slope # number of groups G <- 250 # number of persons n <- 20 # regression parameter beta <- .3 # intraclass correlation rho <- .30 # correlation with missing response rho.miss <- .10 # missing proportion missrate <- .50 y1 <- rep(rnorm(G, sd = sqrt(rho)), each = n) + rnorm(G * n, sd = sqrt(1 - rho)) x <- rnorm(G * n) y <- y1 + beta * x dfr0 <- dfr <- data.frame("group" = rep(1:G, each = n), "x" = x, "y" = y) dfr[rho.miss * x + rnorm(G * n, sd = sqrt(1 - rho.miss)) < qnorm(missrate), "y"] <- NA # empty imputation in mice imp0 <- mice(as.matrix(dfr), maxit = 0) predM <- imp0$predictorMatrix impM <- imp0$method # specify predictor matrix and method predM1 <- predM predM1["y", "group"] <- -2 predM1["y", "x"] <- 1 # fixed x effects imputation impM1 <- impM impM1["y"] <- "2l.pan" # multilevel imputation imp1 <- mice(as.matrix(dfr), m = 1, predictorMatrix = predM1, method = impM1, maxit = 1 ) #> #> iter imp variable #> 1 1 y # multilevel analysis library(lme4) #> Loading required package: Matrix #> #> Attaching package: ‘Matrix’ #> The following objects are masked from ‘package:tidyr’: #> #> expand, pack, unpack mod <- lmer(y ~ (1 + x | group) + x, data = complete(imp1)) #> boundary (singular) fit: see help('isSingular') summary(mod) #> Linear mixed model fit by REML ['lmerMod'] #> Formula: y ~ (1 + x | group) + x #> Data: complete(imp1) #> #> REML criterion at convergence: 13126.5 #> #> Scaled residuals: #> Min 1Q Median 3Q Max #> -3.4498 -0.6620 -0.0145 0.6770 3.8518 #> #> Random effects: #> Groups Name Variance Std.Dev. Corr #> group (Intercept) 0.3460116 0.5882 #> x 0.0001001 0.0100 -1.00 #> Residual 0.7169052 0.8467 #> Number of obs: 5000, groups: group, 250 #> #> Fixed effects: #> Estimate Std. Error t value #> (Intercept) 0.03455 0.03908 0.884 #> x 0.29829 0.01247 23.922 #> #> Correlation of Fixed Effects: #> (Intr) #> x -0.045 #> optimizer (nloptwrap) convergence code: 0 (OK) #> boundary (singular) fit: see help('isSingular') #> # Examples of predictorMatrix specification # random x effects # predM1["y","x"] <- 2 # fixed x effects and group mean of x # predM1["y","x"] <- 3 # random x effects and group mean of x # predM1["y","x"] <- 4