Skip to contents

Given an estimated model from any of mirt's model fitting functions and an estimate of the latent trait, impute plausible missing data values. Returns the original data in a data.frame without any NA values. If a list of Theta values is supplied then a list of complete datasets is returned instead.

Usage

imputeMissing(x, Theta, warn = TRUE, ...)

Arguments

x

an estimated model x from the mirt package

Theta

a matrix containing the estimates of the latent trait scores (e.g., via fscores)

warn

logical; print warning messages?

...

additional arguments to pass

References

Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Environment. Journal of Statistical Software, 48(6), 1-29. doi:10.18637/jss.v048.i06

Author

Phil Chalmers rphilip.chalmers@gmail.com

Examples

# \donttest{
dat <- expand.table(LSAT7)
(original <- mirt(dat, 1))
#> 
Iteration: 1, Log-Lik: -2668.786, Max-Change: 0.18243
Iteration: 2, Log-Lik: -2663.691, Max-Change: 0.13637
Iteration: 3, Log-Lik: -2661.454, Max-Change: 0.10231
Iteration: 4, Log-Lik: -2659.430, Max-Change: 0.04181
Iteration: 5, Log-Lik: -2659.241, Max-Change: 0.03417
Iteration: 6, Log-Lik: -2659.113, Max-Change: 0.02911
Iteration: 7, Log-Lik: -2658.812, Max-Change: 0.00456
Iteration: 8, Log-Lik: -2658.809, Max-Change: 0.00363
Iteration: 9, Log-Lik: -2658.808, Max-Change: 0.00273
Iteration: 10, Log-Lik: -2658.806, Max-Change: 0.00144
Iteration: 11, Log-Lik: -2658.806, Max-Change: 0.00118
Iteration: 12, Log-Lik: -2658.806, Max-Change: 0.00101
Iteration: 13, Log-Lik: -2658.805, Max-Change: 0.00042
Iteration: 14, Log-Lik: -2658.805, Max-Change: 0.00025
Iteration: 15, Log-Lik: -2658.805, Max-Change: 0.00026
Iteration: 16, Log-Lik: -2658.805, Max-Change: 0.00023
Iteration: 17, Log-Lik: -2658.805, Max-Change: 0.00023
Iteration: 18, Log-Lik: -2658.805, Max-Change: 0.00021
Iteration: 19, Log-Lik: -2658.805, Max-Change: 0.00019
Iteration: 20, Log-Lik: -2658.805, Max-Change: 0.00017
Iteration: 21, Log-Lik: -2658.805, Max-Change: 0.00017
Iteration: 22, Log-Lik: -2658.805, Max-Change: 0.00015
Iteration: 23, Log-Lik: -2658.805, Max-Change: 0.00015
Iteration: 24, Log-Lik: -2658.805, Max-Change: 0.00013
Iteration: 25, Log-Lik: -2658.805, Max-Change: 0.00013
Iteration: 26, Log-Lik: -2658.805, Max-Change: 0.00011
Iteration: 27, Log-Lik: -2658.805, Max-Change: 0.00011
Iteration: 28, Log-Lik: -2658.805, Max-Change: 0.00010
#> 
#> Call:
#> mirt(data = dat, model = 1)
#> 
#> Full-information item factor analysis with 1 factor(s).
#> Converged within 1e-04 tolerance after 28 EM iterations.
#> mirt version: 1.44.3 
#> M-step optimizer: BFGS 
#> EM acceleration: Ramsay 
#> Number of rectangular quadrature: 61
#> Latent density type: Gaussian 
#> 
#> Log-likelihood = -2658.805
#> Estimated parameters: 10 
#> AIC = 5337.61
#> BIC = 5386.688; SABIC = 5354.927
#> G2 (21) = 31.7, p = 0.0628
#> RMSEA = 0.023, CFI = NaN, TLI = NaN
NAperson <- sample(1:nrow(dat), 20, replace = TRUE)
NAitem <- sample(1:ncol(dat), 20, replace = TRUE)
for(i in 1:20)
    dat[NAperson[i], NAitem[i]] <- NA
