The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
This document shows the usage of function multiDIF() to implement the method proposed by Battauz (2025). It could be used to analyze:
Load the package equateMultiple and the data.
Estimate the item parameters separately for each booklet using the R package mirt.
library(mirt)
est.mods <- list()
for (i in 1:14)
est.mods[[i]] <- mirt(timss19$data[[i]][, -(1:3)], 1, itemtype = "2PL", SE = TRUE)Extract item parameter estimates and covariance matrices.
For comparison, the equating coefficients are also estimated ignoring the item position effect using the independent likelihood method
## Computation of equating coefficients . . . .
## Computation of standard errors . . . .
## Equating coefficients:
## EQ Form Estimate StdErr
## A B01 1.000000 0.000000
## A B02 1.139006 0.066084
## A B03 1.113649 0.080523
## A B04 1.166446 0.095008
## A B05 1.234758 0.112863
## A B06 1.190822 0.115680
## A B07 1.110032 0.112139
## A B08 1.298161 0.136019
## A B09 1.203730 0.125301
## A B10 1.238845 0.126821
## A B11 1.092513 0.103599
## A B12 1.080780 0.095692
## A B13 1.062426 0.082717
## A B14 1.047323 0.066737
## B B01 0.000000 0.000000
## B B02 -0.086055 0.069640
## B B03 -0.102984 0.080656
## B B04 -0.017841 0.088400
## B B05 0.099983 0.098940
## B B06 0.054661 0.101803
## B B07 0.062404 0.103489
## B B08 -0.245597 0.104302
## B B09 -0.114392 0.098608
## B B10 -0.410851 0.099436
## B B11 -0.239027 0.089833
## B B12 -0.192837 0.083833
## B B13 -0.157509 0.074701
## B B14 -0.227277 0.067235
Estimation of position effects on the item parameters
## Equating coefficients:
## EQ Form Estimate StdErr
## A B01 1.000000 0.000000
## A B02 1.136281 0.067585
## A B03 1.119967 0.082346
## A B04 1.143324 0.093699
## A B05 1.201282 0.109795
## A B06 1.122213 0.107318
## A B07 1.044953 0.103248
## A B08 1.184687 0.118952
## A B09 1.089984 0.108433
## A B10 1.131496 0.111650
## A B11 1.031696 0.097081
## A B12 1.043902 0.093451
## A B13 1.051416 0.084189
## A B14 1.041656 0.068839
## B B01 0.000000 0.000000
## B B02 -0.060140 0.068841
## B B03 -0.072065 0.077360
## B B04 0.002503 0.082879
## B B05 0.115260 0.090590
## B B06 0.072752 0.090938
## B B07 0.102325 0.091765
## B B08 -0.181192 0.093642
## B B09 -0.046502 0.089732
## B B10 -0.294805 0.089308
## B B11 -0.144426 0.082196
## B B12 -0.130864 0.078426
## B B13 -0.106588 0.072262
## B B14 -0.193562 0.065686
##
## Covariate effects:
## Estimate StdErr
## Dscrmn.position 0.00721635 0.00510279
## Dscrmn.position2 0.00017022 0.00019982
## Dffclt.position -0.00617364 0.00299907
## Dffclt.position2 0.00071115 0.00012022
Comparison of the log-likelihood without and with DIF effects
## 'log Lik.' -665.1837 (df=26)
## 'log Lik.' -425.0873 (df=30)
Load the data from the equateIRT package.
data("dataDIF", package = "equateIRT")
data1 <- dataDIF[dataDIF$group == 1, 1:20]
data2 <- dataDIF[dataDIF$group == 2, 1:20]
data3 <- dataDIF[dataDIF$group == 3, 1:20]Estimate the item parameters separately for each group.
mod1 <- mirt(data1, SE = TRUE)
mod2 <- mirt(data2, SE = TRUE)
mod3 <- mirt(data3, SE = TRUE)
mods <- list(mod1, mod2, mod3)Extract item parameter estimates and covariance matrices.
Estimate the equating coefficients (without accounting for DIF)
## Computation of equating coefficients . . . .
## Computation of standard errors . . . .
## Equating coefficients:
## EQ Form Estimate StdErr
## A T1 1.00000 0.000000
## A T2 1.14674 0.049193
## A T3 1.12120 0.051094
## B T1 0.00000 0.000000
## B T2 0.46127 0.056858
## B T3 -0.40303 0.056539
For fixed values of the tuning parameter \(\lambda\) estimate DIF effects and equating coefficients.
lambda <- seq(1, 100, by = 0.5)
out <- list()
for (i in 1:length(lambda))
{
dif_lambda <- multiDIF(mods = mods_extract, start = eqINDLIK,
itempar.DIF = TRUE, lambda_mcp = lambda[i])
out[[i]] <- dif_lambda
}Select the tuning parameter \(\lambda\) on the basis of BIC
bic <- lapply(out, function(x) x$BIC)
sel_bic <- which.min(bic)
dif_param <- out[[sel_bic]]
summary(dif_param)## Equating coefficients:
## EQ Form Estimate StdErr
## A T1 1.00000 NA
## A T2 1.15141 NA
## A T3 1.14598 NA
## B T1 0.00000 NA
## B T2 0.48096 NA
## B T3 -0.49493 NA
##
## Item-level DIF effects:
## Discrimination parameters
## T1 T2 T3
## Dscrmn.I01 -0.901 -1.43 0
## Dscrmn.I02 0.000 0.00 0
## Dscrmn.I03 0.000 0.00 0
## Dscrmn.I04 0.000 0.00 0
## Dscrmn.I05 0.000 0.00 0
## Dscrmn.I06 0.000 0.00 0
## Dscrmn.I07 0.000 0.00 0
## Dscrmn.I08 0.000 0.00 0
## Dscrmn.I09 0.000 0.00 0
## Dscrmn.I10 0.000 0.00 0
## Dscrmn.I11 0.000 0.00 0
## Dscrmn.I12 0.000 0.00 0
## Dscrmn.I13 0.000 0.00 0
## Dscrmn.I14 0.000 0.00 0
## Dscrmn.I15 0.000 0.00 0
## Dscrmn.I16 0.000 0.00 0
## Dscrmn.I17 0.000 0.00 0
## Dscrmn.I18 0.000 0.00 0
## Dscrmn.I19 0.000 0.00 0
## Dscrmn.I20 0.000 0.00 0
##
## Difficulty parameters
## T1 T2 T3
## Dffclt.I01 0 0.6 -0.73
## Dffclt.I02 0 0.0 0.00
## Dffclt.I03 0 0.0 0.00
## Dffclt.I04 0 0.0 0.00
## Dffclt.I05 0 0.0 0.00
## Dffclt.I06 0 0.0 0.00
## Dffclt.I07 0 0.0 0.00
## Dffclt.I08 0 0.0 0.00
## Dffclt.I09 0 0.0 0.00
## Dffclt.I10 0 0.0 0.00
## Dffclt.I11 0 0.0 0.00
## Dffclt.I12 0 0.0 0.00
## Dffclt.I13 0 0.0 0.00
## Dffclt.I14 0 0.0 0.00
## Dffclt.I15 0 0.0 0.00
## Dffclt.I16 0 0.0 0.00
## Dffclt.I17 0 0.0 0.00
## Dffclt.I18 0 0.0 0.00
## Dffclt.I19 0 0.0 0.00
## Dffclt.I20 0 0.0 0.00
Only the first item shows DIF in both the difficulty and discrimination parameters.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.