| RMdifGammaCutoff | R Documentation |
Simulates the distribution of the partial gamma DIF coefficient for each
item when there is no DIF, to give empirical critical values and the
simulated null behind the bootstrap p-values in RMdifGamma.
Every simulated dataset keeps each respondent's observed group membership
and total score, so the null reflects the observed group sizes and any
difference between the groups' latent distributions.
RMdifGammaCutoff(
data,
dif_var,
iterations = 400,
parallel = TRUE,
n_cores = NULL,
verbose = FALSE,
seed = NULL,
cutoff_method = "hdci",
hdci_width = 0.95,
dgp = c("conditional", "permutation")
)
data |
A data.frame or matrix of item responses. Items must be scored
starting at 0 (non-negative integers). Only complete cases (rows without
any |
dif_var |
A vector (factor, character, or integer) defining group
membership for DIF analysis. Must have the same length as |
iterations |
Integer. Number of simulation iterations (default 400). |
parallel |
Logical. Use parallel processing via |
n_cores |
Integer or |
verbose |
Logical. Show a progress bar (default |
seed |
Integer or |
cutoff_method |
Character string specifying how cutoff intervals are
computed. Either |
hdci_width |
Numeric. Width of the HDCI when |
dgp |
Character. How the null datasets are generated.
|
Partial gamma conditions on the total score, and under the Rasch model the response to an item is independent of group membership given the total score. Both data-generating processes preserve each respondent's group and total score, so the simulated null has the observed distribution of groups across score strata. An earlier version assigned simulated respondents to groups at random, which gave both groups the same latent distribution. When a minority group differed from the majority by 1 SD, that null was too narrow and flagged at least one item in about 14 percent of datasets with no DIF, against a nominal 5 percent.
For each iteration the function draws one null dataset (see dgp) and
computes partial gamma for every item. The computation reproduces
iarm::partgam_DIF() exactly but is vectorised, so iarm is not needed
here. Iterations that fail are discarded and reported through
actual_iterations.
The conditional data-generating process uses CML item thresholds from
psychotools::pcmodel() (a dichotomous item is a 2-category PCM). The
group order follows the levels of dif_var (alphabetical for character
vectors), which sets the sign of gamma as in iarm::partgam_DIF().
Parallel processing is provided by the mirai package (optional). Install
it with install.packages("mirai") to enable parallelisation.
A list with components:
resultsdata.frame with columns iteration, Item, and
gamma (one row per item per successful iteration).
item_cutoffsdata.frame with per-item cutoff summaries: Item,
gamma_low, gamma_high. Bounds are computed using the method
specified by cutoff_method.
actual_iterationsNumber of successful iterations.
requested_iterationsNumber of iterations asked for.
sample_nNumber of complete cases used.
sample_n_totalNumber of respondents in the raw input data,
before removing rows with NA in data or dif_var.
sample_has_naLogical. Whether data or dif_var contained
any missing values.
sample_summarySummary statistics of the WLE person locations,
or NULL when the model could not be fitted with
dgp = "permutation".
item_namesCharacter vector of item names from data.
dif_group_sizesInteger vector of group sizes, held fixed in every simulated dataset.
cutoff_methodThe method used to compute cutoffs ("hdci" or
"quantile").
hdci_widthThe HDCI width used (only meaningful when
cutoff_method = "hdci").
dgpThe data-generating process used.
Bjorner, J. B., Kreiner, S., Ware, J. E., Damsgaard, M. T., & Bech, P. (1998). Differential item functioning in the Danish translation of the SF-36. Journal of Clinical Epidemiology, 51(11), 1189–1202. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1016/S0895-4356(98)00111-5")}
Henninger, M., Radek, J., Debelak, R., & Strobl, C. (2025). Partial credit trees meet the partial gamma coefficient for quantifying DIF and DSF in polytomous items. Behaviormetrika, 52, 221–257. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.1007/s41237-024-00252-3")}
Kreiner, S. (1987). Analysis of multidimensional contingency tables by exact conditional tests: Techniques and strategies. Scandinavian Journal of Statistics, 14(2), 97–112.
partgam_DIF, RMdifGamma,
RMdifGammaPlot
if (requireNamespace("ggdist", quietly = TRUE)) {
set.seed(42)
sim_data <- as.data.frame(
matrix(sample(0:1, 200 * 10, replace = TRUE), nrow = 200, ncol = 10)
)
colnames(sim_data) <- paste0("Item", 1:10)
dif_sex <- sample(c("male", "female"), 200, replace = TRUE)
# Run 100 iterations sequentially for a quick demo
cutoff_res <- RMdifGammaCutoff(sim_data, dif_var = dif_sex,
iterations = 100, parallel = FALSE,
seed = 42)
cutoff_res$item_cutoffs
# The permutation null needs no item parameters and is much faster
perm_res <- RMdifGammaCutoff(sim_data, dif_var = dif_sex,
iterations = 100, parallel = FALSE,
seed = 42, dgp = "permutation")
perm_res$item_cutoffs
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.