Skip to contents

Fits van der Linden's (2007) hierarchical framework on top of a fitted mirt model. Response times follow a lognormal model, $$\log T_{ij} \sim N(\beta_j - \tau_i, \alpha_j^{-2}),$$ where \(\beta_j\) is the time intensity of item j, \(\alpha_j\) its time discrimination and \(\tau_i\) the speed of person i. Ability and speed are bivariate normal with correlation \(\rho\).

Usage

fit_rt(
  x,
  rt,
  flag_method = c("residual", "nt10", "nt15", "nt20"),
  z_crit = 1.96,
  nt_max = 10,
  quadpts = c(41, 21),
  tol = 1e-04,
  maxit = 500,
  verbose = FALSE
)

Arguments

x

a unidimensional model from mirt::mirt() fitted to the item responses.

rt

a matrix or data frame of response times (in seconds, or any positive unit) with the same rows and columns as the response data. Missing values are allowed.

flag_method

"residual", "nt10", "nt15" or "nt20"; see Details.

z_crit

critical value for the residual method.

nt_max

largest threshold allowed by the normative threshold rules, in the units of rt (10 seconds by default). Use Inf for no cap, for example when times are not in seconds.

quadpts

number of quadrature points per dimension.

tol

convergence tolerance (largest parameter change).

maxit

maximum number of EM iterations.

verbose

logical; print the log-likelihood during estimation.

Value

An object of class mv_rt with elements items (time intensity and discrimination with SEs), population (speed SD and ability-speed correlation), persons (joint ability and speed estimates, RTE and \(l_t\)), flags (logical matrix of rapid responses), thresholds (each item's rapid-guessing threshold for the normative threshold rules, NULL for the residual rule), logLik, iterations and converged. Use tidy(), glance(), augment(), autoplot() and interpret() on it.

Details

The item response parameters are taken from x and held fixed; the response-time parameters, the speed variance and the ability-speed correlation are estimated by marginal maximum likelihood with an EM algorithm on a two-dimensional quadrature grid. Persons are then scored jointly, so response times act as collateral information for ability. Standard errors come from the cross-product of the individual score contributions.

Rapid responses are flagged in one of two ways. "residual" marks responses that are much faster than expected for that person on that item (standardized log-time residual below -z_crit). The normative threshold rules "nt10", "nt15" and "nt20" (Wise & Ma, 2012) flag responses faster than 10%, 15% or 20% of the item's mean response time, with each item's threshold capped at nt_max (10 seconds by default, as in the literature). Higher percentages flag more responses. Response time effort (RTE; Wise & Kong, 2005) is the proportion of a person's responses that are not flagged. The \(l_t\) person-fit statistic (van der Linden & Guo, 2008) flags aberrant overall timing.

References

van der Linden, W. J. (2007). A hierarchical framework for modeling speed and accuracy on test items. Psychometrika, 72, 287-308.

van der Linden, W. J., & Guo, F. (2008). Bayesian procedures for identifying aberrant response-time patterns in adaptive testing. Psychometrika, 73, 365-384.

Wise, S. L., & Kong, X. (2005). Response time effort: A new measure of examinee motivation in computer-based tests. Applied Measurement in Education, 18, 163-183.

Wise, S. L., & Ma, L. (2012). Setting response time thresholds for a CAT item pool: The normative threshold method. Paper presented at NCME.

Examples

# \donttest{
sim <- sim_rt(N = 1000, J = 15, rho = -0.4, seed = 1)
mod <- mirt(sim$responses, 1, verbose = FALSE)
fit <- fit_rt(mod, sim$rt)
fit
#> Joint model for responses and response times (van der Linden, 2007)
#> 1000 persons, 15 items; converged after 8 iterations; logLik = -20051.23
#> 
#> Speed SD = 0.307 (SE 0.008); ability-speed correlation = -0.360 (SE 0.035)
#> 
#>    item  beta se_beta alpha se_alpha prop_rapid
#>  Item01 4.549   0.021 1.723    0.042      0.027
#>  Item02 3.940   0.024 1.492    0.035      0.037
#>  Item03 4.166   0.018 2.110    0.053      0.022
#>  Item04 3.974   0.016 2.512    0.061      0.020
#>  Item05 3.455   0.017 2.252    0.054      0.019
#>  Item06 3.847   0.016 2.325    0.053      0.022
#>  Item07 3.867   0.019 1.921    0.047      0.021
#>  Item08 3.966   0.019 1.982    0.046      0.019
#>  Item09 4.420   0.016 2.375    0.059      0.019
#>  Item10 4.308   0.017 2.209    0.054      0.020
#>  Item11 3.938   0.018 2.091    0.053      0.021
#>  Item12 3.899   0.020 1.818    0.042      0.026
#>  Item13 4.264   0.021 1.742    0.040      0.025
#>  Item14 4.214   0.017 2.398    0.060      0.015
#>  Item15 3.731   0.017 2.148    0.056      0.025
#> 
#> Rapid responses (residual): 2.3% overall; mean response time effort = 0.977
tidy(fit)
#> # A tibble: 32 × 5
#>    component item   term                  estimate std.error
#>    <chr>     <chr>  <chr>                    <dbl>     <dbl>
#>  1 item      Item01 beta (time intensity)     4.55    0.0208
#>  2 item      Item02 beta (time intensity)     3.94    0.0235
#>  3 item      Item03 beta (time intensity)     4.17    0.0183
#>  4 item      Item04 beta (time intensity)     3.97    0.0157
#>  5 item      Item05 beta (time intensity)     3.45    0.0171
#>  6 item      Item06 beta (time intensity)     3.85    0.0163
#>  7 item      Item07 beta (time intensity)     3.87    0.0194
#>  8 item      Item08 beta (time intensity)     3.97    0.0186
#>  9 item      Item09 beta (time intensity)     4.42    0.0165
#> 10 item      Item10 beta (time intensity)     4.31    0.0173
#> # ℹ 22 more rows
# }