Extract elements from the internal person, test, and design objects
Extract elements from the internal person, test, and design objects
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)
Arguments
x: either the person, design, or test object defined through a customNextItem definition
what: a character vector extracting the desired element (see the Details section)
Details
Depending on which object is supplied, the following elements can be extracted.
The 'person' argument
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
The 'design' argument
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
The 'test' argument
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
Examples
## Not run:#example testset.seed(1234)nitems <-25itemnames <- 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 itemsquestions <- answers <- character(nitems)choices <- matrix(NA, nitems,5)spacing <- floor(d - min(d))+1#easier items have more variation in the optionsfor(i in1: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 sequencecustomNextItem <-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 itemscustomNextItem <-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 itemscustomNextItem <-function(person, design, test){ items_answered <- extract.mirtCAT(person,'items_answered') total <- sum(!is.na(items_answered)) ret <-NAif(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 followingres2 <- mirtCAT(df, mod, local_pattern=pat, start_item ='MI', criteria ='MI', design = list(max_items =10))summary(res2)## End(Not run)
References
Chalmers, R., P. (2012). mirt: A Multidimensional Item Response Theory Package for the R Environment. Journal of Statistical Software, 48(6), 1-29. 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. tools:::Rd_expr_doi("10.18637/jss.v071.i05")