The equateIRT package computes:
Load the package equateIRT and the data
library("equateIRT") data("data2pl", package = "equateIRT")
Estimate a two parameter logistic model for 5 data sets with the R package mirt
library("mirt") 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)
Extract the item parameter estimates and the covariance matrices
estm1 <- import.mirt(m1, display = FALSE) estm2 <- import.mirt(m2, display = FALSE) estm3 <- import.mirt(m3, display = FALSE) estm4 <- import.mirt(m4, display = FALSE) estm5 <- import.mirt(m5, display = FALSE) estm1$coef[1:3, ] estm1$var[1:3, 1:3]
Create a list of coefficients and covariance matrices
estc <- list(estm1$coef, estm2$coef, estm3$coef, estm4$coef, estm5$coef) estv <- list(estm1$var, estm2$var, estm3$var, estm4$var, estm5$var) test <- paste("test", 1:5, sep = "")
Create an object of class modIRT
mod2pl <- modIRT(coef = estc, var = estv, names = test, display = FALSE) coef(mod2pl$test1)[1:5]
The linkage plan
lplan<-linkp(coef = estc) lplan
A graphic of the linkage plan with package sna
library(sna) par(mar=c(0, 0, 0, 0)) set.seed(6) gplot(lplan, displaylabels = TRUE, vertex.sides = 4, vertex.cex = 5, vertex.rot =45, usearrows = FALSE, label.pos = 5, label.cex = 1, vertex.col = 0)
Estimation of direct equating coefficients between Forms 1 and 2 using the mean-mean method.
NOTE: Item parameters are converted to the scale of Form 2.
l12 <- direc(mods = mod2pl, which = c(1,2), method = "mean-mean") l12 summary(l12)
Estimation of all direct equating coefficients between forms with common items using the mean-mean method
direclist2pl <- alldirec(mods = mod2pl, method = "mean-mean") direclist2pl
Direct equating coefficients for Forms 1 and 2
summary(direclist2pl, link="test1.test2")
Estimation of all chain equating coefficients of length 4
cec4 <- chainec(r = 4, direclist = direclist2pl) cec4 summary(cec4, path="test1.test2.test3.test4")
Chain equating coefficients for path {1, 2, 3, 4}
summary(cec4, path="test1.test2.test3.test4")
Estimation of all chain equating coefficients of length 4 from Form 1 to Form 4
cec14 <- chainec(r = 4, direclist = direclist2pl, f1 = "test1", f2 = "test4") cec14 summary(cec14)
Estimation of chain equating coefficient for path {1, 5, 4}
pth <- paste("test", c(1,5,4), sep = "") chainec154 <- chainec(direclist = direclist2pl, pths = pth) summary(chainec154)
NOTE: Item parameters are converted to the scale of Form 4.
Estimation of bisector equating coefficients
ecall <- c(cec14, chainec154) fec <- bisectorec(ecall = ecall, weighted = TRUE, unweighted = TRUE) fec summary(fec)
Extract the equating coefficients
eqc(fec)
Extract item parameters of two forms being equated in the original scale and item parameters of the first form converted to the scale of the second form.
itm(fec, bistype = "weighted")
Equated scores with the true score equating method
score(fec, bistype = "weighted")
Equated scores with the observed score equating method
score(fec, method = "OSE", bistype = "weighted")
A comparison of equated scores obtained with 2 different chains, bisector and weighted bisector methods.
score(chainec154, scores = 17) score(cec4, path = "test1.test2.test3.test4", scores = 17) score(fec, bistype = "unweighted", scores = 17) score(fec, bistype = "weighted", scores = 17)
Load the data
data(dataDIF)
Create a dataset for each group and 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)
Extract the coefficients and the covariance matrix
est1 <- import.mirt(mod1, display = FALSE) est2 <- import.mirt(mod2, display = FALSE) est3 <- import.mirt(mod3, display = FALSE)
Perform the test for DIF on two groups
res_diftest2 <- dif.test(coef = list(est1$coef, est2$coef), var = list(est1$var, est2$var)) res_diftest2
Perform the test for DIF on three groups
res_diftest3 <- dif.test(coef = list(est1$coef, est2$coef, est3$coef), var = list(est1$var, est2$var, est3$var)) res_diftest3
It is possible to change the reference group, the equating method used, and to apply purification.
res_diftest3 <- dif.test(coef = list(est1$coef, est2$coef, est3$coef), var = list(est1$var, est2$var, est3$var), reference = 2, method = "Haebara", purification = TRUE) res_diftest3
The identity test performs a statistical test to verify if the chain equating coeffients from one form to itself are A=1 and B=0.
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") pth3 <- paste("test", c(1:5,1), sep = "") chainec_circle <- chainec(direclist = direclist3pl, pths = pth3) summary(chainec_circle) id.test(chainec_circle)
The null hypothesis A=1 and B=0 is not rejected.
It is also possible to performs a statistical test to verify if the chain equating coeffients that link the same two forms are equal.
In the following example test 1 and 5 are linked through two different paths giving two different pairs of equating coefficients. The example uses the 3PL models and the Haebara method, though other options are possible.
pth3 <- paste("test", 1:5, sep = "") chainec3 <- chainec(direclist = direclist3pl, pths = pth3) ecall <- c(chainec3, direclist3pl["test1.test5"]) summary(chainec3) summary(direclist3pl$test1.test5) sd.test(ecall)
The null hypothesis of equality of the equating coefficients is not rejected.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.