Linking of Fitted Unidimensional Item Response Models in TAM
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 \varepsilon for numerical approximation of loss function |x|^p in robust Haebara linking |
theta |
Grid of θ points. The default is |
wgt |
Weights defined for the |
wgt_sd |
Standard deviation for θ grid used for linking function |
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 B for first study |
AXsi1 |
Matrix A ξ for first study |
guess1 |
Guessing parameter for first study |
B2 |
Array B for second study |
AXsi2 |
Matrix A ξ for second study |
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
∑_i ∑_k \int ≤ft ( P_{ik} ( θ ) - P_{ik}^\ast ( θ ) \right )^2
A robustification of Haebara linking minimizes the loss function
∑_i ∑_k \int ≤ft ( P_{ik} ( θ ) - P_{ik}^\ast ( θ ) \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. doi: 10.18637/jss.v068.i07
Gonzalez, J., & Wiberg, M. (2017). Applying test equating methods: Using R. New York, Springer. 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. doi: 10.1177/0146621615587003
Kolen, M. J., & Brennan, R. L. (2014). Test equating, scaling, and linking: Methods and practices. New York, Springer. 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. 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)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.