(mod <- mirt(dat, 1))
#> 
Iteration: 1, Log-Lik: -2657.602, Max-Change: 0.18162
Iteration: 2, Log-Lik: -2652.461, Max-Change: 0.13527
Iteration: 3, Log-Lik: -2650.266, Max-Change: 0.10096
Iteration: 4, Log-Lik: -2648.362, Max-Change: 0.04054
Iteration: 5, Log-Lik: -2648.193, Max-Change: 0.03376
Iteration: 6, Log-Lik: -2648.075, Max-Change: 0.02800
Iteration: 7, Log-Lik: -2647.814, Max-Change: 0.00709
Iteration: 8, Log-Lik: -2647.809, Max-Change: 0.00524
Iteration: 9, Log-Lik: -2647.806, Max-Change: 0.00470
Iteration: 10, Log-Lik: -2647.802, Max-Change: 0.00316
Iteration: 11, Log-Lik: -2647.800, Max-Change: 0.00233
Iteration: 12, Log-Lik: -2647.800, Max-Change: 0.00201
Iteration: 13, Log-Lik: -2647.799, Max-Change: 0.00169
Iteration: 14, Log-Lik: -2647.799, Max-Change: 0.00131
Iteration: 15, Log-Lik: -2647.799, Max-Change: 0.00120
Iteration: 16, Log-Lik: -2647.798, Max-Change: 0.00041
Iteration: 17, Log-Lik: -2647.798, Max-Change: 0.00082
Iteration: 18, Log-Lik: -2647.798, Max-Change: 0.00054
Iteration: 19, Log-Lik: -2647.798, Max-Change: 0.00016
Iteration: 20, Log-Lik: -2647.798, Max-Change: 0.00012
Iteration: 21, Log-Lik: -2647.798, Max-Change: 0.00011
Iteration: 22, Log-Lik: -2647.798, Max-Change: 0.00011
Iteration: 23, Log-Lik: -2647.798, Max-Change: 0.00010
Iteration: 24, Log-Lik: -2647.798, Max-Change: 0.00010
#> 
#> Call:
#> mirt(data = dat, model = 1)
#> 
#> Full-information item factor analysis with 1 factor(s).
#> Converged within 1e-04 tolerance after 24 EM iterations.
#> mirt version: 1.44.3 
#> M-step optimizer: BFGS 
#> EM acceleration: Ramsay 
#> Number of rectangular quadrature: 61
#> Latent density type: Gaussian 
#> 
#> Log-likelihood = -2647.798
#> Estimated parameters: 10 
#> AIC = 5315.596
#> BIC = 5364.674; SABIC = 5332.913
#> 
scores <- fscores(mod, method = 'MAP')

# re-estimate imputed dataset (good to do this multiple times and average over)
fulldata <- imputeMissing(mod, scores)
(fullmod <- mirt(fulldata, 1))
#> 
Iteration: 1, Log-Lik: -2664.434, Max-Change: 0.18487
Iteration: 2, Log-Lik: -2659.219, Max-Change: 0.13796
Iteration: 3, Log-Lik: -2656.941, Max-Change: 0.10327
Iteration: 4, Log-Lik: -2654.915, Max-Change: 0.04137
Iteration: 5, Log-Lik: -2654.730, Max-Change: 0.03441
Iteration: 6, Log-Lik: -2654.603, Max-Change: 0.02949
Iteration: 7, Log-Lik: -2654.310, Max-Change: 0.00695
Iteration: 8, Log-Lik: -2654.304, Max-Change: 0.00464
Iteration: 9, Log-Lik: -2654.302, Max-Change: 0.00425
Iteration: 10, Log-Lik: -2654.299, Max-Change: 0.00330
Iteration: 11, Log-Lik: -2654.298, Max-Change: 0.00236
Iteration: 12, Log-Lik: -2654.298, Max-Change: 0.00204
Iteration: 13, Log-Lik: -2654.297, Max-Change: 0.00171
Iteration: 14, Log-Lik: -2654.297, Max-Change: 0.00128
Iteration: 15, Log-Lik: -2654.297, Max-Change: 0.00115
Iteration: 16, Log-Lik: -2654.297, Max-Change: 0.00049
Iteration: 17, Log-Lik: -2654.297, Max-Change: 0.00031
Iteration: 18, Log-Lik: -2654.297, Max-Change: 0.00024
Iteration: 19, Log-Lik: -2654.296, Max-Change: 0.00020
Iteration: 20, Log-Lik: -2654.296, Max-Change: 0.00094
Iteration: 21, Log-Lik: -2654.296, Max-Change: 0.00014
Iteration: 22, Log-Lik: -2654.296, Max-Change: 0.00014
Iteration: 23, Log-Lik: -2654.296, Max-Change: 0.00062
Iteration: 24, Log-Lik: -2654.296, Max-Change: 0.00010
Iteration: 25, Log-Lik: -2654.296, Max-Change: 0.00010
#> 
#> Call:
#> mirt(data = fulldata, model = 1)
#> 
#> Full-information item factor analysis with 1 factor(s).
#> Converged within 1e-04 tolerance after 25 EM iterations.
#> mirt version: 1.44.3 
#> M-step optimizer: BFGS 
#> EM acceleration: Ramsay 
#> Number of rectangular quadrature: 61
#> Latent density type: Gaussian 
#> 
#> Log-likelihood = -2654.296
#> Estimated parameters: 10 
#> AIC = 5328.593
#> BIC = 5377.67; SABIC = 5345.91
#> G2 (21) = 31.58, p = 0.0645
#> RMSEA = 0.022, CFI = NaN, TLI = NaN

# with multipleGroup
set.seed(1)
group <- sample(c('group1', 'group2'), 1000, TRUE)
mod2 <- multipleGroup(dat, 1, group, TOL=1e-2)
#> 
Iteration: 1, Log-Lik: -2657.602, Max-Change: 0.19467
Iteration: 2, Log-Lik: -2648.992, Max-Change: 0.14635
Iteration: 3, Log-Lik: -2646.059, Max-Change: 0.11272
Iteration: 4, Log-Lik: -2643.584, Max-Change: 0.04382
Iteration: 5, Log-Lik: -2643.446, Max-Change: 0.03509
Iteration: 6, Log-Lik: -2643.372, Max-Change: 0.02823
Iteration: 7, Log-Lik: -2643.267, Max-Change: 0.00963
fs <- fscores(mod2)
fulldata2 <- imputeMissing(mod2, fs)

# }