R: Anchor methods for the detection of uniform DIF the Rasch...

anchortest {psychotools} | R Documentation

## Anchor methods for the detection of uniform DIF the Rasch model

### Description

The `anchortest` function provides a Wald test (see, e.g., Glas, Verhelst, 1995) for the detection of uniform differential item functioning (DIF) in the Rasch model between two pre-specified groups. A variety of anchor methods is available to build a common scale necessary for the comparison of the item parameters in the Rasch model.

### Usage

    anchortest(object, ...)
    ## Default S3 method:
    anchortest(object, object2,
      class = c("constant", "forward", "all-other", "fixed"), select = NULL,
      test = TRUE, adjust = "none", length = NULL, range = c(0.1, 0.8), ...)
    ## S3 method for class 'formula'
    anchortest(formula, data = NULL, subset = NULL,
      na.action = NULL, weights = NULL, model = raschmodel, ...)

### Arguments

`object, object2` | Fitted model objects of class “raschmodel” estimated via conditional maximum likelihood using `raschmodel`.
`...` | further arguments passed over to an internal call of `anchor.default` in the formula method. In the default method, these additional arguments are currently not being used.
`class` | character. Available anchor classes are the `constant` anchor class implying a constant anchor length defined by `length`, the iterative `forward` anchor class that iteratively includes items in the anchor and the `all-other` anchor class, for an overview see Kopf et al. (2015a). Additionally, the class can be `fixed`, then `select` needs to be the numeric index of the fixed selected anchor items.
`select` | character or numeric. Several anchor selection strategies are available: `"MTT"`, `"MPT"`, `"MT"`, `"MP"`, `"NST"`, `"AO"`, `"AOP"`. For details see `anchor`. Alternatively, for `class = "fixed"`, `select` needs to be the numeric index of the fixed selected anchor items. Defaults are set such that `class = "constant"` is combined with `selection = "MPT"` while `class = "forward"` is combined with `selection = "MTT"`. And if `select` is numeric, then `class = "fixed"` is used.
`test` | logical. Should the Wald test be returned for the intended anchor method as final DIF test?
`adjust` | character. Should the final DIF test be adjusted for multiple testing? For the type of adjustment, see `summary.glht` and `p.adjust`.
`length` | integer. It pre-defines a maximum anchor length. Per default, the `forward` anchor grows up to the proportion of currently presumed DIF-free items specified in `range` and the `constant` anchor class selects four anchor items, unless an explicit limiting number is defined in `length` by the user.
`range` | numeric vector of length 2. The first element is the percentage of first anchor candidates to be excluded for consideration when the `forward` anchor class is used and the second element determines a percentage of currently presumed DIF-free items up to which the anchor from the `forward` anchor class is allowed to grow.
`formula` | formula of type `y ~ x` where `y` specifies a matrix of dichotomous item responses and `x` the grouping variable, e.g., gender, for which DIF should be tested for.
`data` | a data frame containing the variables of the specified `formula`.
`subset` | logical expression indicating elements or rows to keep: missing values are taken as false.
`na.action` | a function which indicates what should happen when the data contain missing values (`NA`s).
`weights` | an optional vector of weights (interpreted as case weights).
`model` | an IRT model fitting function with a suitable `itempar` method, by default `raschmodel`.

### Details

To conduct the Wald test (see, e.g., Glas, Verhelst, 1995) for uniform DIF in the Rasch model, the user needs to specify an anchor method. The anchor methods can be divided in an anchor class that determines characteristics of the anchor method and an anchor selection that determines the ranking order of candidate anchor items.

Explicit anchor selection strategies are used in the `constant` anchor class and in the iterative `forward` anchor class, for a detailed description see `anchor`. Since k-1 parameters are free in the estimation, only k-1 estimated standard errors result. Thus, the first anchor item obtains no DIF test result and we report k-1 test results. This decision is applied only to those methods that rely on an explicit anchor selection strategy.

