Mirt
Mirt
Mirt
December 9, 2021
Version 1.35.1
Type Package
Title Multidimensional Item Response Theory
Description Analysis of dichotomous and polytomous response data using
unidimensional and multidimensional latent trait models under the Item
Response Theory paradigm (Chalmers (2012) <doi:10.18637/jss.v048.i06>).
Exploratory and confirmatory models can be estimated with quadrature (EM)
or stochastic (MHRM) methods. Confirmatory
bi-factor and two-tier analyses are available for modeling item testlets.
Multiple group analysis and mixed effects designs also are available for
detecting differential item and test functioning as well as modeling
item and person covariates. Finally, latent class models such as the DINA,
DINO, multidimensional latent class, and several other discrete latent
variable models, including mixture and zero-inflated response models,
are supported.
VignetteBuilder knitr
Depends stats, R (>= 3.6.0), stats4, lattice, methods
Imports GPArotation, gridExtra, Matrix, Rcpp, mgcv, vegan, Deriv,
splines, dcurver
Suggests boot, latticeExtra, directlabels, shiny, knitr, markdown,
Rsolnp, nloptr, sirt, plink, mirtCAT
ByteCompile yes
LazyLoad yes
LazyData yes
LinkingTo Rcpp, RcppArmadillo
License GPL (>= 3)
Repository CRAN
Maintainer Phil Chalmers <rphilip.chalmers@gmail.com>
URL https://github.com/philchalmers/mirt,
https://github.com/philchalmers/mirt/wiki,
https://groups.google.com/forum/#!forum/mirt-package
1
2 R topics documented:
BugReports https://github.com/philchalmers/mirt/issues?state=open
RoxygenNote 7.1.2
NeedsCompilation yes
Author Phil Chalmers [aut, cre] (<https://orcid.org/0000-0001-5332-2810>),
Joshua Pritikin [ctb],
Alexander Robitzsch [ctb],
Mateusz Zoltak [ctb],
KwonHyun Kim [ctb],
Carl F. Falk [ctb],
Adam Meade [ctb],
Lennart Schneider [ctb],
David King [ctb],
Chen-Wei Liu [ctb],
Ogreden Oguzhan [ctb]
Date/Publication 2021-12-08 23:10:02 UTC
R topics documented:
mirt-package . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
anova-method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
areainfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
averageMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
bfactor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Bock1997 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
boot.LR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
boot.mirt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
coef-method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
createGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
createItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
deAyala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
DIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
DiscreteClass-class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
draw_parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
DRF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
DTF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
empirical_ES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
empirical_plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
empirical_rxx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
estfun.AllModelClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
expand.table . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
expected.item . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
expected.test . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
extract.group . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
extract.item . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
extract.mirt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
fixedCalib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
R topics documented: 3
fixef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
fscores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
gen.difficulty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
imputeMissing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
itemfit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
itemGAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
iteminfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
itemplot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
key2binary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
lagrange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
likert2int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
logLik-method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
LSAT6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
LSAT7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
M2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
marginal_rxx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
MDIFF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
mdirt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
MDISC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
mirt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
mirt.model . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
mirtCluster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130
MixedClass-class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
mixedmirt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
MixtureClass-class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
mod2values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
multipleGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
MultipleGroupClass-class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
numerical_deriv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
personfit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
PLCI.mirt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
plot,MultipleGroupClass,missing-method . . . . . . . . . . . . . . . . . . . . . . . . . 155
poly2dich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
print-method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
print.mirt_df . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
print.mirt_list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
print.mirt_matrix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
probtrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
randef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
RCI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
read.mirt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
remap.distance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
residuals-method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
RMSD_DIF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
SAT12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Science . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
show-method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
SIBTEST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
4 mirt-package
simdata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179
SingleGroupClass-class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
summary-method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
testinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
thetaComb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
traditional2mirt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
vcov-method . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
wald . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
Index 197
Description
Details
Analysis of dichotomous and polytomous response data using unidimensional and multidimensional
latent trait models under the Item Response Theory paradigm. Exploratory and confirmatory models
can be estimated with quadrature (EM) or stochastic (MHRM) methods. Confirmatory bi-factor and
two-tier analyses are available for modeling item testlets. Multiple group analysis and mixed effects
designs also are available for detecting differential item and test functioning as well as modeling
item and person covariates. Finally, latent class models such as the DINA, DINO, multidimensional
latent class, and several other discrete variable models are supported.
Users interested in the most recent version of this package can visit https://github.com/philchalmers/
mirt and follow the instructions for installing the package from source. Questions regarding the
package can be sent to the mirt-package Google Group, located at https://groups.google.com/
forum/#!forum/mirt-package. User contributed files, workshop files, and evaluated help files
are also available on the package wiki (https://github.com/philchalmers/mirt/wiki).
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
anova-method 5
Description
Compare nested models using likelihood ratio test (X2), Akaike Information Criterion (AIC), Bayesian
Information Criterion (BIC), Sample-Size Adjusted BIC (SABIC), and Hannan-Quinn (HQ) Crite-
rion. When given a sequence of objects, anova tests the models against one another in the order
specified.
Usage
## S4 method for signature 'SingleGroupClass'
anova(object, object2, ..., bounded = FALSE, mix = 0.5, verbose = TRUE)
Arguments
object an object of class SingleGroupClass, MultipleGroupClass, or MixedClass
object2 a second model estimated from any of the mirt package estimation methods
... additional model objects to be sequentially compared
bounded logical; are the two models comparing a bounded parameter (e.g., comparing a
single 2PL and 3PL model with 1 df)? If TRUE then a 50:50 mix of chi-squared
distributions is used to obtain the p-value
mix proportion of chi-squared mixtures. Default is 0.5
verbose logical; print additional information to console?
Value
a data.frame/mirt_df object
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
x <- mirt(Science, 1)
x2 <- mirt(Science, 2)
anova(x, x2)
# in isolation
anova(x)
# bounded parameter
dat <- expand.table(LSAT7)
mod <- mirt(dat, 1)
mod2 <- mirt(dat, 1, itemtype = c(rep('2PL', 4), '3PL'))
anova(mod, mod2) #unbounded test
anova(mod, mod2, bounded = TRUE) #bounded
# priors
model <- 'F = 1-5
PRIOR = (5, g, norm, -1, 1)'
mod1b <- mirt(dat, model, itemtype = c(rep('2PL', 4), '3PL'))
anova(mod1b)
## End(Not run)
Description
Compute the area within test or item information over a definite integral range.
Usage
areainfo(
x,
theta_lim,
which.items = 1:extract.mirt(x, "nitems"),
group = NULL,
...
)
areainfo 7
Arguments
x an object of class ’SingleGroupClass’, or an object of class ’MultipleGroup-
Class’ if a suitable group input were supplied
theta_lim range of integration to be computed
which.items an integer vector indicating which items to include in the expected information
function. Default uses all possible items
group group argument to pass to extract.group function. Required when the input
object is a multiple-group model
... additional arguments passed to integrate
Value
a data.frame with the lower and upper integration range, the information area within the range
(Info), the information area over the range -10 to 10 (Total.Info), proportion of total information
given the integration range (Info.Proportion), and the number of items included (nitems)
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## End(Not run)
8 averageMI
Description
This function computes updated parameter and standard error estimates using multiple imputation
methodology. Given a set of parameter estimates and their associated standard errors the func-
tion returns the weighted average of the overall between and within variability due to the multiple
imputations according to Rubin’s (1987) methodology.
Usage
averageMI(par, SEpar, as.data.frame = TRUE)
Arguments
par a list containing parameter estimates which were computed the imputed datasets
SEpar a list containing standard errors associated with par
as.data.frame logical; return a data.frame instead of a list? Default is TRUE
Value
returns a list or data.frame containing the updated averaged parameter estimates, standard errors,
and t-values with the associated degrees of freedom and two tailed p-values
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Rubin, D.B. (1987) Multiple Imputation for Nonresponse in Surveys. Wiley & Sons, New York.
Examples
## Not run:
#simulate data
set.seed(1234)
N <- 1000
# covariates
X1 <- rnorm(N); X2 <- rnorm(N)
covdata <- data.frame(X1, X2)
Theta <- matrix(0.5 * X1 + -1 * X2 + rnorm(N, sd = 0.5))
bfactor 9
## End(Not run)
Description
Usage
bfactor(
data,
model,
model2 = paste0("G = 1-", ncol(data)),
group = NULL,
quadpts = NULL,
invariance = "",
...
)
10 bfactor
Arguments
data a matrix or data.frame that consists of numerically ordered data, with missing
data coded as NA
model a numeric vector specifying which factor loads on which item. For example, if
for a 4 item test with two specific factors, the first specific factor loads on the
first two items and the second specific factor on the last two, then the vector is
c(1,1,2,2). For items that should only load on the second-tier factors (have
no specific component) NA values may be used as place-holders. These numbers
will be translated into a format suitable for mirt.model(), combined with the
definition in model2, with the letter ’S’ added to the respective factor number
model2 a two-tier model specification object defined by mirt.model() or a string to be
passed to mirt.model. By default the model will fit a unidimensional model in
the second-tier, and therefore be equivalent to the bifactor model
group a factor variable indicating group membership used for multiple group analyses
quadpts number of quadrature nodes to use after accounting for the reduced number
of dimensions. Scheme is the same as the one used in mirt, however it is in
regards to the reduced dimensions (e.g., a bifactor model has 2 dimensions to be
integrated)
invariance see multipleGroup for details, however, the specific factor variances and means
will be constrained according to the dimensional reduction algorithm
... additional arguments to be passed to the estimation engine. See mirt for more
details and examples
Details
bfactor follows the item factor analysis strategy explicated by Gibbons and Hedeker (1992), Gib-
bons et al. (2007), and Cai (2010). Nested models may be compared via an approximate chi-squared
difference test or by a reduction in AIC or BIC (accessible via anova). See mirt for more details
regarding the IRT estimation approach used in this package.
The two-tier model has a specific block diagonal covariance structure between the primary and
secondary latent traits. Namely, the secondary latent traits are assumed to be orthogonal to all traits
and have a fixed variance of 1, while the primary traits can be organized to vary and covary with
other primary traits in the model.
G 0
Σtwo−tier =
0 diag(S)
The bifactor model is a special case of the two-tier model when G above is a 1x1 matrix, and
therefore only 1 primary factor is being modeled. Evaluation of the numerical integrals for the
two-tier model requires only ncol(G) + 1 dimensions for integration since the S second order (or
’specific’) factors require only 1 integration grid due to the dimension reduction technique.
Note: for multiple group two-tier analyses only the second-tier means and variances should be freed
since the specific factors are not treated independently due to the dimension reduction technique.
bfactor 11
Value
function returns an object of class SingleGroupClass (SingleGroupClass-class) or MultipleGroupClass(MultipleGroupCla
class).
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Cai, L. (2010). A two-tier full-information item factor analysis model with applications. Psychome-
trika, 75, 581-612.
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Bradlow, E.T., Wainer, H., & Wang, X. (1999). A Bayesian random effects model for testlets.
Psychometrika, 64, 153-168.
Gibbons, R. D., & Hedeker, D. R. (1992). Full-information Item Bi-Factor Analysis. Psychome-
trika, 57, 423-436.
Gibbons, R. D., Darrell, R. B., Hedeker, D., Weiss, D. J., Segawa, E., Bhaumik, D. K., Kupfer, D.
J., Frank, E., Grochocinski, V. J., & Stover, A. (2007). Full-Information item bifactor analysis of
graded response data. Applied Psychological Measurement, 31, 4-19.
Wainer, H., Bradlow, E.T., & Wang, X. (2007). Testlet response theory and its applications. New
York, NY: Cambridge University Press.
See Also
mirt
Examples
## Not run:
specific[32] <- NA
mod3 <- bfactor(data, specific)
anova(mod1, mod3)
#########
# mixed itemtype example
#simulate data
a <- matrix(c(
1,0.5,NA,
1,0.5,NA,
1,0.5,NA,
1,0.5,NA,
1,0.5,NA,
1,0.5,NA,
1,0.5,NA,
1,NA,0.5,
1,NA,0.5,
1,NA,0.5,
1,NA,0.5,
1,NA,0.5,
1,NA,0.5,
1,NA,0.5),ncol=3,byrow=TRUE)
d <- matrix(c(
-1.0,NA,NA,
-1.5,NA,NA,
1.5,NA,NA,
0.0,NA,NA,
2.5,1.0,-1,
3.0,2.0,-0.5,
3.0,2.0,-0.5,
3.0,2.0,-0.5,
2.5,1.0,-1,
2.0,0.0,NA,
-1.0,NA,NA,
-1.5,NA,NA,
1.5,NA,NA,
0.0,NA,NA),ncol=3,byrow=TRUE)
items <- rep('2PL', 14)
items[5:10] <- 'graded'
#########
# General testlet response model (Wainer, 2007)
#simulate data
set.seed(1234)
a <- matrix(0, 12, 4)
a[,1] <- rlnorm(12, .2, .3)
ind <- 1
for(i in 1:3){
a[ind:(ind+3),i+1] <- a[ind:(ind+3),1]
ind <- ind+4
}
print(a)
d <- rnorm(12, 0, .5)
sigma <- diag(c(1, .5, 1, .5))
dataset <- simdata(a,d,2000,itemtype=rep('2PL', 12),sigma=sigma)
#########
# Two-tier model
#simulate data
set.seed(1234)
a <- matrix(c(
0,1,0.5,NA,NA,
0,1,0.5,NA,NA,
0,1,0.5,NA,NA,
14 Bock1997
0,1,0.5,NA,NA,
0,1,0.5,NA,NA,
0,1,NA,0.5,NA,
0,1,NA,0.5,NA,
0,1,NA,0.5,NA,
1,0,NA,0.5,NA,
1,0,NA,0.5,NA,
1,0,NA,0.5,NA,
1,0,NA,NA,0.5,
1,0,NA,NA,0.5,
1,0,NA,NA,0.5,
1,0,NA,NA,0.5,
1,0,NA,NA,0.5),ncol=5,byrow=TRUE)
d <- matrix(rnorm(16))
items <- rep('2PL', 16)
## End(Not run)
Description
A 3-item tabulated data set extracted from Table 3 in Chapter Two.
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
boot.LR 15
References
Bock, R. D. (1997). The Nominal Categories Model. In van der Linden, W. J. & Hambleton, R. K.
Handbook of modern item response theory. New York: Springer.
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
dat <- expand.table(Bock1997)
head(dat)
mod <- mirt(dat, 1, 'nominal')
## End(Not run)
Description
Given two fitted models, compute a parametric bootstrap test to determine whether the less restric-
tive models fits significantly better than the more restricted model. Note that this hypothesis test
also works when prior parameter distributions are included for either model. Function can be run in
parallel after using a suitable mirtCluster definition.
Usage
boot.LR(mod, mod2, R = 1000)
Arguments
mod an estimated model object
mod2 an estimated model object
R number of parametric bootstraps to use.
16 boot.mirt
Value
a p-value evaluating whether the more restrictive model fits significantly worse than the less restric-
tive model
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
#standard
dat <- expand.table(LSAT7)
mod1 <- mirt(dat, 1)
mod2 <- mirt(dat, 1, '3PL')
# standard LR test
anova(mod1, mod2)
## End(Not run)
Description
Given an internal mirt object estimate the bootstrapped standard errors. It may be beneficial to
run the computations using multi-core architecture (e.g., the parallel package). Parameters are
organized from the freely estimated values in mod2values(x) (equality constraints will also be
returned in the bootstrapped estimates).
Usage
boot.mirt(x, R = 100, technical = NULL, ...)
coef-method 17
Arguments
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
#standard
mod <- mirt(Science, 1)
booted <- boot.mirt(mod, R=20)
plot(booted)
booted
## End(Not run)
Description
Return a list (or data.frame) of raw item and group level coefficients. Note that while the output to
the console is rounded to three digits, the returned list of objects is not. Hence, elements from cfs
<-coef(mod); cfs[[1]] will contain the unrounded results (useful for simulations).
18 coef-method
Usage
## S4 method for signature 'SingleGroupClass'
coef(
object,
CI = 0.95,
printSE = FALSE,
rotate = "none",
Target = NULL,
IRTpars = FALSE,
rawug = FALSE,
as.data.frame = FALSE,
simplify = FALSE,
unique = FALSE,
verbose = TRUE,
...
)
Arguments
object an object of class SingleGroupClass, MultipleGroupClass, or MixedClass
CI the amount of converged used to compute confidence intervals; default is 95
percent confidence intervals
printSE logical; print the standard errors instead of the confidence intervals? When
IRTpars = TRUE then the delta method will be used to compute the associated
standard errors from mirt’s default slope-intercept form
rotate see summary method for details. The default rotation is 'none'
Target a dummy variable matrix indicting a target rotation pattern
IRTpars logical; convert slope intercept parameters into traditional IRT parameters? Only
applicable to unidimensional models. If a suitable ACOV estimate was com-
puted in the fitted model, and printSE = FALSE, then suitable CIs will be in-
cluded based on the delta method (where applicable)
rawug logical; return the untransformed internal g and u parameters? If FALSE, g and
u’s are converted with the original format along with delta standard errors
as.data.frame logical; convert list output to a data.frame instead?
simplify logical; if all items have the same parameter names (indicating they are of the
same class) then they are collapsed to a matrix, and a list of length 2 is returned
containing a matrix of item parameters and group-level estimates
unique return the vector of uniquely estimated parameters
verbose logical; allow information to be printed to the console?
... additional arguments to be passed
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
createGroup 19
See Also
summary-method
Examples
## Not run:
dat <- expand.table(LSAT7)
x <- mirt(dat, 1)
coef(x)
coef(x, IRTpars = TRUE)
coef(x, simplify = TRUE)
#two factors
x2 <- mirt(Science, 2)
coef(x2)
coef(x2, rotate = 'varimax')
## End(Not run)
createGroup Create a user defined group-level object with correct generic functions
Description
Initializes the proper S4 class and methods necessary for mirt functions to use in estimation for
defining customized group-level functions. To use the defined objects pass to the mirt(...,customGroup
= OBJECT) command, and ensure that the class parameters are properly labeled.
Usage
createGroup(
par,
est,
den,
nfact,
standardize = FALSE,
gr = NULL,
hss = NULL,
gen = NULL,
lbound = NULL,
20 createGroup
ubound = NULL,
derivType = "Richardson"
)
Arguments
par a named vector of the starting values for the parameters
est a logical vector indicating which parameters should be freely estimated by de-
fault
den the probability density function given the Theta/ability values. First input con-
tains a vector of all the defined parameters and the second input must be a matrix
called Theta. Function also must return a numeric vector object corresponding
to the associated densities for each row in the Theta input
nfact number of factors required for the model. E.g., for unidimensional models with
only one dimension of integration nfact = 1
standardize logical; use standardization of the quadrature table method proposed by Woods
and Thissen (2006)? If TRUE, the logical elements named 'MEAN_1' and 'COV_11'
can be included in the parameter vector, and when these values are set to FALSE
in the est input the E-table will be standardized to these fixed values (e.g., par
<-c(a1=1,d=0,MEAN_1=0,COV_11=1) with est <-c(TRUE,TRUE,FALSE,FALSE)
will standardize the E-table to have a 0 mean and unit variance)
gr gradient function (vector of first derivatives) of the log-likelihood used in esti-
mation. The function must be of the form gr(x,Theta), where x is the object
defined by createGroup() and Theta is a matrix of latent trait parameters
hss Hessian function (matrix of second derivatives) of the log-likelihood used in
estimation. If not specified a numeric approximation will be used. The input is
identical to the gr argument
gen a function used when GenRandomPars = TRUE is passed to the estimation func-
tion to generate random starting values. Function must be of the form function(object)
... and must return a vector with properties equivalent to the par object. If
NULL, parameters will remain at the defined starting values by default
lbound optional vector indicating the lower bounds of the parameters. If not specified
then the bounds will be set to -Inf
ubound optional vector indicating the lower bounds of the parameters. If not specified
then the bounds will be set to Inf
derivType if the gr or hss terms are not specified this type will be used to obtain them
numerically. Default is ’Richardson’
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
createItem 21
Examples
coef(mod)
coef(modcustom)
Description
Initializes the proper S4 class and methods necessary for mirt functions to use in estimation. To use
the defined objects pass to the mirt(...,customItems = list()) command, and ensure that the
classes are properly labeled and unique in the list. Additionally, the input mirt(...,customItemsData
= list()) can also be included to specify additional item-level information to better recycle custom-
item defintions (e.g., for supplying varying Q-matricies), where the list input must have the same
length as the number of items. For further examples regarding how this function can be used for
fitting unfolding-type models see Liu and Chalmers (2018).
Usage
createItem(
name,
par,
est,
P,
gr = NULL,
hss = NULL,
gen = NULL,
lbound = NULL,
ubound = NULL,
derivType = "Richardson",
derivType.hss = "Richardson",
bytecompile = TRUE
)
22 createItem
Arguments
name a character indicating the item class name to be defined
par a named vector of the starting values for the parameters
est a logical vector indicating which parameters should be freely estimated by de-
fault
P the probability trace function for all categories (first column is category 1, sec-
ond category two, etc). First input contains a vector of all the item parameters,
the second input must be a matrix called Theta, the third input must be the
number of categories called ncat, and (optionally) a fourth argument termed
itemdata may be included containing further users specification information.
The last optional input is to be utilized within the estimation functions such as
mirt via the list input customItemsData to more naturally recycle custom-item
definitions. Therefore, these inputs must be of the form
function(par,Theta,ncat){...}
or
function(par,Theta,ncat,itemdata){...}
to be valid; however, the names of the arguements is not relavent.
Finally, this function must return a matrix object of category probabilities,
where the columns represent each respective category
gr gradient function (vector of first derivatives) of the log-likelihood used in esti-
mation. The function must be of the form gr(x,Theta), where x is the object
defined by createItem() and Theta is a matrix of latent trait parameters. Tab-
ulated (EM) or raw (MHRM) data are located in the x@dat slot, and are used to
form the complete data log-likelihood. If not specified a numeric approximation
will be used
hss Hessian function (matrix of second derivatives) of the log-likelihood used in
estimation. If not specified a numeric approximation will be used (required for
the MH-RM algorithm only). The input is identical to the gr argument
gen a function used when GenRandomPars = TRUE is passed to the estimation func-
tion to generate random starting values. Function must be of the form function(object)
... and must return a vector with properties equivalent to the par object. If
NULL, parameters will remain at the defined starting values by default
lbound optional vector indicating the lower bounds of the parameters. If not specified
then the bounds will be set to -Inf
ubound optional vector indicating the lower bounds of the parameters. If not specified
then the bounds will be set to Inf
derivType if the gr term is not specified this type will be used to obtain the gradient nu-
merically or symbolically. Default is the ’Richardson’ extrapolation method;
see numerical_deriv for details and other options. If 'symbolic' is supplied
then the gradient will be computed using a symbolical approach (potentially the
most accurate method, though may fail depending on how the P function was
defined)
derivType.hss if the hss term is not specified this type will be used to obtain the Hessian numer-
ically. Default is the ’Richardson’ extrapolation method; see numerical_deriv
createItem 23
for details and other options. If 'symbolic' is supplied then the Hessian will be
computed using a symbolical approach (potentially the most accurate method,
though may fail depending on how the P function was defined)
bytecompile logical; where applicable, byte compile the functions provided? Default is TRUE
to provide
Details
The summary() function will not return proper standardized loadings since the function is not sure
how to handle them (no slopes could be defined at all!). Instead loadings of .001 are filled in as
place-holders.
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Liu, C.-W. and Chalmers, R. P. (2018). Fitting item response unfolding models to Likert-scale data
using mirt in R. PLoS ONE, 13, 5. doi: 10.1371/journal.pone.0196292
Examples
## Not run:
# fit the same model, but specify gradient function explicitly (use of a browser() may be helpful)
gr <- function(x, Theta){
# browser()
a <- x@par[1]
b <- x@par[2]
P <- probtrace(x, Theta)
PQ <- apply(P, 1, prod)
r_P <- x@dat / P
grad <- numeric(2)
grad[2] <- sum(-a * PQ * (r_P[,2] - r_P[,1]))
grad[1] <- sum((Theta - b) * PQ * (r_P[,2] - r_P[,1]))
###non-linear
name <- 'nonlin'
par <- c(a1 = .5, a2 = .1, d = 0)
est <- c(TRUE, TRUE, TRUE)
P.nonlin <- function(par,Theta, ncat=2){
a1 <- par[1]
a2 <- par[2]
d <- par[3]
P1 <- 1 / (1 + exp(-1*(a1*Theta + a2*Theta^2 + d)))
cbind(1-P1, P1)
}
## End(Not run)
Description
Mathematics data from de Ayala (2009; pg. 14); 5 item dataset in table format.
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
de Ayala, R. J. (2009). The theory and practice of item response theory. Guilford Press.
Examples
## Not run:
dat <- expand.table(deAyala)
head(dat)
## End(Not run)
26 DIF
Description
This function runs the Wald and likelihood-ratio approaches for testing differential item functioning
(DIF). This is primarily a convenience wrapper to the multipleGroup function for performing
standard DIF procedures. Independent models can be estimated in parallel by defining a parallel
object with mirtCluster, which will help to decrease the runtime. For best results, the baseline
model should contain a set of ’anchor’ items and have freely estimated hyper-parameters in the
focal groups.
Usage
DIF(
MGmodel,
which.par,
scheme = "add",
items2test = 1:extract.mirt(MGmodel, "nitems"),
seq_stat = "SABIC",
Wald = FALSE,
p.adjust = "none",
return_models = FALSE,
return_seq_model = FALSE,
max_run = Inf,
plotdif = FALSE,
type = "trace",
simplify = TRUE,
verbose = TRUE,
...
)
Arguments
MGmodel an object returned from multipleGroup to be used as the reference model
which.par a character vector containing the parameter names which will be inspected for
DIF
scheme type of DIF analysis to perform, either by adding or dropping constraints across
groups. These can be:
’add’ parameters in which.par will be constrained each item one at a time for
items that are specified in items2test. This is beneficial when examin-
ing DIF from a model with parameters freely estimated across groups, and
when inspecting differences via the Wald test
’drop’ parameters in which.par will be freely estimated for items that are spec-
ified in items2test. This is useful when supplying an overly restrictive
model and attempting to detect DIF with a slightly less restrictive model
DIF 27
’add_sequential’ sequentially loop over the items being tested, and at the end
of the loop treat DIF tests that satisfy the seq_stat criteria as invariant.
The loop is then re-run on the remaining invariant items to determine if
they are now displaying DIF in the less constrained model, and when no
new invariant item is found the algorithm stops and returns the items that
displayed DIF. Note that the DIF statistics are relative to this final, less
constrained model which includes the DIF effects
’drop_sequential’ sequentially loop over the items being tested, and at the end
of the loop treat items that violate the seq_stat criteria as demonstrating
DIF. The loop is then re-run, leaving the items that previously demonstrated
DIF as variable across groups, and the remaining test items that previously
showed invariance are re-tested. The algorithm stops when no more items
showing DIF are found and returns the items that displayed DIF. Note that
the DIF statistics are relative to this final, less constrained model which
includes the DIF effects
items2test a numeric vector, or character vector containing the item names, indicating
which items will be tested for DIF. In models where anchor items are known,
omit them from this vector. For example, if items 1 and 2 are anchors in a 10
item test, then items2test = 3:10 would work for testing the remaining items
(important to remember when using sequential schemes)
seq_stat select a statistic to test for in the sequential schemes. Potential values are (in
descending order of power) 'AIC', 'SABIC', 'HQ', and 'BIC'. If a numeric
value is input that ranges between 0 and 1, the ’p’ value will be tested (e.g.,
seq_stat = .05 will test for the difference of p < .05 in the add scheme, or p >
.05 in the drop scheme), along with the specified p.adjust input
Wald logical; perform Wald tests for DIF instead of likelihood ratio test?
p.adjust string to be passed to the p.adjust function to adjust p-values. Adjustments are
located in the adj_pvals element in the returned list
return_models logical; return estimated model objects for further analysis? Default is FALSE
return_seq_model
logical; on the last iteration of the sequential schemes, return the fitted multiple-
group model containing the freely estimated parameters indicative of DIF? This
is generally only useful when scheme = 'add_sequential'. Default is FALSE
max_run a number indicating the maximum number of cycles to perform in sequential
searches. The default is to perform search until no further DIF is found
plotdif logical; create item plots for items that are displaying DIF according to the
seq_stat criteria? Only available for ’add’ type schemes
type the type of plot argument passed to plot(). Default is ’trace’, though another
good option is ’infotrace’. For ease of viewing, the facet_item argument to
mirt’s plot() function is set to TRUE
simplify logical; simplify the output by returning a data.frame object with the differences
between AIC, BIC, etc, as well as the chi-squared test (X2) and associated df
and p-values
verbose logical print extra information to the console?
... additional arguments to be passed to multipleGroup and plot
28 DIF
Details
Generally, the precomputed baseline model should have been configured with two estimation prop-
erties: 1) a set of ’anchor’ items, where the anchor items have various parameters that have been
constrained to be equal across the groups, and 2) contain freely estimated latent mean and variance
terms in all but one group (the so-called ’reference’ group). These two properties help to fix the
metric of the groups so that item parameter estimates do not contain latent distribution characteris-
tics.
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Chalmers, R. P., Counsell, A., and Flora, D. B. (2016). It might not make a big DIF: Improved
Differential Test Functioning statistics that account for sampling variability. Educational and Psy-
chological Measurement, 76, 114-140. doi: 10.1177/0013164415584576
See Also
multipleGroup, DRF
Examples
## Not run:
# simulate data where group 2 has a smaller slopes and more extreme intercepts
set.seed(12345)
a1 <- a2 <- matrix(abs(rnorm(15,1,.3)), ncol=1)
d1 <- d2 <- matrix(rnorm(15,0,.7),ncol=1)
a2[1:2, ] <- a1[1:2, ]/3
d1[c(1,3), ] <- d2[c(1,3), ]/4
head(data.frame(a.group1 = a1, a.group2 = a2, d.group1 = d1, d.group2 = d2))
itemtype <- rep('2PL', nrow(a1))
N <- 1000
dataset1 <- simdata(a1, d1, N, itemtype)
dataset2 <- simdata(a2, d2, N, itemtype, mu = .1, sigma = matrix(1.5))
dat <- rbind(dataset1, dataset2)
group <- c(rep('D1', N), rep('D2', N))
#### no anchors, all items tested for DIF by adding item constrains one item at a time.
# define a parallel cluster (optional) to help speed up internal functions
mirtCluster()
# Information matrix with Oakes' identity (not controlling for latent group differences)
# NOTE: Without properly equating the groups the following example code is not testing for DIF,
# but instead reflects a combination of DIF + latent-trait distribution effects
model <- multipleGroup(dat, 1, group, SE = TRUE)
DiscreteClass-class 29
# same as above, but using Wald tests with Benjamini & Hochberg adjustment
DIF(model, c('a1', 'd'), Wald = TRUE, p.adjust = 'fdr')
# test whether adding slopes and intercepts constraints results in DIF. Plot items showing DIF
resulta1d <- DIF(model, c('a1', 'd'), plotdif = TRUE, items2test=1:10)
resulta1d
# test whether adding only slope constraints results in DIF for all items
DIF(model, 'a1', items2test=1:10)
### drop down approach (freely estimating parameters across groups) when
### specifying a highly constrained model with estimated latent parameters
model_constrained <- multipleGroup(dat, 1, group,
invariance = c(colnames(dat), 'free_means', 'free_var'))
dropdown <- DIF(model_constrained, c('a1', 'd'), scheme = 'drop')
dropdown
## End(Not run)
Description
Slots
Methods
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
draw_parameters 31
Description
Draws plausible parameters from a model using parametric sampling (if the information matrix was
computed) or via boostrap sampling. Primarily for use with the DRF function.
Usage
draw_parameters(
mod,
draws,
method = c("parametric", "boostrap"),
redraws = 20,
...
)
Arguments
mod estimated single or multiple-group model
draws number of draws to obtain
method type of plausible values to obtain. Can be ’parametric’, for the parametric sam-
pling scheme which uses the estimated information matrix, or ’boostrap’ to ob-
tain values from the boot function. Default is ’parametric’
redraws number of redraws to perform when the given parameteric sample does not sat-
isfy the upper and lower parameter bounds. If a valid set cannot be found within
this number of draws then an error will be thrown
... additional arguments to be passed
Value
returns a draws x p matrix of plausible parameters, where each row correspeonds to a single set
Examples
## Not run:
set.seed(1234)
n <- 40
N <- 500
a <- matrix(1, n)
32 DRF
d <- matrix(rnorm(n), n)
group <- c(rep('Group_1', N), rep('Group_2', N))
## -------------
# groups completely equal
dat1 <- simdata(a, d, N, itemtype = 'dich')
dat2 <- simdata(a, d, N, itemtype = 'dich')
dat <- rbind(dat1, dat2)
mod <- multipleGroup(dat, model, group=group, SE=TRUE,
invariance=c('free_means', 'free_var'))
## End(Not run)
Description
Function performs various omnibus differential item (DIF), bundle (DBF), and test (DTF) func-
tioning procedures on an object estimated with multipleGroup(). The compensatory and non-
compensatory statistics provided are described in Chalmers (2018), which generally can be inter-
preted as IRT generalizations of the SIBTEST and CSIBTEST statistics. These require the ACOV
matrix to be computed in the fitted multiple-group model (otherwise, sets of plausible draws from
the posterior are explicitly required).
Usage
DRF(
mod,
draws = NULL,
focal_items = 1L:extract.mirt(mod, "nitems"),
param_set = NULL,
den.type = "both",
CI = 0.95,
npts = 1000,
quadpts = NULL,
theta_lim = c(-6, 6),
Theta_nodes = NULL,
plot = FALSE,
DIF = FALSE,
p.adjust = "none",
par.strip.text = list(cex = 0.7),
par.settings = list(strip.background = list(col = "#9ECAE1"), strip.border = list(col
= "black")),
DRF 33
Arguments
mod a multipleGroup object which estimated only 2 groups
draws a number indicating how many draws to take to form a suitable multiple impu-
tation or bootstrap estimate of the expected test scores (100 or more). If boot
= FALSE, requires an estimated parameter information matrix. Returns a list
containing the bootstrap/imputation distribution and null hypothesis test for the
sDRF statistics
focal_items a numeric vector indicating which items to include in the DRF tests. The default
uses all of the items (note that including anchors in the focal items has no effect
because they are exactly equal across groups). Selecting fewer items will result
in tests of ’differential bundle functioning’
param_set an N x p matrix of parameter values drawn from the posterior (e.g., using the
parametric sampling approach, bootstrap, of MCMC). If supplied, then these
will be used to compute the DRF measures. Can be much more efficient to pre-
compute these values if DIF, DBF, or DTF are being evaluated within the same
model (especially when using the bootstrap method). See draw_parameters
den.type character specifying how the density of the latent traits is computed. Default is
'both' to include the information from both groups, 'focal' for just the focal
group, and 'reference' for the reference group
CI range of confidence interval when using draws input
npts number of points to use for plotting. Default is 1000
quadpts number of quadrature nodes to use when constructing DRF statistics. Default is
extracted from the input model object
theta_lim lower and upper limits of the latent trait (theta) to be evaluated, and is used in
conjunction with quadpts and npts
Theta_nodes an optional matrix of Theta values to be evaluated in the draws for the sDRF
statistics. However, these values are not averaged across, and instead give the
bootstrap confidence intervals at the respective Theta nodes. Useful when fol-
lowing up a large sDRF or uDRF statistic, for example, to determine where the
difference between the test curves are large (while still accounting for sampling
variability). Returns a matrix with observed variability
plot logical; plot the ’sDRF’ functions for the evaluated sDBF or sDTF values across
the integration grid or, if DIF = TRUE, the selected items as a faceted plot of in-
dividual items? If plausible parameter sets were obtained/supplied then imputed
confidence intervals will be included
DIF logical; return a list of item-level imputation properties using the DRF statis-
tics? These can generally be used as a DIF detection method and as a graphical
display for understanding DIF within each item
p.adjust string to be passed to the p.adjust function to adjust p-values. Adjustments
are located in the adj_pvals element in the returned list. Only applicable when
DIF = TRUE
34 DRF
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R. P. (2018). Model-Based Measures for Detecting and Quantifying Response Bias.
Psychometrika, 83(3), 696-732. doi: 10.1007/s1133601896269
See Also
multipleGroup, DIF
Examples
## Not run:
set.seed(1234)
n <- 30
N <- 500
a <- matrix(1, n)
d <- matrix(rnorm(n), n)
group <- c(rep('Group_1', N), rep('Group_2', N))
## -------------
# groups completely equal
dat1 <- simdata(a, d, N, itemtype = 'dich')
dat2 <- simdata(a, d, N, itemtype = 'dich')
dat <- rbind(dat1, dat2)
mod <- multipleGroup(dat, model, group=group, SE=TRUE,
invariance=c('free_means', 'free_var'))
plot(mod)
plot(mod, which.items = 6:10) #DBF
plot(mod, type = 'itemscore')
plot(mod, type = 'itemscore', which.items = 10:15)
DRF(mod)
DRF(mod, focal_items = 6:10) #DBF
DRF(mod, DIF=TRUE)
DRF(mod, DIF=TRUE, focal_items = 10:15)
DRF 35
mirtCluster()
DRF(mod, draws = 500)
DRF(mod, draws = 500, plot=TRUE)
## -------------
## random slopes and intercepts for 15 items, and latent mean difference
## (no systematic DTF should exist, but DIF will be present)
set.seed(1234)
dat1 <- simdata(a, d, N, itemtype = 'dich', mu=.50, sigma=matrix(1.5))
dat2 <- simdata(a + c(numeric(15), rnorm(n-15, 0, .25)),
d + c(numeric(15), rnorm(n-15, 0, .5)), N, itemtype = 'dich')
dat <- rbind(dat1, dat2)
mod1 <- multipleGroup(dat, 1, group=group)
36 DRF
plot(mod1)
DRF(mod1) #does not account for group differences! Need anchors
## -------------
## systematic differing slopes and intercepts (clear DTF)
set.seed(1234)
dat1 <- simdata(a, d, N, itemtype = 'dich', mu=.50, sigma=matrix(1.5))
dat2 <- simdata(a + c(numeric(15), rnorm(n-15, 1, .25)),
d + c(numeric(15), rnorm(n-15, 1, .5)),
N, itemtype = 'dich')
dat <- rbind(dat1, dat2)
mod3 <- multipleGroup(dat, model, group=group, SE=TRUE,
invariance=c('free_means', 'free_var'))
plot(mod3) #visable DTF happening
# DIF
sDIF <- DRF(mod3, Theta_nodes=Theta_nodes, focal_items = 30, draws=200)
car::some(sDIF)
## ----------------------------------------------------------------
### multidimensional DTF
set.seed(1234)
n <- 50
N <- 1000
DRF(mod)
DRF(mod, draws = 500)
## End(Not run)
Description
Function performs various omnibus differential test functioning procedures on an object estimated
with multipleGroup(). If the latent means/covariances are suspected to differ then the input object
should contain a set of ’anchor’ items to ensure that only differential test features are being detected
rather than group differences. Returns signed (average area above and below) and unsigned (total
area) statistics, with descriptives such as the percent average bias between group total scores for
each statistic. If a grid of Theta values is passed, these can be evaluated as well to determine
specific DTF location effects. For best results, the baseline model should contain a set of ’anchor’
items and have freely estimated hyper-parameters in the focal groups. See DIF for details.
38 DTF
Usage
DTF(
mod,
draws = NULL,
CI = 0.95,
npts = 1000,
theta_lim = c(-6, 6),
Theta_nodes = NULL,
plot = "none",
auto.key = list(space = "right", points = FALSE, lines = TRUE),
...
)
Arguments
mod a multipleGroup object which estimated only 2 groups
draws a number indicating how many draws to take to form a suitable multiple im-
putation estimate of the expected test scores (usually 100 or more). Returns a
list containing the imputation distribution and null hypothesis test for the sDTF
statistic
CI range of confidence interval when using draws input
npts number of points to use in the integration. Default is 1000
theta_lim lower and upper limits of the latent trait (theta) to be evaluated, and is used in
conjunction with npts
Theta_nodes an optional matrix of Theta values to be evaluated in the draws for the sDTF
statistic. However, these values are not averaged across, and instead give the
bootstrap confidence intervals at the respective Theta nodes. Useful when fol-
lowing up a large uDTF/sDTF statistic to determine where the difference be-
tween the test curves are large (while still accounting for sampling variability).
Returns a matrix with observed variability
plot a character vector indicating which plot to draw. Possible values are ’none’,
’func’ for the test score functions, and ’sDTF’ for the evaluated sDTF values
across the integration grid. Each plot is drawn with imputed confidence en-
velopes
auto.key logical; automatically generate key in lattice plot?
... additional arguments to be passed to lattice and boot
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
DTF 39
Chalmers, R. P., Counsell, A., and Flora, D. B. (2016). It might not make a big DIF: Improved
Differential Test Functioning statistics that account for sampling variability. Educational and Psy-
chological Measurement, 76, 114-140. doi: 10.1177/0013164415584576
See Also
multipleGroup, DIF
Examples
## Not run:
set.seed(1234)
n <- 30
N <- 500
a <- matrix(1, n)
d <- matrix(rnorm(n), n)
group <- c(rep('Group_1', N), rep('Group_2', N))
## -------------
# groups completely equal
dat1 <- simdata(a, d, N, itemtype = '2PL')
dat2 <- simdata(a, d, N, itemtype = '2PL')
dat <- rbind(dat1, dat2)
mod <- multipleGroup(dat, model, group=group, SE=TRUE,
invariance=c('free_means', 'free_var'))
plot(mod)
DTF(mod)
mirtCluster()
DTF(mod, draws = 1000) #95% C.I. for sDTF containing 0. uDTF is very small
DTF(mod, draws = 1000, plot='sDTF') #sDTF 95% C.I.'s across Theta always include 0
## -------------
## random slopes and intercepts for 15 items, and latent mean difference
## (no systematic DTF should exist, but DIF will be present)
set.seed(1234)
dat1 <- simdata(a, d, N, itemtype = '2PL', mu=.50, sigma=matrix(1.5))
dat2 <- simdata(a + c(numeric(15), runif(n-15, -.2, .2)),
d + c(numeric(15), runif(n-15, -.5, .5)), N, itemtype = '2PL')
dat <- rbind(dat1, dat2)
mod1 <- multipleGroup(dat, 1, group=group)
plot(mod1) #does not account for group differences! Need anchors
## -------------
## systematic differing slopes and intercepts (clear DTF)
dat1 <- simdata(a, d, N, itemtype = '2PL', mu=.50, sigma=matrix(1.5))
dat2 <- simdata(a + c(numeric(15), rnorm(n-15, 1, .25)), d + c(numeric(15), rnorm(n-15, 1, .5)),
N, itemtype = '2PL')
dat <- rbind(dat1, dat2)
mod3 <- multipleGroup(dat, model, group=group, SE=TRUE,
invariance=c('free_means', 'free_var'))
plot(mod3) #visable DTF happening
## End(Not run)
Description
Computes effect size measures of differential item functioning and differential test/bundle function-
ing based on expected scores from Meade (2010). Item parameters from both reference and focal
group are used in conjunction with focal group empirical theta estimates (and an assumed normally
distributed theta) to compute expected scores.
Usage
empirical_ES(
mod,
Theta.focal = NULL,
focal_items = 1L:extract.mirt(mod, "nitems"),
DIF = TRUE,
npts = 61,
empirical_ES 41
Arguments
mod a multipleGroup object which estimated only 2 groups. The first group in this
object is assumed to be the reference group by default (i.e., ref.group = 1),
which conforms to the invariance arguments in multipleGroup
Theta.focal an optional matrix of Theta values from the focal group to be evaluated. If not
supplied the default values to fscores will be used in conjunction with the ...
arguments passed
focal_items a numeric vector indicating which items to include the tests. The default uses
all of the items. Selecting fewer items will result in tests of ’differential bundle
functioning’ when DIF = FALSE
DIF logical; return a data.frame of item-level imputation properties? If FALSE, only
DBF and DTF statistics will be reported
npts number of points to use in the integration. Default is 61
theta_lim lower and upper limits of the latent trait (theta) to be evaluated, and is used in
conjunction with npts
plot logical; plot expected scores of items/test where expected scores are computed
using focal group thetas and both focal and reference group item parameters
type type of objects to draw in lattice; default plots both points and lines
par.strip.text plotting argument passed to lattice
par.settings plotting argument passed to lattice
... additional arguments to be passed to fscores and xyplot
DIF
The default DIF = TRUE produces several effect sizes indices at the item level. Signed indices al-
low DIF favoring the focal group at one point on the theta distribution to cancel DIF favoring the
reference group at another point on the theta distribution. Unsigned indices take the absolute value
before summing or averaging, thus not allowing cancellation of DIF across theta.
SIDS Signed Item Difference in the Sample. The average difference in expected scores across the
focal sample using both focal and reference group item parameters.
UIDS Unsigned Item Difference in the Sample. Same as SIDS except absolute value of expected
scores is taken prior to averaging across the sample.
D-Max The maximum difference in expected scores in the sample.
ESSD Expected Score Standardized Difference. Cohen’s D for difference in expected scores.
42 empirical_ES
SIDN Signed Item Difference in a Normal distribution. Identical to SIDS but averaged across a
normal distribution rather than the sample.
UIDN Unsigned Item Difference in a Normal distribution. Identical to UIDS but averaged across
a normal distribution rather than the sample.
DBF/DTF
DIF = FALSE produces a series of test/bundle-level indices that are based on item-level indices.
STDS Signed Test Differences in the Sample. The sum of the SIDS across items.
UTDS Unsigned Test Differences in the Sample. The sum of the UIDS across items.
Stark’s DTFR Stark’s version of STDS using a normal distribution rather than sample estimated
thetas.
UDTFR Unsigned Expected Test Scores Differences in the Sample. The difference in observed
summed scale scores expected, on average, across a hypothetical focal group with a normally
distributed theta, had DF been uniform in nature for all items
UETSDS Unsigned Expected Test Score Differences in the Sample. The hypothetical difference
expected scale scores that would have been present if scale-level DF had been uniform across
respondents (i.e., always favoring the focal group).
UETSDN Identical to UETSDS but computed using a normal distribution.
Test D-Max Maximum expected test score differences in the sample.
ETSSD Expected Test Score Standardized Difference. Cohen’s D for expected test scores.
Author(s)
Adam Meade, with contributions by Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Meade, A. W. (2010). A taxonomy of effect size measures for the differential functioning of items
and scales. Journal of Applied Psychology, 95, 728-743.
Examples
## Not run:
#no DIF
set.seed(12345)
a <- matrix(abs(rnorm(15,1,.3)), ncol=1)
d <- matrix(rnorm(15,0,.7),ncol=1)
itemtype <- rep('2PL', nrow(a))
N <- 1000
dataset1 <- simdata(a, d, N, itemtype)
dataset2 <- simdata(a, d, N, itemtype, mu = .1, sigma = matrix(1.5))
dat <- rbind(dataset1, dataset2)
empirical_plot 43
# ensure 'Ref' is the first group (and therefore reference group during estimation)
group <- factor(c(rep('Ref', N), rep('Focal', N)), levels = c('Ref', 'Focal'))
empirical_ES(mod)
empirical_ES(mod, DIF=FALSE)
empirical_ES(mod, DIF=FALSE, focal_items = 10:15)
empirical_ES(mod, plot=TRUE)
empirical_ES(mod, plot=TRUE, DIF=FALSE)
###---------------------------------------------
# DIF
set.seed(12345)
a1 <- a2 <- matrix(abs(rnorm(15,1,.3)), ncol=1)
d1 <- d2 <- matrix(rnorm(15,0,.7),ncol=1)
a2[10:15,] <- a2[10:15,] + rnorm(6, 0, .3)
d2[10:15,] <- d2[10:15,] + rnorm(6, 0, .3)
itemtype <- rep('dich', nrow(a1))
N <- 1000
dataset1 <- simdata(a1, d1, N, itemtype)
dataset2 <- simdata(a2, d2, N, itemtype, mu = .1, sigma = matrix(1.5))
dat <- rbind(dataset1, dataset2)
group <- factor(c(rep('Ref', N), rep('Focal', N)), levels = c('Ref', 'Focal'))
empirical_ES(mod)
empirical_ES(mod, DIF = FALSE)
empirical_ES(mod, plot=TRUE)
empirical_ES(mod, plot=TRUE, DIF=FALSE)
## End(Not run)
Description
Given a dataset containing item responses this function will construct empirical graphics using
the observed responses to each item conditioned on the total score. When individual item plots are
requested then the total score will be formed without the item of interest (i.e., the total score without
that item).
44 empirical_plot
Usage
empirical_plot(
data,
which.items = NULL,
smooth = FALSE,
formula = resp ~ s(TS, k = 5),
main = NULL,
par.strip.text = list(cex = 0.7),
boxplot = FALSE,
par.settings = list(strip.background = list(col = "#9ECAE1"), strip.border = list(col
= "black")),
auto.key = list(space = "right", points = FALSE, lines = TRUE),
...
)
Arguments
data a data.frame or matrix of item responses (see mirt for typical input)
which.items a numeric vector indicating which items to plot in a faceted image plot. If NULL
then a empirical test plot will be constructed instead
smooth logical; include a GAM smoother instead of the raw proportions? Default is
FALSE
formula formula used for the GAM smoother
main the main title for the plot. If NULL an internal default will be used
par.strip.text plotting argument passed to lattice
boxplot logical; use a boxplot to display the marginal total score differences instead of
scatter plots of proportions? Default is FALSE
par.settings plotting argument passed to lattice
auto.key plotting argument passed to lattice
... additional arguments to be passed to lattice and coef()
Details
Note that these types of plots should only be used for unidimensional tests with monotonically
increasing item response functions. If monotonicity should be true for all items, however, then these
plots may serve as a visual diagnostic tool so long as the majority of items are indeed monotonic.
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
See Also
itemplot, itemGAM
empirical_rxx 45
Examples
## Not run:
SAT12[SAT12 == 8] <- NA
data <- key2binary(SAT12,
key = c(1,4,5,2,3,1,2,1,3,1,2,4,2,1,5,3,4,4,1,4,3,3,4,1,3,5,1,3,1,5,4,5))
#test plot
empirical_plot(data)
#items 1, 2 and 5
empirical_plot(data, c(1, 2, 5))
empirical_plot(data, c(1, 2, 5), smooth = TRUE)
empirical_plot(data, c(1, 2, 5), boxplot = TRUE)
## End(Not run)
Description
Given secondary latent trait estimates and their associated standard errors returned from fscores,
compute the empirical reliability.
Usage
empirical_rxx(Theta_SE)
Arguments
Theta_SE a matrix of latent trait estimates returned from fscores with the options full.scores
= TRUE and full.scores.SE = TRUE
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
46 estfun.AllModelClass
See Also
fscores, marginal_rxx
Examples
## Not run:
## End(Not run)
Description
A function for extracting the empirical estimating functions of a fitted mirt, multipleGroup or
bfactor model. This is the derivative of the log-likelihood with respect to the parameter vector,
evaluated at the observed (case-wise) data. In other words, this function returns the case-wise
scores, evaluated at the fitted model parameters. Currently, models fitted via the EM or BL method
are supported. For the computations, the internal Theta grid of the model is being used which was
already used during the estimation of the model itself along with its matching normalized density.
Usage
estfun.AllModelClass(
x,
weights = extract.mirt(x, "survey.weights"),
centering = FALSE
)
Arguments
x a fitted model object of class SingleGroupClass or MultipleGroupClass
weights by default, the survey.weights which were (optionally) specified when fitting
the model are included to calculate the scores. If specified by the user, this
should be a numeric vector of length equal to the total sample size. Note that
if not all cases were weighted equally when fitting the model, the weights must
be corrected by taking their square root if the scores are being used to compute
estfun.AllModelClass 47
Value
An n x k matrix corresponding to n observations and k parameters
Author(s)
Lennart Schneider <lennart.sch@web.de>; centering argument contributed by Rudolf Debelak
(<rudolf.debelak@psychologie.uzh.ch>)
See Also
mirt, multipleGroup, bfactor
Examples
## Not run:
# fit a 2PL on the LSAT7 data and get the scores
mod1 <- mirt(expand.table(LSAT7), 1, SE = TRUE, SE.type = "crossprod")
sc1 <- estfun.AllModelClass(mod1)
# get the gradient
colSums(sc1)
# calculate the OPG estimate of the variance-covariance matrix "by hand"
vc1 <- vcov(mod1)
all.equal(crossprod(sc1), chol2inv(chol(vc1)), check.attributes = FALSE)
# fit a bifactor model with 2 specific factors and do the same as above
mod3 <- bfactor(expand.table(LSAT7), c(2, 2, 1, 1, 2), SE = TRUE,
SE.type = "crossprod")
sc3 <- estfun.AllModelClass(mod3)
colSums(sc3)
vc3 <- vcov(mod3)
all.equal(crossprod(sc3), chol2inv(chol(vc3)), check.attributes = FALSE)
## End(Not run)
Description
The expand.table function expands a summary table of unique response patterns to a full sized
data-set. By default the response frequencies are assumed to be on rightmost column of the input
data, though this can be modified.
Usage
expand.table(tabdata, freq = colnames(tabdata)[ncol(tabdata)], sample = FALSE)
Arguments
tabdata An object of class data.frame or matrix with the unique response patterns and
the number of frequencies in the rightmost column (though see freq for details
on how to omit this column)
freq either a character vector specifying the column in tabdata to be used as the
frequency count indicator for each response pattern (defaults to the right-most
column) or a integer vector of length nrow(tabdata) specifying the frequency
counts. When using the latter approach the tabdata input should not include
any information regarding the counts, and instead should only include the unique
response patterns themselves
sample logical; randomly switch the rows in the expanded table? This does not change
the expanded data, only the row locations
Value
Returns a numeric matrix with all the response patterns.
expand.table 49
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
data(LSAT7)
head(LSAT7) # frequency in right-most column
LSAT7full <- expand.table(LSAT7)
head(LSAT7full)
dim(LSAT7full)
#--------
## Not run:
# Generate data from separate response pattern matrix and freq vector
# The following uses Table 2.1 from de Ayala (2009)
f <- c(691,2280,242,235,158,184,1685,1053,134,462,92,65,571,79,87,41,1682,702,
370,63,626,412,166,52,28,15,2095,1219,500,187,40,3385)
1, 1, 0, 0, 1,
1, 0, 1, 0, 1,
1, 0, 0, 1, 1,
0, 1, 1, 0, 1,
0, 1, 0, 1, 1,
0, 0, 1, 1, 1,
1, 1, 1, 1, 0,
1, 1, 1, 0, 1,
1, 1, 0, 1, 1,
1, 0, 1, 1, 1,
0, 1, 1, 1, 1,
1, 1, 1, 1, 1), ncol=5, byrow=TRUE)
## End(Not run)
Description
Given an internal mirt object extracted from an estimated model compute the expected value for an
item given the ability parameter(s).
Usage
expected.item(x, Theta, min = 0)
Arguments
x an extracted internal mirt object containing item information (see extract.item)
Theta a vector (unidimensional) or matrix (multidimensional) of latent trait values
min a constant value added to the expected values indicating the lowest theoretical
category. Default is 0
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
expected.test 51
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
See Also
extract.item, expected.test
Examples
Description
Given an estimated model compute the expected test score. Returns the expected values in the same
form as the data used to estimate the model.
Usage
expected.test(
x,
Theta,
group = NULL,
mins = TRUE,
individual = FALSE,
which.items = NULL
)
Arguments
x an estimated mirt object
Theta a matrix of latent trait values
group a number signifying which group the item should be extracted from (applies to
’MultipleGroupClass’ objects only)
mins logical; include the minimum value constants in the dataset. If FALSE, the
expected values for each item are determined from the scoring 0:(ncat-1)
individual logical; return tracelines for individual items?
which.items an integer vector indicating which items to include in the expected test score.
Default uses all possible items
52 extract.group
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
See Also
expected.item
Examples
## Not run:
dat <- expand.table(deAyala)
model <- 'F = 1-5
CONSTRAIN = (1-5, a1)'
mod <- mirt(dat, model)
## End(Not run)
Description
Extract a single group from an object defined by multipleGroup.
Usage
extract.group(x, group)
Arguments
x mirt model of class ’MultipleGroupClass’
group the name of the group to extract
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
extract.item 53
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
See Also
extract.item, extract.mirt
Examples
## Not run:
set.seed(12345)
a <- matrix(abs(rnorm(15,1,.3)), ncol=1)
d <- matrix(rnorm(15,0,.7),ncol=1)
itemtype <- rep('2PL', nrow(a))
N <- 1000
dataset1 <- simdata(a, d, N, itemtype)
dataset2 <- simdata(a, d, N, itemtype, mu = .1, sigma = matrix(1.5))
dat <- rbind(dataset1, dataset2)
group <- c(rep('D1', N), rep('D2', N))
models <- 'F1 = 1-15'
## End(Not run)
Description
Extract the internal mirt objects from any estimated model.
Usage
extract.item(x, item, group = NULL, drop.zeros = FALSE)
Arguments
x mirt model of class ’SingleGroupClass’ or ’MultipleGroupClass’
item a number or character signifying which item to extract
group a number signifying which group the item should be extracted from (applies to
’MultipleGroupClass’ only)
drop.zeros logical; drop slope values that are numerically close to zero to reduce dimen-
sionality? Useful in objects returned from bfactor or other confirmatory mod-
els that contain several zero slopes
54 extract.mirt
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
See Also
extract.group, extract.mirt
Examples
## Not run:
mod <- mirt(Science, 1)
extr.1 <- extract.item(mod, 1)
## End(Not run)
Description
A generic function to extract the internal objects from estimated models.
Usage
extract.mirt(x, what)
Arguments
x mirt model of class ’SingleGroupClass’, ’MultipleGroupClass’, ’MixedClass’
or ’DiscreteGroupClass’
what a string indicating what to extract
Details
Objects which can be extracted from mirt objects include:
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
See Also
Examples
## Not run:
mod <- mirt(Science, 1)
extract.mirt(mod, 'logLik')
extract.mirt(mod, 'F')
## End(Not run)
fixedCalib 57
Description
Implements the set of fixed-item calibration methods described by Kim (2006). The initial cal-
ibrated model must be fitted via mirt, is currently limited to unidimensional models only, and
should only be utilized when the new set of responses are obtained from a population with similar
distributional characteristics in the latent traits. For more flexible calibration of items, including a
fixed-item calibration variant involving anchor items for equating, see multipleGroup.
Usage
fixedCalib(
data,
model = 1,
old_mod,
PAU = "MWU",
NEMC = "MEM",
technical = list(),
...
)
Arguments
data new data to be used for calibration. Note that to be consistent with the mod
object, observed responses/NA placeholders must be included to link the item
names used in the original mod definition (i.e., extract.mirt(mod,what = 'itemnames'))
model type of model to fit for the complete dataset (not that for the fixed items in
old_mod the factor loadings/constraints specified by the potential mirt.model
specification is not relevant)
old_mod a model of class SingleGroupClass fitted using mirt
PAU prior ability update (PAU) approach. Supports none ("NWU"), one ("OWU"), and
many ("MWU")
NEMC number of EM cycles (NEMC) to use for the to-be-estimated parameters. Sup-
ports one ("OEM") and many ("MEM")
technical list of technical estimation arguments (see mirt for details)
... additional arguments to pass to mirt
References
Kim, S. (2006). A comparative study of IRT fixed parameter calibration methods. Journal of
Educational Measurement, 4(43), 355-381.
See Also
mirt, multipleGroup
58 fixedCalib
Examples
## Not run:
# single factor
set.seed(12345)
J <- 50
a <- matrix(abs(rnorm(J,1,.3)), ncol=1)
d <- matrix(rnorm(J,0,.7),ncol=1)
itemtype <- rep('2PL', nrow(a))
#--------------------------------------
pop_a1=a, pop_d=d)
plot(OWU_MEM, type = 'empiricalhist')
############################
## Item length constraint example for each participant in the experimental
## items group. In this example, all participants were forced to have a test
## length of J=30, though the item pool had J=50 total items.
## End(Not run)
Description
Create expected values for fixed effects parameters in latent regression models.
Usage
fixef(x)
Arguments
x an estimated model object from the mixedmirt or mirt function
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Chalmers, R. P. (2015). Extended Mixed-Effects Item Response Models with the MH-RM Algo-
rithm. Journal of Educational Measurement, 52, 200-222. doi: 10.1111/jedm.12072
See Also
mirt, mixedmirt
Examples
## Not run:
#simulate data
set.seed(1234)
N <- 1000
# covariates
X1 <- rnorm(N); X2 <- rnorm(N)
covdata <- data.frame(X1, X2)
Theta <- matrix(0.5 * X1 + -1 * X2 + rnorm(N, sd = 0.5))
fscores 61
# with mixedmirt()
mod1b <- mixedmirt(dat, covdata, 1, lr.fixed = ~ X1 + X2, fixed = ~ 0 + items)
fe2 <- fixef(mod1b)
head(fe2)
## End(Not run)
fscores Compute factor score estimates (a.k.a, ability estimates, latent trait
estimates, etc)
Description
Computes MAP, EAP, ML (Embretson & Reise, 2000), EAP for sum-scores (Thissen et al., 1995),
or WLE (Warm, 1989) factor scores with a multivariate normal prior distribution using equally
spaced quadrature. EAP scores for models with more than three factors are generally not rec-
ommended since the integration grid becomes very large, resulting in slower estimation and less
precision if the quadpts are too low. Therefore, MAP scores should be used instead of EAP scores
for higher dimensional models. Multiple imputation variants are possible for each estimator if a
parameter information matrix was computed, which are useful if the sample size/number of items
were small. As well, if the model contained latent regression predictors this information will be
used in computing MAP and EAP estimates (for these models, full.scores=TRUE will always be
used). Finally, plausible value imputation is also available, and will also account for latent regres-
sion predictor effects.
Usage
fscores(
object,
method = "EAP",
full.scores = TRUE,
rotate = "oblimin",
Target = NULL,
response.pattern = NULL,
append_response.pattern = FALSE,
na.rm = FALSE,
62 fscores
plausible.draws = 0,
plausible.type = "normal",
quadpts = NULL,
returnER = FALSE,
return.acov = FALSE,
mean = NULL,
cov = NULL,
covdata = NULL,
verbose = TRUE,
full.scores.SE = FALSE,
theta_lim = c(-6, 6),
MI = 0,
use_dentype_estimate = FALSE,
QMC = FALSE,
custom_den = NULL,
custom_theta = NULL,
min_expected = 1,
max_theta = 20,
start = NULL,
...
)
Arguments
object a computed model object of class SingleGroupClass, MultipleGroupClass,
or DiscreteClass
method type of factor score estimation method. Can be:
• "EAP" for the expected a-posteriori (default)
• "MAP" for the maximum a-posteriori (i.e, Bayes modal)
• "ML" for maximum likelihood
• "WLE" for weighted likelihood estimation
• "EAPsum" for the expected a-posteriori for each sum score
• "plausible" for a single plausible value imputation for each case. This is
equivalent to setting plausible.draws = 1
• "classify" for the posteriori classification probabilities (only applicable
when the input model was of class MixtureClass)
full.scores if FALSE then a summary table with factor scores for each unique pattern is
displayed. Otherwise, a matrix of factor scores for each response pattern in the
data is returned (default)
rotate prior rotation to be used when estimating the factor scores. See summary-method
for details. If the object is not an exploratory model then this argument is ig-
nored
Target target rotation; see summary-method for details
response.pattern
an optional argument used to calculate the factor scores and standard errors for
a given response vector or matrix/data.frame
fscores 63
append_response.pattern
logical; should the inputs from response.pattern also be appended to the fac-
tor score output?
na.rm logical; remove rows with any missing values? This is generally not required
due to the nature of computing factors scores, however for the "EAPsum" method
this may be necessary to ensure that the sum-scores correspond to the same com-
posite score
plausible.draws
number of plausible values to draw for future researchers to perform secondary
analyses of the latent trait scores. Typically used in conjunction with latent
regression predictors (see mirt for details), but can also be generated when no
predictor variables were modeled. If plausible.draws is greater than 0 a list
of plausible values will be returned
plausible.type type of plausible values to obtain. Can be either 'normal' (default) to use a
normal approximation based on the ACOV matrix, or 'MH' to obtain Metropolis-
Hastings samples from the posterior (silently passes object to mirt, therefore
arguments like technical can be supplied to increase the number of burn-in
draws and discarded samples)
quadpts number of quadratures to use per dimension. If not specified, a suitable one will
be created which decreases as the number of dimensions increases (and therefore
for estimates such as EAP, will be less accurate). This is determined from the
switch statement quadpts <-switch(as.character(nfact),'1'=61,'2'=31,'3'=15,'4'=9,'5'=7,3
returnER logical; return empirical reliability (also known as marginal reliability) estimates
as a numeric values?
return.acov logical; return a list containing covariance matrices instead of factors scores?
impute = TRUE not supported with this option
mean a vector for custom latent variable means. If NULL, the default for ’group’
values from the computed mirt object will be used
cov a custom matrix of the latent variable covariance matrix. If NULL, the default
for ’group’ values from the computed mirt object will be used
covdata when latent regression model has been fitted, and the response.pattern input
is used to score individuals, then this argument is used to include the latent
regression covariate terms for each row vector supplied to response.pattern
verbose logical; print verbose output messages?
full.scores.SE logical; when full.scores == TRUE, also return the standard errors associated
with each respondent? Default is FALSE
theta_lim lower and upper range to evaluate latent trait integral for each dimension. If
omitted, a range will be generated automatically based on the number of dimen-
sions
MI a number indicating how many multiple imputation draws to perform. Default
is 0, indicating that no MI draws will be performed
use_dentype_estimate
logical; if the density of the latent trait was estimated in the model (e.g., via
Davidian curves or empirical histograms), should this information be used to
compute the latent trait estimates? Only applicable for EAP-based estimates
(EAP, EAPsum, and plausible)
64 fscores
QMC logical; use quasi-Monte Carlo integration? If quadpts is omitted the default
number of nodes is 5000
custom_den a function used to define the integration density (if required). The NULL default
assumes that the multivariate normal distribution with the ’GroupPars’ hyper-
parameters are used. At the minimum must be of the form:
function(Theta,...)
where Theta is a matrix of latent trait values (will be a grid of values if method
== 'EAPsum' or method == 'EAP', otherwise Theta will have only 1 row). Addi-
tional arguments may included and are caught through the fscores(...) input.
The function must return a numeric vector of density weights (one for each row
in Theta)
custom_theta a matrix of custom integration nodes to use instead of the default, where each
column corresponds to the respective dimension in the model
min_expected when computing goodness of fit tests when method = 'EAPsum', this value is
used to collapse across the conditioned total scores until the expected values are
greater than this value. Note that this only affect the goodness of fit tests and not
the returned EAP for sum scores table
max_theta the maximum/minimum value any given factor score estimate will achieve using
any modal estimator method (e.g., MAP, WLE, ML)
start a matrix of starting values to use for iterative estimation methods. Default will
start at a vector of 0’s for each response pattern, or will start at the EAP estimates
(unidimensional models only). Must be in the form that matches full.scores
= FALSE (mostly used in the mirtCAT package)
... additional arguments to be passed to nlm
Details
The function will return either a table with the computed scores and standard errors, the original data
matrix with scores appended to the rightmost column, or the scores only. By default the latent means
and covariances are determined from the estimated object, though these can be overwritten. Iterative
estimation methods can be estimated in parallel to decrease estimation times if a mirtCluster
object is available.
If the input object is a discrete latent class object estimated from mdirt then the returned results
will be with respect to the posterior classification for each individual. The method inputs for
'DiscreteClass' objects may only be 'EAP', for posterior classification of each response pat-
tern, or 'EAPsum' for posterior classification based on the raw sum-score. For more information on
these algorithms refer to the mirtCAT package and the associated JSS paper (Chalmers, 2016).
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
fscores 65
Chalmers, R. P. (2016). Generating Adaptive and Non-Adaptive Test Interfaces for Multidimen-
sional Item Response Theory Applications. Journal of Statistical Software, 71(5), 1-39. doi: 10.18637/
jss.v071.i05
Embretson, S. E. & Reise, S. P. (2000). Item Response Theory for Psychologists. Erlbaum.
Thissen, D., Pommerich, M., Billeaud, K., & Williams, V. S. L. (1995). Item Response Theory
for Scores on Tests Including Polytomous Items with Ordered Responses. Applied Psychological
Measurement, 19, 39-49.
Warm, T. A. (1989). Weighted likelihood estimation of ability in item response theory. Psychome-
trika, 54, 427-450.
See Also
averageMI
Examples
## Not run:
fullscores <- fscores(mod)
fullscores_with_SE <- fscores(mod, full.scores.SE=TRUE)
head(fullscores)
head(fullscores_with_SE)
#use custom latent variable properties (diffuse prior for MAP is very close to ML)
fscores(mod, method='MAP', cov = matrix(1000), full.scores = FALSE)
fscores(mod, method='ML', full.scores = FALSE)
#multiple imputation using 30 draws for EAP scores. Requires information matrix
66 fscores
####################
# scoring via response.pattern input (with latent regression structure)
#simulate data
set.seed(1234)
N <- 1000
# covariates
X1 <- rnorm(N); X2 <- rnorm(N)
covdata <- data.frame(X1, X2)
Theta <- matrix(0.5 * X1 + -1 * X2 + rnorm(N, sd = 0.5))
## End(Not run)
gen.difficulty 67
Description
Function provides the four generalized item difficulty representations for polytomous response
models described by Ali, Chang, and Anderson (2015). These estimates are used to gauge how
difficult a polytomous item may be.
Usage
gen.difficulty(mod, type = "IRF", interval = c(-30, 30), ...)
Arguments
mod a single factor model estimated by mirt
type type of generalized difficulty parameter to report. Can be 'IRF' to use the item
response function (default), 'mean' to find the average of the difficulty esti-
mates, 'median' the median of the difficulty estimates, and 'trimmed' to find
the trimmed mean after removing the first and last difficulty estimates
interval interval range to search for 'IRF' type
... additional arguments to pass to uniroot
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Ali, U. S., Chang, H.-H., & Anderson, C. J. (2015). Location indices for ordinal polytomous
items based on item response theory (Research Report No. RR-15-20). Princeton, NJ: Educational
Testing Service. http://dx.doi.org/10.1002/ets2.12065
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
gen.difficulty(mod)
gen.difficulty(mod, type = 'mean')
gen.difficulty(mod)
gen.difficulty(mod, type = 'mean')
## End(Not run)
Description
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
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
dat <- expand.table(LSAT7)
(original <- mirt(dat, 1))
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
itemfit 69
#re-estimate imputed dataset (good to do this multiple times and average over)
fulldata <- imputeMissing(mod, scores)
(fullmod <- mirt(fulldata, 1))
#with multipleGroup
set.seed(1)
group <- sample(c('group1', 'group2'), 1000, TRUE)
mod2 <- multipleGroup(dat, 1, group, TOL=1e-2)
fs <- fscores(mod2)
fulldata2 <- imputeMissing(mod2, fs)
## End(Not run)
Description
Computes item-fit statistics for a variety of unidimensional and multidimensional models. Poorly
fitting items should be inspected with the empirical plots/tables for unidimensional models, other-
wise itemGAM can be used to diagnose where the functional form of the IRT model was misspec-
ified, or models can be refit using more flexible semi-parametric response models (e.g., itemtype
= 'spline'). If the latent trait density was approximated (e.g., Davidian curves, Empirical his-
tograms, etc) then passing use_dentype_estimate = TRUE will use the internally saved quadrature
and density components (where applicable). Currently, only S-X2 statistic supported for mixture
IRT models. Finally, where applicable the root mean-square error of approximation (RMSEA) is
reported to help gauge the magnitude of item misfit.
Usage
itemfit(
x,
fit_stats = "S_X2",
which.items = 1:extract.mirt(x, "nitems"),
na.rm = FALSE,
p.adjust = "none",
group.bins = 10,
group.size = NA,
group.fun = mean,
mincell = 1,
mincell.X2 = 2,
S_X2.tables = FALSE,
pv_draws = 30,
boot = 1000,
70 itemfit
boot_dfapprox = 200,
S_X2.plot = NULL,
S_X2.plot_raw.score = TRUE,
ETrange = c(-2, 2),
ETpoints = 11,
empirical.plot = NULL,
empirical.CI = 0.95,
empirical.table = NULL,
empirical.poly.collapse = FALSE,
method = "EAP",
Theta = NULL,
par.strip.text = list(cex = 0.7),
par.settings = list(strip.background = list(col = "#9ECAE1"), strip.border = list(col
= "black")),
auto.key = list(space = "right", points = FALSE, lines = TRUE),
...
)
Arguments
x a computed model object of class SingleGroupClass, MultipleGroupClass,
or DiscreteClass
fit_stats a character vector indicating which fit statistics should be computed. Supported
inputs are:
• 'S_X2' : Orlando and Thissen (2000, 2003) and Kang and Chen’s (2007)
signed chi-squared test (default)
• 'Zh' : Drasgow, Levine, & Williams (1985) Zh
• 'X2' : Bock’s (1972) chi-squared method. The default inputs compute
Yen’s (1981) Q1 variant of the X2 statistic (i.e., uses a fixed group.bins
= 10). However, Bock’s group-size variable median-based method can be
computed by passing group.fun = median and modifying the group.size
input to the desired number of bins
• 'G2' : McKinley & Mills (1985) G2 statistic (similar method to Q1, but
with the likelihood-ratio test).
• 'PV_Q1' : Chalmers and Ng’s (2017) plausible-value variant of the Q1
statistic.
• 'PV_Q1*' : Chalmers and Ng’s (2017) plausible-value variant of the Q1
statistic that uses parametric bootstrapping to obtain a suitable empirical
distribution.
• 'X2*' : Stone’s (2000) fit statistics that require parametric bootstrapping
• 'X2*_df' : Stone’s (2000) fit statistics that require parametric bootstrap-
ping to obtain scaled versions of the X2* and degrees of freedom
• 'infit' : Compute the infit and outfit statistics
Note that ’infit’, ’S_X2’, and ’Zh’ cannot be computed when there are missing
response data (i.e., will require multiple-imputation/row-removal techniques).
which.items an integer vector indicating which items to test for fit. Default tests all possible
items
itemfit 71
na.rm logical; remove rows with any missing values? This is required for methods
such as S-X2 because they require the "EAPsum" method from fscores
p.adjust method to use for adjusting all p-values for each respective item fit statistic (see
p.adjust for available options). Default is 'none'
group.bins the number of bins to use for X2 and G2. For example, setting group.bins =
10 will will compute Yen’s (1981) Q1 statistic when 'X2' is requested
group.size approximate size of each group to be used in calculating the χ2 statistic. The
default NA disables this command and instead uses the group.bins input to try
and construct equally sized bins
group.fun function used when 'X2' or 'G2' are computed. Determines the central ten-
dency measure within each partitioned group. E.g., setting group.fun = median
will obtain the median of each respective ability estimate in each subgroup (this
is what was used by Bock, 1972)
mincell the minimum expected cell size to be used in the S-X2 computations. Tables will
be collapsed across items first if polytomous, and then across scores if necessary
mincell.X2 the minimum expected cell size to be used in the X2 computations. Tables will
be collapsed if polytomous, however if this condition can not be met then the
group block will be omitted in the computations
S_X2.tables logical; return the tables in a list format used to compute the S-X2 stats?
pv_draws number of plausible-value draws to obtain for PV_Q1 and PV_Q1*
boot number of parametric bootstrap samples to create for PV_Q1* and X2*
boot_dfapprox number of parametric bootstrap samples to create for the X2*_df statistic to
approximate the scaling factor for X2* as well as the scaled degrees of freedom
estimates
S_X2.plot argument input is the same as empirical.plot, however the resulting image is
constructed according to the S-X2 statistic’s conditional sum-score information
S_X2.plot_raw.score
logical; use the raw-score information in the plot in stead of the latent trait scale
score? Default is FALSE
ETrange rangone of integration nodes for Stone’s X2* statistic
ETpoints number of integration nodes to use for Stone’s X2* statistic
empirical.plot a single numeric value or character of the item name indicating which item to
plot (via itemplot) and overlay with the empirical θ groupings (see empirical.CI).
Useful for plotting the expected bins based on the 'X2' or 'G2' method
empirical.CI a numeric value indicating the width of the empirical confidence interval ranging
between 0 and 1 (default of 0 plots not interval). For example, a 95 interval
would be plotted when empirical.CI = .95. Only applicable to dichotomous
items
empirical.table
a single numeric value or character of the item name indicating which item table
of expected values should be returned. Useful for visualizing the expected bins
based on the 'X2' or 'G2' method
empirical.poly.collapse
logical; collapse polytomous item categories to for expected scoring functions
for empirical plots? Default is FALSE
72 itemfit
method type of factor score estimation method. See fscores for more detail
Theta a matrix of factor scores for each person used for statistics that require empirical
estimates. If supplied, arguments typically passed to fscores() will be ignored
and these values will be used instead. Also required when estimating statistics
with missing data via imputation
par.strip.text plotting argument passed to lattice
par.settings plotting argument passed to lattice
auto.key plotting argument passed to lattice
... additional arguments to be passed to fscores() and lattice
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Bock, R. D. (1972). Estimating item parameters and latent ability when responses are scored in two
or more nominal categories. Psychometrika, 37, 29-51.
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Chalmers, R. P. & Ng, V. (2017). Plausible-Value Imputation Statistics for Detecting Item Misfit.
Applied Psychological Measurement, 41, 372-387. doi: 10.1177/0146621617692079
Drasgow, F., Levine, M. V., & Williams, E. A. (1985). Appropriateness measurement with poly-
chotomous item response models and standardized indices. British Journal of Mathematical and
Statistical Psychology, 38, 67-86.
Kang, T. & Chen, Troy, T. (2007). An investigation of the performance of the generalized S-X2
item-fit index for polytomous IRT models. ACT
McKinley, R., & Mills, C. (1985). A comparison of several goodness-of-fit statistics. Applied
Psychological Measurement, 9, 49-57.
Orlando, M. & Thissen, D. (2000). Likelihood-based item fit indices for dichotomous item response
theory models. Applied Psychological Measurement, 24, 50-64.
Reise, S. P. (1990). A comparison of item- and person-fit methods of assessing model-data fit in
IRT. Applied Psychological Measurement, 14, 127-137.
Stone, C. A. (2000). Monte Carlo Based Null Distribution for an Alternative Goodness-of-Fit Test
Statistics in IRT Models. Journal of Educational Measurement, 37, 58-75.
Wright B. D. & Masters, G. N. (1982). Rating scale analysis. MESA Press.
Yen, W. M. (1981). Using simulation results to choose a latent trait model. Applied Psychological
Measurement, 5, 245-262.
See Also
personfit, itemGAM
itemfit 73
Examples
## Not run:
x <- mirt(data, 1)
raschfit <- mirt(data, 1, itemtype='Rasch')
fit <- itemfit(x)
fit
# p-value adjustment
itemfit(x, p.adjust='fdr')
# PV and X2* statistics (parametric bootstrap stats not run to save time)
itemfit(x, 'PV_Q1')
#same as above, but inputting ML estimates instead (saves time for re-use)
Theta <- fscores(raschfit, method = 'ML')
itemfit(raschfit, 'infit', Theta=Theta)
itemfit(raschfit, empirical.plot=1, Theta=Theta)
itemfit(raschfit, empirical.table=1, Theta=Theta)
#------------------------------------------------------------
#observed and expected total score patterns for item 1 (post collapsing)
tables$O[[1]]
tables$E[[1]]
# fit stats with missing data (run in parallel using all cores)
dat[sample(1:prod(dim(dat)), 100)] <- NA
raschfit <- mirt(dat, 1, itemtype='Rasch')
# note that X2, G2, PV-Q1, and X2* do not require complete datasets
thetas <- fscores(raschfit, method = 'ML') # save scores for faster computations
itemfit(raschfit, c('X2', 'G2'), Theta=thetas)
itemGAM 75
## End(Not run)
Description
This function uses a generalized additive model (GAM) to estimate response curves for items that
do not seem to fit well in a given model. Using a stable axillary model, traceline functions for poorly
fitting dichotomous or polytomous items can be inspected using point estimates (or plausible values)
of the latent trait. Plots of the tracelines and their associated standard errors are available to help
interpret the misfit. This function may also be useful when adding new items to an existing, well
established set of items, especially when the parametric form of the items under investigation are
unknown.
Usage
itemGAM(
item,
Theta,
formula = resp ~ s(Theta, k = 10),
CI = 0.95,
theta_lim = c(-3, 3),
return.models = FALSE,
...
)
Arguments
item a single poorly fitting item to be investigated. Can be a vector or matrix
76 itemGAM
Theta a list or matrix of latent trait estimates typically returned from fscores
formula an R formula to be passed to the gam function. Default fits a spline model with 10
nodes. For multidimensional models, the traits are assigned the names ’Theta1’,
’Theta2’, ..., ’ThetaN’
CI a number ranging from 0 to 1 indicating the confidence interval range. Default
provides the 95 percent interval
theta_lim range of latent trait scores to be evaluated
return.models logical; return a list of GAM models for each category? Useful when the GAMs
should be inspected directly, but also when fitting multidimensional models (this
is set to TRUE automatically for multidimensional models)
... additional arguments to be passed to gam or lattice
x an object of class ’itemGAM’
y a NULL value ignored by the plotting function
par.strip.text plotting argument passed to lattice
par.settings plotting argument passed to lattice
auto.key plotting argument passed to lattice
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
See Also
itemfit
Examples
## Not run:
set.seed(10)
N <- 1000
J <- 30
a <- matrix(1, J)
d <- matrix(rnorm(J))
Theta <- matrix(rnorm(N, 0, 1.5))
dat <- simdata(a, d, N, itemtype = '2PL', Theta=Theta)
ps2 <- exp(2 * Theta^2 + Theta + .5 * Theta^3) / (1 + exp(2 * Theta^2 + Theta + .5 * Theta^3))
itemGAM 77
# same as above, but with plausible values to obtain the standard errors
set.seed(4321)
ThetaPV <- fscores(mod, plausible.draws=10)
IG0 <- itemGAM(dat[,1], ThetaPV) #good item
IG1 <- itemGAM(baditems[,1], ThetaPV)
IG2 <- itemGAM(baditems[,2], ThetaPV)
plot(IG0)
plot(IG1)
plot(IG2)
# splines approach
Theta <- fscores(mod)
IG <- itemGAM(SAT12[,32], Theta)
plot(IG)
set.seed(1423)
ThetaPV <- fscores(mod, plausible.draws=10)
IG2 <- itemGAM(SAT12[,32], ThetaPV)
plot(IG2)
## End(Not run)
Description
Given an internal mirt item object extracted by using extract.item, compute the item information.
Usage
iteminfo(x, Theta, degrees = NULL, total.info = TRUE, multidim_matrix = FALSE)
Arguments
x an extracted internal mirt object containing item information (see extract.item)
Theta a vector (unidimensional) or matrix (multidimensional) of latent trait values
degrees a vector of angles in degrees that are between 0 and 90. Only applicable when
the input object is multidimensional
iteminfo 79
total.info logical; return the total information curve for the item? If FALSE, information
curves for each category are returned as a matrix
multidim_matrix
logical; compute the information matrix for each row in Theta? If Theta con-
tains more than 1 row then a list of matrices will be returned, otherwise if Theta
has exactly one row then a matrix will be returned
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
See Also
extract.item
Examples
## Not run:
# multidimensional
mod <- mirt(dat, 2, TOL=1e-2)
ii <- extract.item(mod, 1)
Theta <- as.matrix(expand.grid(-4:4, -4:4))
# information matrices
iteminfo(ii, Theta, multidim_matrix = TRUE)
iteminfo(ii, Theta[1, , drop=FALSE], multidim_matrix = TRUE)
## End(Not run)
Description
itemplot displays various item based IRT plots, with special options for plotting items that contain
several 0 slope parameters. Supports up to three dimensional models.
Usage
itemplot(
object,
item,
type = "trace",
degrees = 45,
CE = FALSE,
CEalpha = 0.05,
CEdraws = 1000,
drop.zeros = FALSE,
theta_lim = c(-6, 6),
shiny = FALSE,
rot = list(xaxis = -70, yaxis = 30, zaxis = 10),
par.strip.text = list(cex = 0.7),
npts = 200,
par.settings = list(strip.background = list(col = "#9ECAE1"), strip.border = list(col
= "black")),
auto.key = list(space = "right", points = FALSE, lines = TRUE),
...
)
Arguments
object a computed model object of class SingleGroupClass or MultipleGroupClass.
Input may also be a list for comparing similar item types (e.g., 1PL vs 2PL)
itemplot 81
item a single numeric value, or the item name, indicating which item to plot
type plot type to use, information ('info'), standard errors ('SE'), item trace lines
('trace'), cumulative probability plots to indicate thresholds ('threshold'),
information and standard errors ('infoSE') or information and trace lines ('infotrace'),
category and total information ('infocat'), relative efficiency lines ('RE'), ex-
pected score 'score', or information and trace line contours ('infocontour'
and 'tracecontour'; not supported for MultipleGroupClass objects)
degrees the degrees argument to be used if there are two or three factors. See iteminfo
for more detail. A new vector will be required for three dimensional models to
override the default
CE logical; plot confidence envelope?
CEalpha area remaining in the tail for confidence envelope. Default gives 95% confidence
region
CEdraws draws number of draws to use for confidence envelope
drop.zeros logical; drop slope values that are numerically close to zero to reduce dimen-
sionality? Useful in objects returned from bfactor or other confirmatory mod-
els that contain several zero slopes
theta_lim lower and upper limits of the latent trait (theta) to be evaluated, and is used in
conjunction with npts
shiny logical; run interactive display for item plots using the shiny interface. This pri-
marily is an instructive tool for demonstrating how item response curves behave
when adjusting their parameters
rot a list of rotation coordinates to be used for 3 dimensional plots
par.strip.text plotting argument passed to lattice
npts number of quadrature points to be used for plotting features. Larger values make
plots look smoother
par.settings plotting argument passed to lattice
auto.key plotting argument passed to lattice
... additional arguments to be passed to lattice and coef()
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
data(LSAT7)
fulldata <- expand.table(LSAT7)
82 key2binary
itemplot(mod1, 2)
itemplot(mod1, 2, CE = TRUE)
itemplot(mod1, 2, type = 'info')
itemplot(mod1, 2, type = 'info', CE = TRUE)
#multidimensional
itemplot(mod3, 4, type = 'info')
itemplot(mod3, 4, type = 'infocontour')
itemplot(mod3, 4, type = 'tracecontour')
#polytomous items
pmod <- mirt(Science, 1, SE=TRUE)
itemplot(pmod, 3)
itemplot(pmod, 3, type = 'threshold')
itemplot(pmod, 3, CE = TRUE)
itemplot(pmod, 3, type = 'score')
itemplot(pmod, 3, type = 'score', CE = TRUE)
itemplot(pmod, 3, type = 'infotrace')
itemplot(pmod, 3, type = 'infocat')
# infoSE plot
itemplot(pmod, 1, type = 'infoSE')
## End(Not run)
Description
The key2binary function will convert response pattern data to a dichotomous format, given a re-
sponse key.
Usage
key2binary(fulldata, key, score_missing = FALSE)
Arguments
fulldata an object of class data.frame, matrix, or table with the response patterns
key a vector or matrix consisting of the ’correct’ response to the items. Each value/row
corresponds to each column in fulldata. If the input is a matrix, multiple scor-
ing keys can be supplied for each item. NA values are used to indicate no scoring
key (or in the case of a matrix input, no additional scoring keys)
score_missing logical; should missing data elements be returned as incorrect (i.e., 0)? If FALSE,
all missing data terms will be kept as missing
Value
Returns a numeric matrix with all the response patterns in dichotomous format
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
data(SAT12)
head(SAT12)
key <- c(1,4,5,2,3,1,2,1,3,1,2,4,2,1,5,3,4,4,1,4,3,3,4,1,3,5,1,3,1,5,4,5)
"B","A","D","C","E",
"D","D","D","C","E",
"B","C","A","D","A"), ncol=5, byrow=TRUE))
Description
Lagrange (i.e., score) test to test whether parameters should be freed from a more constrained
baseline model.
Usage
lagrange(mod, parnum, SE.type = "Oakes", type = "Richardson", ...)
Arguments
mod an estimated model
parnum a vector, or list of vectors, containing one or more parameter locations/sets of
locations to be tested. See objects returned from mod2values for the locations
SE.type type of information matrix estimator to use. See mirt for further details
type type of numerical algorithm passed to numerical_deriv to obtain the gradient
terms
... additional arguments to pass to mirt
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
likert2int 85
See Also
wald
Examples
## Not run:
dat <- expand.table(LSAT7)
mod <- mirt(dat, 1, 'Rasch')
(values <- mod2values(mod))
# test slopes first two slopes and last three slopes jointly
lagrange(mod, list(parnum[1:2], parnum[3:5]))
## End(Not run)
Description
Given a matrix or data.frame object consisting of Likert responses return an object of the same
dimensions with integer values.
86 likert2int
Usage
likert2int(x, levels = NULL)
Arguments
x a matrix of character values or data.frame of character/factor vectors
levels a named character vector indicating which integer values should be assigned to
which elements. If omitted, the order of the elements will be determined after
converting each column in x to a factor variable
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
See Also
key2binary, poly2dich
Examples
## Not run:
#simulate data
# separately
intdat1 <- likert2int(dat1)
head(dat1)
head(intdat1)
# second data
lvl2 <- c('SD'=1, 'D'=2, 'N'=3, 'A'=4, 'SA'=5)
logLik-method 87
#####
# data.frame as input with ordered factors
for(i in 1:ncol(dat2))
levels(dat2[[i]]) <- c('SD', 'D', 'N', 'A', 'SA')
## End(Not run)
Description
Extract the observed-data log-likelihood.
Usage
## S4 method for signature 'SingleGroupClass'
logLik(object)
88 LSAT6
Arguments
object an object of class SingleGroupClass, MultipleGroupClass, or MixedClass
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
x <- mirt(Science, 1)
logLik(x)
## End(Not run)
Description
Data from Thissen (1982); contains 5 dichotomously scored items obtained from the Law School
Admissions Test, section 6.
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Thissen, D. (1982). Marginal maximum likelihood estimation for the one-parameter logistic model.
Psychometrika, 47, 175-186.
Examples
## Not run:
dat <- expand.table(LSAT6)
head(dat)
model <- 'F = 1-5
CONSTRAIN = (1-5, a1)'
(mod <- mirt(dat, model))
M2(mod)
itemfit(mod)
LSAT7 89
coef(mod, simplify=TRUE)
## End(Not run)
Description
Data from Bock & Lieberman (1970); contains 5 dichotomously scored items obtained from the
Law School Admissions Test, section 7.
Author(s)
References
Bock, R. D., & Lieberman, M. (1970). Fitting a response model for n dichotomously scored items.
Psychometrika, 35(2), 179-197.
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
dat <- expand.table(LSAT7)
head(dat)
(mod <- mirt(dat, 1))
coef(mod)
## End(Not run)
90 M2
Description
Computes the M2 (Maydeu-Olivares & Joe, 2006) statistic when all data are dichotomous, the
collapsed M2* statistic (collapsing over univariate and bivariate response categories; see Cai and
Hansen, 2013), and the hybrid C2 statistic which only collapses only the bivariate moments (Cai
and Monro, 2014). The C2 variant is mainly useful when polytomous response models do not
have sufficient degrees of freedom to compute M2*. This function also computes associated fit
indices that are based on fitting the null model. Supports single and multiple-group models. If the
latent trait density was approximated (e.g., Davidian curves, Empirical histograms, etc) then passing
use_dentype_estimate = TRUE will use the internally saved quadrature and density components
(where applicable).
Usage
M2(
obj,
type = "M2*",
calcNull = TRUE,
na.rm = FALSE,
quadpts = NULL,
theta_lim = c(-6, 6),
CI = 0.9,
residmat = FALSE,
QMC = FALSE,
suppress = 1,
...
)
Arguments
obj an estimated model object from the mirt package
type type of fit statistic to compute. Options are "M2", "M2*" for the univariate
and bivariate collapsed version of the M2 statistic ("M2" currently limited to
dichotomous response data only), and "C2" for a hybrid between M2 and M2*
where only the bivariate moments are collapsed
calcNull logical; calculate statistics for the null model as well? Allows for statistics such
as the limited information TLI and CFI. Only valid when items all have a suitable
null model (e.g., those created via createItem will not)
na.rm logical; remove rows with any missing values? The M2 family of statistics
requires a complete dataset in order to be well defined
quadpts number of quadrature points to use during estimation. If NULL, a suitable value
will be chosen based on the rubric found in fscores
M2 91
theta_lim lower and upper range to evaluate latent trait integral for each dimension
CI numeric value from 0 to 1 indicating the range of the confidence interval for
RMSEA. Default returns the 90% interval
residmat logical; return the residual matrix used to compute the SRMSR statistic? Only
the lower triangle of the residual correlation matrix will be returned (the upper
triangle is filled with NA’s)
QMC logical; use quasi-Monte Carlo integration? Useful for higher dimensional mod-
els. If quadpts not specified, 5000 nodes are used by default
suppress a numeric value indicating which parameter residual dependency combinations
to flag as being too high. Absolute values for the standardized residuals greater
than this value will be returned, while all values less than this value will be set
to NA. Must be used in conjunction with the argument residmat = TRUE
... additional arguments to pass
Value
Returns a data.frame object with the M2-type statistic, along with the degrees of freedom, p-value,
RMSEA (with 90% confidence interval), SRMSR for each group (if all items were ordinal), and
optionally the TLI and CFI model fit statistics if calcNull = TRUE.
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Cai, L. & Hansen, M. (2013). Limited-information goodness-of-fit testing of hierarchical item
factor models. British Journal of Mathematical and Statistical Psychology, 66, 245-276.
Cai, L. & Monro, S. (2014). A new statistic for evaluating item response theory models for ordinal
data. National Center for Research on Evaluation, Standards, & Student Testing. Technical Report.
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Maydeu-Olivares, A. & Joe, H. (2006). Limited information goodness-of-fit testing in multidimen-
sional contingency tables. Psychometrika, 71, 713-732.
Examples
## Not run:
dat <- as.matrix(expand.table(LSAT7))
(mod1 <- mirt(dat, 1))
M2(mod1)
M2(mod1, residmat=TRUE) #lower triangle of residual correlation matrix
# C2 statistic (useful when polytomous IRT models have too few df)
pmod <- mirt(Science, 1)
# This fails with too few df:
# M2(pmod)
# This, however, works:
M2(pmod, type = 'C2')
## End(Not run)
Description
Given an estimated model and a prior density function, compute the marginal reliability (Thissen
and Wainer, 2001). This is only available for unidimensional tests.
Usage
Arguments
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Thissen, D. and Wainer, H. (2001). Test Scoring. Lawrence Erlbaum Associates.
See Also
Examples
# marginal estimate
marginal_rxx(mod)
## Not run:
# empirical rxx the alternative way, given theta scores and SEs
fs <- fscores(mod, full.scores.SE=TRUE)
head(fs)
empirical_rxx(fs)
## End(Not run)
Description
Returns a matrix containing the MDIFF values (Reckase, 2009). Only supported for items of class
’dich’ and ’graded’.
Usage
MDIFF(x, which.items = NULL, group = NULL)
Arguments
x an object of class ’SingleGroupClass’, or an object of class ’MultipleGroup-
Class’ if a suitable group input were supplied
which.items a vector indicating which items to select. If NULL is used (the default) then
MDISC will be computed for all items
group group argument to pass to extract.group function. Required when the input
object is a multiple-group model
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
94 mdirt
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Reckase, M. D. (2009). Multidimensional Item Response Theory. Springer.
See Also
extract.group, MDISC
Examples
## Not run:
## End(Not run)
Description
mdirt fits a variety of item response models with discrete latent variables. These include, but
are not limited to, latent class analysis, multidimensional latent class models, multidimensional
discrete latent class models, DINA/DINO models, grade of measurement models, C-RUM, and so
on. If response models are not defined explicitly then customized models can defined using the
createItem function.
Usage
mdirt(
data,
model,
customTheta = NULL,
structure = NULL,
item.Q = NULL,
nruns = 1,
method = "EM",
covdata = NULL,
formula = NULL,
itemtype = "lca",
optimizer = "nlminb",
mdirt 95
return_max = TRUE,
group = NULL,
GenRandomPars = FALSE,
verbose = TRUE,
pars = NULL,
technical = list(),
...
)
Arguments
data a matrix or data.frame that consists of numerically ordered data, with missing
data coded as NA
model number of mutually exclusive classes to fit, or alternatively a more specific
mirt.model definition (which reflects the so-called Q-matrix). Note that when
using a mirt.model, the order with which the syntax factors/attributes are de-
fined are associated with the columns in the customTheta input
customTheta input passed to technical = list(customTheta = ...), but is included di-
rectly in this function for convenience. This input is most interesting for dis-
crete latent models because it allows customized patterns of latent classes (i.e.,
defines the possible combinations of the latent attribute profile). The default
builds the pattern customTheta = diag(model), which is the typical pattern for
the traditional latent class analysis whereby class membership mutually distinct
and exhaustive. See thetaComb for a quick method to generate a matrix with all
possible combinations
structure an R formula allowing the profile probability patterns (i.e., the structural com-
ponent of the model) to be fitted according to a log-linear model. When NULL,
all profile probabilities (except one) will be estimated. Use of this input requires
that the customTheta input is supplied, and that the column names in this matrix
match the names found within this formula
item.Q a list of item-level Q-matrices indicating how the respective categories should
be modeled by the underlying attributes. Each matrix must represent a Ki × A
matrix, where Ki represents the number of categories for the ith item, and A is
the number of attributes included in the Theta matrix; otherwise, a value ofNULL
will default to a matrix consisting of 1’s for each Ki × A element except for the
first row, which contains only 0’s for proper identification. Incidentally, the first
row of each matrix must contain only 0’s so that the first category represents the
reference category for identification
nruns a numeric value indicating how many times the model should be fit to the data
when using random starting values. If greater than 1, GenRandomPars is set to
true by default
method estimation method. Can be ’EM’ or ’BL’ (see mirt for more details)
covdata a data.frame of data used for latent regression models
formula an R formula (or list of formulas) indicating how the latent traits can be regressed
using external covariates in covdata. If a named list of formulas is supplied
(where the names correspond to the latent trait/attribute names in model) then
96 mdirt
specific regression effects can be estimated for each factor. Supplying a single
formula will estimate the regression parameters for all latent variables by default
itemtype a vector indicating the itemtype associated with each item. For discrete models
this is limited to only ’lca’ or items defined using a createItem definition
optimizer optimizer used for the M-step, set to 'nlminb' by default. See mirt for more
details
return_max logical; when nruns > 1, return the model that has the most optimal maximum
likelihood criteria? If FALSE, returns a list of all the estimated objects
group a factor variable indicating group membership used for multiple group analyses
GenRandomPars logical; use random starting values
verbose logical; turn on messages to the R console
pars used for modifying starting values; see mirt for details
technical list of lower-level inputs. See mirt for details
... additional arguments to be passed to the estimation engine. See mirt for more
details and examples
Details
Posterior classification accuracy for each response pattern may be obtained via the fscores func-
tion. The summary() function will display the category probability values given the class member-
ship, which can also be displayed graphically with plot(), while coef() displays the raw coeffi-
cient values (and their standard errors, if estimated). Finally, anova() is used to compare nested
models, while M2 and itemfit may be used for model fitting purposes.
exp(a1θ1 + a2θ2 )
P (x = k|θ1 , θ2 , a1, a2) = PK
j exp(a1θ1 + a2θ2 )
where the θ values generally take on discrete points (such as 0 or 1). For proper identification, the
first category slope parameters (a1 and a2) are never freely estimated. Alternatively, supplying a
different grid of θ values will allow the estimation of similar models (multidimensional discrete
models, grade of membership, etc.). See the examples below.
When the item.Q for is utilized, the above equation can be understood as
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29.
Proctor, C. H. (1970). A probabilistic formulation and statistical analysis for Guttman scaling.
Psychometrika, 35, 73-78. doi: 10.18637/jss.v048.i06
See Also
thetaComb, fscores, mirt.model, M2, itemfit, boot.mirt, mirtCluster, wald, coef-method,
summary-method, anova-method, residuals-method
Examples
#LSAT6 dataset
dat <- expand.table(LSAT6)
table(class_max)
#--------------------------
# Grade of measurement model
#-----------------
# Multidimensional discrete latent class model
#-----------------
### DINA model example
# generate some suitable data for a two dimensional DINA application
# (first columns are intercepts)
set.seed(1)
Theta <- expand.table(matrix(c(1,0,0,0,
1,1,0,0,
1,0,1,0,
1,1,1,1), 4, 4, byrow=TRUE),
freq = c(200,200,100,500))
mdirt 99
a <- matrix(c(rnorm(15, -1.5, .5), rlnorm(5, .2, .3), numeric(15), rlnorm(5, .2, .3),
numeric(15), rlnorm(5, .2, .3)), 15, 4)
summary(CRUM)
# good fit, but over-saturated (main effects for items 11-15 can be set to 0)
M2(CRUM)
#------------------
#multidimensional latent class model
#------------------
# multiple group with constrained group probabilities
dat <- key2binary(SAT12,
key = c(1,4,5,2,3,1,2,1,3,1,2,4,2,1,5,3,4,4,1,4,3,3,4,1,3,5,1,3,1,5,4,5))
group <- rep(c('G1', 'G2'), each = nrow(SAT12)/2)
Theta <- diag(2)
# the latent class parameters are technically located in the (nitems + 1) location
model <- mirt.model('A1 = 1-32
A2 = 1-32
CONSTRAINB = (33, c1)')
mod <- mdirt(dat, model, group = group, customTheta = Theta)
coef(mod, simplify=TRUE)
summary(mod)
#------------------
# Probabilistic Guttman Model (Proctor, 1970)
# example analysis can also be found in the sirt package (see ?prob.guttman)
data(data.read, package = 'sirt')
head(data.read)
MDISC 101
M2(mod)
itemfit(mod)
## End(Not run)
Description
Returns a vector containing the MDISC values for each item in the model input object (Reckase,
2009).
Usage
MDISC(x, group = NULL)
Arguments
x an object of class ’SingleGroupClass’, or an object of class ’MultipleGroup-
Class’ if a suitable group input were supplied
group group argument to pass to extract.group function. Required when the input
object is a multiple-group model
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Reckase, M. D. (2009). Multidimensional Item Response Theory. Springer.
102 mirt
See Also
extract.group
Examples
## Not run:
## End(Not run)
Description
mirt fits a maximum likelihood (or maximum a posteriori) factor analysis model to any mixture
of dichotomous and polytomous data under the item response theory paradigm using either Cai’s
(2010) Metropolis-Hastings Robbins-Monro (MHRM) algorithm, with an EM algorithm approach
outlined by Bock and Aiken (1981) using rectangular or quasi-Monte Carlo integration grids, or
with the stochastic EM (i.e., the first two stages of the MH-RM algorithm). Models containing
’explanatory’ person or item level predictors can only be included by using the mixedmirt function,
though latent regression models can be fit using the formula input in this function. Tests that
form a two-tier or bi-factor structure should be estimated with the bfactor function, which uses a
dimension reduction EM algorithm for modeling item parcels. Multiple group analyses (useful for
DIF and DTF testing) are also available using the multipleGroup function.
Usage
mirt(
data,
model,
itemtype = NULL,
guess = 0,
upper = 1,
SE = FALSE,
covdata = NULL,
formula = NULL,
SE.type = "Oakes",
method = "EM",
optimizer = NULL,
dentype = "Gaussian",
pars = NULL,
constrain = NULL,
mirt 103
parprior = NULL,
calcNull = FALSE,
draws = 5000,
survey.weights = NULL,
quadpts = NULL,
TOL = NULL,
gpcm_mats = list(),
grsm.block = NULL,
rsm.block = NULL,
monopoly.k = 1L,
key = NULL,
large = FALSE,
GenRandomPars = FALSE,
accelerate = "Ramsay",
verbose = TRUE,
solnp_args = list(),
nloptr_args = list(),
spline_args = list(),
control = list(),
technical = list(),
...
)
Arguments
data a matrix or data.frame that consists of numerically ordered data, with missing
data coded as NA (to convert from an ordered factor data.frame see data.matrix)
model a string to be passed (or an object returned from) mirt.model, declaring how the
IRT model is to be estimated (loadings, constraints, priors, etc). For exploratory
IRT models, a single numeric value indicating the number of factors to extract
is also supported
itemtype type of items to be modeled, declared as a vector for each item or a single value
which will be recycled for each item. The NULL default assumes that the items
follow a graded or 2PL structure, however they may be changed to the following:
• 'Rasch' - Rasch/partial credit model by constraining slopes to 1 and freely
estimating the variance parameters (alternatively, can be specified by ap-
plying equality constraints to the slope parameters in 'gpcm'; Rasch, 1960)
• '2PL', '3PL', '3PLu', and '4PL' - 2-4 parameter logistic model, where
3PL estimates the lower asymptote only while 3PLu estimates the upper
asymptote only (Lord and Novick, 1968; Lord, 1980)
• 'graded' - graded response model (Samejima, 1969)
• 'grsm' - graded ratings scale model in the classical IRT parameterization
(restricted to unidimensional models; Muraki, 1992)
• 'gpcm' and 'gpcmIRT' - generalized partial credit model in the slope-
intercept and classical parameterization. 'gpcmIRT' is restricted to uni-
dimensional models. Note that optional scoring matrices for 'gpcm' are
available with the gpcm_mats input (Muraki, 1992)
104 mirt
• 'rsm' - Rasch rating scale model using the 'gpcmIRT' structure (unidi-
mensional only; Andrich, 1978)
• 'nominal' - nominal response model (Bock, 1972)
• 'ideal' - dichotomous ideal point model (Maydeu-Olivares, 2006)
• 'ggum' - generalized graded unfolding model (Roberts, Donoghue, & Laugh-
lin, 2000) and its multidimensional extension
• 'sequential' - multidimensional sequential response model (Tutz, 1990)
in slope-intercept form
• 'Tutz' - same as the 'sequential' itemtype, except the slopes are fixed to
1 and the latent variance terms are freely estimated (similar to the 'Rasch'
itemtype input)
• 'PC2PL' and 'PC3PL' - 2-3 parameter partially compensatory model. Note
that constraining the slopes to be equal across items will reduce the model
to Embretson’s (a.k.a. Whitely’s) multicomponent model (1980).
• '2PLNRM', '3PLNRM', '3PLuNRM', and '4PLNRM' - 2-4 parameter nested
logistic model, where 3PLNRM estimates the lower asymptote only while
3PLuNRM estimates the upper asymptote only (Suh and Bolt, 2010)
• 'spline' - spline response model with the bs (default) or the ns function
(Winsberg, Thissen, and Wainer, 1984)
• 'monopoly' - monotonic polynomial model for unidimensional tests for
dichotomous and polytomous response data (Falk and Cai, 2016)
Additionally, user defined item classes can also be defined using the createItem
function
guess fixed pseudo-guessing parameters. Can be entered as a single value to assign a
global guessing parameter or may be entered as a numeric vector corresponding
to each item
upper fixed upper bound parameters for 4-PL model. Can be entered as a single value
to assign a global guessing parameter or may be entered as a numeric vector
corresponding to each item
SE logical; estimate the standard errors by computing the parameter information
matrix? See SE.type for the type of estimates available
covdata a data.frame of data used for latent regression models
formula an R formula (or list of formulas) indicating how the latent traits can be regressed
using external covariates in covdata. If a named list of formulas is supplied
(where the names correspond to the latent trait names in model) then specific
regression effects can be estimated for each factor. Supplying a single formula
will estimate the regression parameters for all latent traits by default
SE.type type of estimation method to use for calculating the parameter information ma-
trix for computing standard errors and wald tests. Can be:
• 'Richardson', 'forward', or 'central' for the numerical Richardson,
forward difference, and central difference evaluation of observed Hessian
matrix
• 'crossprod' and 'Louis' for standard error computations based on the
variance of the Fisher scores as well as Louis’ (1982) exact computation of
the observed information matrix. Note that Louis’ estimates can take a long
time to obtain for large sample sizes and long tests
mirt 105
parprior a list of user declared prior item probabilities. To see how to define the pa-
rameters correctly use pars = 'values' initially to see how the parameters are
labeled. Can define either normal (e.g., intercepts, lower/guessing and upper
bounds), log-normal (e.g., for univariate slopes), or beta prior probabilities. To
specify a prior the form is c(’priortype’, ...), where normal priors are parprior =
list(c(parnumbers,'norm',mean,sd)), parprior = list(c(parnumbers,'lnorm',log_mean,log_
for log-normal, and parprior = list(c(parnumbers,'beta',alpha,beta))
for beta, and parprior = list(c(parnumbers,'expbeta',alpha,beta)) for
the beta distribution after applying the function plogis to the input value (note,
this is specifically for applying a beta prior to the lower/upper-bound parame-
ters in 3/4PL models). Priors can also be specified using mirt.model syntax
(recommended)
calcNull logical; calculate the Null model for additional fit statistics (e.g., TLI)? Only
applicable if the data contains no NA’s and the data is not overly sparse
draws the number of Monte Carlo draws to estimate the log-likelihood for the MH-RM
algorithm. Default is 5000
survey.weights a optional numeric vector of survey weights to apply for each case in the data
(EM estimation only). If not specified, all cases are weighted equally (the stan-
dard IRT approach). The sum of the survey.weights must equal the total sam-
ple size for proper weighting to be applied
quadpts number of quadrature points per dimension (must be larger than 2). By default
the number of quadrature uses the following scheme: switch(as.character(nfact),'1'=61,'2'=31,'
However, if the method input is set to 'QMCEM' and this argument is left blank
then the default number of quasi-Monte Carlo integration nodes will be set to
5000 in total
TOL convergence threshold for EM or MH-RM; defaults are .0001 and .001. If
SE.type = 'SEM' and this value is not specified, the default is set to 1e-5. To
evaluate the model using only the starting values pass TOL = NaN, and to evaluate
the starting values without the log-likelihood pass TOL = NA
gpcm_mats a list of matrices specifying how the scoring coefficients in the (generalized)
partial credit model should be constructed. If omitted, the standard gpcm format
will be used (i.e., seq(0,k,by = 1) for each trait). This input should be used if
traits should be scored different for each category (e.g., matrix(c(0:3,1,0,0,0),4,2)
for a two-dimensional model where the first trait is scored like a gpcm, but the
second trait is only positively indicated when the first category is selected). Can
be used when itemtypes are 'gpcm' or 'Rasch', but only when the respective
element in gpcm_mats is not NULL
grsm.block an optional numeric vector indicating where the blocking should occur when
using the grsm, NA represents items that do not belong to the grsm block (other
items that may be estimated in the test data). For example, to specify two blocks
of 3 with a 2PL item for the last item: grsm.block = c(rep(1,3),rep(2,3),NA).
If NULL the all items are assumed to be within the same group and therefore
have the same number of item categories
rsm.block same as grsm.block, but for 'rsm' blocks
monopoly.k a vector of values (or a single value to repeated for each item) which indicate
the degree of the monotone polynomial fitted, where the monotone polynomial
108 mirt
This code input changes the bs() splines function to have a degree = 4 input,
while the second element changes to the ns() function with knots set a c(-2,2)
control a list passed to the respective optimizers (i.e., optim(), nlminb(), etc). Ad-
ditional arguments have been included for the 'NR' optimizer: 'tol' for the
convergence tolerance in the M-step (default is TOL/1000), while the default
number of iterations for the Newton-Raphson optimizer is 50 (modified with the
'maxit' control input)
technical a list containing lower level technical parameters for estimation. May be:
NCYCLES maximum number of EM or MH-RM cycles; defaults are 500 and
2000
MAXQUAD maximum number of quadratures, which you can increase if you
have more than 4GB or RAM on your PC; default 20000
theta_lim range of integration grid for each dimension; default is c(-6,6)
set.seed seed number used during estimation. Default is 12345
SEtol standard error tolerance criteria for the S-EM and MHRM computation
of the information matrix. Default is 1e-3
symmetric logical; force S-EM/Oakes information matrix estimates to be sym-
metric? Default is TRUE so that computation of standard errors are more
stable. Setting this to FALSE can help to detect solutions that have not
reached the ML estimate
SEM_window ratio of values used to define the S-EM window based on the
observed likelihood differences across EM iterations. The default is c(0,1
-SEtol), which provides nearly the very full S-EM window (i.e., nearly all
EM cycles used). To use the a smaller SEM window change the window to
to something like c(.9,.999) to start at a point farther into the EM history
warn logical; include warning messages during estimation? Default is TRUE
message logical; include general messages during estimation? Default is TRUE
customK a numeric vector used to explicitly declare the number of response
categories for each item. This should only be used when constructing mirt
model for reasons other than parameter estimation (such as to obtain factor
scores), and requires that the input data all have 0 as the lowest category.
The format is the same as the extract.mirt(mod,'K') slot in all con-
verged models
customPriorFun a custom function used to determine the normalized density
for integration in the EM algorithm. Must be of the form function(Theta,Etable){...},
and return a numeric vector with the same length as number of rows in
Theta. The Etable input contains the aggregated table generated from the
current E-step computations. For proper integration, the returned vector
should sum to 1 (i.e., normalized). Note that if using the Etable it will be
NULL on the first call, therefore the prior will have to deal with this issue
accordingly
zeroExtreme logical; assign extreme response patterns a survey.weight of
0 (formally equivalent to removing these data vectors during estimation)?
When dentype = 'EHW', where Woods’ extrapolation is utilized, this op-
tion may be required if the extrapolation causes expected densities to tend
towards positive or negative infinity. The default is FALSE
110 mirt
customTheta a custom Theta grid, in matrix form, used for integration. If not
defined, the grid is determined internally based on the number of quadpts
delta the deviation term used in numerical estimates when computing the ACOV
matrix with the ’forward’ or ’central’ numerical approaches, as well as
Oakes’ method with the Richardson extrapolation. Default is 1e-5
parallel logical; use the parallel cluster defined by mirtCluster? Default is
TRUE
internal_constraints logical; include the internal constraints when using cer-
tain IRT models (e.g., ’grsm’ itemtype). Disable this if you want to use
special optimizers such as the solnp. Default is TRUE
gain a vector of two values specifying the numerator and exponent values for
the RM gain function (val1/cycle)v al2. Default is c(0.10,0.75)
BURNIN number of burn in cycles (stage 1) in MH-RM; default is 150
SEMCYCLES number of SEM cycles (stage 2) in MH-RM; default is 100
MHDRAWS number of Metropolis-Hasting draws to use in the MH-RM at
each iteration; default is 5
MHcand a vector of values used to tune the MH sampler. Larger values will
cause the acceptance ratio to decrease. One value is required for each group
in unconditional item factor analysis (mixedmirt() requires additional val-
ues for random effect). If null, these values are determined internally, at-
tempting to tune the acceptance of the draws to be between .1 and .4
MHRM_SE_draws number of fixed draws to use when SE=TRUE and SE.type
= 'FMHRM' and the maximum number of draws when SE.type = 'MHRM'.
Default is 2000
MCEM_draws a function used to determine the number of quadrature points
to draw for the 'MCEM' method. Must include one argument which indicates
the iteration number of the EM cycle. Default is function(cycles) 500 +
(cycles -1)*2, which starts the number of draws at 500 and increases by
2 after each full EM iteration
info_if_converged logical; compute the information matrix when using the
MH-RM algorithm only if the model converged within a suitable number
of iterations? Default is TRUE
logLik_if_converged logical; compute the observed log-likelihood when us-
ing the MH-RM algorithm only if the model converged within a suitable
number of iterations? Default is TRUE
keep_vcov_PD logical; attempt to keep the variance-covariance matrix of the
latent traits positive definite during estimation in the EM algorithm? This
generally improves the convergence properties when the traits are highly
correlated. Default is TRUE
... additional arguments to be passed
Value
0.25) then the model may either be ill defined or have a very flat likelihood surface, and genuine
maximum-likelihood parameter estimates may be difficult to find. Standard errors are computed
following the model convergence by passing SE = TRUE, to perform an addition MH-RM stage but
treating the maximum-likelihood estimates as fixed points.
mirt.model Define the IRT model specification use special syntax. Useful for defining between
and within group parameter constraints, prior parameter distributions, and specifying the slope
coefficients for each factor
coef-method Extract raw coefficients from the model, along with their standard errors and confi-
dence intervals
summary-method Extract standardized loadings from model. Accepts a rotate argument for ex-
ploratory item response model
anova-method Compare nested models using likelihood ratio statistics as well as information cri-
teria such as the AIC and BIC
residuals-method Compute pairwise residuals between each item using methods such as the LD
statistic (Chen & Thissen, 1997), as well as response pattern residuals
plot-method Plot various types of test level plots including the test score and information func-
tions and more
itemplot Plot various types of item level plots, including the score, standard error, and information
functions, and more
createItem Create a customized itemtype that does not currently exist in the package
imputeMissing Impute missing data given some computed Theta matrix
fscores Find predicted scores for the latent traits using estimation methods such as EAP, MAP,
ML, WLE, and EAPsum
wald Compute Wald statistics follow the convergence of a model with a suitable information matrix
M2 Limited information goodness of fit test statistic based to determine how well the model fits the
data
itemfit and personfit Goodness of fit statistics at the item and person levels, such as the S-X2,
infit, outfit, and more
boot.mirt Compute estimated parameter confidence intervals via the bootstrap methods
mirtCluster Define a cluster for the package functions to use for capitalizing on multi-core ar-
chitecture to utilize available CPUs when possible. Will help to decrease estimation times for
tasks that can be run in parallel
IRT Models
The parameter labels use the follow convention, here using two factors and K as the total number
of categories (using k for specific category instances).
mirt 113
Rasch Only one intercept estimated, and the latent variance of θ is freely estimated. If the data
have more than two categories then a partial credit model is used instead (see ’gpcm’ below).
1
P (x = 1|θ, d) =
1 + exp(−(θ + d))
(u − g)
P (x = 1|θ, ψ) = g +
1 + exp(−(a1 ∗ θ1 + a2 ∗ θ2 + d))
For the partial credit model (when itemtype = 'Rasch'; unidimensional only) the above
model is further constrained so that ak = (0, 1, . . . , K − 1), a1 = 1, and the latent variance of
θ1 is freely estimated. Alternatively, the partial credit model can be obtained by containing all
the slope parameters in the gpcms to be equal. More specific scoring function may be included
by passing a suitable list or matrices to the gpcm_mats input argument.
In the nominal model this parametrization helps to identify the empirical ordering of the cat-
egories by inspecting the ak values. Larger values indicate that the item category is more
positively related to the latent trait(s) being measured. For instance, if an item was truly
ordinal (such as a Likert scale), and had 4 response categories, we would expect to see
ak0 < ak1 < ak2 < ak3 following estimation. If on the other hand ak0 > ak1 then it
would appear that the second category is less related to to the trait than the first, and therefore
the second category should be understood as the ’lowest score’.
NOTE: The nominal model can become numerical unstable if poor choices for the high and
low values are chosen, resulting in ak values greater than abs(10) or more. It is recommended
to choose high and low anchors that cause the estimated parameters to fall between 0 and
K − 1 either by theoretical means or by re-estimating the model with better values following
convergence.
gpcmIRT and rsm The gpcmIRT model is the classical generalized partial credit model for unidi-
mensional response data. It will obtain the same fit as the gpcm presented above, however the
parameterization allows for the Rasch/generalized rating scale model as a special case.
E.g., for a K = 4 category response model,
114 mirt
P (x = 0|θ, ψ) = exp(1)/G
G = exp(1)+exp(1+a(θ−b1)+c)+exp(1+a(2θ−b1−b2)+2c)+exp(1+a(3θ−b1−b2−b3)+3c)
Here a is the slope parameter, the b parameters are the threshold values for each adjacent cate-
gory, and c is the so-called difficulty parameter when a rating scale model is fitted (otherwise,
c = 0 and it drops out of the computations).
The gpcmIRT can be constrained to the partial credit IRT model by either constraining all the
slopes to be equal, or setting the slopes to 1 and freeing the latent variance parameter.
Finally, the rsm is a more constrained version of the (generalized) partial credit model where
the spacing is equal across item blocks and only adjusted by a single ’difficulty’ parameter (c).
Note that this is analogous to the relationship between the graded model and the grsm (with
an additional constraint regarding the fixed discrimination parameters).
sequential/Tutz The multidimensional sequential response model has the form
Y
P (x = k|θ, ψ) = (1 − F (a1 θ1 + a2 θ2 + dsk ))F (a1 θ1 + a2 θ2 + djk )
where F (·) is the cumulative logistic function. The Tutz variant of this model (Tutz, 1990)
(via itemtype = 'Tutz') assumes that the slope terms are all equal to 1 and the latent variance
terms are estimated (i.e., is a Rasch variant).
ideal The ideal point model has the form, with the upper bound constraint on d set to 0:
partcomp Partially compensatory models consist of the product of 2PL probability curves.
1 1
P (x = 1|θ, ψ) = g + (1 − g)( ∗ )
1 + exp(−(a1 ∗ θ1 + d1 )) 1 + exp(−(a2 ∗ θ2 + d2 ))
Note that constraining the slopes to be equal across items will reduce the model to Embretson’s
(a.k.a. Whitely’s) multicomponent model (1980).
2-4PLNRM Nested logistic curves for modeling distractor items. Requires a scoring key. The
model is broken into two components for the probability of endorsement. For successful
endorsement the probability trace is the 1-4PL model, while for unsuccessful endorsement:
which is the product of the complement of the dichotomous trace line with the nominal re-
sponse model. In the nominal model, the slope parameters defined above are constrained to
be 1’s, while the last value of the ak is freely estimated.
mirt 115
ggum The (multidimensional) generalized graded unfolding model is a class of ideal point models
useful for ordinal response data. The form is
q qP
PD 2 (θ 2 +
Pz D 2 2
exp z a
d=1 id jd − bid ) ψ
k=0 ik + exp (M − z) d=1 aid (θjd − bid )
P (z = k|θ, ψ) = qP qP
PC D 2 (θ 2 +
Pz D 2
w=0 exp w a
d=1 id jd − b id ) k=0 ψ ik + exp (M − w) d=1 aid (θjd − b
where θjd is the location of the jth individual on the dth dimension, bid is the difficulty location
of the ith item on the dth dimension, aid is the discrimination of the jth individual on the dth
dimension (where the discrimination values are constrained to be positive), ψik is the kth
subjective response category threshold for the ith item,
PD assumed to be symmetric about the
item and constant across dimensions, where ψik = d=1 aid tik z = 1, 2, . . . , C (where C is
the number of categories minus 1), and M = 2C + 1.
spline Spline response models attempt to model the response curves uses non-linear and potentially
non-monotonic patterns. The form is
1
P (x = 1|θ, η) =
1 + exp(−(η1 ∗ X1 + η2 ∗ X2 + · · · + ηn ∗ Xn ))
where the Xn are from the spline design matrix X organized from the grid of θ values. B-
splines with a natural or polynomial basis are supported, and the intercept input is set to
TRUE by default.
monopoly Monotone polynomial model for polytomous response data of the form
Pk
exp( 1 (m∗ (ψ) + ξc−1 )
P (x = k|θ, ψ) = PC PK ∗
1 exp( 1 (m (ψ) + ξc−1 ))
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Andrich, D. (1978). A rating scale formulation for ordered response categories. Psychometrika, 43,
561-573.
Bock, R. D., & Aitkin, M. (1981). Marginal maximum likelihood estimation of item parameters:
Application of an EM algorithm. Psychometrika, 46(4), 443-459.
Bock, R. D., Gibbons, R., & Muraki, E. (1988). Full-Information Item Factor Analysis. Applied
Psychological Measurement, 12(3), 261-280.
Bock, R. D. & Lieberman, M. (1970). Fitting a response model for n dichotomously scored items.
Psychometrika, 35, 179-197.
116 mirt
Tutz, G. (1990). Sequential item response models with ordered response. British Journal of Math-
ematical and Statistical Psychology, 43, 39-55.
Varadhan, R. & Roland, C. (2008). Simple and Globally Convergent Methods for Accelerating the
Convergence of Any EM Algorithm. Scandinavian Journal of Statistics, 35, 335-353.
Whitely, S. E. (1980). Multicomponent latent trait models for ability tests. Psychometrika, 45(4),
470-494.
Wood, R., Wilson, D. T., Gibbons, R. D., Schilling, S. G., Muraki, E., & Bock, R. D. (2003).
TESTFACT 4 for Windows: Test Scoring, Item Statistics, and Full-information Item Factor Analysis
[Computer software]. Lincolnwood, IL: Scientific Software International.
Woods, C. M., and Lin, N. (2009). Item Response Theory With Estimation of the Latent Density
Using Davidian Curves. Applied Psychological Measurement,33(2), 102-117.
See Also
bfactor, multipleGroup, mixedmirt, expand.table, key2binary, mod2values, extract.item,
iteminfo, testinfo, probtrace, simdata, averageMI, fixef, extract.mirt
Examples
## Not run:
(mod2 <- mirt(data, 1, SE = TRUE)) #standard errors via the Oakes method
(mod2 <- mirt(data, 1, SE = TRUE, SE.type = 'SEM')) #standard errors with SEM method
coef(mod2)
(mod3 <- mirt(data, 1, SE = TRUE, SE.type = 'Richardson')) #with numerical Richardson method
residuals(mod1)
plot(mod1) #test score function
plot(mod1, type = 'trace') #trace lines
plot(mod2, type = 'info') #test information
plot(mod2, MI=200) #expected total score with 95% confidence intervals
#internally g and u pars are stored as logits, so usually a good idea to include normal prior
# to help stabilize the parameters. For a value around .182 use a mean
# of -1.5 (since 1 / (1 + exp(-(-1.5))) == .182)
model <- 'F = 1-5
PRIOR = (5, g, norm, -1.5, 3)'
mod1.3PL.norm <- mirt(data, model, itemtype = c('2PL', '2PL', '2PL', '2PL', '3PL'))
118 mirt
coef(mod1.3PL.norm)
#limited information fit statistics
M2(mod1.3PL.norm)
#confirmatory (as an example, model is not identified since you need 3 items per factor)
# Two ways to define a confirmatory model: with mirt.model, or with a string
###########
#data from the 'ltm' package in numeric format
pmod1 <- mirt(Science, 1)
plot(pmod1)
plot(pmod1, type = 'trace')
plot(pmod1, type = 'itemscore')
summary(pmod1)
#Constrain all slopes to be equal with the constrain = list() input or mirt.model() syntax
#first obtain parameter index
values <- mirt(Science,1, pars = 'values')
values #note that slopes are numbered 1,5,9,13, or index with values$parnum[values$name == 'a1']
(pmod1_equalslopes <- mirt(Science, 1, constrain = list(c(1,5,9,13))))
mirt 119
coef(pmod1_equalslopes)
coef(pmod1_equalslopes)
anova(pmod1_equalslopes, pmod1) #significantly worse fit with almost all criteria
#for the nominal model the lowest and highest categories are assumed to be the
# theoretically lowest and highest categories that related to the latent trait(s)
(nomod <- mirt(Science, 1, 'nominal'))
coef(nomod) #ordering of ak values suggest that the items are indeed ordinal
anova(gpcmod, nomod)
itemplot(nomod, 3)
###########
#empirical dimensionality testing that includes 'guessing'
data(SAT12)
120 mirt
#same as above, but using the QMCEM method for generally better accuracy in mod3
mod3 <- mirt(data, 3, method = 'QMCEM', TOL = .001, optimizer = 'NR')
anova(mod2, mod3)
###########
#graded rating scale example
###########
# 2PL nominal response model example (Suh and Bolt, 2010)
data(SAT12)
SAT12[SAT12 == 8] <- NA #set 8 as a missing value
head(SAT12)
#test information
plot(Theta, testinfo(mod2, Theta), type = 'l', main = 'Test information', ylab = 'Information')
lines(Theta, testinfo(mod0, Theta), col = 'red')
###########
# using the MH-RM algorithm
data(LSAT7)
fulldata <- expand.table(LSAT7)
(mod1 <- mirt(fulldata, 1, method = 'MHRM'))
#Confirmatory models
#simulate data
a <- matrix(c(
1.5,NA,
0.5,NA,
1.0,NA,
1.0,0.5,
NA,1.5,
NA,0.5,
NA,1.0,
NA,1.0),ncol=2,byrow=TRUE)
d <- matrix(c(
-1.0,NA,NA,
-1.5,NA,NA,
1.5,NA,NA,
0.0,NA,NA,
3.0,2.0,-0.5,
2.5,1.0,-1,
2.0,0.0,NA,
122 mirt
1.0,NA,NA),ncol=3,byrow=TRUE)
#analyses
#CIFA for 2 factor crossed structure
#####
#bifactor
model.3 <- '
G = 1-8
F1 = 1-4
F2 = 5-8'
#####
#polynomial/combinations
data(SAT12)
data <- key2binary(SAT12,
key = c(1,4,5,2,3,1,2,1,3,1,2,4,2,1,5,3,4,4,1,4,3,3,4,1,3,5,1,3,1,5,4,5))
#####
# non-linear parameter constraints with Rsolnp package (nloptr supported as well):
# Find Rasch model subject to the constraint that the intercepts sum to 0
#constraint: create function for solnp to compute constraint, and declare value in eqB
eqfun <- function(p, optim_args) sum(p[1:5]) #could use browser() here, if it helps
LB <- c(rep(-15, 6), 1e-4) # more reasonable lower bound for variance term
124 mirt
#######
# latent regression Rasch model
#simulate data
set.seed(1234)
N <- 1000
# covariates
X1 <- rnorm(N); X2 <- rnorm(N)
covdata <- data.frame(X1, X2)
Theta <- matrix(0.5 * X1 + -1 * X2 + rnorm(N, sd = 0.5))
############
# Example using Gauss-Hermite quadrature with custom input functions
mirt.model 125
library(fastGHQuad)
data(SAT12)
data <- key2binary(SAT12,
key = c(1,4,5,2,3,1,2,1,3,1,2,4,2,1,5,3,4,4,1,4,3,3,4,1,3,5,1,3,1,5,4,5))
GH <- gaussHermiteData(50)
Theta <- matrix(GH$x)
############
# Davidian curve example
## End(Not run)
Description
The mirt.model function scans/reads user input to specify the confirmatory model. Item locations
must be used in the specifications if no itemnames argument is supplied. This is called implicitly
by estimation functions when a string is passed to the model argument.
Usage
mirt.model(
input = NULL,
itemnames = NULL,
file = "",
COV = NULL,
quiet = TRUE,
...
)
Arguments
input input for writing out the model syntax. Can either be a string declaration of class
character or the so-called Q-matrix or class matrix that specifies the model ei-
ther with integer or logical values. If the Q-matrix method is chosen covariances
terms can be specified with the COV input
itemnames a character vector or factor indicating the item names. If a data.frame or matrix
object is supplied the names will be extracted using colnames(itemnames).
Supplying this input allows the syntax to be specified with the raw item names
rather than item locations
file a input specifying an external file that declares the input.
COV a symmetric, logical matrix used to declare which covariance terms are esti-
mated
quiet logical argument passed to scan() to suppress console read message
... additional arguments for scan()
Details
Factors are first named and then specify which numerical items they affect (i.e., where the slope is
not equal to 0), separated either by commas or by - to indicate a range of items. Products between
factors may be specified by enclosing the left hand term within brackets. To finish the declaration
of a model simply enter a blank line with only a carriage return (i.e., the ’enter’ or ’return’ key), or
instead read in an input version of the model syntax. The associated slopes throughout the package
label these coefficients as a1,a2,...,ak, where the associated number is assigned according to the
respective order of the defined factors.
For example, if the syntax were
"G = 1-10 F = 1-5 A = 6-10"
then the G factor would be assigned the slopes a1 for each item, F assigned the slopes a2, and A
assigned the slopes a3. The same principle applies to the bfactor function whereby the slopes are
automatically included for the specific factors after the general factor structure has been assigned.
mirt.model 127
There is an optional keyword for specifying the correlation between relationships between factors
called COV, and non-linear factor products can be included by enclosing the product combination on
the left hand side of the declaration (e.g., (F1*F1) would create a quadratic factor for F1).
The keywords CONSTRAIN,CONSTRAINB,PRIOR,FIXED,FREE,START,UBOUND,LBOUND can be ap-
plied to specific sub-groups in multiple-group models by included square brackets before the = sign,
where groups are separated by commas. For example, to apply within-group equality constraints to
a group called "male", then specifying:
CONSTRAIN [male] = (1-5,a1)
is appropriate, while specifying the same constraints to the sub-groups "male" and "female" would
appear as
CONSTRAIN [male,female] = (1-5,a1)
For all other groups in the multi-group model, these within-group equality constraints would not
appear. Therefore, these bracketed group specifications are useful when modifying priors, starting
values, between/within group equality constraints, and so on when the specifications for each sub-
group may differ.
Finally, the keyword GROUP can be used to specify the group-level hyper-parameter terms, such as
the means and variance of the default Gaussian distribution. For example, to set the starting value
of the variance parameter (COV_11) to 1.5:
START = (GROUP,COV_11,1.5)
COV Specify the relationship between the latent factors. Estimating a correlation between factors
is declared by joining the two factors with an asterisk (e.g., F1*F2), or with an asterisk between
three or more factors to estimate all the possible correlations (e.g., F1*F2*F3)
MEAN A comma separated list specifying which latent factor means to freely estimate. E.g., MEAN
= F1,F2 will free the latent means for factors F1 and F2
CONSTRAIN A bracketed, comma separated list specifying equality constrains between items.
The input format is CONSTRAIN = (items,...,parameterName(s)),(items,...,parameterName).
For example, in a single group 10-item dichotomous tests, using the default 2PL model,
the first and last 5 item slopes (a1) can be constrained to be equal by using CONSTRAIN =
(1-5,a1),(6-10,a1), or some combination such as CONSTRAIN = (1-3,4,5,a1),(6,7,8-10,a1).
When constraining parameters to be equal across items with different parameter names, a
balanced bracketed vector must be supplied. E.g., setting the first slope for item 1 equal to the
second slope in item 3 would be CONSTRAIN = (1,3,a1,a2)
CONSTRAINB A bracketed, comma separate list specifying equality constrains between groups.
The input format is CONSTRAINB = (items,...,parameterName),(items,...,parameterName).
For example, in a two group 10-item dichotomous tests, using the default 2PL model, the first
5 item slopes (a1) can be constrained to be equal across both groups by using CONSTRAINB =
(1-5,a1), or some combination such as CONSTRAINB = (1-3,4,5,a1)
PRIOR A bracketed, comma separate list specifying prior parameter distributions. The input for-
mat is PRIOR = (items,...,parameterName,priorType,val1,val2),(items,...,parameterName,priorType,va
For example, in a single group 10-item dichotomous tests, using the default 2PL model, defin-
ing a normal prior of N(0,2) for the first 5 item intercepts (d) can be defined by PRIOR =
(1-5,d,norm,0,2)
Currently supported priors are of the form: (items,norm,mean,sd) for the normal/Gaussian,
(items,lnorm,log_mean,log_sd) for log-normal, (items,beta,alpha,beta) for beta, and
128 mirt.model
(items,expbeta,alpha,beta) for the beta distribution after applying the function plogis
to the input value (note, this is specifically for applying a beta prior to the lower-bound pa-
rameters in 3/4PL models)
LBOUND A bracketed, comma separate list specifying lower bounds for estimated parameters
(used in optimizers such as L-BFGS-B and nlminb). The input format is LBOUND = (items,...,parameterName,value)
For example, in a single group 10-item dichotomous tests, using the 3PL model and setting
lower bounds for the ’g’ parameters for the first 5 items to 0.2 is accomplished with LBOUND =
(1-5,g,0.2)
UBOUND same as LBOUND, but specifying upper bounds in estimated parameters
START A bracketed, comma separate list specifying the starting values for individual param-
eters. The input is of the form (items,...,parameterName,value). For instance, set-
ting the 10th and 12th to 15th item slope parameters (a1) to 1.0 is specified with START =
(10,12-15,a1,1.0)
For more hands on control of the starting values pass the argument pars = 'values' through
whatever estimation function is being used
FIXED A bracketed, comma separate list specifying which parameters should be fixed at their
starting values (i.e., not freely estimated). The input is of the form (items,...,parameterName).
For instance, fixing the 10th and 12th to 15th item slope parameters (a1) is accomplished with
FIXED = (10,12-15,a1)
For more hands on control of the estimated values pass the argument pars = 'values' through
whatever estimation function is being used
FREE Equivalent to the FIXED input, except that parameters are freely estimated instead of fixed
at their starting value
NEXPLORE Number of exploratory factors to extract. Usually this is not required because pass-
ing a numeric value to the model argument in the estimation function will generate an ex-
ploratory factor analysis model, however if different start values, priors, lower and upper
bounds, etc, are desired then this input can be used
Value
Returns a model specification object to be used in mirt, bfactor, multipleGroup, or mixedmirt
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com> and Alexander Robitzsch
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
#Q-matrix specification
Q <- matrix(c(1,1,1,0,0,0,0,0,0,1,1,1), ncol=2, dimnames = list(NULL, c('Factor1', 'Factor2')))
COV <- matrix(c(FALSE, TRUE, TRUE, FALSE), 2)
model <- mirt.model(Q, COV=COV)
## constrain various items slopes and all intercepts in single group model to be equal,
# and use a log-normal prior for all the slopes
s <- 'F = 1-10
CONSTRAIN = (1-3, 5, 6, a1), (1-10, d)
PRIOR = (1-10, a1, lnorm, .2, .2)'
model <- mirt.model(s)
## constrain various items slopes and intercepts across groups for use in multipleGroup(),
# and constrain first two slopes within 'group1' to be equal
s <- 'F = 1-10
CONSTRAIN = (1-2, a1)
CONSTRAINB = (1-3, 5, 6, a1), (1-10, d)'
model <- mirt.model(s)
## End(Not run)
Description
This function defines a object that is placed in a relevant internal environment defined in mirt. Inter-
nal functions such as calcLogLik, fscores, etc, will utilize this object automatically to capitalize
on parallel processing architecture. The object defined is a call from parallel::makeCluster().
Note that if you are defining other parallel objects (for simulation designs, for example) it is not
recommended to define a mirtCluster.
Usage
Arguments
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
MixedClass-class 131
Examples
## Not run:
## End(Not run)
Description
Defines the object returned from mixedmirt.
Slots
Call: function call
Data: list of data, sometimes in different forms
Options: list of estimation options
Fit: a list of fit information
Model: a list of model-based information
ParObjects: a list of the S4 objects used during estimation
OptimInfo: a list of arguments from the optimization process
Internals: a list of internal arguments for secondary computations (inspecting this object is gen-
erally not required)
vcov: a matrix represented the asymptotic covariance matrix of the parameter estimates
time: a data.frame indicating the breakdown of computation times in seconds
Methods
coef signature(object = "MixedClass")
print signature(x = "MixedClass")
residuals signature(object = "MixedClass")
show signature(object = "MixedClass")
summary signature(object = "MixedClass")
logLik signature(object = "MixedClass")
anova signature(object = "MixedClass")
132 mixedmirt
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Description
mixedmirt fits MIRT models using FIML estimation to dichotomous and polytomous IRT models
conditional on fixed and random effect of person and item level covariates. This can also be un-
derstood as ’explanatory IRT’ if only fixed effects are modeled, or multilevel/mixed IRT if random
and fixed effects are included. The method uses the MH-RM algorithm exclusively. Additionally,
computation of the log-likelihood can be sped up by using parallel estimation via mirtCluster.
Usage
mixedmirt(
data,
covdata = NULL,
model,
fixed = ~1,
random = NULL,
itemtype = "Rasch",
lr.fixed = ~1,
lr.random = NULL,
itemdesign = NULL,
constrain = NULL,
pars = NULL,
return.design = FALSE,
SE = TRUE,
internal_constraints = TRUE,
technical = list(SEtol = 1e-04),
...
)
Arguments
data a matrix or data.frame that consists of numerically ordered data, with missing
data coded as NA
mixedmirt 133
covdata a data.frame that consists of the nrow(data) by K ’person level’ fixed and ran-
dom predictors. If missing data are present in this object then the observations
from covdata and data will be removed row-wise via the rowSums(is.na(covdata))
>0
model an object returned from, or a string to be passed to, mirt.model() to declare
how the IRT model is to be estimated. See mirt.model for more details
fixed a right sided R formula for specifying the fixed effect (aka ’explanatory’) pre-
dictors from covdata and itemdesign. To estimate the intercepts for each item
the keyword items is reserved and automatically added to the itemdesign in-
put. If any polytomous items are being model the items are argument is not
valid since all intercept parameters are freely estimated and identified with the
parameterizations found in mirt, and the first column in the fixed design matrix
(commonly the intercept or a reference group) is omitted
random a right sided formula or list of formulas containing crossed random effects of
the form v1 + ... v_n | G, where G is the grouping variable and v_n are ran-
dom numeric predictors within each group. If no intercept value is specified
then by default the correlations between the v’s and G are estimated, but can be
suppressed by including the ~ -1 + ... or 0 constant. G may contain interaction
terms, such as group:items to include cross or person-level interactions effects
itemtype same as itemtype in mirt, except when the fixed or random inputs are used does
not support the following item types: c('PC2PL','PC3PL','2PLNRM','3PLNRM','3PLuNRM','4PLNRM')
lr.fixed an R formula (or list of formulas) to specify regression effects in the latent vari-
ables from the variables in covdata. This is used to construct models such as
the so-called ’latent regression model’ to explain person-level ability/trait dif-
ferences. If a named list of formulas is supplied (where the names correspond
to the latent trait names in model) then specific regression effects can be esti-
mated for each factor. Supplying a single formula will estimate the regression
parameters for all latent traits by default.
lr.random a list of random effect terms for modeling variability in the latent trait scores,
where the syntax uses the same style as in the random argument. Useful for
building so-called ’multilevel IRT’ models which are non-Rasch (multilevel
Rasch models do not technically require these because they can be built using
the fixed and random inputs alone)
itemdesign a data.frame object used to create a design matrix for the items, where each
nrow(itemdesign) == nitems and the number of columns is equal to the num-
ber of fixed effect predictors (i.e., item intercepts). By default an items variable
is reserved for modeling the item intercept parameters
constrain a list indicating parameter equality constrains. See mirt for more detail
pars used for parameter starting values. See mirt for more detail
return.design logical; return the design matrices before they have (potentially) been reas-
signed?
SE logical; compute the standard errors by approximating the information matrix
using the MHRM algorithm? Default is TRUE
134 mixedmirt
internal_constraints
logical; use the internally defined constraints for constraining effects across per-
sons and items? Default is TRUE. Setting this to FALSE runs the risk of under-
identification
technical the technical list passed to the MH-RM estimation engine, with the SEtol de-
fault increased to .0001. Additionally, the argument RANDSTART is available to
indicate at which iteration (during the burn-in stage) the additional random ef-
fect variables should begin to be approximated (i.e., elements in lr.random and
random). The default for RANDSTART is to start at iteration 100, and when ran-
dom effects are included the default number of burn-in iterations is increased
from 150 to 200. See mirt for further details
... additional arguments to be passed to the MH-RM estimation engine. See mirt
for more details and examples
Details
For dichotomous response models, mixedmirt follows the general form
(u − g)
P (x = 1|θ, ψ) = g +
1 + exp(−1 ∗ [θa + Xβ + Zδ])
where X is a design matrix with associated β fixed effect intercept coefficients, and Z is a design
matrix with associated δ random effects for the intercepts. For simplicity and easier interpreta-
tion, the unique item intercept values typically found in Xβ are extracted and reassigned within
mirt’s ’intercept’ parameters (e.g., 'd'). To observe how the design matrices are structured prior to
reassignment and estimation pass the argument return.design = TRUE.
Polytomous IRT models follow a similar format except the item intercepts are automatically esti-
mated internally, rendering the items argument in the fixed formula redundant and therefore must
be omitted from the specification. If there are a mixture of dichotomous and polytomous items the
intercepts for the dichotomous models are also estimated for consistency.
The decomposition of the θ parameters is also possible to form latent regression and multilevel IRT
models by using the lr.fixed and lr.random inputs. These effects decompose θ such that
θ = V Γ + Wζ +
where V and W are fixed and random effects design matrices for the associated coefficients.
To simulate expected a posteriori predictions for the random effect terms use the randef function.
Value
function returns an object of class MixedClass (MixedClass-class).
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
mixedmirt 135
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Chalmers, R. P. (2015). Extended Mixed-Effects Item Response Models with the MH-RM Algo-
rithm. Journal of Educational Measurement, 52, 200-222. doi: 10.1111/jedm.12072
See Also
mirt, randef, fixef, boot.mirt
Examples
## Not run:
anova(mod1, mod1b) #better with 2PL models using all criteria (as expected, given simdata pars)
#view fixed design matrix with and without unique item level intercepts
withint <- mixedmirt(data, covdata, model, fixed = ~ 0 + items + group, return.design = TRUE)
withoutint <- mixedmirt(data, covdata, model, fixed = ~ 0 + group, return.design = TRUE)
#notice that in result above, the intercepts 'items1 to items 10' were reassigned to 'd'
head(withint$X)
tail(withint$X)
head(withoutint$X) #no intercepts design here to be reassigned into item intercepts
tail(withoutint$X)
###################################################
### random effects
#make the number of groups much larger
covdata$group <- factor(rep(paste0('G',1:50), each = N/50))
#random groups
rmod1 <- mixedmirt(data, covdata, 1, fixed = ~ 0 + items, random = ~ 1|group)
summary(rmod1)
coef(rmod1)
###################################################
##LLTM, and 2PL version of LLTM
data(SAT12)
data <- key2binary(SAT12,
key = c(1,4,5,2,3,1,2,1,3,1,2,4,2,1,5,3,4,4,1,4,3,3,4,1,3,5,1,3,1,5,4,5))
model <- 'Theta = 1-32'
# Suppose that the first 16 items were suspected to be easier than the last 16 items,
# and we wish to test this item structure hypothesis (more intercept designs are possible
# by including more columns).
itemdesign <- data.frame(itemorder = factor(c(rep('easier', 16), rep('harder', 16))))
summary(LLTM)
coef(LLTM)
wald(LLTM)
L <- matrix(c(-1, 1, 0), 1)
wald(LLTM, L) #first half different from second
wald(twoPL)
L <- matrix(0, 1, 34)
L[1, 1] <- 1
L[1, 2] <- -1
wald(twoPL, L) #n.s., which is the correct conclusion. Rasch approach gave wrong inference
###################################################
### Polytomous example
#graded model
mod3 <- mixedmirt(Science, covdat, model=1, fixed = ~ 0 + group,
itemtype = 'graded')
coef(mod3)
###################################################
# latent regression with Rasch and 2PL models
138 mixedmirt
set.seed(1)
n <- 300
a <- matrix(1, 10)
d <- matrix(rnorm(10))
Theta <- matrix(c(rnorm(n, 0), rnorm(n, 1), rnorm(n, 2)))
covdata <- data.frame(group=rep(c('g1','g2','g3'), each=n))
dat <- simdata(a, d, N=n*3, Theta=Theta, itemtype = '2PL')
#had we known the latent abilities, we could have computed the regression coefs
summary(lm(Theta ~ covdata$group))
#but all we have is observed test data. Latent regression helps to recover these coefs
#Rasch model approach (and mirt equivalent)
rmod0 <- mirt(dat, 1, 'Rasch') # unconditional
####################################################
## Simulated Multilevel Rasch Model
set.seed(1)
N <- 2000
a <- matrix(rep(1,10),10,1)
d <- matrix(rnorm(10))
cluster = 100
random_intercept = rnorm(cluster,0,1)
Theta = numeric()
for (i in 1:cluster)
MixtureClass-class 139
# null model
mod1 <- mixedmirt(dat, covdata, 1, fixed = ~ 0 + items, random = ~ 1|group)
summary(mod1)
# can also be fit for Rasch/non-Rasch models with the lr.random input
mod1b <- mixedmirt(dat, covdata, 1, fixed = ~ 0 + items, lr.random = ~ 1|group)
summary(mod1b)
mod3 <- mixedmirt(dat, covdata, 1, fixed = ~ 0 + items, lr.random = ~ 1|group, itemtype = '2PL')
summary(mod3)
anova(mod1b, mod3)
head(cbind(randef(mod3)$group, random_intercept))
## End(Not run)
Description
Defines the object returned from multipleGroup when estimated with mixture distributions.
Slots
Call: function call
Data: list of data, sometimes in different forms
Options: list of estimation options
Fit: a list of fit information
Model: a list of model-based information
140 mod2values
Methods
coef signature(object = "MixtureClass")
print signature(x = "MixtureClass")
show signature(object = "MixtureClass")
anova signature(object = "MixtureClass")
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Description
Given an estimated model from any of mirt’s model fitting functions this function will convert the
model parameters into the design data frame of starting values and other parameter characteristics
(similar to using the pars = 'values' for obtaining starting values).
Usage
mod2values(x)
Arguments
x an estimated model x from the mirt package
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
multipleGroup 141
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
See Also
extract.mirt
Examples
## Not run:
dat <- expand.table(LSAT7)
mod <- mirt(dat, 1)
values <- mod2values(mod)
values
#use the converted values as starting values in a new model, and reduce TOL
mod2 <- mirt(dat, 1, pars = values, TOL=1e-5)
## End(Not run)
Description
multipleGroup performs a full-information maximum-likelihood multiple group analysis for any
combination of dichotomous and polytomous data under the item response theory paradigm us-
ing either Cai’s (2010) Metropolis-Hastings Robbins-Monro (MHRM) algorithm or with an EM
algorithm approach. This function may be used for detecting differential item functioning (DIF),
thought the DIF function may provide a more convenient approach. If the grouping variable is not
specified then the dentype input can be modified to fit mixture models to estimate any latent group
components.
Usage
multipleGroup(
data,
model,
group,
itemtype = NULL,
invariance = "",
method = "EM",
dentype = "Gaussian",
...
)
142 multipleGroup
Arguments
data a matrix or data.frame that consists of numerically ordered data, with missing
data coded as NA
model string to be passed to, or a model object returned from, mirt.model declaring
how the global model is to be estimated (useful to apply constraints here)
group a character or factor vector indicating group membership. If a character
vector is supplied this will be automatically transformed into a factor variable.
As well, the first level of the (factorized) grouping variable will be treated as the
"reference" group
itemtype can be same type of input as is documented in mirt, however may also be a
ngroups by nitems matrix specifying the type of IRT models for each group,
respectively. Rows of this input correspond to the levels of the group input. For
mixture models the rows correspond to the respective mixture grouping vari-
ables to be constructed, and the IRT models should be within these mixtures
invariance a character vector containing the following possible options:
’free_mean’ or ’free_means’ freely estimate all latent means in all focal groups
(reference group constrained to a vector of 0’s)
’free_var’, ’free_vars’, ’free_variance’, or ’free_variances’ freely es-
timate all latent variances in focal groups (reference group variances all
constrained to 1)
’slopes’ to constrain all the slopes to be equal across all groups
’intercepts’ to constrain all the intercepts to be equal across all groups, note
for nominal models this also includes the category specific slope parameters
Additionally, specifying specific item name bundles (from colnames(data))
will constrain all freely estimated parameters in each item to be equal across
groups. This is useful for selecting ’anchor’ items for vertical and horizontal
scaling, and for detecting differential item functioning (DIF) across groups
method a character object that is either 'EM', 'QMCEM', or 'MHRM' (default is 'EM'). See
mirt for details
dentype type of density form to use for the latent trait parameters. Current options in-
clude all of the methods described in mirt, as well as
• 'mixture-#' estimates mixtures of Gaussian distributions, where the #
placeholder represents the number of potential grouping variables (e.g.,
'mixture-3' will estimate 3 underlying classes). Each class is assigned
the group name MIXTURE_#, where # is the class number. Note that inter-
nally the mixture coefficients are stored as log values where the first mixture
group coefficient is fixed at 0
... additional arguments to be passed to the estimation engine. See mirt for details
and examples
Details
By default the estimation in multipleGroup assumes that the models are maximally independent,
and therefore could initially be performed by sub-setting the data and running identical models with
mirt and aggregating the results (e.g., log-likelihood). However, constrains may be automatically
multipleGroup 143
imposed across groups by invoking various invariance keywords. Users may also supply a list of
parameter equality constraints to by constrain argument, of define equality constraints using the
mirt.model syntax (recommended).
Value
function returns an object of class MultipleGroupClass (MultipleGroupClass-class).
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
See Also
mirt, DIF, extract.group, DRF
Examples
## Not run:
#single factor
set.seed(12345)
a <- matrix(abs(rnorm(15,1,.3)), ncol=1)
d <- matrix(rnorm(15,0,.7),ncol=1)
itemtype <- rep('2PL', nrow(a))
N <- 1000
dataset1 <- simdata(a, d, N, itemtype)
dataset2 <- simdata(a, d, N, itemtype, mu = .1, sigma = matrix(1.5))
dat <- rbind(dataset1, dataset2)
group <- c(rep('D1', N), rep('D2', N))
invariance=c('slopes', 'intercepts'))
extract.mirt(mod_fullconstrain, 'time') #time of estimation components
summary(mod_scalar2)
coef(mod_scalar2, simplify=TRUE)
residuals(mod_scalar2)
plot(mod_configural)
plot(mod_configural, type = 'info')
plot(mod_configural, type = 'trace')
plot(mod_configural, type = 'trace', which.items = 1:4)
itemplot(mod_configural, 2)
itemplot(mod_configural, 2, type = 'RE')
############
# vertical scaling (i.e., equating when groups answer items others do not)
dat2 <- dat
dat2[group == 'D1', 1:2] <- dat2[group != 'D1', 14:15] <- NA
head(dat2)
tail(dat2)
# items with missing responses need to be constrained across groups for identification
nms <- colnames(dat2)
mod <- multipleGroup(dat2, 1, group, invariance = nms[c(1:2, 14:15)])
# this will throw an error without proper constraints (SEs cannot be computed either)
# mod <- multipleGroup(dat2, 1, group)
# model still does not have anchors, therefore need to add a few (here use items 3-5)
mod_anchor <- multipleGroup(dat2, 1, group,
invariance = c(nms[c(1:5, 14:15)], 'free_means', 'free_var'))
coef(mod_anchor, simplify=TRUE)
#############
#DIF test for each item (using all other items as anchors)
itemnames <- colnames(dat)
refmodel <- multipleGroup(dat, 1, group = group, SE=TRUE,
invariance=c('free_means', 'free_var', itemnames))
#loop over items (in practice, run in parallel to increase speed). May be better to use ?DIF
estmodels <- vector('list', ncol(dat))
for(i in 1:ncol(dat))
estmodels[[i]] <- multipleGroup(dat, 1, group = group, verbose = FALSE,
invariance=c('free_means', 'free_var', itemnames[-i]))
#############
# Three group model where the latent variable parameters are constrained to
# be equal in the focal groups
set.seed(12345)
a <- matrix(abs(rnorm(15,1,.3)), ncol=1)
d <- matrix(rnorm(15,0,.7),ncol=1)
itemtype <- rep('2PL', nrow(a))
N <- 1000
dataset1 <- simdata(a, d, N, itemtype)
dataset2 <- simdata(a, d, N, itemtype, mu = .1, sigma = matrix(1.5))
dataset3 <- simdata(a, d, N, itemtype, mu = .1, sigma = matrix(1.5))
146 multipleGroup
#############
#multiple factors
#group models
model <- '
F1 = 1-5
F2 = 6-10
F3 = 11-15'
#EM approach (not as accurate with 3 factors, but generally good for quick model comparisons)
mod_configural <- multipleGroup(dat, model, group = group) #completely separate analyses
mod_metric <- multipleGroup(dat, model, group = group, invariance=c('slopes')) #equal slopes
mod_fullconstrain <- multipleGroup(dat, model, group = group, #equal means, slopes, intercepts
invariance=c('slopes', 'intercepts'))
anova(mod_metric, mod_configural)
anova(mod_fullconstrain, mod_metric)
#same as above, but with MHRM (generally more accurate with 3+ factors, but slower)
mod_configural <- multipleGroup(dat, model, group = group, method = 'MHRM')
mod_metric <- multipleGroup(dat, model, group = group, invariance=c('slopes'), method = 'MHRM')
mod_fullconstrain <- multipleGroup(dat, model, group = group, method = 'MHRM',
invariance=c('slopes', 'intercepts'))
anova(mod_metric, mod_configural)
anova(mod_fullconstrain, mod_metric)
multipleGroup 147
############
#polytomous item example
set.seed(12345)
a <- matrix(abs(rnorm(15,1,.3)), ncol=1)
d <- matrix(rnorm(15,0,.7),ncol=1)
d <- cbind(d, d-1, d-2)
itemtype <- rep('graded', nrow(a))
N <- 1000
dataset1 <- simdata(a, d, N, itemtype)
dataset2 <- simdata(a, d, N, itemtype, mu = .1, sigma = matrix(1.5))
dat <- rbind(dataset1, dataset2)
group <- c(rep('D1', N), rep('D2', N))
model <- 'F1 = 1-15'
# constrain slopes within each group to be equal (but not across groups)
model2 <- 'F1 = 1-15
CONSTRAIN = (1-15, a1)'
mod_configural2 <- multipleGroup(dat, model2, group = group)
plot(mod_configural2, type = 'SE')
plot(mod_configural2, type = 'RE')
itemplot(mod_configural2, 10)
############
## empirical histogram example (normal and bimodal groups)
set.seed(1234)
a <- matrix(rlnorm(50, .2, .2))
d <- matrix(rnorm(50))
ThetaNormal <- matrix(rnorm(2000))
ThetaBimodal <- scale(matrix(c(rnorm(1000, -2), rnorm(1000,2)))) #bimodal
Theta <- rbind(ThetaNormal, ThetaBimodal)
dat <- simdata(a, d, 4000, itemtype = '2PL', Theta=Theta)
group <- rep(c('G1', 'G2'), each=2000)
#--------------------------------
# Mixture model (no prior group variable specified)
set.seed(12345)
nitems <- 20
a1 <- matrix(.75, ncol=1, nrow=nitems)
a2 <- matrix(1.25, ncol=1, nrow=nitems)
d1 <- matrix(rnorm(nitems,0,1),ncol=1)
d2 <- matrix(rnorm(nitems,0,1),ncol=1)
itemtype <- rep('2PL', nrow(a1))
N1 <- 500
N2 <- N1*2 # second class twice as large
## End(Not run)
MultipleGroupClass-class 149
MultipleGroupClass-class
Class "MultipleGroupClass"
Description
Slots
Methods
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
150 numerical_deriv
Description
Compute numerical derivatives using forward/backward difference, central difference, or Richard-
son extrapolation.
Usage
numerical_deriv(
par,
f,
...,
delta = 1e-05,
gradient = TRUE,
type = "Richardson"
)
Arguments
par a vector of parameters to find partial derivative at
f the objective function being evaluated
... additional arguments to be passed to f
delta the term used to perturb the f function. Default is 1e-5
gradient logical; compute the gradient terms? If FALSE then the Hessian is computed
instead
type type of difference to compute. Can be either 'forward' for the forward differ-
ence, 'central' for the central difference, or 'Richardson' for the Richardson
extrapolation (default). Backward difference is achieved by supplying a nega-
tive delta value with 'forward'. When type = 'Richardson', the default
value of delta is increased to delta * 1000 for the Hessian and delta * 10 for
the gradient to provide a reasonable perturbation starting location (each delta
is halved at each iteration).
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
Examples
## Not run:
f <- function(x) 3*x[1]^3 - 4*x[2]^2
par <- c(3,8)
personfit 151
# grad = 9 * x^2 , -8 * y
(actual <- c(9 * par[1]^2, -8 * par[2]))
numerical_deriv(par, f, type = 'forward')
numerical_deriv(par, f, type = 'central')
numerical_deriv(par, f, type = 'Richardson') # default
# Hessian = h11 -> 18 * x, h22 -> -8, h12 -> h21 -> 0
(actual <- matrix(c(18 * par[1], 0, 0, -8), 2, 2))
numerical_deriv(par, f, type = 'forward', gradient = FALSE)
numerical_deriv(par, f, type = 'central', gradient = FALSE)
numerical_deriv(par, f, type = 'Richardson', gradient = FALSE) # default
## End(Not run)
Description
personfit calculates the Zh values from Drasgow, Levine and Williams (1985) for unidimensional
and multidimensional models, as well as the infit and outfit statistics. The returned object is a
data.frame consisting either of the tabulated data or full data with the statistics appended to the
rightmost columns.
Usage
Arguments
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Drasgow, F., Levine, M. V., & Williams, E. A. (1985). Appropriateness measurement with poly-
chotomous item response models and standardized indices. British Journal of Mathematical and
Statistical Psychology, 38, 67-86.
Reise, S. P. (1990). A comparison of item- and person-fit methods of assessing model-data fit in
IRT. Applied Psychological Measurement, 14, 127-137.
Wright B. D. & Masters, G. N. (1982). Rating scale analysis. MESA Press.
See Also
itemfit
Examples
## Not run:
x <- mirt(data, 1)
fit <- personfit(x)
head(fit)
## End(Not run)
Description
Computes profiled-likelihood based confidence intervals. Supports the inclusion of equality con-
straints. Object returns the confidence intervals and whether the respective interval could be found.
Usage
PLCI.mirt(
mod,
parnum = NULL,
alpha = 0.05,
search_bound = TRUE,
step = 0.5,
lower = TRUE,
upper = TRUE,
inf2val = 30,
NealeMiller = FALSE,
...
)
Arguments
mod a converged mirt model
parnum a numeric vector indicating which parameters to estimate. Use mod2values to
determine parameter numbers. If NULL, all possible parameters are used
alpha two-tailed alpha critical level
search_bound logical; use a fixed grid of values around the ML estimate to determine more
suitable optimization bounds? Using this has much better behaviour than setting
fixed upper/lower bound values and searching from more extreme ends
step magnitude of steps used when search_bound is TRUE. Smaller values create
more points to search a suitable bound for (up to the lower bound value visible
with mod2values). When upper/lower bounds are detected this value will be
adjusted accordingly
lower logical; search for the lower CI?
upper logical; search for the upper CI?
inf2val a numeric used to change parameter bounds which are infinity to a finite number.
Decreasing this too much may not allow a suitable bound to be located. Default
is 30
NealeMiller logical; use the Neale and Miller 1997 approximation? Default is FALSE
... additional arguments to pass to the estimation functions
154 PLCI.mirt
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Chalmers, R. P., Pek, J., & Liu, Y. (2017). Profile-likelihood Confidence Intervals in Item Response
Theory Models. Multivariate Behavioral Research, 52, 533-550. doi: 10.1080/00273171.2017.1329082
Neale, M. C. & Miller, M. B. (1997). The use of likelihood-based confidence intervals in genetic
models. Behavior Genetics, 27, 113-120.
See Also
boot.mirt
Examples
## Not run:
mirtCluster() #use all available cores to estimate CI's in parallel
dat <- expand.table(LSAT7)
mod <- mirt(dat, 1)
## End(Not run)
plot,MultipleGroupClass,missing-method 155
plot,MultipleGroupClass,missing-method
Plot various test-implied functions from models
Description
Plot various test implied response functions from models estimated in the mirt package.
Usage
## S4 method for signature 'MultipleGroupClass,missing'
plot(
x,
y,
type = "score",
npts = 200,
drop2 = TRUE,
degrees = 45,
which.items = 1:extract.mirt(x, "nitems"),
rot = list(xaxis = -70, yaxis = 30, zaxis = 10),
facet_items = TRUE,
theta_lim = c(-6, 6),
par.strip.text = list(cex = 0.7),
par.settings = list(strip.background = list(col = "#9ECAE1"), strip.border = list(col
= "black")),
auto.key = list(space = "right", points = FALSE, lines = TRUE),
...
)
add.ylab2 = TRUE,
par.strip.text = list(cex = 0.7),
par.settings = list(strip.background = list(col = "#9ECAE1"), strip.border = list(col
= "black")),
auto.key = list(space = "right", points = FALSE, lines = TRUE),
profile = FALSE,
...
)
Arguments
x an object of class SingleGroupClass, MultipleGroupClass, or DiscreteClass
y an arbitrary missing argument required for R CMD check
type type of plot to view. Can be
’info’ test information function
’rxx’ for the reliability function
’infocontour’ for the test information contours
’SE’ for the test standard error function
’infotrace’ item information traceline plots
’infoSE’ a combined test information and standard error plot
’trace’ item probability traceline plots
’itemscore’ item scoring traceline plots
’score’ expected total score surface
’scorecontour’ expected total score contour plot
’EAPsum’ compares sum-scores to the expected values based on the EAP for
sum-scores method (see fscores)
Note that if dentype = 'empiricalhist' was used in estimation then the type
'empiricalhist' also will be available to generate the empirical histogram
plot, and if dentype = 'Davidian-#' was used then the type 'Davidian' will
also be available to generate the curve estimates at the quadrature nodes used
during estimation
npts number of quadrature points to be used for plotting features. Larger values make
plots look smoother
drop2 logical; where appropriate, for dichotomous response items drop the lowest cat-
egory and provide information pertaining only to the second response option?
degrees numeric value ranging from 0 to 90 used in plot to compute angle for information-
based plots with respect to the first dimension. If a vector is used then a bubble
plot is created with the summed information across the angles specified (e.g.,
degrees = seq(0,90,by=10))
which.items numeric vector indicating which items to be used when plotting. Default is to
use all available items
rot allows rotation of the 3D graphics
facet_items logical; apply grid of plots across items? If FALSE, items will be placed in one
plot for each group
plot,MultipleGroupClass,missing-method 157
theta_lim lower and upper limits of the latent trait (theta) to be evaluated, and is used in
conjunction with npts
par.strip.text plotting argument passed to lattice
par.settings plotting argument passed to lattice
auto.key plotting argument passed to lattice
... additional arguments to be passed to lattice
MI a single number indicating how many imputations to draw to form bootstrapped
confidence intervals for the selected test statistic. If greater than 0 a plot will be
drawn with a shaded region for the interval
CI a number from 0 to 1 indicating the confidence interval to select when MI input
is used. Default uses the 95% confidence (CI = .95)
main argument passed to lattice. Default generated automatically
drape logical argument passed to lattice. Default generated automatically
colorkey logical argument passed to lattice. Default generated automatically
ehist.cut a probability value indicating a threshold for excluding cases in empirical his-
togram plots. Values larger than the default will include more points in the tails
of the plot, potentially squishing the ’meat’ of the plot to take up less area than
visually desired
add.ylab2 logical argument passed to lattice. Default generated automatically
profile logical; provide a profile plot of response probabilities (objects returned from
mdirt only)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
x <- mirt(Science, 1, SE=TRUE)
plot(x)
plot(x, type = 'info')
plot(x, type = 'infotrace')
plot(x, type = 'infotrace', facet_items = FALSE)
plot(x, type = 'infoSE')
plot(x, type = 'rxx')
library(directlabels)
plt <- plot(x, type = 'trace')
direct.label(plt, 'top.points')
set.seed(1234)
group <- sample(c('g1','g2'), nrow(Science), TRUE)
x2 <- multipleGroup(Science, 1, group)
plot(x2)
plot(x2, type = 'trace')
plot(x2, type = 'trace', which.items = 1:2)
plot(x2, type = 'itemscore', which.items = 1:2)
plot(x2, type = 'trace', which.items = 1, facet_items = FALSE) #facet by group
plot(x2, type = 'info')
x3 <- mirt(Science, 2)
plot(x3, type = 'info')
plot(x3, type = 'SE', theta_lim = c(-3,3))
## End(Not run)
Description
Transforms a matrix of items into a new matrix where the select polytomous items have been con-
verted into comparable dichotomous items with the same information.
Usage
poly2dich(data, which.items = 1:ncol(data), sep = "_cat.")
Arguments
data an object of class data.frame or matrix
which.items a vector indicating which items should be transformed into the dichotomous
form. Default uses all input items
sep character vector pattern to append to each item name in data
Value
Returns an integer matrix
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
print-method 159
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
data(Science)
head(Science)
newScience <- poly2dich(Science)
head(newScience)
## End(Not run)
Description
Print model object summaries to the console.
Usage
## S4 method for signature 'SingleGroupClass'
print(x)
Arguments
x an object of class SingleGroupClass, MultipleGroupClass, or MixedClass
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
x <- mirt(Science, 1)
print(x)
## End(Not run)
160 print.mirt_list
Description
Provides a nicer output for most printed data.frame objects defined by functions in mirt.
Usage
Arguments
Description
Provides a nicer output for most printed list objects defined by functions in mirt.
Usage
Arguments
Description
Provides a nicer output for most printed matrix objects defined by functions in mirt.
Usage
## S3 method for class 'mirt_matrix'
print(x, digits = 3, ...)
Arguments
x object of class 'mirt_matrix'
digits number of digits to round
... additional arguments passed to print(...)
Description
Given an internal mirt object extracted from an estimated model, or the single-group estimated
model itself, compute the probability trace lines for all categories.
Usage
probtrace(x, Theta)
Arguments
x either an extracted internal mirt object containing item information (see extract.item)
or a model of class SingleGroupClass typically returned by the function mirt
or bfactor
Theta a vector (unidimensional) or matrix (unidimensional/multidimensional) of latent
trait values
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
162 randef
See Also
extract.item, extract.group
Examples
Description
Stochastically compute random effects for MixedClass objects with Metropolis-Hastings samplers
and averaging over the draws to obtain expected a posteriori predictions. Returns a list of the
estimated effects.
Usage
Arguments
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29.
Chalmers, R. P. (2015). Extended Mixed-Effects Item Response Models with the MH-RM Algo-
rithm. Journal of Educational Measurement, 52, 200-222. doi: 10.1111/jedm.12072 doi: 10.18637/
jss.v048.i06
Examples
## Not run:
#make an arbitrary groups
covdat <- data.frame(group = rep(paste0('group', 1:49), each=nrow(Science)/49))
## End(Not run)
Description
Computes an IRT version of the "reliable change index" (RCI) proposed by Jacobson and Traux
(1991) but modified to use IRT information about scores and measurement error. Main benefit
of the IRT approach is the inclusion of response pattern information in the pre/post data score
estimates, as well as conditional standard error of measurement information.
Usage
RCI(mod, predat, postdat, cutoffs = NULL, ...)
Arguments
mod single-group model fitted by mirt
predat a vector (if one individual) or matrix/data.frame of response data to be scored,
where each individuals’ responses are included in exactly one row
postdat same as predat, but with respect to the post/follow-up measurement
cutoffs optional vector of length 2 indicating the type of cut-offs to report (e.g., c(-1.96,1.96)
reflects the 95 percent z-score type cut-off)
... additional arguments passed to fscores
164 RCI
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Jacobson, N. S., & Truax, P. (1991). Clinical significance: A statistical approach to defining mean-
ingful change in psychotherapy research. Journal of Consulting and Clinical Psychology, 59, 12-19.
Examples
## Not run:
# WLE estimator
RCI(mod, predat = c(1,2,3,2), postdat = c(1,2,2,1), method = 'WLE')
# multiple respondents
RCI(mod, predat = Science[1:5,], postdat = Science[2:6,])
############################
# Example where individuals take completely different item set pre-post
# but prior calibration has been performed to equate the items
## End(Not run)
read.mirt 165
read.mirt Translate mirt parameters into suitable structure for plink package
Description
This function exports item parameters from the mirt package to the plink package.
Usage
read.mirt(x, as.irt.pars = TRUE, ...)
Arguments
x a single object (or list of objects) returned from mirt,bfactor, or a single object
returned by multipleGroup
as.irt.pars if TRUE, the parameters will be output as an irt.pars object
... additional arguments to be passed to coef()
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
Examples
## Not run:
## unidimensional
library(plink)
#graded
mod2 <- mirt(Science, 1)
plinkpars <- read.mirt(mod2)
plot(plinkpars)
plot(mod2, type = 'trace')
#gpcm
mod3 <- mirt(Science, 1, itemtype = 'gpcm')
plinkpars <- read.mirt(mod3)
plot(plinkpars)
plot(mod3, type = 'trace')
#nominal
166 read.mirt
## multidimensional
#graded
mod2 <- mirt(Science, 2)
plinkpars <- read.mirt(mod2)
plinkpars
plot(plinkpars)
plot(mod2, type = 'trace')
# equivalently:
# mod <- multipleGroup(dat, 1, group)
# plinkMG <- read.mirt(mod)
## End(Not run)
remap.distance 167
Description
The mirt package’s estimation setup requires that all item responses have spaces equal to 1 (e.g., a
Likert scale scored from 1 through 5). In the event that categories are missing the categories must
be re-coded. This function is automatically called by the package estimation functions (e.g., mirt),
however for convince this function has been extracted for users to better understand the remapping
consequences.
Usage
remap.distance(data, message = TRUE)
Arguments
data the response data to remap as a data.frame or matrix
message logical; print message information pertaining to which items were remapped?
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
Description
Return model implied residuals for linear dependencies between items or at the person level. If the
latent trait density was approximated (e.g., Davidian curves, Empirical histograms, etc) then passing
use_dentype_estimate = TRUE will use the internally saved quadrature and density components
(where applicable).
Usage
## S4 method for signature 'SingleGroupClass'
residuals(
object,
type = "LD",
df.p = FALSE,
full.scores = FALSE,
QMC = FALSE,
printvalue = NULL,
tables = FALSE,
verbose = TRUE,
Theta = NULL,
suppress = 1,
theta_lim = c(-6, 6),
quadpts = NULL,
fold = TRUE,
technical = list(),
...
)
Arguments
object an object of class SingleGroupClass or MultipleGroupClass. Bifactor mod-
els are automatically detected and utilized for better accuracy
type type of residuals to be displayed. Can be either 'LD' or 'LDG2' for a local de-
pendence matrix based on the X2 or G2 statistics (Chen & Thissen, 1997), 'Q3'
for the statistic proposed by Yen (1984), 'JSI' for the jack-knife statistic pro-
posed Edwards et al. (2018), 'exp' for the expected values for the frequencies
of every response pattern, and 'expfull' for the expected values for every theo-
retically observable response pattern. For the ’LD’ and ’LDG2’ types, the upper
diagonal elements represent the standardized residuals in the form of signed
Cramers V coefficients
df.p logical; print the degrees of freedom and p-values?
full.scores logical; compute relevant statistics for each subject in the original data?
residuals-method 169
QMC logical; use quasi-Monte Carlo integration? If quadpts is omitted the default
number of nodes is 5000
printvalue a numeric value to be specified when using the res='exp' option. Only prints
patterns that have standardized residuals greater than abs(printvalue). The
default (NULL) prints all response patterns
tables logical; for LD type, return the observed, expected, and standardized residual
tables for each item combination?
verbose logical; allow information to be printed to the console?
Theta a matrix of factor scores used for statistics that require empirical estimates (i.e.,
Q3). If supplied, arguments typically passed to fscores() will be ignored and
these values will be used instead
suppress a numeric value indicating which parameter local dependency combinations to
flag as being too high. Absolute values for the standardized estimates greater
than this value will be returned, while all values less than this value will be set
to NA
theta_lim range for the integration grid
quadpts number of quadrature nodes to use. The default is extracted from model (if
available) or generated automatically if not available
fold logical; apply the sum ’folding’ described by Edwards et al. (2018) for the JSI
statistic?
technical list of technical arguments when models are re-estimated (see mirt for details)
... additional arguments to be passed to fscores()
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Chen, W. H. & Thissen, D. (1997). Local dependence indices for item pairs using item response
theory. Journal of Educational and Behavioral Statistics, 22, 265-289.
Edwards, M. C., Houts, C. R. & Cai, L. (2018). A Diagnostic Procedure to Detect Departures From
Local Independence in Item Response Theory Models. Psychological Methods, 23, 138-149.
Yen, W. (1984). Effects of local item dependence on the fit and equating performance of the three
parameter logistic model. Applied Psychological Measurement, 8, 125-145.
Examples
## Not run:
x <- mirt(Science, 1)
residuals(x)
residuals(x, tables = TRUE)
residuals(x, type = 'exp')
residuals(x, suppress = .15)
residuals(x, df.p = TRUE)
170 residuals-method
## End(Not run)
RMSD_DIF 171
Description
This function computes a set of RMSD "badness-of-fit" statistics when investing DIF across a set of
grouping variables. In a first step, a (potentially highly constrained) multiple group model is fitted,
while in a second step the item (and person) parameters are estimated based on all examines across
all groups. Category level DIF is assessed based on how well the pseudo-table of counts match
the (constrained) probability functions implied by the original multiple group model (while also
weighing across the implied density function of the latent traits). If the RSMD fit is poor, indicating
non-ignorable DIF, then the multiple-group model should be adjusted to better account for the large
response bias due to using a pooled model. See Lee and von Davier (2020) and Buchholz and Hartig
(2019) for details.
Usage
RMSD_DIF(pooled_mod, flag = 0, probfun = TRUE, dentype = "norm")
Arguments
pooled_mod a multiple-group model (used to compute the model-implied probability in the
goodness-of-fit test)
flag a numeric value used as a cut-off to help flag larger RMSD values (e.g., flag =
.03 will highlight only categories with RMSD values greater than .03)
probfun logical; use probability functions to compute RMSD? If FALSE, the expected
score functions will be integrated instead, which may be useful for collapsing
across the categories in polytomous items
dentype density to use for the latent trait. Can be 'norm' to use a normal Gaussian
density where the mean/variance are extracted from the model object(default),
'snorm' for a standard normal distribution, or 'empirical' to use the density
estimate obtained via the E-table
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Buchholz, J., and Hartig, J. (2019). Comparing Attitudes Across Groups: An IRT-Based Item-Fit
Statistic for the Analysis of Measurement Invariance. Applied Psychological Measurement, 43(3),
241-250. doi: 10.1177/0146621617748323
Lee, S. S., and von Davier, M. (2020). Improving measurement properties of the PISA home
possessions scale through partial invariance modeling. Psychological test and assessment modeling,
62(1):55-83.
172 RMSD_DIF
See Also
DIF, DRF, multipleGroup, empirical_ES
Examples
## Not run:
#-----
RMSD_DIF(pooled_mod)
RMSD_DIF(pooled_mod, dentype = 'empirical')
RMSD_DIF(pooled_mod, flag = .03)
#################
# polytomous example
set.seed(12345)
a <- a2 <- matrix(rlnorm(20,.2,.3))
# for the graded model, ensure that there is enough space between the intercepts,
# otherwise closer categories will not be selected often (minimum distance of 0.3 here)
SAT12 173
#-----
# RMSDs in Item_1 now reduced (MG model better accounts for DIF)
RMSD_DIF(MGmod)
RMSD_DIF(MGmod, flag = .05)
RMSD_DIF(MGmod, probfun = FALSE, flag = .1) # use expected score function
## End(Not run)
Description
Data obtained from the TESTFACT (Woods et al., 2003) manual, with 32 response pattern scored
items for a grade 12 science assessment test (SAT) measuring topics of chemistry, biology, and
physics. The scoring key for these data is [1, 4, 5, 2, 3, 1, 2, 1, 3, 1, 2, 4, 2, 1, 5, 3, 4, 4, 1, 4, 3, 3, 4,
1, 3, 5, 1, 3, 1, 5, 4, 5], respectively. However, careful analysis using the nominal response model
suggests that the scoring key for item 32 may be incorrect, and should be changed from 5 to 3.
174 Science
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Wood, R., Wilson, D. T., Gibbons, R. D., Schilling, S. G., Muraki, E., & Bock, R. D. (2003).
TESTFACT 4 for Windows: Test Scoring, Item Statistics, and Full-information Item Factor Analy-
sis [Computer software]. Lincolnwood, IL: Scientific Software International.
Examples
## Not run:
#score the data (missing scored as 0)
head(SAT12)
data <- key2binary(SAT12,
key = c(1,4,5,2,3,1,2,1,3,1,2,4,2,1,5,3,4,4,1,4,3,3,4,1,3,5,1,3,1,5,4,5))
head(data)
## End(Not run)
Description
A 4-item data set borrowed from ltm package in R, first example of the grm() function. See more
complete documentation therein.
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
mod <- mirt(Science, 1)
plot(mod, type = 'trace')
## End(Not run)
Description
Usage
Arguments
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
x <- mirt(Science, 1)
show(x)
## End(Not run)
176 SIBTEST
Description
Classical test theory approach to detecting unidirectional and bidirectional (with one crossing lo-
cation) DIF. This family of statistics is intended for unidimensional tests, and applies a regression-
corrected matched-total score approach to quantify the response bias between two groups. Can be
used for DIF, DBF, and DTF testing.
Usage
SIBTEST(
dat,
group,
suspect_set,
match_set,
focal_name = unique(group)[2],
guess_correction = 0,
Jmin = 5,
na.rm = FALSE,
LiStout1996 = FALSE,
permute = 1000,
pk_focal = FALSE,
correction = TRUE,
details = FALSE,
plot = "none",
...
)
Arguments
dat integer-based dataset to be tested, containing dichotomous or polytomous re-
sponses
group a vector indicating group membership with the same length as the number of
rows in dat
suspect_set an integer vector indicating which items to inspect with SIBTEST. Including
only one value will perform a DIF test, while including more than one will
perform a simultaneous bundle test (DBF); including all non-matched items will
perform DTF. If missing, a simultaneous test using all the items not listed in
match_set will be used (i.e., DTF)
match_set an integer vector indicating which items to use as the items which are matched
(i.e., contain no DIF). These are analogous to ’anchor’ items in the likelihood
method to locate DIF. If missing, all items other than the items found in the
suspect_set will be used
SIBTEST 177
focal_name name of the focal group; e.g., 'focal'. If not specified then one will be selected
automatically using unique(group)[2]
guess_correction
a vector of numbers from 0 to 1 indicating how much to correct the items for
guessing. It’s length should be the same as ncol(dat)
Jmin the minimum number of observations required when splitting the data into focal
and reference groups conditioned on the matched set
na.rm logical; remove rows in dat with any missing values? If TRUE, rows with missing
data will be removed, as well as the corresponding elements in the group input
LiStout1996 logical; perform the crossing test for non-compensatory bias using Li and Stout’s
(1996) permutation approach? Default is FALSE, which uses the Chalmers (2018)
mixed degrees of freedom method
permute number of permutations to perform when LiStout1996 = TRUE. Default is 1000
pk_focal logical; using the group weights from the focal group instead of the total sample?
Default is FALSE as per Shealy and Stout’s recommendation
correction logical; apply the composite correction for the difference between focal compos-
ite scores using the true-score regression technique? Default is TRUE, reflecting
Shealy and Stout’s linear extrapolation method
details logical; return a data.frame containing the details required to compute SIBTEST?
plot a character input indicating the type of plot to construct. Options are 'none'
(default), 'observed' for the scaled focal subtest scores against the matched
subtest scores, 'weights' for the proportion weights used (i.e., the proportion
of observations at each matched score), 'difference' for the difference be-
tween the scaled focal subtest scores against the matched subtest scores, and
'wdifference' for the conditional differences multiplied by each respective
weight. Note that the last plot reflects the compnents used in SIBTEST, and
therefore the sum of these plotted observations will equal the beta coefficient
for SIBTEST
... additional plotting arguments to be passed
Details
SIBTEST is similar to the Mantel-Haenszel approach for detecting DIF but uses a regression cor-
rection based on the KR-20/coefficient alpha reliability index to correct the observed differences
when the latent trait distributions are not equal. Function supports the standard SIBTEST for
dichotomous and polytomous data (compensatory) and supports crossing DIF testing (i.e., non-
compensatory/non-uniform) using the asymptotic sampling distribution version of the Crossing-
SIBTEST (CSIBTEST) statistic described by Chalmers (2018) and the permutation method de-
scribed by Li and Stout (1996). For convenience, the beta coefficient for CSIBTEST is always
reported as an absolute value.
Author(s)
References
Chalmers, R. P. (2018). Improving the Crossing-SIBTEST statistic for detecting non-uniform DIF.
Psychometrika, 83, 2, 376-386.
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Chang, H. H., Mazzeo, J. & Roussos, L. (1996). DIF for Polytomously Scored Items: An Adapta-
tion of the SIBTEST Procedure. Journal of Educational Measurement, 33, 333-353.
Li, H.-H. & Stout, W. (1996). A new procedure for detection of crossing DIF. Psychometrika, 61,
647-677.
Shealy, R. & Stout, W. (1993). A model-based standardization approach that separates true bias/DIF
from group ability differences and detect test bias/DTF as well as item bias/DIF. Psychometrika, 58,
159-194.
Examples
## Not run:
set.seed(1234)
n <- 30
N <- 500
a <- matrix(1, n)
d <- matrix(rnorm(n), n)
group <- c(rep('reference', N), rep('focal', N*2))
## -------------
# groups completely equal
dat1 <- simdata(a, d, N, itemtype = 'dich')
dat2 <- simdata(a, d, N*2, itemtype = 'dich')
dat <- rbind(dat1, dat2)
# DTF
SIBTEST(dat, group, suspect_set = 11:30)
SIBTEST(dat, group, match_set = 1:10) #equivalent
## -------------
## systematic differing slopes and intercepts (clear DTF)
dat1 <- simdata(a, d, N, itemtype = 'dich')
dat2 <- simdata(a + c(numeric(15), rnorm(n-15, 1, .25)), d + c(numeric(15), rnorm(n-15, 1, 1)),
N*2, itemtype = 'dich')
dat <- rbind(dat1, dat2)
SIBTEST(dat, group, 6:30)
SIBTEST(dat, group, 11:30)
## End(Not run)
Description
Simulates response patterns for compensatory and noncompensatory MIRT models from multivari-
ate normally distributed factor (θ) scores, or from a user input matrix of θ’s.
Usage
simdata(
a,
d,
N,
itemtype,
sigma = NULL,
mu = NULL,
guess = 0,
upper = 1,
nominal = NULL,
t = NULL,
Theta = NULL,
gpcm_mats = list(),
returnList = FALSE,
model = NULL,
equal.K = TRUE,
which.items = NULL,
mins = 0,
lca_cats = NULL,
prob.list = NULL
)
Arguments
a a matrix/vector of slope parameters. If slopes are to be constrained to zero then
use NA or simply set them equal to 0
d a matrix/vector of intercepts. The matrix should have as many columns as the
item with the largest number of categories, and filled empty locations with NA.
When a vector is used the test is assumed to consist only of dichotomous items
(because only one intercept per item is provided). When itemtype = 'lca'
intercepts will not be used
N sample size
itemtype a character vector of length nrow(a) (or 1, if all the item types are the same)
specifying the type of items to simulate. Inputs can either be the same as the
inputs found in the itemtype argument in mirt or the internal classes defined
by the package. Typical itemtype inputs that are passed to mirt are used then
these will be converted into the respective internal classes automatically.
If the internal class of the object is specified instead, the inputs can be 'dich','graded','gpcm','seque
or 'lca', for dichotomous, graded, generalized partial credit, sequential, nom-
inal, nested logit, partially compensatory, generalized graded unfolding model,
and latent class analysis model. Note that for the gpcm, nominal, and nested
simdata 181
lca_cats a vector indicating how many categories each lca item should have. If not sup-
plied then it is assumed that 2 categories should be generated for each item
prob.list an optional list containing matrix/data.frames of probabilities values for each
category to be simulated. This is useful when creating customized probability
functions to be sampled from
Details
Returns a data matrix simulated from the parameters, or a list containing the data, item objects, and
Theta matrix.
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Reckase, M. D. (2009). Multidimensional Item Response Theory. New York: Springer.
Examples
set.seed(1234)
a <- matrix(c(
.7471, .0250, .1428,
.4595, .0097, .0692,
.8613, .0067, .4040,
1.0141, .0080, .0470,
.5521, .0204, .1482,
1.3547, .0064, .5362,
1.3761, .0861, .4676,
.8525, .0383, .2574,
1.0113, .0055, .2024,
.9212, .0119, .3044,
.0026, .0119, .8036,
.0008, .1905,1.1945,
.0575, .0853, .7077,
.0182, .3307,2.1414,
.0256, .0478, .8551,
.0246, .1496, .9348,
.0262, .2872,1.3561,
.0038, .2229, .8993,
.0039, .4720, .7318,
.0068, .0949, .6416,
.3073, .9704, .0031,
.1819, .4980, .0020,
simdata 183
.4115,1.1136, .2008,
.1536,1.7251, .0345,
.1530, .6688, .0020,
.2890,1.2419, .0220,
.1341,1.4882, .0050,
.0524, .4754, .0012,
.2139, .4612, .0063,
.1761,1.1200, .0870),30,3,byrow=TRUE)*1.702
d <- matrix(c(.1826,-.1924,-.4656,-.4336,-.4428,-.5845,-1.0403,
.6431,.0122,.0912,.8082,-.1867,.4533,-1.8398,.4139,
-.3004,-.1824,.5125,1.1342,.0230,.6172,-.1955,-.3668,
-1.7590,-.2434,.4925,-.3410,.2896,.006,.0329),ncol=1)*1.702
## Not run:
a <- matrix(rlnorm(20,.2,.3))
# for the graded model, ensure that there is enough space between the intercepts,
# otherwise closer categories will not be selected often (minimum distance of 0.3 here)
diffs <- t(apply(matrix(runif(20*4, .3, 1), 20), 1, cumsum))
diffs <- -(diffs - rowMeans(diffs))
d <- diffs + rnorm(20)
### An example of a mixed item, bifactor loadings pattern with correlated specific factors
a <- matrix(c(
.8,.4,NA,
.4,.4,NA,
.7,.4,NA,
.8,NA,.4,
.4,NA,.4,
.7,NA,.4),ncol=3,byrow=TRUE)
d <- matrix(c(
-1.0,NA,NA,
1.5,NA,NA,
0.0,NA,NA,
0.0,-1.0,1.5, #the first 0 here is the recommended constraint for nominal
184 simdata
a <- matrix(c(
.8,.4,
.4,.4,
.7,.4,
.8,NA,
.4,NA,
.7,NA),ncol=2,byrow=TRUE)
d <- matrix(rnorm(6))
itemtype <- rep('2PL',6)
a <- matrix(rlnorm(4,0,.2))
#first column of item 4 is the intercept for the correct category of 2PL model,
# otherwise nominal model configuration
d <- matrix(c(
-1.0,NA,NA,NA,
1.5,NA,NA,NA,
0.0,NA,NA,NA,
1, 0.0,-0.5,0.5),ncol=4,byrow=TRUE)
#itemplot(mod,4)
# alternatively, define a suitable object with functions from the mirtCAT package
# help(generate.mirt_object)
library(mirtCAT)
nitems <- 50
a1 <- rlnorm(nitems, .2,.2)
d <- rnorm(nitems)
g <- rbeta(nitems, 20, 80)
pars <- data.frame(a1=a1, d=d, g=g)
head(pars)
######
# prob.list example
set.seed(1)
theta <- matrix(rnorm(100))
prob.list <- list()
nitems <- 5
SingleGroupClass-class 187
## End(Not run)
SingleGroupClass-class
Class "SingleGroupClass"
Description
Defines the object returned from mirt when model is exploratory.
Slots
Call: function call
Data: list of data, sometimes in different forms
Options: list of estimation options
Fit: a list of fit information
Model: a list of model-based information
ParObjects: a list of the S4 objects used during estimation
OptimInfo: a list of arguments from the optimization process
Internals: a list of internal arguments for secondary computations (inspecting this object is gen-
erally not required)
vcov: a matrix represented the asymptotic covariance matrix of the parameter estimates
time: a data.frame indicating the breakdown of computation times in seconds
188 summary-method
Methods
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Description
Transforms coefficients into a standardized factor loading’s metric. For MixedClass objects, the
fixed and random coefficients are printed. Note that while the output to the console is rounded to
three digits, the returned list of objects is not. For simulations, use output <-summary(mod,verbose
= FALSE) to suppress the console messages.
Usage
Arguments
object an object of class SingleGroupClass, MultipleGroupClass, or MixedClass
rotate a string indicating which rotation to use for exploratory models, primarily from
the GPArotation package (see documentation therein).
Rotations currently supported are: 'promax', 'oblimin', 'varimax', 'quartimin',
'targetT', 'targetQ', 'pstT', 'pstQ', 'oblimax', 'entropy', 'quartimax',
'simplimax', 'bentlerT', 'bentlerQ', 'tandemI', 'tandemII', 'geominT',
'geominQ', 'cfT', 'cfQ', 'infomaxT', 'infomaxQ', 'mccammon', 'bifactorT',
'bifactorQ'.
For models that are not exploratory this input will automatically be set to 'none'
Target a dummy variable matrix indicting a target rotation pattern. This is required for
rotations such as 'targetT', 'targetQ', 'pstT', and 'pstQ'
suppress a numeric value indicating which (possibly rotated) factor loadings should be
suppressed. Typical values are around .3 in most statistical software. Default is
0 for no suppression
verbose logical; allow information to be printed to the console?
... additional arguments to be passed
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
See Also
coef-method
Examples
## Not run:
x <- mirt(Science, 2)
summary(x)
summary(x, rotate = 'varimax')
## End(Not run)
Description
Given an estimated model compute the test information.
190 testinfo
Usage
testinfo(
x,
Theta,
degrees = NULL,
group = NULL,
individual = FALSE,
which.items = 1:extract.mirt(x, "nitems")
)
Arguments
x an object of class ’SingleGroupClass’, or an object of class ’MultipleGroup-
Class’ if a suitable group input were supplied
Theta a matrix of latent trait values
degrees a vector of angles in degrees that are between 0 and 90. Only applicable when
the input object is multidimensional
group group argument to pass to extract.group function. Required when the input
object is a multiple-group model
individual logical; return a data.frame of information traceline for each item?
which.items an integer vector indicating which items to include in the expected information
function. Default uses all possible items
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
#most loss of info around -1 when removing items 1 and 2; expected given item info functions
plot(Theta, tinfo_smaller - tinfo, type = 'l')
## End(Not run)
Description
This function constructs all possible k-way combinations of an input vector. It is primarily useful
when used in conjunction with the mdirt function, though users may have other uses for it as well.
See expand.grid for more flexible combination formats.
Usage
Arguments
theta the vector from which all possible combinations should be obtained
nfact the number of observations (and therefore the number of columns to return in
the matrix of combinations)
intercept logical; should a vector of 1’s be appended to the first column of the result to
include an intercept design component? Default is FALSE
Value
Author(s)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
192 traditional2mirt
Examples
traditional2mirt Convert traditional IRT metric into slope-intercept form used in mirt
Description
This is a helper function for users who have previously available traditional/classical IRT parame-
ters and want to know the equivalent slope-intercept translation used in mirt. Note that this func-
tion assumes that the supplied models are unidimensional by definition (i.e., will have only one
slope/discrimination). If there is no supported slope-interecept transformation available then the
original vector of parameters will be returned by default.
Usage
traditional2mirt(x, cls, ncat)
Arguments
x a vector of parameters to tranform
cls the class or itemtype of the supplied model
ncat the number of categories implied by the IRT model
Details
Supported class transformations for the cls input are:
Rasch, 2PL, 3PL, 3PLu, 4PL Form must be: (discrimination, difficulty, lower-bound, upper-bound)
graded Form must be: (discrimination, difficulty 1, difficulty 2, ..., difficulty k-1)
gpcm Form must be: (discrimination, difficulty 1, difficulty 2, ..., difficulty k-1)
nominal Form must be: (discrimination 1, discrimination 2, ..., discrimination k, difficulty 1, diffi-
culty 2, ..., difficulty k)
Value
a named vector of slope-intercept parameters (if supported)
vcov-method 193
Examples
Description
Usage
Arguments
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
194 wald
Examples
## Not run:
x <- mirt(Science, 1, SE=TRUE)
vcov(x)
## End(Not run)
Description
Compute a Wald test given an L vector or matrix of numeric contrasts. Requires that the model infor-
mation matrix be computed (by passing SE = TRUE when estimating the model). Use wald(model)
to observe how the information matrix columns are named, especially if the estimated model con-
tains constrained parameters (e.g., 1PL).
Usage
wald(object, L, C = NULL)
Arguments
object estimated object from mirt, bfactor, multipleGroup, mixedmirt, or mdirt
L a coefficient matrix with dimensions nconstrasts x npars.estimated, or a
character vector giving the hypothesis in symbolic form (syntax format bor-
rowed from the car package; see Details below). Omitting this value will
return the column names of the information matrix used to identify the (poten-
tially constrained) parameters
C a constant vector of population parameters to be compared along side L, where
length(C) == row(L). By default a vector of 0’s is constructed. Note that when
using the syntax input for L this argument is ignored
The following description is borrowed from car package documentation per-
taining to the character vector input to the argument L: "The hypothesis matrix
can be supplied as a numeric matrix (or vector), the rows of which specify lin-
ear combinations of the model coefficients, which are tested equal to the cor-
responding entries in the right-hand-side vector, which defaults to a vector of
zeroes.
Alternatively, the hypothesis can be specified symbolically as a character vec-
tor with one or more elements, each of which gives either a linear combination
of coefficients, or a linear equation in the coefficients (i.e., with both a left and
right side separated by an equals sign). Components of a linear expression or
linear equation can consist of numeric constants, or numeric constants multiply-
ing coefficient names (in which case the number precedes the coefficient, and
wald 195
Author(s)
Phil Chalmers <rphilip.chalmers@gmail.com>
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Envi-
ronment. Journal of Statistical Software, 48(6), 1-29. doi: 10.18637/jss.v048.i06
Examples
## Not run:
# see how the information matrix relates to estimated parameters, and how it lines up
# with the parameter index
(infonames <- wald(mod))
index <- mod2values(mod)
index[index$est, ]
#simultaneously test equal factor slopes for item 1 and 2, and 4 and 5
L <- matrix(0, 2, 10)
L[1,1] <- L[2, 7] <- 1
L[1,3] <- L[2, 9] <- -1
L
wald(mod, L)
#####
# test equality of means in multi-group model:
# H0: (mu1 - mu2) = (mu3 - mu4)
set.seed(12345)
a <- matrix(abs(rnorm(15,1,.3)), ncol=1)
d <- matrix(rnorm(15,0,.7),ncol=1)
itemtype <- rep('2PL', nrow(a))
N <- 500
dataset1 <- simdata(a, d, N, itemtype)
dataset2 <- simdata(a, d, N, itemtype, mu = .5)
dataset3 <- simdata(a, d, N, itemtype, mu = -1)
dataset4 <- simdata(a, d, N, itemtype, mu = -.5)
dat <- rbind(dataset1, dataset2, dataset3, dataset4)
group <- factor(rep(paste0('D', 1:4), each=N))
levels(group)
models <- 'F1 = 1-15'
# 3 means estimated
mod_free <- multipleGroup(dat, models, group = group, SE=TRUE,
invariance=c('slopes', 'intercepts', 'free_var','free_means'))
wald(mod_free) # obtain parameter names
# View(mod2values(mod_free))
## End(Not run)
Index
197
198 INDEX
coef,SingleGroupClass-method logLik,MixedClass-method
(coef-method), 17 (logLik-method), 87
coef-method, 17, 112 logLik,MixtureClass-method
createGroup, 19 (logLik-method), 87
createItem, 21, 90, 94, 96, 104, 112 logLik,MultipleGroupClass-method
(logLik-method), 87
data.matrix, 103 logLik,SingleGroupClass-method
deAyala, 25 (logLik-method), 87
DIF, 26, 34, 37, 39, 141, 143, 172 logLik-method, 87
DiscreteClass-class, 29 LSAT6, 88
draw_parameters, 31, 33 LSAT7, 89
DRF, 28, 31, 32, 143, 172
DTF, 37 M2, 90, 96, 97, 112
marginal_rxx, 46, 92
empirical_ES, 40, 172
MDIFF, 93
empirical_plot, 43
empirical_rxx, 45, 92 mdirt, 30, 64, 94, 157, 191
estfun.AllModelClass, 46 MDISC, 94, 101
expand.grid, 191 mirt, 9–11, 17, 22, 44, 46, 47, 57, 60, 63, 67,
expand.table, 48, 117 84, 95, 96, 102, 128, 133–135, 142,
expected.item, 50, 52 143, 161, 163, 167, 169, 180, 181,
expected.test, 51, 51 187
extract.group, 7, 52, 54, 56, 92–94, 101, mirt-package, 4
102, 143, 162, 190 mirt.model, 10, 57, 95, 97, 103, 106, 107,
extract.item, 50, 51, 53, 53, 56, 78, 79, 117, 111, 112, 125, 133, 142, 143
161, 162 mirtCluster, 15, 26, 64, 97, 105, 110, 112,
extract.mirt, 53, 54, 54, 117, 141 130, 132
MixedClass-class, 131, 134
factor, 142 mixedmirt, 60, 102, 111, 117, 128, 131, 132,
fixedCalib, 57 162
fixef, 60, 117, 135 MixtureClass-class, 139
fscores, 41, 45, 46, 61, 68, 71, 72, 76, 90, 96, mod2values, 56, 84, 117, 140, 153, 181
97, 111, 112, 151, 156, 163 multipleGroup, 10, 26–28, 34, 39, 41, 46, 47,
52, 57, 102, 117, 128, 139, 141, 149,
gen.difficulty, 67 172
MultipleGroupClass-class, 11, 143, 148
imputeMissing, 68, 112
integrate, 7 ns, 104, 108
itemfit, 69, 76, 96, 97, 112, 152 numerical_deriv, 22, 84, 150
itemGAM, 44, 69, 72, 75
iteminfo, 78, 81, 117
optim, 105
itemplot, 44, 80, 112