https://github.com/cran/mirtCAT
Raw File
Tip revision: 526e57d68a4fe7fbcb110f114cf01f406956aca9 authored by Phil Chalmers on 04 May 2017, 06:17:45 UTC
version 1.5
Tip revision: 526e57d
extract.mirtCAT.Rd
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/extract.mirtCAT.R
\name{extract.mirtCAT}
\alias{extract.mirtCAT}
\title{Extract elements from the internal person, test, and design objects}
\usage{
extract.mirtCAT(x, what)
}
\arguments{
\item{x}{either the \code{person}, \code{design}, or \code{test} object defined through a 
\code{customNextItem} definition}

\item{what}{a character vector extracting the desired element (see the Details section)}
}
\description{
This function extracts elements, as well as builds a few convenient elements, 
from the three internal \code{person}, \code{design}, or \code{test}
objects that are accessible through a \code{customNextItem} function 
definition (see \code{\link{mirtCAT}} for details).
}
\details{
Depending on which object is supplied, the following elements can be extracted.
}
\section{The 'person' argument}{


\describe{
  \item{\code{ID}}{a scalar value indicating the ID of the participant 
    (generally only needed in Monte Carlo simulations)}
 \item{\code{responses}}{an integer vector indicating how items that have been responded to. 
   Each element pertains to the associated item location (e.g., \code{responses[100]} is associated with the 
   100th item), and is \code{NA} if the item has not been responded to}
  \item{\code{raw_responses}}{of the same form as \code{responses}, pertaining to the observed responses
    in a character vector}
  \item{\code{items_in_bank}}{an integer vector indicating items which have not been administered yet and 
    are also valid candidates for administration}
 \item{\code{items_answered}}{an integer vector indicating the order in which items have been responded to}
  \item{\code{thetas}}{the current ability/latent trait estimates given the previously administered items}
  \item{\code{thetas_SE}}{the current ability/latent trait standard error estimates given the 
    previously administered items}
  \item{\code{item_time}}{of the same form as \code{items_answered}, pertaining to the amount of time it took the 
    participant to response to the item}
}
}

\section{The 'design' argument}{


\describe{
   \item{\code{items_not_scored}}{an integer vector indicating items which should be included but not 
     scored in the test (these are experimental items)}
   \item{\code{min_items}}{minimum number of items to administer}
   \item{\code{max_items}}{maximum number of items to administer}
   \item{\code{max_time}}{maximum amount of time alloted to the GUI}
   \item{\code{met_SEM}}{logical vector indicating whether the SEM criteria has been met}
   \item{\code{met_delta_thetas}}{logical vector indicating whether the delta_thetas criteria has been met}
   \item{\code{met_classify}}{logical vector indicating whether the classify criteria has been met}
   \item{\code{exposure}}{exposure control elements of the same form as \code{responses}}
   \item{\code{content}}{content constraint information}
   \item{\code{content_prop}}{content proportions}
   \item{\code{test_properties}}{user-defined \code{data.frame} of test-based properties}
   \item{\code{person_properties}}{user-defined \code{data.frame} of person-based properties}
}
}

\section{The 'test' argument}{


\describe{
   \item{\code{mo}}{extract the defined model from the \code{mirt} package. Afterward, users can use the 
     \code{\link{extract.mirt}} function to pull out a large number of internal elements for easy use}
}
}

\examples{

\dontrun{
 #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)

}
}
\seealso{
\code{\link{mirt}}, \code{\link{mirtCAT}}, \code{\link{extract.mirt}}, 
  \code{\link{findNextItem}}
}
\author{
Phil Chalmers \email{rphilip.chalmers@gmail.com}
}
back to top