Tests each item for uniform DIF by splitting it by a person factor,
recalibrating with the unsplit items as the anchor, and comparing the
locations of the split copies with a Wald test. The comparison conditions
on item-pair totals through the pairwise conditional likelihood used by
rasch, with its Godambe sandwich covariance. No class
intervals or person estimates are needed. It addresses item-location
invariance, as Andersen's (1973) test does at the test level, but is not
a full-score conditional likelihood-ratio test. For polytomous items it
compares mean threshold locations, not every threshold separately.
Arguments
- fit
A fitted object from
rasch, including one that already carries splits.- factors
Person factors to test, as in
dif_anova; defaults to every nominated factor. Each factor is tested on its own.- items
Items to test; defaults to every item in the fit.
- p_adjust
Multiplicity adjustment over every item-by-factor test, as in
p.adjust.- alpha
Significance level for the adjusted probabilities.
- min_n
Levels with fewer distinct responders to an item are dropped from that item's comparison.
Value
A list of class "rasch_dif_wald". summary has one
row per item and factor: n_levels compared, shift (for
two levels the location of the second level minus the first, positive
when the item is harder for the second level; for more levels the range
of the locations), its se (two levels only), the wald
statistic, its hypothesis df (levels minus one), the reference
ref_df (infinite for independent response rows, the cluster
count minus one for a supported repeated-person calibration),
p, p_adj and significant. levels gives each
compared level's resolved location, se and n.
notes records what was left out or withheld and why.
Details
A split copy of an item that persons in one level of the factor only
answered has no group contrast and is left out with a note. Levels with
fewer than min_n distinct responders to an item are dropped from
that item's comparison. Items whose resolution is unavailable (an
externally anchored item, a group that does not observe every score
category, a refit that fails, a location that rests on a near-empty
category) keep their row with NA statistics and a note.
Every other item is treated as invariant while one item is tested. Under
pervasive DIF that assumption fails and the anchor carries artificial DIF
(Andrich and Hagquist 2012), so the test is best used iteratively, as
resolve_dif does with criterion = "wald", or with a
set of anchors chosen on other grounds.
References
Andersen, E. B. (1973). A goodness of fit test for the Rasch model. Psychometrika, 38(1), 123–140.
Glas, C. A. W. and Verhelst, N. D. (1995). Testing the Rasch model. In G. H. Fischer and I. W. Molenaar (eds), Rasch Models: Foundations, Recent Developments, and Applications (pp. 69–95). Springer.
Kopf, J., Zeileis, A. and Strobl, C. (2015). Anchor selection strategies for DIF analysis: review, assessment, and new approaches. Educational and Psychological Measurement, 75(1), 22–56.
Andrich, D. and Hagquist, C. (2012). Real and artificial differential item functioning. Journal of Educational and Behavioral Statistics, 37(3), 387–416.
See also
dif_anova for the residual analysis by class
interval, dif_size for the pairwise magnitudes of one
item and resolve_dif for iterative resolution.
Examples
set.seed(1); n <- 600
d <- seq(-2, 2, length.out = 8); g <- rep(c("a", "b"), each = n / 2)
sh <- matrix(0, n, 8); sh[g == "b", 3] <- 0.8
X <- matrix(rbinom(n * 8, 1, plogis(outer(rnorm(n), d, "-") - sh)), n, 8)
colnames(X) <- paste0("I", 1:8)
fit <- rasch(data.frame(X, grp = g), factors = "grp")
dif_wald(fit)
#> Conditional Wald test of DIF by grp (resolved locations, logits)
#> item factor n_levels shift se wald df ref_df p p_adj significant
#> I1 grp 2 -0.087 0.265 0.108 1 Inf 0.742 1.000
#> I2 grp 2 -0.198 0.237 0.697 1 Inf 0.404 1.000
#> I3 grp 2 0.907 0.204 19.722 1 Inf < 0.001 < 0.001 *
#> I4 grp 2 -0.133 0.200 0.442 1 Inf 0.506 1.000
#> I5 grp 2 -0.570 0.200 8.102 1 Inf 0.004 0.031 *
#> I6 grp 2 -0.261 0.208 1.581 1 Inf 0.209 1.000
#> I7 grp 2 0.361 0.230 2.459 1 Inf 0.117 0.701
#> I8 grp 2 0.065 0.270 0.058 1 Inf 0.809 1.000
#> p adjusted by holm over 8 item-by-factor test(s); chi-square reference
#> shift: second level minus first for two levels, range of the locations otherwise; positive means harder for the second level