difNLR | R Documentation |
Performs DIF detection procedure in dichotomous data based on non-linear regression model (generalized logistic regression) and either likelihood-ratio test, F-test, or Wald's test of a submodel.
difNLR(Data, group, focal.name, model, constraints, type = "all",
method = "nls", match = "zscore", anchor = NULL, purify = FALSE,
nrIter = 10, test = "LR", alpha = 0.05, p.adjust.method = "none", start,
initboot = TRUE, nrBo = 20, sandwich = FALSE)
Data |
data.frame or matrix: dataset in which rows represent scored
examinee answers ( |
group |
numeric or character: a binary vector of the same length as
|
focal.name |
numeric or character: indicates the level of the |
model |
character: generalized logistic regression model to be fitted. See Details. |
constraints |
character: which parameters should be the same for both
groups. Possible values are any combinations of parameters |
type |
character: type of DIF to be tested. Possible values are
|
method |
character: an estimation method to be applied. The options are
|
match |
character or numeric: matching criterion to be used as
an estimate of the trait. It can be either |
anchor |
character or numeric: specification of DIF free items. Either
|
purify |
logical: should the item purification be applied? (the default is
|
nrIter |
numeric: the maximal number of iterations in the item purification (the default is 10). |
test |
character: a statistical test to be performed for DIF detection.
Can be either |
alpha |
numeric: a significance level (the default is 0.05). |
p.adjust.method |
character: a method for a multiple comparison
correction. Possible values are |
start |
numeric: initial values for the estimation of item parameters. If
not specified, starting values are calculated with the
|
initboot |
logical: in the case of convergence issues, should starting
values be re-calculated based on bootstrapped samples? (the default is
|
nrBo |
numeric: the maximal number of iterations for the calculation of starting values using bootstrapped samples (the default is 20). |
sandwich |
logical: should the sandwich estimator be applied for
computation of the covariance matrix of item parameters when using
|
DIF detection procedure based on non-linear regression is the extension of the logistic regression procedure (Swaminathan & Rogers, 1990) accounting for possible guessing and/or inattention when responding (Drabinova & Martinkova, 2017; Hladka & Martinkova, 2020).
The unconstrained form of the 4PL generalized logistic regression model for
probability of correct answer (i.e., Y_{pi} = 1
) using IRT
parameterization is
P(Y_{pi} = 1|X_p, G_p) = (c_{iR} \cdot G_p + c_{iF} \cdot (1 - G_p)) +
(d_{iR} \cdot G_p + d_{iF} \cdot (1 - G_p) - c_{iR} \cdot G_p - c_{iF} \cdot
(1 - G_p)) / (1 + \exp(-(a_i + a_{i\text{DIF}} \cdot G_p) \cdot
(X_p - b_p - b_{i\text{DIF}} \cdot G_p))),
where X_p
is the matching criterion (e.g., standardized total score)
and G_p
is a group membership variable for respondent p
.
Parameters a_i
, b_i
, c_{iR}
, and d_{iR}
are
discrimination, difficulty, guessing, and inattention for the reference group
for item i
. Terms a_{i\text{DIF}}
and b_{i\text{DIF}}
then
represent differences between the focal and reference groups in
discrimination and difficulty for item i
. Terms c_{iF}
, and
d_{iF}
are guessing and inattention parameters for the focal group for
item i
. In the case that there is no assumed difference between the
reference and focal group in the guessing or inattention parameters, the
terms c_i
and d_i
are used.
Alternatively, intercept-slope parameterization may be applied:
P(Y_{pi} = 1|X_p, G_p) = (c_{iR} \cdot G_p + c_{iF} \cdot (1 - G_p)) +
(d_{iR} \cdot G_p + d_{iF} \cdot (1 - G_p) - c_{iR} \cdot G_p - c_{iF} \cdot
(1 - G_p)) / (1 + \exp(-(\beta_{i0} + \beta_{i1} \cdot X_p +
\beta_{i2} \cdot G_p + \beta_{i3} \cdot X_p \cdot G_p))),
where parameters \beta_{i0}, \beta_{i1}, \beta_{i2}, \beta_{i3}
are
intercept, effect of the matching criterion, effect of the group membership,
and their mutual interaction, respectively.
The model
and constraints
arguments can further constrain the
4PL model. The arguments model
and constraints
can also be
combined. Both arguments can be specified as a single value (for all items)
or as an item-specific vector (where each element corresponds to one item).
The model
argument offers several predefined models. The options are as follows:
Rasch
for 1PL model with discrimination parameter fixed on value 1 for both groups,
1PL
for 1PL model with discrimination parameter set the same for both groups,
2PL
for logistic regression model,
3PLcg
for 3PL model with fixed guessing for both groups,
3PLdg
for 3PL model with fixed inattention for both groups,
3PLc
(alternatively also 3PL
) for 3PL regression model with guessing parameter,
3PLd
for 3PL model with inattention parameter,
4PLcgdg
for 4PL model with fixed guessing and inattention parameter for both groups,
4PLcgd
(alternatively also 4PLd
) for 4PL model with fixed guessing for both groups,
4PLcdg
(alternatively also 4PLc
) for 4PL model with fixed inattention for both groups,
or 4PL
for 4PL model.
The underlying generalized logistic regression model can be further specified in
more detail with the constraints
argument which specifies what parameters
should be fixed for both groups. For example, a choice "ad"
means that
discrimination (parameter "a"
) and inattention (parameter "d"
) are
fixed (and estimated for) both groups and other parameters ("b"
and
"c"
) are not. The NA
value for constraints
means no
constraints.
Missing values are allowed but discarded for an item estimation. They must be
coded as NA
for both, the Data
and group
arguments.
The function uses intercept-slope parameterization for the estimation via the
estimNLR
function. Item parameters are then
re-calculated into the IRT parameterization using the delta method.
The function offers either the non-linear least squares estimation via the
nls
function (Drabinova & Martinkova, 2017; Hladka &
Martinkova, 2020), the maximum likelihood method with the "L-BFGS-B"
algorithm with constraints via the optim
function (Hladka &
Martinkova, 2020), the maximum likelihood method with the EM algorithm (Hladka,
Martinkova, & Brabec, 2024), the maximum likelihood method with the algorithm
based on parametric link function (PLF, the default option; Hladka, Martinkova,
& Brabec, 2024), or the maximum likelihood method with the iteratively
reweighted least squares algorithm via the glm
function.
The difNLR()
function returns an object of class "difNLR"
. The
output, including values of the test statistics, p-values, and items detected
as function differently, is displayed by the print()
method.
Object of class "difNLR"
is a list with the following components:
Sval
the values of the test
statistics.
nlrPAR
the item parameter estimates of the final model.
nlrSE
the standard errors of the item parameter estimates of the final model.
parM0
the item parameter estimates of the null (smaller) model.
seM0
the standard errors of item parameter estimates of the null (smaller) model.
covM0
the covariance matrices of the item parameter estimates of the null (smaller) model.
llM0
the log-likelihood values of the null (smaller) model.
parM1
the item parameter estimates of the alternative (larger) model.
seM1
the standard errors of the item parameter estimates of the alternative (larger) model.
covM1
the covariance matrices of the item parameter estimates of alternative (larger) model.
llM1
the log-likelihood values of the alternative (larger) model.
DIFitems
either the column identifiers of the items which were detected as DIF, or "No DIF item detected"
in the case no item was detected as function differently.
model
fitted model.
constraints
constraints for the model
.
type
character: type of DIF that was tested. If a combination of the item parameters was specified, the value is "other"
.
types
character: the parameters (specified by user, type
has value "other"
) which were tested for difference.
p.adjust.method
character: a method for the multiple comparison correction which was applied.
pval
the p-values by the test
.
adjusted.pval
adjusted p-values by the p.adjust.method
.
df
the degrees of freedom of the test
.
test
used test.
purification
purify
value.
nrPur
number of iterations in item purification process. Returned only if purify
is TRUE
.
difPur
a binary matrix with one row per iteration of item purification and one column per item.
"1"
in i-th row and j-th column means that j-th item was identified as DIF in i-th iteration. Returned only if purify
is TRUE
.
conv.puri
logical: indicating whether item purification process converged before the maximal number nrIter
of iterations. Returned only if purify
is TRUE
.
method
used estimation method.
conv.fail
numeric: number of convergence issues.
conv.fail.which
the identifiers of the items which did not converge.
alpha
numeric: significance level.
Data
the data matrix.
group
the vector of group membership.
group.names
names of groups.
match
matching criterion.
Several methods are available for an object of the "difNLR"
class (e.g.,
methods(class = "difNLR")
).
Adela Hladka (nee Drabinova)
Institute of Computer Science of the Czech Academy of Sciences
hladka@cs.cas.cz
Patricia Martinkova
Institute of Computer Science of the Czech Academy of Sciences
martinkova@cs.cas.cz
Karel Zvara
Faculty of Mathematics and Physics, Charles University
Drabinova, A. & Martinkova, P. (2017). Detection of differential item functioning with nonlinear regression: A non-IRT approach accounting for guessing. Journal of Educational Measurement, 54(4), 498–517, \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1111/jedm.12158")}.
Hladka, A. (2021). Statistical models for detection of differential item functioning. Dissertation thesis. Faculty of Mathematics and Physics, Charles University.
Hladka, A. & Martinkova, P. (2020). difNLR: Generalized logistic regression models for DIF and DDF detection. The R Journal, 12(1), 300–323, \Sexpr[results=rd]{tools:::Rd_expr_doi("10.32614/RJ-2020-014")}.
Hladka, A., Martinkova, P., & Brabec, M. (2024). New iterative algorithms for estimation of item functioning. Journal of Educational and Behavioral Statistics. Accepted.
Swaminathan, H. & Rogers, H. J. (1990). Detecting differential item functioning using logistic regression procedures. Journal of Educational Measurement, 27(4), 361–370, \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1111/j.1745-3984.1990.tb00754.x")}
plot.difNLR
for a graphical representation of item characteristic curves and DIF statistics.
coef.difNLR
for an extraction of item parameters with their standard errors in various parameterizations.
predict.difNLR
for prediction.
fitted.difNLR
and residuals.difNLR
for an extraction of fitted
values and residuals.
logLik.difNLR
, AIC.difNLR
, BIC.difNLR
for an extraction of log-likelihood values and information criteria.
p.adjust
for multiple comparison corrections.
nls
for a nonlinear least squares estimation.
startNLR
for a calculation of initial values of fitting algorithms in difNLR()
.
# loading data
data(GMAT)
Data <- GMAT[, 1:20] # items
group <- GMAT[, "group"] # group membership variable
# testing both DIF effects using likelihood-ratio test and
# 3PL model with fixed guessing for groups
(x <- difNLR(Data, group, focal.name = 1, model = "3PLcg"))
## Not run:
# graphical devices
plot(x, item = x$DIFitems)
plot(x, item = "Item1")
plot(x, item = 1, group.names = c("Group 1", "Group 2"))
plot(x, plot.type = "stat")
# coefficients
coef(x)
coef(x, SE = TRUE)
coef(x, SE = TRUE, simplify = TRUE)
coef(x, item = 1, CI = 0)
# fitted values
fitted(x)
fitted(x, item = 1)
# residuals
residuals(x)
residuals(x, item = 1)
# predicted values
predict(x)
predict(x, item = 1)
# predicted values for new subjects
predict(x, item = 1, match = 0, group = c(0, 1))
# AIC, BIC, log-likelihood
AIC(x)
BIC(x)
logLik(x)
# AIC, BIC, log-likelihood for the first item
AIC(x, item = 1)
BIC(x, item = 1)
logLik(x, item = 1)
# testing both DIF effects using Wald test and
# 3PL model with fixed guessing for groups
difNLR(Data, group, focal.name = 1, model = "3PLcg", test = "W")
# testing both DIF effects using F test and
# 3PL model with fixed guessing for groups
difNLR(Data, group, focal.name = 1, model = "3PLcg", test = "F")
# testing both DIF effects using
# 3PL model with fixed guessing for groups and sandwich estimator
# of the covariance matrices
difNLR(Data, group, focal.name = 1, model = "3PLcg", sandwich = TRUE)
# testing both DIF effects using LR test,
# 3PL model with fixed guessing for groups
# and Benjamini-Hochberg correction
difNLR(Data, group, focal.name = 1, model = "3PLcg", p.adjust.method = "BH")
# testing both DIF effects using LR test,
# 3PL model with fixed guessing for groups
# and item purification
difNLR(Data, group, focal.name = 1, model = "3PLcg", purify = TRUE)
# testing both DIF effects using 3PL model with fixed guessing for groups
# and total score as matching criterion
difNLR(Data, group, focal.name = 1, model = "3PLcg", match = "score")
# testing uniform DIF effects using 4PL model with the same
# guessing and inattention
difNLR(Data, group, focal.name = 1, model = "4PLcgdg", type = "udif")
# testing non-uniform DIF effects using 2PL model
difNLR(Data, group, focal.name = 1, model = "2PL", type = "nudif")
# testing difference in parameter b using 4PL model with fixed
# a and c parameters
difNLR(Data, group, focal.name = 1, model = "4PL", constraints = "ac", type = "b")
# testing both DIF effects using LR test,
# 3PL model with fixed guessing for groups
# using maximum likelihood estimation with
# the L-BFGS-B algorithm, the EM algorithm, and the PLF algorithm
difNLR(Data, group, focal.name = 1, model = "3PLcg", method = "mle")
difNLR(Data, group, focal.name = 1, model = "3PLcg", method = "em")
difNLR(Data, group, focal.name = 1, model = "3PLcg", method = "plf")
# testing both DIF effects using LR test and 2PL model
# using maximum likelihood estimation with iteratively reweighted least squares algorithm
difNLR(Data, group, focal.name = 1, model = "2PL", method = "irls")
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.