Title: | IRT Equating Methods |
---|---|
Description: | Computation of direct, chain and average (bisector) equating coefficients with standard errors using Item Response Theory (IRT) methods for dichotomous items (Battauz (2013) <doi:10.1007/s11336-012-9316-y>, Battauz (2015) <doi:10.18637/jss.v068.i07>). Test scoring can be performed by true score equating and observed score equating methods. DIF detection can be performed using a Wald-type test (Battauz (2019) <doi:10.1007/s10260-018-00442-w>). The package includes tests to assess the stability of the equating transformations (Battauz(2022) <doi:10.1111/stan.12277>). |
Authors: | Michela Battauz [aut, cre] |
Maintainer: | Michela Battauz <[email protected]> |
License: | GPL-3 |
Version: | 2.5.1 |
Built: | 2024-11-03 03:36:16 UTC |
Source: | https://github.com/cran/equateIRT |
This package computes direct, chain and average (bisector) equating coefficients with standard errors using IRT methods for dichotomous items. The IRT models included are the three-parameter logistic model, the two-parameter logistic model, the one-parameter logistic model and the Rasch model. Test scoring can be performed by true score equating and observed score equating methods. DIF detection can be performed using a Wald-type test.
Package: | equateIRT |
Type: | Package |
Version: | 2.5.0 |
Date: | 2024-07-30 |
License: | GPL-3 |
Direct equating coefficients and their standard errors
between forms presenting common items
can be computed using function direc
.
The equating methods implemented are
"mean-mean", "mean-geometric mean", "mean-sigma", "Haebara" and "Stocking-Lord".
Estimates of item parameters and their covariance matrix can be imported
from the R packages ltm
and mirt
or from the IRT programs IRTPRO and flexMIRT using
functions import.ltm
, import.mirt
, import.irtpro
and import.flexmirt
.
Item parameter estimates from other software can be imported as well
by the user.
Data should be previously organized using function modIRT
.
Function alldirec
computes all direct equating coefficients
(with standard errors) between all pairs of a list of forms.
Function chainec
computes chain equating coefficients
(and standard errors)
given direct equating coefficients between forms directly linked.
Average equating coefficients with standard errors
can be calculated using function bisectorec
, that
implements the (weighted) bisector method.
Once the equating coefficients are obtained, the computation of
equated scores can be performed using function score
,
which implements true score equating and observed score equating.
Standard errors of equated scores are also provided.
Three simulated datasets are available for illustrative purposes.
These datasets contain item parameter coefficients and their
covariance matrix. In particular, est3pl
concerns a
three-parameter logistic model, est2pl
regards a
two-parameter logistic model, and estrasch
refers to
a Rasch model.
The estimates included in est2pl
are obtained from the
dataset data2pl
, also contained in the package.
Function dif.test
performs a Wald-type test for the
detection of DIF (Battauz, 2018).
The stability of the equating transformations can be assessed using
function sd.test
, which tests if the equating coefficients
that link the same two forms are equal, and function id.test
,
which tests if the equating coefficients that link a form to itself
through a chain of forms return the identity equating.
Michela Battauz
Maintainer: Michela Battauz <[email protected]>
Battauz, M. (2013). IRT Test Equating in Complex Linkage Plans. Psychometrika, 78, 464–480.
Battauz, M. (2015). equateIRT: An R Package for IRT Test Equating. Journal of Statistical Software, 68, 1–22.
Battauz, M. (2019). On Wald tests for differential item functioning detection. Statistical Methods and Applications. 28, 103–118.
Battauz, M. (2022). Testing for differences in chain equating. Statistica Neerlandica, 1–12.
Cai L. (2013). FlexMIRT version 2: Flexible Multilevel Multidimensional Item Analysis and Test Scoring [Computer Software]. Chapel Hill, NC: Vector Psychometric Group.
Cai, L., du Toit, S. H. C., Thissen, D. (2011). IRTPRO: Flexible, multidimensional, multiple categorical IRT modeling [Computer software]. Chicago: Scientific Software International.
Chalmers, R. P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Environment. Journal of Statistical Software, 48, 1–29.
Holland, P.W. and Strawderman, W.E. (2011). How to average equating functions if you must. In A.A. von Davier (Ed.), Statistical models for test equating, scaling, and linking (pp. 89–107). New York: Springer.
Kolen, M.J. and Brennan, R.L. (2014). Test equating, scaling, and linking: methods and practices, 3rd ed., New York: Springer.
Ogasawara, H. (2000). Asymptotic standard errors of IRT equating coefficients using moments. Economic Review (Otaru University of Commerce), 51, 1–23.
Ogasawara, H. (2001a). Item response theory true score equatings and their standard errors. Journal of Educational and Behavioral Statistics, 26, 31–50.
Ogasawara, H. (2001b). Standard Errors of Item Response Theory Equating/Linking by Response Function Methods. Applied Psychological Measurement, 25, 53–67.
Ogasawara, H. (2003). Asymptotic standard errors of IRT observed-score equating methods. Psychometrika, 68, 193–211.
Rizopoulos, D. (2006). ltm: an R package for latent variable modelling and item response theory analyses. Journal of Statistical Software, 17, 1–25.
Calculates direct equating coefficients and standard errors using IRT methods between all pairs of a list of forms.
alldirec(mods, method = "mean-mean", all = FALSE, quadrature = TRUE, nq = 30, direction = "both")
alldirec(mods, method = "mean-mean", all = FALSE, quadrature = TRUE, nq = 30, direction = "both")
mods |
an object of the class |
method |
the equating method to be used. This should be one of
" |
all |
logical; if FALSE forms that do not have common items will not appear in the output. |
quadrature |
logical; if TRUE the Gauss-Hermite quadrature is used to approximate the integral in the function that is minimized in the Haebara and Stocking-Lord methods. If FALSE the integral is replaced with a sum over 40 equally spaced values ranging from -4 to 4 with an increment of 0.05 and weights equal to one for all values. |
nq |
number of quadrature points used for the Gauss-Hermite quadrature
if |
direction |
a character string specifying the direction used to equate
pair of forms. If " |
An object of class eqclist
consisting in a list with length
equal to the number of pairs of forms equated. Each component of
the list is an object of class eqc
returned by function
direc
.
Michela Battauz
Battauz, M. (2015). equateIRT: An R Package for IRT Test Equating. Journal of Statistical Software, 68, 1–22.
Kolen, M.J. and Brennan, R.L. (2014). Test equating, scaling, and linking: methods and practices, 3rd ed., New York: Springer
Ogasawara, H. (2000). Asymptotic standard errors of IRT equating coefficients using moments. Economic Review (Otaru University of Commerce), 51, 1–23.
Ogasawara, H. (2001). Standard Errors of Item Response Theory Equating/Linking by Response Function Methods. Applied Psychological Measurement, 25, 53–67.
direc
, eqc
, itm
, modIRT
, summary.eqclist
# the following code can be used to start from item response data ## Not run: library("mirt") data("data2pl") m1 <- mirt(data2pl[[1]], SE = TRUE) m2 <- mirt(data2pl[[2]], SE = TRUE) m3 <- mirt(data2pl[[3]], SE = TRUE) m4 <- mirt(data2pl[[4]], SE = TRUE) m5 <- mirt(data2pl[[5]], SE = TRUE) mlist<- list(m1,m2,m3,m4,m5) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(est.mods = mlist, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") summary(direclist2pl) summary(direclist2pl$test2.test1) ## End(Not run) # =========================================================================== # the following code uses item parameter estimates previously obtained # three-parameter logistic model # direct equating coefficients using the "Stocking-Lord" method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) direclist3pl <- alldirec(mods = mod3pl, method = "Stocking-Lord") summary(direclist3pl) summary(direclist3pl$test1.test2) # two-parameter logistic model # direct equating coefficients using the "Haebara" method data(est2pl) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") summary(direclist2pl) summary(direclist2pl$test1.test5) # Rasch model # direct equating coefficients using the "mean-mean" method data(estrasch) test <- paste("test", 1:5, sep = "") modrasch <- modIRT(coef = estrasch$coef, var = estrasch$var, names = test, display = FALSE) direclistrasch <- alldirec(mods = modrasch, method = "mean-mean", all = TRUE) summary(direclistrasch) summary(direclistrasch$test5.test4)
# the following code can be used to start from item response data ## Not run: library("mirt") data("data2pl") m1 <- mirt(data2pl[[1]], SE = TRUE) m2 <- mirt(data2pl[[2]], SE = TRUE) m3 <- mirt(data2pl[[3]], SE = TRUE) m4 <- mirt(data2pl[[4]], SE = TRUE) m5 <- mirt(data2pl[[5]], SE = TRUE) mlist<- list(m1,m2,m3,m4,m5) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(est.mods = mlist, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") summary(direclist2pl) summary(direclist2pl$test2.test1) ## End(Not run) # =========================================================================== # the following code uses item parameter estimates previously obtained # three-parameter logistic model # direct equating coefficients using the "Stocking-Lord" method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) direclist3pl <- alldirec(mods = mod3pl, method = "Stocking-Lord") summary(direclist3pl) summary(direclist3pl$test1.test2) # two-parameter logistic model # direct equating coefficients using the "Haebara" method data(est2pl) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") summary(direclist2pl) summary(direclist2pl$test1.test5) # Rasch model # direct equating coefficients using the "mean-mean" method data(estrasch) test <- paste("test", 1:5, sep = "") modrasch <- modIRT(coef = estrasch$coef, var = estrasch$var, names = test, display = FALSE) direclistrasch <- alldirec(mods = modrasch, method = "mean-mean", all = TRUE) summary(direclistrasch) summary(direclistrasch$test5.test4)
Calculates average equating coefficients using the bisector method and standard errors given a set of direct and chain equating coefficients.
bisectorec(ecall, mods = NULL, weighted = TRUE, unweighted = TRUE)
bisectorec(ecall, mods = NULL, weighted = TRUE, unweighted = TRUE)
ecall |
list of objects of class |
mods |
an object of class |
weighted |
logical; if TRUE weighted bisector coefficients are computed. |
unweighted |
logical; if TRUE unweighted bisector coefficients are computed. |
An object of class meqc
with components
coef |
data frame containing |
method |
the equating method used. |
Michela Battauz
Battauz, M. (2013). IRT Test Equating in Complex Linkage Plans. Psychometrika, 78, 464–480.
Battauz, M. (2015). equateIRT: An R Package for IRT Test Equating. Journal of Statistical Software, 68, 1–22.
Holland, P.W. and Strawderman, W.E. (2011). How to average equating functions if you must. In A.A. von Davier (Ed.), Statistical models for test equating, scaling, and linking (pp. 89–107). New York: Springer.
chainec
, convert
, direc
, eqc
, summary.meqc
# the following code can be used to start from item response data ## Not run: library("mirt") data("data2pl") m1 <- mirt(data2pl[[1]], SE = TRUE) m2 <- mirt(data2pl[[2]], SE = TRUE) m3 <- mirt(data2pl[[3]], SE = TRUE) m4 <- mirt(data2pl[[4]], SE = TRUE) m5 <- mirt(data2pl[[5]], SE = TRUE) mlist<- list(m1,m2,m3,m4,m5) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(est.mods = mlist, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) chainec2 <- chainec(direclist = direclist2pl, pths = pth2) # create a list of objects of class ceqc ecall <- c(chainec1, chainec2) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) summary(allec) ## End(Not run) # =========================================================================== # the following code uses item parameter estimates previously obtained # three-parameter logistic model # direct equating coefficients using the "Stocking-Lord" method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) direclist3pl <- alldirec(mods = mod3pl, method = "Stocking-Lord") # compute chain equating coefficients for path 1,2,3,4,5 pth3 <- paste("test", 1:5, sep = "") chainec3 <- chainec(direclist = direclist3pl, pths = pth3) # create a list of objects of class eqc or ceqc ecall <- c(chainec3, direclist3pl["test1.test5"]) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) summary(allec) # two-parameter logistic model # direct equating coefficients using the "Haebara" method data(est2pl) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) chainec2 <- chainec(direclist = direclist2pl, pths = pth2) # compute chain equating coefficients for path 1,2,3,4,5 pth3 <- paste("test", 1:5, sep = "") chainec3 <- chainec(direclist = direclist2pl, pths = pth3) # create a list of objects of class eqc or ceqc ecall <- c(chainec1, chainec2, chainec3, direclist2pl["test1.test5"]) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) summary(allec) # Rasch model # direct equating coefficients using the "mean-mean" method data(estrasch) test <- paste("test", 1:5, sep = "") modrasch <- modIRT(coef = estrasch$coef, var = estrasch$var, names = test, display = FALSE) direclistrasch <- alldirec(mods = modrasch, method = "mean-mean", all = TRUE) # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclistrasch, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) chainec2 <- chainec(direclist = direclistrasch, pths = pth2) # create a list of objects of class eqc or ceqc ecall <- c(chainec1, chainec2) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) summary(allec)
# the following code can be used to start from item response data ## Not run: library("mirt") data("data2pl") m1 <- mirt(data2pl[[1]], SE = TRUE) m2 <- mirt(data2pl[[2]], SE = TRUE) m3 <- mirt(data2pl[[3]], SE = TRUE) m4 <- mirt(data2pl[[4]], SE = TRUE) m5 <- mirt(data2pl[[5]], SE = TRUE) mlist<- list(m1,m2,m3,m4,m5) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(est.mods = mlist, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) chainec2 <- chainec(direclist = direclist2pl, pths = pth2) # create a list of objects of class ceqc ecall <- c(chainec1, chainec2) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) summary(allec) ## End(Not run) # =========================================================================== # the following code uses item parameter estimates previously obtained # three-parameter logistic model # direct equating coefficients using the "Stocking-Lord" method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) direclist3pl <- alldirec(mods = mod3pl, method = "Stocking-Lord") # compute chain equating coefficients for path 1,2,3,4,5 pth3 <- paste("test", 1:5, sep = "") chainec3 <- chainec(direclist = direclist3pl, pths = pth3) # create a list of objects of class eqc or ceqc ecall <- c(chainec3, direclist3pl["test1.test5"]) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) summary(allec) # two-parameter logistic model # direct equating coefficients using the "Haebara" method data(est2pl) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) chainec2 <- chainec(direclist = direclist2pl, pths = pth2) # compute chain equating coefficients for path 1,2,3,4,5 pth3 <- paste("test", 1:5, sep = "") chainec3 <- chainec(direclist = direclist2pl, pths = pth3) # create a list of objects of class eqc or ceqc ecall <- c(chainec1, chainec2, chainec3, direclist2pl["test1.test5"]) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) summary(allec) # Rasch model # direct equating coefficients using the "mean-mean" method data(estrasch) test <- paste("test", 1:5, sep = "") modrasch <- modIRT(coef = estrasch$coef, var = estrasch$var, names = test, display = FALSE) direclistrasch <- alldirec(mods = modrasch, method = "mean-mean", all = TRUE) # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclistrasch, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) chainec2 <- chainec(direclist = direclistrasch, pths = pth2) # create a list of objects of class eqc or ceqc ecall <- c(chainec1, chainec2) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) summary(allec)
Calculates chain (indirect) equating coefficients and standard errors using IRT methods.
chainec(r = NULL, direclist, f1 = NULL, f2 = NULL, pths = NULL)
chainec(r = NULL, direclist, f1 = NULL, f2 = NULL, pths = NULL)
r |
length of the chain, that is the number of forms used for equating
including extremes. It should be at least 3. It does not need to
be specified if argument |
direclist |
an object of the class |
f1 |
the name of the first form of the chain. |
f2 |
the name of the last form of the chain. |
pths |
vector, matrix or data frame containing the path used for equating.
The number of columns
is equal to r and the number of rows is equal to the equatings that
have to be performed.
If |
Equating coefficients perform the conversion from the scale of the first form to the scale of the last form of the path.
An object of class ceqclist
consisting in a list with length
equal to the number of chain equating coefficients computed.
Each component of the list is an object of class ceqc
with components
tab1 |
item parameters of the first form. |
tab2 |
item parameters of the last form. |
tab |
Data frame containing item names ( |
varAll |
covariance matrix of item parameters of all forms used in the chain. |
partial |
partial derivatives of equating coefficients A and B with respect to item parameters. |
A |
equating coefficient A. |
B |
equating coefficient B. |
varAB |
covariance matrix of the equating coefficients. |
commonitem |
list of length r-1 containing the names of common item parameters between adjacent forms. |
ni |
vector containing number of common items between pairs of adjacent forms. |
forms |
names of equated forms. |
method |
the equating method used. |
itmp |
number of item parameters of the IRT model. |
Michela Battauz
Battauz, M. (2013). IRT Test Equating in Complex Linkage Plans. Psychometrika, 78, 464–480.
Battauz, M. (2015). equateIRT: An R Package for IRT Test Equating. Journal of Statistical Software, 68, 1–22.
Kolen, M.J. and Brennan, R.L. (2014). Test equating, scaling, and linking: methods and practices, 3rd ed., New York: Springer
alldirec
, eqc
, itm
, summary.ceqc
, summary.ceqclist
# the following code can be used to start from item response data ## Not run: library("mirt") data("data2pl") m1 <- mirt(data2pl[[1]], SE = TRUE) m2 <- mirt(data2pl[[2]], SE = TRUE) m3 <- mirt(data2pl[[3]], SE = TRUE) m4 <- mirt(data2pl[[4]], SE = TRUE) m5 <- mirt(data2pl[[5]], SE = TRUE) mlist<- list(m1,m2,m3,m4,m5) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(est.mods = mlist, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) summary(chainec1) ## End(Not run) # =========================================================================== # the following code uses item parameter estimates previously obtained # three-parameter logistic model # direct equating coefficients using the "Stocking-Lord" method data(est3pl) test<-paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) direclist3pl <- alldirec(mods = mod3pl, method = "Stocking-Lord") # compute all chain equating coefficients of length 4 chainec4 <- chainec(r = 4, direclist = direclist3pl) summary(chainec4) summary(chainec4$test1.test2.test3.test4) # compute all chain equating coefficients of length 4 # where the first form is test1 chainec4.1 <- chainec(r = 4, direclist = direclist3pl, f1 = "test1") summary(chainec4.1) # compute all chain equating coefficients of length 4 # where the first form is test1 and the last form is test4 chainec4.14 <- chainec(r = 4, direclist = direclist3pl, f1 = "test1", f2 = "test4") summary(chainec4.14) # two-parameter logistic model # direct equating coefficients using the "Haebara" method data(est2pl) test<-paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute chain equating coefficients of a given path pth <- paste("test", c(1,5,4), sep = "") chainec154 <- chainec(direclist = direclist2pl, pths = pth) summary(chainec154) # Rasch model # direct equating coefficients using the "mean-mean" method data(estrasch) test<-paste("test", 1:5, sep = "") modrasch <- modIRT(coef = estrasch$coef, var = estrasch$var, names = test, display = FALSE) direclistrasch <- alldirec(mods = modrasch, method = "mean-mean", all = TRUE) # compute chain equating coefficients of two given paths pth1 <- paste("test", 1:3, sep = "") pth2 <- paste("test", c(1,5,4), sep = "") pths <- rbind(pth1, pth2) chainec1 <- chainec(direclist = direclistrasch, pths = pths) summary(chainec1)
# the following code can be used to start from item response data ## Not run: library("mirt") data("data2pl") m1 <- mirt(data2pl[[1]], SE = TRUE) m2 <- mirt(data2pl[[2]], SE = TRUE) m3 <- mirt(data2pl[[3]], SE = TRUE) m4 <- mirt(data2pl[[4]], SE = TRUE) m5 <- mirt(data2pl[[5]], SE = TRUE) mlist<- list(m1,m2,m3,m4,m5) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(est.mods = mlist, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) summary(chainec1) ## End(Not run) # =========================================================================== # the following code uses item parameter estimates previously obtained # three-parameter logistic model # direct equating coefficients using the "Stocking-Lord" method data(est3pl) test<-paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) direclist3pl <- alldirec(mods = mod3pl, method = "Stocking-Lord") # compute all chain equating coefficients of length 4 chainec4 <- chainec(r = 4, direclist = direclist3pl) summary(chainec4) summary(chainec4$test1.test2.test3.test4) # compute all chain equating coefficients of length 4 # where the first form is test1 chainec4.1 <- chainec(r = 4, direclist = direclist3pl, f1 = "test1") summary(chainec4.1) # compute all chain equating coefficients of length 4 # where the first form is test1 and the last form is test4 chainec4.14 <- chainec(r = 4, direclist = direclist3pl, f1 = "test1", f2 = "test4") summary(chainec4.14) # two-parameter logistic model # direct equating coefficients using the "Haebara" method data(est2pl) test<-paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute chain equating coefficients of a given path pth <- paste("test", c(1,5,4), sep = "") chainec154 <- chainec(direclist = direclist2pl, pths = pth) summary(chainec154) # Rasch model # direct equating coefficients using the "mean-mean" method data(estrasch) test<-paste("test", 1:5, sep = "") modrasch <- modIRT(coef = estrasch$coef, var = estrasch$var, names = test, display = FALSE) direclistrasch <- alldirec(mods = modrasch, method = "mean-mean", all = TRUE) # compute chain equating coefficients of two given paths pth1 <- paste("test", 1:3, sep = "") pth2 <- paste("test", c(1,5,4), sep = "") pths <- rbind(pth1, pth2) chainec1 <- chainec(direclist = direclistrasch, pths = pths) summary(chainec1)
Converts item and person parameters using equating coefficients.
convert(A, B, coef = NULL, person.par = NULL)
convert(A, B, coef = NULL, person.par = NULL)
A |
equating coefficient A. |
B |
equating coefficient B. |
coef |
vector of item parameters return by function |
person.par |
vector of person parameters estimates. |
Difficulty parameters are converted using transformation
;
discrimination parameters
are converted using transformation
;
guessing parameters c are not transformed.
Person parameters are converted using transformation
.
A list with components
coef |
vector of item parameters transformed. |
person.par |
vector of person parameters transformed |
Michela Battauz
Battauz, M. (2015). equateIRT: An R Package for IRT Test Equating. Journal of Statistical Software, 68, 1–22.
Kolen, M.J. and Brennan, R.L. (2014). Test equating, scaling, and linking: methods and practices, 3rd ed., New York: Springer
# conversion using direct coefficients # three-parameter logistic model # direct equating coefficients between forms 1 and 2 using the Stocking-Lord method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) l12 <- direc(mod1 = mod3pl[1], mod2 = mod3pl[2], method = "Stocking-Lord") convert(A = l12$A, B = l12$B, coef = coef(mod3pl$test1)) # the conversion of item parameters is obtained also using itm(l12) # conversion using bisector coefficients # two-parameter logistic model # direct equating coefficients using the "Haebara" method data(est2pl) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) chainec2 <- chainec(direclist = direclist2pl, pths = pth2) # create a list of objects of class ceqc ecall <- c(chainec1, chainec2) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) summary(allec) eqc14<-eqc(allec, link = "test1.test4", path = "bisector") convert(A = eqc14$A, B = eqc14$B, coef = coef(mod2pl$test1), person.par = seq(-3, 3, 0.5))
# conversion using direct coefficients # three-parameter logistic model # direct equating coefficients between forms 1 and 2 using the Stocking-Lord method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) l12 <- direc(mod1 = mod3pl[1], mod2 = mod3pl[2], method = "Stocking-Lord") convert(A = l12$A, B = l12$B, coef = coef(mod3pl$test1)) # the conversion of item parameters is obtained also using itm(l12) # conversion using bisector coefficients # two-parameter logistic model # direct equating coefficients using the "Haebara" method data(est2pl) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) chainec2 <- chainec(direclist = direclist2pl, pths = pth2) # create a list of objects of class ceqc ecall <- c(chainec1, chainec2) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) summary(allec) eqc14<-eqc(allec, link = "test1.test4", path = "bisector") convert(A = eqc14$A, B = eqc14$B, coef = coef(mod2pl$test1), person.par = seq(-3, 3, 0.5))
Five simulated data sets from a two-parameter logistic model.
data(data2pl)
data(data2pl)
A list of length 5, containing 5 data frames with 5000 dichotomous responses to 20 items.
Michela Battauz
data(data2pl) data2pl[[1]][1:3,]
data(data2pl) data2pl[[1]][1:3,]
Item responses and group membership.
data(dataDIF)
data(dataDIF)
A dataframe with 3000 dichotomous responses to 20 items (I01
to I20
)
and group membership (group
).
Michela Battauz
data(dataDIF)
data(dataDIF)
Performs a Wald-type test for Differential Item Functioning detection.
dif.test(est.mods = NULL, coef = NULL, var = NULL, names = NULL, reference = NULL, method = "mean-mean", quadrature = TRUE, nq = 30, DIFtype = NULL, purification = FALSE, signif.level = 0.05, trace = FALSE, maxiter = 30, anchor = NULL)
dif.test(est.mods = NULL, coef = NULL, var = NULL, names = NULL, reference = NULL, method = "mean-mean", quadrature = TRUE, nq = 30, DIFtype = NULL, purification = FALSE, signif.level = 0.05, trace = FALSE, maxiter = 30, anchor = NULL)
est.mods |
list of output objects from functions
|
coef |
list of matrices (one for each group) containing the item parameter estimates. Guessing, difficulty and discrimination parameters should strictly be given in this order and they are contained in different columns of the matrix. The names of the rows of each matrix should be the names of the items. |
var |
list of matrices (one for each group) containing the covariance matrix of item parameter estimates. They should be given in the same order of coefficients. |
names |
character vector containing the names of the groups.
This should have the same length of |
reference |
reference group. Can be specified by name or number. The default is the first group. |
method |
the equating method to be used in function
|
quadrature |
logical; if TRUE the Gauss-Hermite quadrature is used
in function |
nq |
number of quadrature points used for the Gauss-Hermite quadrature
if |
DIFtype |
character indicating which parameters to test for DIF.
If |
purification |
logical. if TRUE the procedure described in Candell and Drasgow (1988) is applied. |
signif.level |
significance level to use in the purification process. |
trace |
logical. If TRUE tracing information is produced. |
maxiter |
The maximum number of iterations in the purification process. |
anchor |
Optional character vector containing the names of the items to use for equating. These should be items free of DIF. |
The parameterization of the IRT model is that commonly used for estimation. Under this parameterization, the three-parameter logistic model is as follows
where
denotes the conditional probability of responding correctly to
the
th item given
,
denotes the guessing parameter,
is the easiness parameter,
is the discrimination parameter, and
denotes the
latent ability.
Furthermore, the guessing parameter is equal to
.
The test verifies whether the item parameters
are invariant across two or more groups as explained in
Battauz (2018).
An object of class dift
with components
test |
matrix containing the test statistic and the p-value for each item. "noGuess" is equal to 1 if the guessing parameter of a 3PL model was set to a fixed value. |
eqmet |
the equating method used. |
DIFtype |
character indicating which parameters were tested for DIF. |
reference |
the reference group. |
focal |
the focal groups. |
names |
names of the groups. |
purification |
logical. If TRUE thre purification procedure was applied. |
signif.level |
significance level used in the purification process |
equatings |
list containing the output of function |
coef_trasf |
list containing the item parameters of each group transformed to the scale of the reference group. |
var_trasf |
list containing the covariance matrix of item parameters of each group transformed to the scale of the reference group. |
items.dif |
names of the items for which the null hypothesis of the test is rejected. |
anchor |
names of the items used as anchors. |
niter |
number of iterations. |
Michela Battauz
Battauz, M. (2019). On Wald tests for differential item functioning detection. Statistical Methods and Applications. 28, 103-118.
Candell, G.L., Drasgow, F. (1988). An iterative procedure for linking metrics and assessing item bias in item response theory. Applid Psychological Measurement, 12, 253-260.
# load the data data(dataDIF) head(dataDIF) # estimate a 2PL model for each group using the R package mirt library(mirt) data1 <- dataDIF[dataDIF$group == 1, 1:20] data2 <- dataDIF[dataDIF$group == 2, 1:20] data3 <- dataDIF[dataDIF$group == 3, 1:20] mod1 <- mirt(data1, SE = TRUE) mod2 <- mirt(data2, SE = TRUE) mod3 <- mirt(data3, SE = TRUE) # since package version 2.5.0 it is possible to skip function import.mirt # as follows # perform the test for DIF on two groups res_diftest2 <- dif.test(est.mods = list(mod1, mod2)) res_diftest2 # perform the test for DIF on three groups res_diftest3 <- dif.test(est.mods = list(mod1, mod2, mod3)) res_diftest3 # perform the test for DIF on three groups # reference group: 2 # equating method: Haebara # purification applied res_diftest3 <- dif.test(est.mods = list(mod1, mod2, mod3), reference = 2, method = "Haebara", purification = TRUE) res_diftest3
# load the data data(dataDIF) head(dataDIF) # estimate a 2PL model for each group using the R package mirt library(mirt) data1 <- dataDIF[dataDIF$group == 1, 1:20] data2 <- dataDIF[dataDIF$group == 2, 1:20] data3 <- dataDIF[dataDIF$group == 3, 1:20] mod1 <- mirt(data1, SE = TRUE) mod2 <- mirt(data2, SE = TRUE) mod3 <- mirt(data3, SE = TRUE) # since package version 2.5.0 it is possible to skip function import.mirt # as follows # perform the test for DIF on two groups res_diftest2 <- dif.test(est.mods = list(mod1, mod2)) res_diftest2 # perform the test for DIF on three groups res_diftest3 <- dif.test(est.mods = list(mod1, mod2, mod3)) res_diftest3 # perform the test for DIF on three groups # reference group: 2 # equating method: Haebara # purification applied res_diftest3 <- dif.test(est.mods = list(mod1, mod2, mod3), reference = 2, method = "Haebara", purification = TRUE) res_diftest3
Calculates direct equating coefficients and standard errors using IRT methods.
direc(mods, which, mod1, mod2, method = "mean-mean", suff1 = ".1", suff2 = ".2", D = 1, quadrature = TRUE, nq = 30, items.select = NULL)
direc(mods, which, mod1, mod2, method = "mean-mean", suff1 = ".1", suff2 = ".2", D = 1, quadrature = TRUE, nq = 30, items.select = NULL)
mods |
an object of the class |
which |
which forms to equate. Can be specified by name or number. |
mod1 |
deprecated; please use mods instead.
An object of the class |
mod2 |
deprecated; please use mods instead.
An object of the class |
method |
the equating method to be used. This should be one of
" |
suff1 |
suffix to identify the first form to be equated. |
suff2 |
suffix to identify the second form to be equated. |
D |
constant D of the IRT model used to estimate item parameters. See below for more details. |
quadrature |
logical; if TRUE the Gauss-Hermite quadrature is used to approximate the integral in the function that is minimized in the Haebara and Stocking-Lord methods. If FALSE the integral is replaced with a sum over 40 equally spaced values ranging from -4 to 4 with an increment of 0.05 and weights equal to one for all values. |
nq |
number of quadrature points used for the Gauss-Hermite quadrature
if |
items.select |
optional character vector including the names of the items to use for equating. |
Equating coefficients perform the conversion from the scale of the first form to the scale of the second form.
In the three-parameter logistic model the probability of a
positive response on item is
where is the item discrimination parameter,
is
the item difficulty parameter,
is the item guessing parameter
and
is the latent ability.
The constant
can be specified using argument
D
of the
direc
function.
The two-parameter logistic model can be obtained by setting
equal to zero, the one-parameter logistic model can be obtained
by setting
equal to zero and
costant across items,
while the Rasch model can be obtained by setting
equal to zero and
equal to 1.
The type of IRT model does not need to be specified as it is obtained
from arguments mod1
and mod2
.
An object of class eqc
with components
tab1 |
item parameters of the first form. |
tab2 |
item parameters of the second form. |
tab |
Data frame containing item names ( |
var12 |
covariance matrix of item parameters of the first and the second form (only items used for equating). |
varFull |
list of covariance matrices of the item parameters (one matrix for each form) |
partial |
partial derivatives of equating coefficients A and B with respect to item parameters. |
A |
equating coefficient A. |
B |
equating coefficient B. |
varAB |
covariance matrix of the equating coefficients. |
commonitem |
list of length 2 containing the names of common item parameters and the names of the common items selected for equating. |
suffixes |
suffixes used to identify the forms. |
ni |
number of common items. |
nis |
number of common items selected for equating. |
forms |
names of equated forms. |
method |
the equating method used. |
itmp |
number of item parameters of the IRT model. |
Michela Battauz
Battauz, M. (2015). equateIRT: An R Package for IRT Test Equating. Journal of Statistical Software, 68, 1–22.
Kolen, M.J. and Brennan, R.L. (2014). Test equating, scaling, and linking: methods and practices, 3nd ed., New York: Springer
Ogasawara, H. (2000). Asymptotic standard errors of IRT equating coefficients using moments. Economic Review (Otaru University of Commerce), 51, 1–23.
Ogasawara, H. (2001). Standard Errors of Item Response Theory Equating/Linking by Response Function Methods. Applied Psychological Measurement, 25, 53–67.
eqc
, itm
, modIRT
, summary.eqc
# the following code can be used to start from item response data ## Not run: library("mirt") data("data2pl") m1 <- mirt(data2pl[[1]], SE = TRUE) m2 <- mirt(data2pl[[2]], SE = TRUE) m3 <- mirt(data2pl[[3]], SE = TRUE) m4 <- mirt(data2pl[[4]], SE = TRUE) m5 <- mirt(data2pl[[5]], SE = TRUE) mlist<- list(m1,m2,m3,m4,m5) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(est.mods = mlist, names = test, display = FALSE) # two-parameter logistic model # direct equating coefficients between forms 2 and 3 using the Haebara method l23 <- direc(mods = mod2pl, which = c(2,3), method = "Haebara") summary(l23) ## End(Not run) # =========================================================================== # the following code uses item parameter estimates previously obtained # three-parameter logistic model # direct equating coefficients between forms 1 and 2 using the Stocking-Lord method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) l12 <- direc(mods = mod3pl, which = c("test1", "test2"), method = "Stocking-Lord") summary(l12) # two-parameter logistic model # direct equating coefficients between forms 1 and 5 using the Haebara method data(est2pl) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) l15 <- direc(mods = mod2pl, which = c(1,5), method = "Haebara") summary(l15) # Rasch model # direct equating coefficients between forms 5 and 4 using the mean-mean method data(estrasch) test <- paste("test", 1:5, sep = "") modrasch <- modIRT(coef = estrasch$coef, var = estrasch$var, names = test, display = FALSE) l54 <- direc(mods = modrasch, which = c(5,4), method = "mean-mean") summary(l54)
# the following code can be used to start from item response data ## Not run: library("mirt") data("data2pl") m1 <- mirt(data2pl[[1]], SE = TRUE) m2 <- mirt(data2pl[[2]], SE = TRUE) m3 <- mirt(data2pl[[3]], SE = TRUE) m4 <- mirt(data2pl[[4]], SE = TRUE) m5 <- mirt(data2pl[[5]], SE = TRUE) mlist<- list(m1,m2,m3,m4,m5) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(est.mods = mlist, names = test, display = FALSE) # two-parameter logistic model # direct equating coefficients between forms 2 and 3 using the Haebara method l23 <- direc(mods = mod2pl, which = c(2,3), method = "Haebara") summary(l23) ## End(Not run) # =========================================================================== # the following code uses item parameter estimates previously obtained # three-parameter logistic model # direct equating coefficients between forms 1 and 2 using the Stocking-Lord method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) l12 <- direc(mods = mod3pl, which = c("test1", "test2"), method = "Stocking-Lord") summary(l12) # two-parameter logistic model # direct equating coefficients between forms 1 and 5 using the Haebara method data(est2pl) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) l15 <- direc(mods = mod2pl, which = c(1,5), method = "Haebara") summary(l15) # Rasch model # direct equating coefficients between forms 5 and 4 using the mean-mean method data(estrasch) test <- paste("test", 1:5, sep = "") modrasch <- modIRT(coef = estrasch$coef, var = estrasch$var, names = test, display = FALSE) l54 <- direc(mods = modrasch, which = c(5,4), method = "mean-mean") summary(l54)
eqc
is a generic function which extracts the equating coefficients.
eqc(x, ...) ## S3 method for class 'eqc' eqc(x, ...) ## S3 method for class 'eqclist' eqc(x, link = NULL, ...) ## S3 method for class 'ceqc' eqc(x, ...) ## S3 method for class 'ceqclist' eqc(x, link = NULL, path = NULL, ...) ## S3 method for class 'meqc' eqc(x, link = NULL, path = NULL, ...)
eqc(x, ...) ## S3 method for class 'eqc' eqc(x, ...) ## S3 method for class 'eqclist' eqc(x, link = NULL, ...) ## S3 method for class 'ceqc' eqc(x, ...) ## S3 method for class 'ceqclist' eqc(x, link = NULL, path = NULL, ...) ## S3 method for class 'meqc' eqc(x, link = NULL, path = NULL, ...)
x |
object of the class |
link |
a character string with the names of the two forms being linked separated by a dot (e.g. " |
path |
a character string with the names of the forms that constitute the path separated by a dot (e.g. " |
... |
further arguments passed to or from other methods. |
A data frame containing the equating coefficients for every link and path.
Michela Battauz
alldirec
, bisectorec
, chainec
, direc
, modIRT
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # two-parameter logistic model data(est2pl) test<-paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) # direct equating coefficients between forms 1 and 2 using the Haebara method l12 <- direc(mods = mod2pl, which = c(1,2), method = "Haebara") # all direct equating coefficients using the Haebara method direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute all chain equating coefficients of length 3 chainec3 <- chainec(r = 3, direclist = direclist2pl) # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) chainec2 <- chainec(direclist = direclist2pl, pths = pth2) # create a list of objects of class ceqc ecall <- c(chainec1, chainec2) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) # extract equating coefficients eqc(l12) eqc(direclist2pl) eqc(direclist2pl, link = "test1.test2") eqc(chainec3) eqc(chainec3, link = "test1.test3") eqc(allec) eqc(allec, path = "bisector")
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # two-parameter logistic model data(est2pl) test<-paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) # direct equating coefficients between forms 1 and 2 using the Haebara method l12 <- direc(mods = mod2pl, which = c(1,2), method = "Haebara") # all direct equating coefficients using the Haebara method direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute all chain equating coefficients of length 3 chainec3 <- chainec(r = 3, direclist = direclist2pl) # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) chainec2 <- chainec(direclist = direclist2pl, pths = pth2) # create a list of objects of class ceqc ecall <- c(chainec1, chainec2) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) # extract equating coefficients eqc(l12) eqc(direclist2pl) eqc(direclist2pl, link = "test1.test2") eqc(chainec3) eqc(chainec3, link = "test1.test3") eqc(allec) eqc(allec, path = "bisector")
This dataset includes item parameter estimates and covariance matrices of a
two-parameter logistic model applied to 5 simulated datasets with common items.
The dichotomous item responses can be found in the dataset data2pl
.
See details for more information on the linkage plan.
data(est2pl)
data(est2pl)
A list of length 2 with components:
coef
a list of length 5 containing the matrices of item parameter estimates. Each matrix presents 2 columns; the first column contains difficulty parameters and the second column contains discrimination parameters. See details for information on the parameterization used. Names of rows correspond to the names of the items.
var
a list of length 5 containing the covariance matrices of item parameter estimates.
Every form is composed by 20 items and presents 10 items in common
with adjacent forms. Furthermore, forms 1 and 5 present 10 common items.
Use linkp
to obtain a matrix with elements equal to the
number of common items between different forms.
Item parameters are given under the parameterization used in the ltm
package.
Under this parameterization, the two-parameter logistic model is as follows
where
denotes the conditional probability of responding
correctly to the
th item given
,
is the easiness parameter,
is the discrimination parameter, and
denotes the
latent ability.
Michela Battauz
data(est2pl) est2pl$coef est2pl$var linkp(coef = est2pl$coef)
data(est2pl) est2pl$coef est2pl$var linkp(coef = est2pl$coef)
This dataset includes item parameter estimates and covariance matrices of a three-parameter logistic model applied to 5 simulated datasets with common items. See details for more information on the linkage plan.
data(est3pl)
data(est3pl)
A list of length 2 with components:
coef
a list of length 5 containing the matrices of item parameter estimates. Each matrix presents 3 columns; the first column contains guessing parameters, the second column contains difficulty parameters and the third column contains discrimination parameters. See details for information on the parameterization used. Names of rows correspond to the names of the items.
var
a list of length 5 containing the covariance matrices of item parameter estimates.
Every form is composed by 20 items and presents 10 items in common
with adjacent forms. Furthermore, forms 1 and 5 present 10 common items.
Use linkp
to obtain a matrix with elements equal to the
number of common items between different forms.
Item parameters are given under the parameterization used in the ltm
package.
Under this parameterization, the three-parameter logistic model is as follows
where
denotes the conditional probability of responding correctly to the
th item given
,
denotes the guessing parameter,
is the easiness parameter,
is the discrimination parameter, and
denotes the
latent ability.
Furthermore, the guessing parameters are given under this parameterization
Michela Battauz
data(est3pl) est3pl$coef est3pl$var linkp(coef = est3pl$coef)
data(est3pl) est3pl$coef est3pl$var linkp(coef = est3pl$coef)
This dataset includes item parameter estimates and covariance matrices of a Rasch model applied to 5 simulated datasets with common items. See details for more information on the linkage plan.
data(estrasch)
data(estrasch)
A list of length 2 with components:
coef
a list of length 5 containing the matrices of item parameter estimates. Each matrix presents 2 columns; the first column contains difficulty parameters and the second column is equal to 1. See details for information on the parameterization used. Names of rows correspond to the names of the items.
var
a list of length 5 containing the covariance matrices of item parameter estimates.
Every form is composed by 20 items and presents 10 items in common
with adjacent forms. Furthermore, forms 1 and 5 present 10 common items.
Use linkp
to obtain a matrix with elements equal to the
number of common items between different forms.
Item parameters are given under the parameterization used in the ltm
package.
Under this parameterization, the Rasch model is as follows
where denotes the conditional probability of responding correctly to the
th item given
,
is the easiness parameter, and
denotes the
latent ability.
Michela Battauz
data(estrasch) estrasch$coef estrasch$var linkp(coef = estrasch$coef)
data(estrasch) estrasch$coef estrasch$var linkp(coef = estrasch$coef)
Performs a statistical test to verify if the chain equating coeffients from one form to itself are A=1 and B=0.
id.test(chain)
id.test(chain)
chain |
an object of the class |
An object of class idtest
with components
path |
|
AB |
|
statistic |
|
df |
|
p.value |
Michela Battauz
Battauz, M. (2022). Testing for differences in chain equating. Statistica Neerlandica, 1-12.
# the following code uses item parameter estimates previously obtained # for other examples see documentation in function chainec # three-parameter logistic model # direct equating coefficients using the "Haebara" method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) direclist3pl <- alldirec(mods = mod3pl, method = "Haebara") # compute chain equating coefficients for path 1,2,3,4,5,1 pth3 <- paste("test", c(1:5,1), sep = "") chainec_circle <- chainec(direclist = direclist3pl, pths = pth3) summary(chainec_circle) # test id.test(chainec_circle)
# the following code uses item parameter estimates previously obtained # for other examples see documentation in function chainec # three-parameter logistic model # direct equating coefficients using the "Haebara" method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) direclist3pl <- alldirec(mods = mod3pl, method = "Haebara") # compute chain equating coefficients for path 1,2,3,4,5,1 pth3 <- paste("test", c(1:5,1), sep = "") chainec_circle <- chainec(direclist = direclist3pl, pths = pth3) summary(chainec_circle) # test id.test(chainec_circle)
Import estimated item parameters and covariance matrix from the R packages ltm and mirt, and from external software IRTPRO and flexMIRT.
import.ltm(mod, display = TRUE, digits = 4) import.mirt(mod, display = TRUE, digits = 3) import.irtpro(fnamep, fnamev = NULL, fnameirt = NULL, display = TRUE, digits = 2) import.flexmirt(fnamep, fnamev = NULL, fnameirt = NULL, display = TRUE, digits = 2)
import.ltm(mod, display = TRUE, digits = 4) import.mirt(mod, display = TRUE, digits = 3) import.irtpro(fnamep, fnamev = NULL, fnameirt = NULL, display = TRUE, digits = 2) import.flexmirt(fnamep, fnamev = NULL, fnameirt = NULL, display = TRUE, digits = 2)
mod |
output object from functions |
display |
logical; if TRUE coefficients and standard errors are printed. |
digits |
integer indicating the number of decimal places to be used
if |
fnamep |
name of the file containing the estimated item parameters. Typically, -prm.txt. |
fnamev |
name of the file containing the covariance matrix of the estimated item parameters. Typically, -cov.txt. |
fnameirt |
name of the file containing additional information to link item parameters with the covariance matrix. Typically, -irt.txt. |
Item parameters are imported with the parameterization used by the software to
estimate the IRT model. The usual IRT parameterization can be obtained later
by using function modIRT
.
Since package version 2.5.0 this function can be skipped if the item parameters are estimated
with packages ltm or mirt. See modIRT
.
A list with components
coef |
item parameter estimates. |
var |
covariance matrix of item parameter estimates. |
Michela Battauz
Battauz, M. (2015). equateIRT: An R Package for IRT Test Equating. Journal of Statistical Software, 68, 1–22.
Cai L. (2013). FlexMIRT version 2: Flexible Multilevel Multidimensional Item Analysis and Test Scoring [Computer Software]. Chapel Hill, NC: Vector Psychometric Group.
Cai, L., du Toit, S. H. C., Thissen, D. (2011). IRTPRO: Flexible, multidimensional, multiple categorical IRT modeling [Computer software]. Chicago: Scientific Software International.
Chalmers, R. P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Environment. Journal of Statistical Software, 48, 1–29.
Rizopoulos, D. (2006). ltm: an R package for latent variable modelling and item response theory analyses. Journal of Statistical Software, 17, 1–25.
#==================== # from package ltm library(ltm) # one-parameter logistic model mod1pl <- rasch(LSAT) est.mod1pl <- import.ltm(mod1pl) est.mod1pl # two-parameter logistic model mod2pl <- ltm(LSAT ~ z1) est.mod2pl <- import.ltm(mod2pl) est.mod2pl #==================== # from package mirt library(mirt) # one-parameter logistic model data(LSAT, package = "ltm") val <- mirt(LSAT, 1, SE = TRUE, pars = "values") cnstr <- val[val$name == "a1",]$parnum mod1pl.m <- mirt(LSAT, 1, SE = TRUE, SE.type = 'Richardson', constrain = list(cnstr)) est.mod1pl.m <- import.mirt(mod1pl.m, digits = 4) est.mod1pl.m # two-parameter logistic model data(LSAT, package = "ltm") mod2pl.m <- mirt(LSAT, 1, SE = TRUE, SE.type = 'Richardson') est.mod2pl.m <- import.mirt(mod2pl.m, display = FALSE) est.mod2pl.m
#==================== # from package ltm library(ltm) # one-parameter logistic model mod1pl <- rasch(LSAT) est.mod1pl <- import.ltm(mod1pl) est.mod1pl # two-parameter logistic model mod2pl <- ltm(LSAT ~ z1) est.mod2pl <- import.ltm(mod2pl) est.mod2pl #==================== # from package mirt library(mirt) # one-parameter logistic model data(LSAT, package = "ltm") val <- mirt(LSAT, 1, SE = TRUE, pars = "values") cnstr <- val[val$name == "a1",]$parnum mod1pl.m <- mirt(LSAT, 1, SE = TRUE, SE.type = 'Richardson', constrain = list(cnstr)) est.mod1pl.m <- import.mirt(mod1pl.m, digits = 4) est.mod1pl.m # two-parameter logistic model data(LSAT, package = "ltm") mod2pl.m <- mirt(LSAT, 1, SE = TRUE, SE.type = 'Richardson') est.mod2pl.m <- import.mirt(mod2pl.m, display = FALSE) est.mod2pl.m
itm
is a generic function which extracts a data frame containing the
item parameters of two forms being equated in the original scale and
item parameters of the first form converted in the scale of the second form.
itm(x, ...) ## S3 method for class 'eqc' itm(x, ...) ## S3 method for class 'eqclist' itm(x, link, ...) ## S3 method for class 'ceqc' itm(x, ...) ## S3 method for class 'ceqclist' itm(x, path, ...) ## S3 method for class 'meqc' itm(x, link, bistype = NULL, ...)
itm(x, ...) ## S3 method for class 'eqc' itm(x, ...) ## S3 method for class 'eqclist' itm(x, link, ...) ## S3 method for class 'ceqc' itm(x, ...) ## S3 method for class 'ceqclist' itm(x, path, ...) ## S3 method for class 'meqc' itm(x, link, bistype = NULL, ...)
x |
object of the class |
link |
a character string with the names of the two forms being linked separated by a dot (e.g. " |
path |
a character string with the names of the forms that constitute the path separated by a dot (e.g. " |
bistype |
bisector type. It should be |
... |
further arguments passed to or from other methods. |
A data frame containing item names (Item
),
item parameters of the first form (e.g. test1
),
item parameters of the last form (e.g. test3
),
and item parameters of the first form converted
in the scale of the last form (e.g. test1.as.test3
).
Michela Battauz
convert
, alldirec
, bisectorec
, chainec
, direc
, modIRT
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # two-parameter logistic model data(est2pl) test<-paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) # direct equating coefficients between forms 1 and 2 using the Haebara method l12 <- direc(mods = mod2pl, which = c(1,2), method = "Haebara") # all direct equating coefficients using the Haebara method direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute all chain equating coefficients of length 3 chainec3 <- chainec(r = 3, direclist = direclist2pl) # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) chainec2 <- chainec(direclist = direclist2pl, pths = pth2) # create a list of objects of class ceqc ecall <- c(chainec1, chainec2) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) # extract item parameters itm(l12) itm(direclist2pl, link = "test1.test2") itm(chainec3, path = "test1.test2.test3") itm(allec, bistype = "weighted")
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # two-parameter logistic model data(est2pl) test<-paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) # direct equating coefficients between forms 1 and 2 using the Haebara method l12 <- direc(mods = mod2pl, which = c(1,2), method = "Haebara") # all direct equating coefficients using the Haebara method direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute all chain equating coefficients of length 3 chainec3 <- chainec(r = 3, direclist = direclist2pl) # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) chainec2 <- chainec(direclist = direclist2pl, pths = pth2) # create a list of objects of class ceqc ecall <- c(chainec1, chainec2) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) # extract item parameters itm(l12) itm(direclist2pl, link = "test1.test2") itm(chainec3, path = "test1.test2.test3") itm(allec, bistype = "weighted")
Calculates the number of common items between a list of forms.
linkp(mods = NULL, coef = NULL)
linkp(mods = NULL, coef = NULL)
mods |
an object of the class |
coef |
list of matrices (one for each form) containing item parameter estimates. The names of the rows of each matrix should be the names of the items. |
A matrix whose elements indicate the number of common items between the forms. On the diagonal of the matrix there are the number of items of each form.
Michela Battauz
## Not run: library("mirt") data("data2pl") m1 <- mirt(data2pl[[1]], SE = TRUE) m2 <- mirt(data2pl[[2]], SE = TRUE) m3 <- mirt(data2pl[[3]], SE = TRUE) m4 <- mirt(data2pl[[4]], SE = TRUE) m5 <- mirt(data2pl[[5]], SE = TRUE) mlist<- list(m1,m2,m3,m4,m5) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(est.mods = mlist, names = test, display = FALSE) linkp(mod2pl) ## End(Not run) # =========================================================================== # the following code uses item parameter estimates previously obtained data(est3pl) linkp(coef = est3pl$coef)
## Not run: library("mirt") data("data2pl") m1 <- mirt(data2pl[[1]], SE = TRUE) m2 <- mirt(data2pl[[2]], SE = TRUE) m3 <- mirt(data2pl[[3]], SE = TRUE) m4 <- mirt(data2pl[[4]], SE = TRUE) m5 <- mirt(data2pl[[5]], SE = TRUE) mlist<- list(m1,m2,m3,m4,m5) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(est.mods = mlist, names = test, display = FALSE) linkp(mod2pl) ## End(Not run) # =========================================================================== # the following code uses item parameter estimates previously obtained data(est3pl) linkp(coef = est3pl$coef)
Creates an object of the class modIRT
containing estimated
coefficients and covariance matrices of IRT models.
Rasch, one-parameter logistic, two-parameter logistic and three-parameter
logistic models are included.
modIRT(est.mods = NULL, coef = NULL, var = NULL, names = NULL, ltparam = TRUE, lparam = TRUE, display = TRUE, digits = 2)
modIRT(est.mods = NULL, coef = NULL, var = NULL, names = NULL, ltparam = TRUE, lparam = TRUE, display = TRUE, digits = 2)
est.mods |
list of output objects from functions |
coef |
necessary only if |
var |
necessary only if |
names |
character vector containing the names of the forms.
This should have the same length of |
ltparam |
logical; if TRUE the latent trait parameterization is used
for difficulty parameters and the |
lparam |
logical; if TRUE the logistic parameterization is used
for guessing parameters and the |
display |
logical; if TRUE coefficients and standard errors are printed. |
digits |
integer indicating the number of decimal places to be used
if |
Since package version 2.5.0 this function takes as input est.mods
.
ltparam
and lparam
refers the the parameterization used
by the software used to estimate item parameters. The R package ltm
,
and the programs IRTPRO and flexMIRT use these parameterizations.
If ltparam
is TRUE
the latent trait parameterization is used.
Under this parameterization, the three-parameter logistic model is as follows
where
denotes the conditional probability of responding correctly to the
th item given
,
denotes the guessing parameter,
is the easiness parameter,
is the discrimination parameter, and
denotes the
latent ability.
The two-parameter logistic model, the one-parameter logistic model
and the Rasch model present the same
formulation. The two-parameter logistic model can be obtained
by setting
equal to zero,
the one-parameter logistic model can be obtained
by setting
equal to zero and
costant across items,
while the Rasch model can be obtained by setting
equal to zero and
equal to 1.
If lparam
is TRUE the guessing parameters are given under this
parameterization
The modIRT
function returns parameter estimates
under the usual IRT parameterization, that is,
where ,
and
.
If ltparam
or lparam
are TRUE, the covariance matrix
is calculated using the delta method.
If item parameters are already given under the usual IRT parameterization,
arguments ltparam
and lparam
should be set to FALSE
.
An object of class modIRT
consisting in a list with length equal
to the number of forms containing lists with components
coefficients |
item parameter estimates. |
var |
covariance matrix of item parameter estimates. |
itmp |
number of item parameters of the IRT model. This is 1 for the Rasch model, 2 for the one-parameter logistic model with constant discriminations, 2 for the two-parameter logistic model and 3 for the three-parameter logistic model. |
Michela Battauz
Battauz, M. (2015). equateIRT: An R Package for IRT Test Equating. Journal of Statistical Software, 68, 1–22.
Bartholomew, D., Knott, M. and Moustaki, I. (2011) Latent Variable Models and Factor Analysis: a Unified Approach, 3rd ed. Wiley.
Rizopoulos, D. (2006). ltm: an R package for latent variable modelling and item response theory analyses. Journal of Statistical Software, 17, 1–25.
# the following code can be used to estimate the item parameters and then # extract the coefficients and their covariance matrices # skipping functions import.mirt or import.ltm ## Not run: library("mirt") data("data2pl") m1 <- mirt(data2pl[[1]], SE = TRUE) m2 <- mirt(data2pl[[2]], SE = TRUE) m3 <- mirt(data2pl[[3]], SE = TRUE) m4 <- mirt(data2pl[[4]], SE = TRUE) m5 <- mirt(data2pl[[5]], SE = TRUE) mlist<- list(m1,m2,m3,m4,m5) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(est.mods = mlist, names = test, display = FALSE) ## End(Not run) # =========================================================================== # the following code uses item parameter estimates previously obtained # three-parameter logistic model data(est3pl) # includes item parameter estimates test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) # two-parameter logistic model data(est2pl) # includes item parameter estimates test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) # Rasch model data(estrasch) # includes item parameter estimates test <- paste("test", 1:5, sep = "") modrasch <- modIRT(coef = estrasch$coef, var = estrasch$var, names = test, display = FALSE) # one-parameter logistic model imported from the R package ltm library(ltm) mod1pl <- rasch(LSAT) summary(mod1pl) est.mod1pl <- import.ltm(mod1pl) mod1pl.ltm <- modIRT(coef = list(est.mod1pl$coef), var = list(est.mod1pl$var), digits = 4)
# the following code can be used to estimate the item parameters and then # extract the coefficients and their covariance matrices # skipping functions import.mirt or import.ltm ## Not run: library("mirt") data("data2pl") m1 <- mirt(data2pl[[1]], SE = TRUE) m2 <- mirt(data2pl[[2]], SE = TRUE) m3 <- mirt(data2pl[[3]], SE = TRUE) m4 <- mirt(data2pl[[4]], SE = TRUE) m5 <- mirt(data2pl[[5]], SE = TRUE) mlist<- list(m1,m2,m3,m4,m5) test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(est.mods = mlist, names = test, display = FALSE) ## End(Not run) # =========================================================================== # the following code uses item parameter estimates previously obtained # three-parameter logistic model data(est3pl) # includes item parameter estimates test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) # two-parameter logistic model data(est2pl) # includes item parameter estimates test <- paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) # Rasch model data(estrasch) # includes item parameter estimates test <- paste("test", 1:5, sep = "") modrasch <- modIRT(coef = estrasch$coef, var = estrasch$var, names = test, display = FALSE) # one-parameter logistic model imported from the R package ltm library(ltm) mod1pl <- rasch(LSAT) summary(mod1pl) est.mod1pl <- import.ltm(mod1pl) mod1pl.ltm <- modIRT(coef = list(est.mod1pl$coef), var = list(est.mod1pl$var), digits = 4)
Relates number-correct scores on two forms.
score(obj, ...) ## S3 method for class 'eqc' score(obj, method = "TSE", D = 1, scores = NULL, se = TRUE, nq = 30, w = 0.5, theta = NULL, weights = NULL, anchor.type = "internal", ...) ## S3 method for class 'eqclist' score(obj, link = NULL, method = "TSE", D = 1, scores = NULL, se = TRUE, nq = 30, w = 0.5, theta = NULL, weights = NULL, anchor.type = "internal", ...) ## S3 method for class 'ceqc' score(obj, method = "TSE", D = 1, scores = NULL, se = TRUE, nq = 30, w = 0.5, theta = NULL, weights = NULL, anchor.type = "internal", ...) ## S3 method for class 'ceqclist' score(obj, path = NULL, method = "TSE", D = 1, scores = NULL, se = TRUE, nq = 30, w = 0.5, theta = NULL, weights = NULL, anchor.type = "internal", ...) ## S3 method for class 'meqc' score(obj, link = NULL, method = "TSE", D = 1, scores = NULL, se = TRUE, bistype = NULL, nq = 30, w = 0.5, theta = NULL, weights = NULL, anchor.type = "internal", ...)
score(obj, ...) ## S3 method for class 'eqc' score(obj, method = "TSE", D = 1, scores = NULL, se = TRUE, nq = 30, w = 0.5, theta = NULL, weights = NULL, anchor.type = "internal", ...) ## S3 method for class 'eqclist' score(obj, link = NULL, method = "TSE", D = 1, scores = NULL, se = TRUE, nq = 30, w = 0.5, theta = NULL, weights = NULL, anchor.type = "internal", ...) ## S3 method for class 'ceqc' score(obj, method = "TSE", D = 1, scores = NULL, se = TRUE, nq = 30, w = 0.5, theta = NULL, weights = NULL, anchor.type = "internal", ...) ## S3 method for class 'ceqclist' score(obj, path = NULL, method = "TSE", D = 1, scores = NULL, se = TRUE, nq = 30, w = 0.5, theta = NULL, weights = NULL, anchor.type = "internal", ...) ## S3 method for class 'meqc' score(obj, link = NULL, method = "TSE", D = 1, scores = NULL, se = TRUE, bistype = NULL, nq = 30, w = 0.5, theta = NULL, weights = NULL, anchor.type = "internal", ...)
obj |
output object from functions |
link |
a character string with the names of the two forms
being linked separated by a dot (e.g. " |
path |
a character string with the names of the forms that constitute
the path separated by a dot (e.g. " |
method |
the scoring method to be used. This should be one of " |
D |
constant D of the IRT model used to estimate item parameters. |
scores |
integer values to be converted. |
se |
logical; is |
bistype |
bisector type. It should be specified when |
nq |
number of quadrature points used to approximate integrals with observed score equating.
Used only if arguments |
w |
synthetic weight for population 1. It should be a number between 0 and 1. |
theta |
vector of ability values used to approximate integrals with observed score equating. |
weights |
vector of weights used to approximate integrals with observed score equating. |
anchor.type |
The anchor type, which can be " |
... |
further arguments passed to or from other methods. |
If anchor.type
is internal
, the common items are used for
computing the scores; if it is external
, the common items are used
for computing the equating coefficients but not for computing the scores.
External anchors are not implemented for bisector equating coefficients
because it is possible that all items are used as achors in one of the paths
considered.
This function computes standard error of equated scores with the observed score equating method
using for the description of
, and
for
(see Ogasawara, 2003).
A data frame containing theta values (only for true score equating), scores in the form chosen as base, equated scores, and standard errors of equated scores.
Michela Battauz
Kolen, M.J. and Brennan, R.L. (2014). Test equating, scaling, and linking: methods and practices, 3nd ed., New York: Springer.
Ogasawara, H. (2001). Item response theory true score equatings and their standard errors. Journal of Educational and Behavioral Statistics, 26, 31–50.
Ogasawara, H. (2003). Asymptotic standard errors of IRT observed-score equating methods. Psychometrika, 68, 193–211.
alldirec
, bisectorec
, chainec
, direc
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # two-parameter logistic model data(est2pl) test<-paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) # direct equating coefficients between forms 1 and 2 using the Haebara method l12 <- direc(mods = mod2pl, which = c(1,2), method = "Haebara") # scoring using direct equating coefficients and the true score equating method score(l12) # scoring using direct equating coefficients and the observed score equating method score(l12, method = "OSE") # specify only scores from 10 to 15 score(l12, method = "OSE", scores = 10:15) # external anchors and true score equating method score(l12, anchor.type = "external") # external anchors and observed score equating method score(l12, method = "OSE", anchor.type = "external") # all direct equating coefficients using the Haebara method direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # scoring using direct equating coefficients and the true score equating method score(direclist2pl, link = "test1.test2") # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- paste("test", c(1,5,4), sep = "") chainec2 <- chainec(direclist = direclist2pl, pths = pth2) # scoring using chain equating coefficients and the true score equating method for score 12 score(chainec1, path = "test1.test2.test3.test4", scores = 12) score(chainec2, path = "test1.test5.test4", scores = 12) # scoring using chain equating coefficients, true score equating and external anchors score(chainec1, path = "test1.test2.test3.test4", anchor.type = "external") # scoring using chain equating coefficients, observed score equating and external anchors score(chainec1, path = "test1.test2.test3.test4", method = "OSE", anchor.type = "external") # create a list of objects of class ceqc ecall <- c(chainec1, chainec2) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) # scoring using weighted bisector equating coefficients and the true score # equating method for score 12 score(allec, bistype = "weighted", link = "test1.test4", scores = 12)
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # two-parameter logistic model data(est2pl) test<-paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) # direct equating coefficients between forms 1 and 2 using the Haebara method l12 <- direc(mods = mod2pl, which = c(1,2), method = "Haebara") # scoring using direct equating coefficients and the true score equating method score(l12) # scoring using direct equating coefficients and the observed score equating method score(l12, method = "OSE") # specify only scores from 10 to 15 score(l12, method = "OSE", scores = 10:15) # external anchors and true score equating method score(l12, anchor.type = "external") # external anchors and observed score equating method score(l12, method = "OSE", anchor.type = "external") # all direct equating coefficients using the Haebara method direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # scoring using direct equating coefficients and the true score equating method score(direclist2pl, link = "test1.test2") # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") chainec1 <- chainec(direclist = direclist2pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- paste("test", c(1,5,4), sep = "") chainec2 <- chainec(direclist = direclist2pl, pths = pth2) # scoring using chain equating coefficients and the true score equating method for score 12 score(chainec1, path = "test1.test2.test3.test4", scores = 12) score(chainec2, path = "test1.test5.test4", scores = 12) # scoring using chain equating coefficients, true score equating and external anchors score(chainec1, path = "test1.test2.test3.test4", anchor.type = "external") # scoring using chain equating coefficients, observed score equating and external anchors score(chainec1, path = "test1.test2.test3.test4", method = "OSE", anchor.type = "external") # create a list of objects of class ceqc ecall <- c(chainec1, chainec2) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) # scoring using weighted bisector equating coefficients and the true score # equating method for score 12 score(allec, bistype = "weighted", link = "test1.test4", scores = 12)
Performs a statistical test to verify if the chain equating coeffients that link the same two forms are equal.
sd.test(ecall)
sd.test(ecall)
ecall |
list of objects of class |
An object of class idtest
with components
link |
|
paths |
|
AB |
|
statistic |
|
df |
|
p.value |
Michela Battauz
Battauz, M. (2022). Testing for differences in chain equating. Statistica Neerlandica, 1-12.
# the following code uses item parameter estimates previously obtained # for other examples see documentation in function chainec # three-parameter logistic model # direct equating coefficients using the "Haebara" method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) direclist3pl <- alldirec(mods = mod3pl, method = "Haebara") # compute chain equating coefficients for path 1,2,3,4,5 pth3 <- paste("test", 1:5, sep = "") chainec3 <- chainec(direclist = direclist3pl, pths = pth3) # create a list of objects of class eqc or ceqc ecall <- c(chainec3, direclist3pl["test1.test5"]) summary(chainec3) summary(direclist3pl$test1.test5) # test sd.test(ecall)
# the following code uses item parameter estimates previously obtained # for other examples see documentation in function chainec # three-parameter logistic model # direct equating coefficients using the "Haebara" method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) direclist3pl <- alldirec(mods = mod3pl, method = "Haebara") # compute chain equating coefficients for path 1,2,3,4,5 pth3 <- paste("test", 1:5, sep = "") chainec3 <- chainec(direclist = direclist3pl, pths = pth3) # create a list of objects of class eqc or ceqc ecall <- c(chainec3, direclist3pl["test1.test5"]) summary(chainec3) summary(direclist3pl$test1.test5) # test sd.test(ecall)
summary
method for class ceqc
.
## S3 method for class 'ceqc' summary(object, ...) ## S3 method for class 'summary.ceqc' print(x, ...)
## S3 method for class 'ceqc' summary(object, ...) ## S3 method for class 'summary.ceqc' print(x, ...)
object |
an object of the class |
x |
an object of class |
... |
further arguments passed to or from other methods. |
The function summary.ceqc
returns a list with components
forms |
names of equated forms. |
method |
the equating method used. |
coefficients |
a |
Michela Battauz
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # two-parameter logistic model # direct equating coefficients using the "Haebara" method data(est2pl) test<-paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute all chain equating coefficients of length 3 chainec3 <- chainec(r = 3, direclist = direclist2pl) summary(chainec3$test1.test5.test4)
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # two-parameter logistic model # direct equating coefficients using the "Haebara" method data(est2pl) test<-paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute all chain equating coefficients of length 3 chainec3 <- chainec(r = 3, direclist = direclist2pl) summary(chainec3$test1.test5.test4)
summary
method for class ceqclist
.
## S3 method for class 'ceqclist' summary(object, path, ...) ## S3 method for class 'summary.ceqclist' print(x, ...)
## S3 method for class 'ceqclist' summary(object, path, ...) ## S3 method for class 'summary.ceqclist' print(x, ...)
object |
an object of the class |
path |
a vector of character strings with the names of the
forms that constitute
the path separated by a dot (e.g. " |
x |
an object of class |
... |
further arguments passed to or from other methods. |
The function summary.ceqclist
returns a list containing the output
of function summary.ceqc
for each path
contained in object
.
Michela Battauz
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # two-parameter logistic model # direct equating coefficients using the "Haebara" method data(est2pl) test<-paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute all chain equating coefficients of length 3 chainec3 <- chainec(r = 3, direclist = direclist2pl) summary(chainec3) summary(chainec3, path = "test1.test2.test3") summary(chainec3, path = c("test1.test2.test3","test1.test5.test4"))
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # two-parameter logistic model # direct equating coefficients using the "Haebara" method data(est2pl) test<-paste("test", 1:5, sep = "") mod2pl <- modIRT(coef = est2pl$coef, var = est2pl$var, names = test, display = FALSE) direclist2pl <- alldirec(mods = mod2pl, method = "Haebara") # compute all chain equating coefficients of length 3 chainec3 <- chainec(r = 3, direclist = direclist2pl) summary(chainec3) summary(chainec3, path = "test1.test2.test3") summary(chainec3, path = c("test1.test2.test3","test1.test5.test4"))
summary
method for class eqc
.
## S3 method for class 'eqc' summary(object, ...) ## S3 method for class 'summary.eqc' print(x, ...)
## S3 method for class 'eqc' summary(object, ...) ## S3 method for class 'summary.eqc' print(x, ...)
object |
an object of the class |
x |
an object of class |
... |
further arguments passed to or from other methods. |
The function summary.eqc
returns a list with components
forms |
names of equated forms. |
method |
the equating method used. |
coefficients |
a |
Michela Battauz
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # three-parameter logistic model # direct equating coefficients between forms 1 and 2 using the Stocking-Lord method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) l12 <- direc(mod1 = mod3pl[1], mod2 = mod3pl[2], method = "Stocking-Lord") summary(l12)
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # three-parameter logistic model # direct equating coefficients between forms 1 and 2 using the Stocking-Lord method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) l12 <- direc(mod1 = mod3pl[1], mod2 = mod3pl[2], method = "Stocking-Lord") summary(l12)
summary
method for class eqclist
.
## S3 method for class 'eqclist' summary(object, link, ...) ## S3 method for class 'summary.eqclist' print(x, ...)
## S3 method for class 'eqclist' summary(object, link, ...) ## S3 method for class 'summary.eqclist' print(x, ...)
object |
an object of the class |
link |
a vector of character strings with the names of the two
forms being linked separated by a dot
(e.g. " |
x |
an object of class |
... |
further arguments passed to or from other methods. |
The function summary.eqclist
returns a list containing the output
of function summary.eqc
for each link
contained in object
.
Michela Battauz
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # Rasch model # direct equating coefficients using the "mean-mean" method data(estrasch) test<-paste("test", 1:5, sep = "") modrasch <- modIRT(coef = estrasch$coef, var = estrasch$var, names = test, display = FALSE) direclistrasch <- alldirec(mods = modrasch, method = "mean-mean", all = TRUE) summary(direclistrasch) summary(direclistrasch, link = "test1.test2") summary(direclistrasch, link = c("test1.test2", "test1.test5"))
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # Rasch model # direct equating coefficients using the "mean-mean" method data(estrasch) test<-paste("test", 1:5, sep = "") modrasch <- modIRT(coef = estrasch$coef, var = estrasch$var, names = test, display = FALSE) direclistrasch <- alldirec(mods = modrasch, method = "mean-mean", all = TRUE) summary(direclistrasch) summary(direclistrasch, link = "test1.test2") summary(direclistrasch, link = c("test1.test2", "test1.test5"))
summary
method for class meqc
.
## S3 method for class 'meqc' summary(object, ...) ## S3 method for class 'summary.meqc' print(x, ...)
## S3 method for class 'meqc' summary(object, ...) ## S3 method for class 'summary.meqc' print(x, ...)
object |
an object of the class |
x |
an object of class |
... |
further arguments passed to or from other methods. |
The function summary.meqc
returns a list with components
link |
character vector with names of equated forms. |
method |
the equating method used. |
coefficients |
list of data frames containing |
Michela Battauz
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # three-parameter logistic model # direct equating coefficients using the "Stocking-Lord" method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) direclist3pl <- alldirec(mods = mod3pl, method = "Stocking-Lord") # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") pth1 <- data.frame(t(pth1), stringsAsFactors = FALSE) chainec1 <- chainec(direclist = direclist3pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) pth2 <- data.frame(t(pth2), stringsAsFactors = FALSE) chainec2 <- chainec(direclist = direclist3pl, pths = pth2) # compute chain equating coefficients for path 1,2,3,4,5 pth3 <- paste("test", 1:5, sep = "") pth3 <- data.frame(t(pth3), stringsAsFactors = FALSE) chainec3 <- chainec(direclist = direclist3pl, pths = pth3) # create a list of objects of class eqc or ceqc ecall <- c(chainec1, chainec2, chainec3, direclist3pl["test1.test5"]) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) summary(allec)
# the following code uses item parameter estimates previously obtained # for examples that start from item response data see function modIRT # three-parameter logistic model # direct equating coefficients using the "Stocking-Lord" method data(est3pl) test <- paste("test", 1:5, sep = "") mod3pl <- modIRT(coef = est3pl$coef, var = est3pl$var, names = test, display = FALSE) direclist3pl <- alldirec(mods = mod3pl, method = "Stocking-Lord") # compute chain equating coefficients for path 1,2,3,4 pth1 <- paste("test", 1:4, sep = "") pth1 <- data.frame(t(pth1), stringsAsFactors = FALSE) chainec1 <- chainec(direclist = direclist3pl, pths = pth1) # compute chain equating coefficients for path 1,5,4 pth2 <- c(paste("test", c(1,5,4), sep = "")) pth2 <- data.frame(t(pth2), stringsAsFactors = FALSE) chainec2 <- chainec(direclist = direclist3pl, pths = pth2) # compute chain equating coefficients for path 1,2,3,4,5 pth3 <- paste("test", 1:5, sep = "") pth3 <- data.frame(t(pth3), stringsAsFactors = FALSE) chainec3 <- chainec(direclist = direclist3pl, pths = pth3) # create a list of objects of class eqc or ceqc ecall <- c(chainec1, chainec2, chainec3, direclist3pl["test1.test5"]) # compute bisector and weighted bisector coefficients allec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) summary(allec)