View source: R/extract.mirtCAT.R
extract.mirtCAT | R Documentation |
This function extracts elements, as well as builds a few convenient elements,
from the three internal person
, design
, or test
objects that are accessible through a customNextItem
function
definition (see mirtCAT
for details).
extract.mirtCAT(x, what)
x |
either the |
what |
a character vector extracting the desired element (see the Details section) |
Depending on which object is supplied, the following elements can be extracted.
ID
a scalar value indicating the ID of the participant (generally only needed in Monte Carlo simulations)
responses
an integer vector indicating how items that have been responded to.
Each element pertains to the associated item location (e.g., responses[100]
is associated with the
100th item), and is NA
if the item has not been responded to
raw_responses
of the same form as responses
, pertaining to the observed responses
in a character vector
items_in_bank
an integer vector indicating items which have not been administered yet and are also valid candidates for administration
items_answered
an integer vector indicating the order in which items have been responded to
thetas
the current ability/latent trait estimates given the previously administered items
thetas_SE
the current ability/latent trait standard error estimates given the previously administered items
thetas_history
history of the ability/latent trait estimates
thetas_SE_history
history of the latent trait standard error estimates
item_time
of the same form as items_answered
, pertaining to the amount of time it took the
participant to response to the item
demographics
a data.frame containing the (optional) prior survey information from the GUI interface
clientData
a list of useful information from shiny's session$clientData
items_not_scored
an integer vector indicating items which should be included but not scored in the test (these are experimental items)
min_items
minimum number of items to administer
max_items
maximum number of items to administer
max_time
maximum amount of time alloted to the GUI
met_SEM
logical vector indicating whether the SEM criteria has been met
met_delta_thetas
logical vector indicating whether the delta_thetas criteria has been met
met_classify
logical vector indicating whether the classify criteria has been met
exposure
exposure control elements of the same form as responses
content
content constraint information
content_prop
content proportions
test_properties
user-defined data.frame
of test-based properties
person_properties
user-defined data.frame
of person-based properties
mo
extract the defined model from the mirt
package. Afterward, users can use the
extract.mirt
function to pull out a large number of internal elements for easy use
Phil Chalmers rphilip.chalmers@gmail.com
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Environment. Journal of Statistical Software, 48(6), 1-29. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.18637/jss.v048.i06")}
Chalmers, R. P. (2016). Generating Adaptive and Non-Adaptive Test Interfaces for Multidimensional Item Response Theory Applications. Journal of Statistical Software, 71(5), 1-39. \Sexpr[results=rd]{tools:::Rd_expr_doi("10.18637/jss.v071.i05")}
mirt
, mirtCAT
, extract.mirt
,
findNextItem
## Not run:
#example test
set.seed(1234)
nitems <- 25
itemnames <- paste0('Item.', 1:nitems)
a <- matrix(rlnorm(nitems, .2, .3))
d <- matrix(rnorm(nitems))
dat <- simdata(a, d, 500, itemtype = 'dich')
colnames(dat) <- itemnames
mod <- mirt(dat, 1, verbose = FALSE, TOL = .01)
# simple math items
questions <- answers <- character(nitems)
choices <- matrix(NA, nitems, 5)
spacing <- floor(d - min(d)) + 1 #easier items have more variation in the options
for(i in 1:nitems){
n1 <- sample(1:50, 1)
n2 <- sample(51:100, 1)
ans <- n1 + n2
questions[i] <- paste0(n1, ' + ', n2, ' = ?')
answers[i] <- as.character(ans)
ch <- ans + sample(c(-5:-1, 1:5) * spacing[i,], 5)
ch[sample(1:5, 1)] <- ans
choices[i, ] <- as.character(ch)
}
df <- data.frame(Question=questions, Option=choices,
Type = 'radio', stringsAsFactors = FALSE)
df$Answer <- answers
pat <- generate_pattern(mod, Theta = 0, df)
#------------------------------------------------
# administer items in sequence
customNextItem <- function(person, design, test){
# browser()
items_left_2_choose_from <- extract.mirtCAT(person, 'items_in_bank')
min(items_left_2_choose_from)
}
res <- mirtCAT(df, local_pattern=pat,
design = list(customNextItem=customNextItem))
summary(res)
#------------------------------------------------
# administer items in order, but stop after 10 items
customNextItem <- function(person, design, test){
items_left_2_choose_from <- extract.mirtCAT(person, 'items_in_bank')
items_answered <- extract.mirtCAT(person, 'items_answered')
total <- sum(!is.na(items_answered))
ret <- if(total < 10) min(items_left_2_choose_from)
else return(NA)
ret
}
res <- mirtCAT(df, local_pattern=pat,
design = list(customNextItem=customNextItem))
summary(res)
#------------------------------------------------
# using findNextItem() and stopping after 10 items
customNextItem <- function(person, design, test){
items_answered <- extract.mirtCAT(person, 'items_answered')
total <- sum(!is.na(items_answered))
ret <- NA
if(total < 10)
ret <- findNextItem(person=person, test=test, design=design, criteria = 'MI')
ret
}
res <- mirtCAT(df, mod, local_pattern=pat, start_item = 'MI',
design = list(customNextItem=customNextItem))
summary(res)
# equivalent to the following
res2 <- mirtCAT(df, mod, local_pattern=pat, start_item = 'MI',
criteria = 'MI', design = list(max_items = 10))
summary(res2)
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.