tam.linking | R Documentation |
Performs linking of fitted unidimensional item response models in TAM
according to the Stocking-Lord and the Haebara method (Kolen & Brennan, 2014;
Gonzales & Wiberg, 2017).
Several studies can either be linked by a chain of linkings of two studies
(method="chain"
) or a joint linking approach (method="joint"
)
comprising all pairwise linkings.
The linking of two studies is implemented in the tam_linking_2studies
function.
tam.linking(tamobj_list, type="Hae", method="joint", pow_rob_hae=1, eps_rob_hae=1e-4,
theta=NULL, wgt=NULL, wgt_sd=2, fix.slope=FALSE, elim_items=NULL,
par_init=NULL, verbose=TRUE)
## S3 method for class 'tam.linking'
summary(object, file=NULL, ...)
## S3 method for class 'tam.linking'
print(x, ...)
tam_linking_2studies( B1, AXsi1, guess1, B2, AXsi2, guess2, theta, wgt, type,
M1=0, SD1=1, M2=0, SD2=1, fix.slope=FALSE, pow_rob_hae=1)
## S3 method for class 'tam_linking_2studies'
summary(object, file=NULL, ...)
## S3 method for class 'tam_linking_2studies'
print(x, ...)
tamobj_list |
List of fitted objects in TAM |
type |
Type of linking method: |
method |
Chain linking ( |
pow_rob_hae |
Power for robust Heabara linking |
eps_rob_hae |
Value |
theta |
Grid of |
wgt |
Weights defined for the |
wgt_sd |
Standard deviation for |
fix.slope |
Logical indicating whether the slope transformation constant is fixed to 1. |
elim_items |
List of vectors refering to items which should be removed from linking (see Model 'lmod2' in Example 1) |
par_init |
Optional vector with initial parameter values |
verbose |
Logical indicating progress of linking computation |
object |
Object of class |
x |
Object of class |
file |
A file name in which the summary output will be written |
... |
Further arguments to be passed |
B1 |
Array |
AXsi1 |
Matrix |
guess1 |
Guessing parameter for first study |
B2 |
Array |
AXsi2 |
Matrix |
guess2 |
Guessing parameter for second study |
M1 |
Mean of first study |
SD1 |
Standard deviation of first study |
M2 |
Mean of second study |
SD2 |
Standard deviation of second study |
The Haebara linking is defined by minimizing the loss function
\sum_i \sum_k \int \left ( P_{ik} ( \theta ) - P_{ik}^\ast ( \theta ) \right )^2
A robustification of Haebara linking minimizes the loss function
\sum_i \sum_k \int \left ( P_{ik} ( \theta ) - P_{ik}^\ast ( \theta ) \right )^p
with a power p
(defined in pow_rob_hae
) smaller than 2. He, Cui and
Osterlind (2015) consider p=1
.
List containing entries
parameters_list |
List containing transformed item parameters |
linking_list |
List containing results of each linking in the linking chain |
M_SD |
Mean and standard deviation for each study after linking |
trafo_items |
Transformation constants for item parameters |
trafo_persons |
Transformation constants for person parameters |
Battauz, M. (2015). equateIRT: An R package for IRT test equating. Journal of Statistical Software, 68(7), 1-22. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.18637/jss.v068.i07")}
Gonzalez, J., & Wiberg, M. (2017). Applying test equating methods: Using R. New York, Springer. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1007/978-3-319-51824-4")}
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. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1177/0146621615587003")}
Kolen, M. J., & Brennan, R. L. (2014). Test equating, scaling, and linking: Methods and practices. New York, Springer. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1007/978-1-4939-0317-7")}
Weeks, J. P. (2010). plink: An R package for linking mixed-format tests using IRT-based methods. Journal of Statistical Software, 35(12), 1-33. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.18637/jss.v035.i12")}
Linking or equating of item response models can be also conducted with plink (Weeks, 2010), equate, equateIRT (Battauz, 2015), equateMultiple, kequate and irteQ packages.
See also the sirt::linking.haberman
,
sirt::invariance.alignment
and sirt::linking.haebara
functions
in the sirt package.
## Not run:
#############################################################################
# EXAMPLE 1: Linking dichotomous data with the 2PL model
#############################################################################
data(data.ex16)
dat <- data.ex16
items <- colnames(dat)[-c(1,2)]
# fit grade 1
rdat1 <- TAM::tam_remove_missings( dat[ dat$grade==1, ], items=items )
mod1 <- TAM::tam.mml.2pl( resp=rdat1$resp[, rdat1$items], pid=rdat1$dat$idstud )
summary(mod1)
# fit grade 2
rdat2 <- TAM::tam_remove_missings( dat[ dat$grade==2, ], items=items )
mod2 <- TAM::tam.mml.2pl( resp=rdat2$resp[, rdat2$items], pid=rdat2$dat$idstud )
summary(mod2)
# fit grade 3
rdat3 <- TAM::tam_remove_missings( dat[ dat$grade==3, ], items=items )
mod3 <- TAM::tam.mml.2pl( resp=rdat3$resp[, rdat3$items], pid=rdat3$dat$idstud )
summary(mod3)
# define list of fitted models
tamobj_list <- list( mod1, mod2, mod3 )
#-- link item response models
lmod <- TAM::tam.linking( tamobj_list)
summary(lmod)
# estimate WLEs based on transformed item parameters
parm_list <- lmod$parameters_list
# WLE grade 1
arglist <- list( resp=mod1$resp, B=parm_list[[1]]$B, AXsi=parm_list[[1]]$AXsi )
wle1 <- TAM::tam.mml.wle(tamobj=arglist)
# WLE grade 2
arglist <- list( resp=mod2$resp, B=parm_list[[2]]$B, AXsi=parm_list[[2]]$AXsi )
wle2 <- TAM::tam.mml.wle(tamobj=arglist)
# WLE grade 3
arglist <- list( resp=mod3$resp, B=parm_list[[3]]$B, AXsi=parm_list[[3]]$AXsi )
wle3 <- TAM::tam.mml.wle(tamobj=arglist)
# compare result with chain linking
lmod1b <- TAM::tam.linking(tamobj_list)
summary(lmod1b)
#-- linking with some eliminated items
# remove three items from first group and two items from third group
elim_items <- list( c("A1", "E2","F1"), NULL, c("F1","F2") )
lmod2 <- TAM::tam.linking(tamobj_list, elim_items=elim_items)
summary(lmod2)
#-- Robust Haebara linking with p=1
lmod3a <- TAM::tam.linking(tamobj_list, type="RobHae", pow_rob_hae=1)
summary(lmod3a)
#-- Robust Haeabara linking with initial parameters and prespecified epsilon value
par_init <- lmod3a$par
lmod3b <- TAM::tam.linking(tamobj_list, type="RobHae", pow_rob_hae=.1,
eps_rob_hae=1e-3, par_init=par_init)
summary(lmod3b)
#############################################################################
# EXAMPLE 2: Linking polytomous data with the partial credit model
#############################################################################
data(data.ex17)
dat <- data.ex17
items <- colnames(dat)[-c(1,2)]
# fit grade 1
rdat1 <- TAM::tam_remove_missings( dat[ dat$grade==1, ], items=items )
mod1 <- TAM::tam.mml.2pl( resp=rdat1$resp[, rdat1$items], pid=rdat1$dat$idstud )
summary(mod1)
# fit grade 2
rdat2 <- TAM::tam_remove_missings( dat[ dat$grade==2, ], items=items )
mod2 <- TAM::tam.mml.2pl( resp=rdat2$resp[, rdat2$items], pid=rdat2$dat$idstud )
summary(mod2)
# fit grade 3
rdat3 <- TAM::tam_remove_missings( dat[ dat$grade==3, ], items=items )
mod3 <- TAM::tam.mml.2pl( resp=rdat3$resp[, rdat3$items], pid=rdat3$dat$idstud )
summary(mod3)
# list of fitted TAM models
tamobj_list <- list( mod1, mod2, mod3 )
#-- linking: fix slope because partial credit model is fitted
lmod <- TAM::tam.linking( tamobj_list, fix.slope=TRUE)
summary(lmod)
# WLEs can be estimated in the same way as in Example 1.
#############################################################################
# EXAMPLE 3: Linking dichotomous data with the multiple group 2PL models
#############################################################################
data(data.ex16)
dat <- data.ex16
items <- colnames(dat)[-c(1,2)]
# fit grade 1
rdat1 <- TAM::tam_remove_missings( dat[ dat$grade==1, ], items=items )
# create some grouping variable
group <- ( seq( 1, nrow( rdat1$dat ) ) %% 3 ) + 1
mod1 <- TAM::tam.mml.2pl( resp=rdat1$resp[, rdat1$items], pid=rdat1$dat$idstud, group=group)
summary(mod1)
# fit grade 2
rdat2 <- TAM::tam_remove_missings( dat[ dat$grade==2, ], items=items )
group <- 1*(rdat2$dat$dat$idstud > 500)
mod2 <- TAM::tam.mml.2pl( resp=rdat2$resp[, rdat2$items], pid=rdat2$dat$dat$idstud, group=group)
summary(mod2)
# fit grade 3
rdat3 <- TAM::tam_remove_missings( dat[ dat$grade==3, ], items=items )
mod3 <- TAM::tam.mml.2pl( resp=rdat3$resp[, rdat3$items], pid=rdat3$dat$idstud )
summary(mod3)
# define list of fitted models
tamobj_list <- list( mod1, mod2, mod3 )
#-- link item response models
lmod <- TAM::tam.linking( tamobj_list)
#############################################################################
# EXAMPLE 4: Linking simulated dichotomous data with two groups
#############################################################################
library(sirt)
#*** simulate data
N <- 3000 # number of persons
I <- 30 # number of items
b <- seq(-2,2, length=I)
# data for group 1
dat1 <- sirt::sim.raschtype( rnorm(N, mean=0, sd=1), b=b )
# data for group 2
dat2 <- sirt::sim.raschtype( rnorm(N, mean=1, sd=.6), b=b )
# fit group 1
mod1 <- TAM::tam.mml.2pl( resp=dat1 )
summary(mod1)
# fit group 2
mod2 <- TAM::tam.mml.2pl( resp=dat2 )
summary(mod2)
# define list of fitted models
tamobj_list <- list( mod1, mod2 )
#-- link item response models
lmod <- TAM::tam.linking( tamobj_list)
summary(lmod)
# estimate WLEs based on transformed item parameters
parm_list <- lmod$parameters_list
# WLE grade 1
arglist <- list( resp=mod1$resp, B=parm_list[[1]]$B, AXsi=parm_list[[1]]$AXsi )
wle1 <- TAM::tam.mml.wle(tamobj=arglist)
# WLE grade 2
arglist <- list( resp=mod2$resp, B=parm_list[[2]]$B, AXsi=parm_list[[2]]$AXsi )
wle2 <- TAM::tam.mml.wle(tamobj=arglist)
summary(wle1)
summary(wle2)
# estimation with linked and fixed item parameters for group 2
B <- parm_list[[2]]$B
xsi.fixed <- cbind( 1:I, -parm_list[[2]]$AXsi[,2] )
mod2f <- TAM::tam.mml( resp=dat2, B=B, xsi.fixed=xsi.fixed )
summary(mod2f)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.