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.
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.5
#> 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: -2661.786, Max-Change: 0.17695
Iteration: 2, Log-Lik: -2656.761, Max-Change: 0.13207
Iteration: 3, Log-Lik: -2654.597, Max-Change: 0.09883
Iteration: 4, Log-Lik: -2652.682, Max-Change: 0.03985
Iteration: 5, Log-Lik: -2652.505, Max-Change: 0.03292
Iteration: 6, Log-Lik: -2652.386, Max-Change: 0.02798
Iteration: 7, Log-Lik: -2652.116, Max-Change: 0.00741
Iteration: 8, Log-Lik: -2652.110, Max-Change: 0.00513
Iteration: 9, Log-Lik: -2652.108, Max-Change: 0.00478
Iteration: 10, Log-Lik: -2652.104, Max-Change: 0.00345
Iteration: 11, Log-Lik: -2652.102, Max-Change: 0.00264
Iteration: 12, Log-Lik: -2652.102, Max-Change: 0.00215
Iteration: 13, Log-Lik: -2652.101, Max-Change: 0.00173
Iteration: 14, Log-Lik: -2652.101, Max-Change: 0.00135
Iteration: 15, Log-Lik: -2652.100, Max-Change: 0.00122
Iteration: 16, Log-Lik: -2652.100, Max-Change: 0.00133
Iteration: 17, Log-Lik: -2652.100, Max-Change: 0.00084
Iteration: 18, Log-Lik: -2652.100, Max-Change: 0.00059
Iteration: 19, Log-Lik: -2652.100, Max-Change: 0.00017
Iteration: 20, Log-Lik: -2652.100, Max-Change: 0.00012
Iteration: 21, Log-Lik: -2652.100, Max-Change: 0.00013
Iteration: 22, Log-Lik: -2652.100, Max-Change: 0.00012
Iteration: 23, Log-Lik: -2652.100, Max-Change: 0.00011
Iteration: 24, Log-Lik: -2652.100, Max-Change: 0.00010
Iteration: 25, Log-Lik: -2652.100, Max-Change: 0.00009
#>
#> Call:
#> mirt(data = dat, model = 1)
#>
#> Full-information item factor analysis with 1 factor(s).
#> Converged within 1e-04 tolerance after 25 EM iterations.
#> mirt version: 1.44.5
#> M-step optimizer: BFGS
#> EM acceleration: Ramsay
#> Number of rectangular quadrature: 61
#> Latent density type: Gaussian
#>
#> Log-likelihood = -2652.1
#> Estimated parameters: 10
#> AIC = 5324.2
#> BIC = 5373.277; SABIC = 5341.517
#>
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: -2669.986, Max-Change: 0.17993
Iteration: 2, Log-Lik: -2664.967, Max-Change: 0.13385
Iteration: 3, Log-Lik: -2662.800, Max-Change: 0.09981
Iteration: 4, Log-Lik: -2660.913, Max-Change: 0.04044
Iteration: 5, Log-Lik: -2660.738, Max-Change: 0.03363
Iteration: 6, Log-Lik: -2660.618, Max-Change: 0.02789
Iteration: 7, Log-Lik: -2660.348, Max-Change: 0.00694
Iteration: 8, Log-Lik: -2660.342, Max-Change: 0.00519
Iteration: 9, Log-Lik: -2660.340, Max-Change: 0.00466
Iteration: 10, Log-Lik: -2660.335, Max-Change: 0.00343
Iteration: 11, Log-Lik: -2660.334, Max-Change: 0.00264
Iteration: 12, Log-Lik: -2660.333, Max-Change: 0.00215
Iteration: 13, Log-Lik: -2660.332, Max-Change: 0.00173
Iteration: 14, Log-Lik: -2660.332, Max-Change: 0.00134
Iteration: 15, Log-Lik: -2660.332, Max-Change: 0.00121
Iteration: 16, Log-Lik: -2660.332, Max-Change: 0.00038
Iteration: 17, Log-Lik: -2660.332, Max-Change: 0.00083
Iteration: 18, Log-Lik: -2660.332, Max-Change: 0.00056
Iteration: 19, Log-Lik: -2660.331, Max-Change: 0.00016
Iteration: 20, Log-Lik: -2660.331, Max-Change: 0.00013
Iteration: 21, Log-Lik: -2660.331, Max-Change: 0.00011
Iteration: 22, Log-Lik: -2660.331, Max-Change: 0.00011
Iteration: 23, Log-Lik: -2660.331, Max-Change: 0.00010
Iteration: 24, Log-Lik: -2660.331, 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 24 EM iterations.
#> mirt version: 1.44.5
#> M-step optimizer: BFGS
#> EM acceleration: Ramsay
#> Number of rectangular quadrature: 61
#> Latent density type: Gaussian
#>
#> Log-likelihood = -2660.331
#> Estimated parameters: 10
#> AIC = 5340.663
#> BIC = 5389.741; SABIC = 5357.98
#> G2 (21) = 30.61, p = 0.0804
#> RMSEA = 0.021, 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: -2661.786, Max-Change: 0.18525
Iteration: 2, Log-Lik: -2653.035, Max-Change: 0.13905
Iteration: 3, Log-Lik: -2650.034, Max-Change: 0.10641
Iteration: 4, Log-Lik: -2647.449, Max-Change: 0.03980
Iteration: 5, Log-Lik: -2647.298, Max-Change: 0.03170
Iteration: 6, Log-Lik: -2647.220, Max-Change: 0.02524
Iteration: 7, Log-Lik: -2647.119, Max-Change: 0.00766
fs <- fscores(mod2)
fulldata2 <- imputeMissing(mod2, fs)
# }