In the `constant` anchor class, the anchor length is pre-defined by the user within the argument `length`. The default is four anchor items. The iterative `forward` class starts with a single anchor item and includes items in the anchor as long as the anchor length is shorter than a certain percentage of the number of items that do not display statistically significant DIF. The default proportion is set to 0.8 in the argument `range`. Alternatively, the user is allowed to set a maximum number of anchor items using the argument `length`. Both anchor classes require an explicit anchor selection strategy as opposed to the `all-other` anchor class.

The `all-other` anchor class is here not considered as explicit anchor selection and, thus, only included in the `anchortest` function. For the `all-other` anchor class, the strategy is set to `"none"`, since all items except for the item currently studied for DIF are used as anchor. Thus, no explicit anchor selection strategy is required and we report k test results. Note that the `all-other` anchor class requires strong prior knowledge that DIF is balanced.

See Kopf et al. (2015ab) for a detailed introduction. For convenience a trivial `"fixed"` anchor class is provided where the `select`ed anchor is given directly (e.g., as chosen by a practitioner or by some other anchor selection method).

### Value

An object of class `anchor`, i.e. a list including

`anchor_items` | the anchor items for DIF analysis.
`ranking_order` | a ranking order of candidate anchor items.
`criteria` | the criterion values obtained by the respective anchor selection.
`anchored_item_parameters` | the anchored item parameters using the anchor items.
`anchored_covariances` | the anchored covariance matrices using the anchor items.
`final_tests` | the final Wald test for uniform DIF detection if intended.

### References

Glas CAW, Verhelst ND (1995). “Testing the Rasch Model.” In Fischer GH, Molenaar IW (eds.), Rasch Models: Foundations, Recent Developments, and Applications, chapter 5. Springer-Verlag, New York.

Kopf J, Zeileis A, Strobl C (2015a). A Framework for Anchor Methods and an Iterative Forward Approach for DIF Detection. Applied Psychological Measurement, 39(2), 83–103. doi: 10.1177/0146621614544195

Kopf J, Zeileis A, Strobl C (2015b). Anchor Selection Strategies for DIF Analysis: Review, Assessment, and New Approaches. Educational and Psychological Measurement, 75(1), 22–56. doi: 10.1177/0013164414529792

Wang WC (2004). Effects of Anchor Item Methods on the Detection of Differential Item Functioning within the Family of Rasch Models. Journal of Experimental Education, 72(3), 221–261.

Woods C (2009). Empirical Selection of Anchors for Tests of Differential Item Functioning. Applied Psychological Measurement, 33(1), 42–57.

### See Also

`anchor`

### Examples

    o <- options(digits = 4)

    ## Verbal aggression data
    data("VerbalAggression", package = "psychotools")

    ## Rasch model for the self-to-blame situations; gender DIF test
    raschmodels <- with(VerbalAggression, lapply(levels(gender), function(i)
      raschmodel(resp2[gender == i, 1:12])))

    ## four anchor items from constant anchor class using MPT-selection
    const1 <- anchortest(object = raschmodels[[1]], object2 = raschmodels[[2]],
      class = "constant", select = "MPT", length = 4)
    const1
    summary(const1)

    ## iterative forward anchor class using MTT-selection
    set.seed(1)
    forw1 <- anchortest(object = raschmodels[[1]], object2 = raschmodels[[2]],
      class = "forward", select = "MTT", test = TRUE,
      adjust = "none", range = c(0.05,1))
    forw1

    ## the same using the formula interface
    set.seed(1)
    forw2 <- anchortest(resp2[, 1:12] ~ gender, data = VerbalAggression,
      class = "forward", select = "MTT", test = TRUE,
      adjust = "none", range = c(0.05, 1))

    ## compare both results
    all.equal(forw1, forw2, check.attributes = FALSE)

    ## DIF test with fixed given anchor (arbitrarily selected to be items 1 and 2)
    anchortest(object = raschmodels[[1]], object2 = raschmodels[[2]], select = 1:2)

    options(digits = o$digits)

[Package psychotools version 0.4-2 Index]