linking.haebara {sirt} | R Documentation |
Haebara Linking of the 2PL Model for Multiple Studies
Description
The function linking.haebara
is a generalization of Haebara linking
of the 2PL model to multiple groups (or multiple studies; see Battauz, 2017,
for a similar approach). The optimization estimates transformation parameters for
means and standard deviations of the groups and joint item parameters.
The function allows two different distance functions dist="L2"
and
dist="L1"
where the latter is a robustified version of
Haebara linking (see Details; He, Cui, & Osterlind, 2015; He & Cui, 2020;
Hu, Rogers, & Vukmirovic, 2008).
Usage
linking.haebara(itempars, dist="L2", theta=seq(-4,4, length=61),
optimizer="optim", center=FALSE, eps=1e-3, par_init=NULL, use_rcpp=TRUE,
pow=2, use_der=TRUE, ...)
## S3 method for class 'linking.haebara'
summary(object, digits=3, file=NULL, ...)
Arguments
itempars |
A data frame with four or five columns. The first four columns contain
in the order: study name, item name, |
dist |
Distance function. Options are |
theta |
Grid of theta points for 2PL item response functions |
optimizer |
Name of the optimizer chosen for alignment. Options are
|
center |
Logical indicating whether means and standard deviations should be centered after estimation |
eps |
Small value for smooth approximation of the absolute value function |
par_init |
Optional vector of initial parameter estimates |
use_rcpp |
Logical indicating whether Rcpp is used for computation |
pow |
Power for method |
use_der |
Logical indicating whether analytical derivative should be used |
object |
Object of class |
digits |
Number of digits after decimals for rounding in |
file |
Optional file name if |
... |
Further arguments to be passed |
Details
For studies, item difficulties
and
item slopes
are available. The 2PL item response functions are given by
Haebara linking compares the observed item response functions
based on the equation for the logits
and the expected
item response functions
based on the equation for the logits
where the joint
item parameters
and
and means
and standard
deviations
are estimated.
Two loss functions are implemented. The quadratic loss of Haebara linking
(dist="L2"
) minimizes
was originally proposed by Haebara. A robustified version (dist="L1"
)
uses the optimization function (He et al., 2015)
As a further generalization, the follwing distance function (dist="Lp"
)
can be minimized:
Value
A list with following entries
pars |
Estimated means and standard deviations (transformation parameters) |
item |
Estimated joint item parameters |
a.orig |
Original |
b.orig |
Original |
a.resid |
Residual |
b.resid |
Residual |
res_optim |
Value of optimization routine |
References
Battauz, M. (2017). Multiple equating of separate IRT calibrations. Psychometrika, 82, 610-636. doi:10.1007/s11336-016-9517-x
He, Y., Cui, Z., & Osterlind, S. J. (2015). New robust scale transformation methods in the presence of outlying common items. Applied Psychological Measurement, 39(8), 613-626. doi:10.1177/0146621615587003
He, Y., & Cui, Z. (2020). Evaluating robust scale transformation methods with multiple outlying common items under IRT true score equating. Applied Psychological Measurement, 44(4), 296-310. doi:10.1177/0146621619886050
Hu, H., Rogers, W. T., & Vukmirovic, Z. (2008). Investigation of IRT-based equating methods in the presence of outlier common items. Applied Psychological Measurement, 32(4), 311-333. doi:10.1177/0146621606292215
See Also
See invariance.alignment
and linking.haberman
for alternative linking methods in the sirt package. See also
TAM::tam.linking
in the TAM package for more linking functionality
and the R packages plink, equateIRT, equateMultiple and
SNSequate.
Examples
## Not run:
#############################################################################
# EXAMPLE 1: Robust linking methods in the presence of outliers
#############################################################################
#** simulate data
I <- 10
a <- seq(.9, 1.1, len=I)
b <- seq(-2, 2, len=I)
#- define item parameters
item_names <- paste0("I",100+1:I)
# th=SIG*TH+MU=> logit(p)=a*(SIG*TH+MU-b)=a*SIG*(TH-(-MU)/SIG-b/SIG)
d1 <- data.frame( study="S1", item=item_names, a=a, b=b )
mu <- .5; sigma <- 1.3
d2 <- data.frame( study="S2", item=item_names, a=a*sigma, b=(b-mu)/sigma )
mu <- -.3; sigma <- .7
d3 <- data.frame( study="S3", item=item_names, a=a*sigma, b=(b-mu)/sigma )
#- define DIF effect
# dif <- 0 # no DIF effects
dif <- 1
d2[4,"a"] <- d2[4,"a"] * (1-.8*dif)
d3[5,"b"] <- d3[5,"b"] - 2*dif
itempars <- rbind(d1, d2, d3)
#* Haebara linking non-robust
mod1 <- sirt::linking.haebara( itempars, dist="L2", control=list(trace=2) )
summary(mod1)
#* Haebara linking robust
mod2 <- sirt::linking.haebara( itempars, dist="L1", control=list(trace=2) )
summary(mod2)
#* using initial parameter estimates
par_init <- mod1$res_optim$par
mod2b <- sirt::linking.haebara( itempars, dist="L1", par_init=par_init)
summary(mod2b)
#* power p=.25
mod2c <- sirt::linking.haebara( itempars, dist="Lp", pow=.25, par_init=par_init)
summary(mod2c)
#* Haberman linking non-robust
mod3 <- sirt::linking.haberman(itempars)
summary(mod3)
#* Haberman linking robust
mod4 <- sirt::linking.haberman(itempars, estimation="BSQ", a_trim=.25, b_trim=.5)
summary(mod4)
#* compare transformation parameters (means and standard deviations)
mod1$pars
mod2$pars
mod3$transf.personpars
mod4$transf.personpars
## End(Not run)