Learn R Programming

sirt (version 3.12-66)

linking.haebara: 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 linking.haebara summary(object, digits=3, file=NULL, ...)

Value

A list with following entries

pars

Estimated means and standard deviations (transformation parameters)

item

Estimated joint item parameters

a.orig

Original \(a_{it}\) parameters

b.orig

Original \(b_{it}\) parameters

a.resid

Residual \(a_{it}\) parameters (DIF parameters)

b.resid

Residual \(b_{it}\) parameters (DIF parameters)

res_optim

Value of optimization routine

Arguments

itempars

A data frame with four or five columns. The first four columns contain in the order: study name, item name, \(a\) parameter, \(b\) parameter. The fifth column is an optional weight for every item and every study. See linking.haberman for a function which uses the same argument.

dist

Distance function. Options are "L2" for squared loss and "L1" for absolute value loss.

theta

Grid of theta points for 2PL item response functions

optimizer

Name of the optimizer chosen for alignment. Options are "optim" (using stats::optim) or "nlminb" (using stats::nlminb).

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 dist="Lq"

use_der

Logical indicating whether analytical derivative should be used

object

Object of class linking.haabara.

digits

Number of digits after decimals for rounding in summary.

file

Optional file name if summary should be sunk into a file.

...

Further arguments to be passed

Details

For \(t=1,\ldots,T\) studies, item difficulties \(b_{it}\) and item slopes \(a_{it}\) are available. The 2PL item response functions are given by $$ logit P(X_{pi}=1| \theta_p )=a_i ( \theta_p - b_i ) $$

Haebara linking compares the observed item response functions \(P_{it}\) based on the equation for the logits \(a_{it}(\theta - b_{it})\) and the expected item response functions \(P_{it}^\ast\) based on the equation for the logits \(a_i^\ast \sigma_t ( \theta - ( b_i - \mu_t)/\sigma_t )\) where the joint item parameters \(a_i\) and \(b_i\) and means \(\mu_t\) and standard deviations \(\sigma_t\) are estimated.

Two loss functions are implemented. The quadratic loss of Haebara linking (dist="L2") minimizes $$f_{opt, L2}=\sum_t \sum_i \int ( P_{it} (\theta ) - P_{it}^\ast (\theta ) )^2 w(\theta)$$ was originally proposed by Haebara. A robustified version (dist="L1") uses the optimization function (He et al., 2015) $$f_{opt, L1}=\sum_t \sum_i \int | P_{it} (\theta ) - P_{it}^\ast (\theta ) | w(\theta)$$ As a further generalization, the follwing distance function (dist="Lp") can be minimized: $$f_{opt, Lp}=\sum_t \sum_i \int | P_{it} (\theta ) - P_{it}^\ast (\theta ) |^p w(\theta)$$

References

Battauz, M. (2017). Multiple equating of separate IRT calibrations. Psychometrika, 82, 610-636. tools:::Rd_expr_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. tools:::Rd_expr_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. tools:::Rd_expr_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. tools:::Rd_expr_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

Run this code
if (FALSE) {
#############################################################################
# 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
}

Run the code above in your browser using DataLab