7 votos

Simulación de respuestas a una prueba de la teoría de respuesta a un artículo

Estoy desarrollando un sistema de evaluación en línea y necesito calibrar el banco de preguntas pero no tengo suficiente gente para implementar una prueba piloto. Por eso decidí simular las respuestas del banco de preguntas. Usaré el modelo Rasch para el desarrollo de un test adaptativo por ordenador (CAT); sólo tengo las preguntas del banco y el número de opciones para cada una. ¿Cómo puedo hacer una simulación usando sólo estos datos?

Había pensado en hacer que generara un número aleatorio $X$ si $X < 1 / N$ donde $N$ es el número de opciones en una pregunta en particular, entonces la persona ha obtenido la respuesta correcta, de lo contrario es incorrecta.

¿Es este un enfoque correcto para calibrar el banco de artículos a un modelo Rasch a través de la simulación?

PD: Lo que quiero hacer es calcular el nivel de dificultad de cada pregunta. Tengo entendido que para calibrar un banco de preguntas, ese banco debe ser aplicado a una muestra de sujetos, pero no tengo suficiente gente para hacerlo, así que decidí probar un enfoque de simulación. Probé la función sim.rasch en el psych y veo que debo tener en cuenta el número de opciones para cada pregunta, ya que esto puede influir en su dificultad.

3voto

Cory Puntos 4442

Aquí hay una primera versión de esta simulación en R, como ejemplo de lo que NO se debe hacer. Código sin probar.

# we're making a table of three columns: person, question, and correct or not
resps <- data.frame(person=integer(), question=integer(), correct=integer())

# do the simulation
for (qu in 1:nQ) { # loop over questions, nQ is number of questions
  # how many possible answers does this question have? flip a coin with max_opts sides
  opts <- sample.int(max_opts, 1)

  for (pe in 1:nP) { # loop over test-takers, nP is number of test-takers
    # did this person answer correctly? flip a coin with 1/opts probability of success
    resp <- rbinom(1, 1, 1/opts)
    resps <- rbind(resps, data.frame(person=pe, question=qu, correct=resp))
  }
}

Aquí hay algunas razones por las que esto es una mala idea:

  • no permite que falten respuestas
  • asume que todas las personas tienen la misma capacidad
  • asume que todas las preguntas son de la misma dificultad (dado el número de opciones de respuesta)

Podrías inventarte unas cuantas más...

El punto es que quieres tener una sensación de a quién estás probando y en qué lo estás probando, y quieres que las propiedades latentes de esas personas y preguntas se reflejen en tus datos simulados.

Mi consejo sería tratar de conseguir que algunos humanos de verdad se hagan la prueba de verdad. Podría ser bastante barato y fácil para el turco mecánico del Amazonas.

2voto

MGOwen Puntos 122

La forma más fácil de hacer lo que quieres es probablemente usar el psych paquete para R. Esto incluye funciones como sim.rasch y sim.irt que simulará datos apropiados de cualquier tamaño para usted.

1voto

Sé que es un poco tarde, pero por razones históricas me gustaría responder a esta pregunta.

Simular un TAC usando un paquete R

Hoy en día, el paquete catr es capaz de simular los TAC, que, al parecer, es exactamente lo que quieres hacer. Tiene un montón de opciones, como el número de itens de inicio, el método de selección para el siguiente elemento, la configuración de la regla de parada, etc.

Aquí hay un viejo trozo de código que tengo en mi ordenador. Todos los créditos van al catr manual .

# call the catR package, if not installed then install it
if (!require('catR')) install.packages('catR')

require('catR')
# create a bank with 3PL items
Bank <- genDichoMatrix(items = 500, cbControl = NULL, model = "Rasch",
                       seed = 1)

# list of four parameters that characterize a CAT: start, test, stop, final
# these lists will feed the randomCAT function to generate a response pattern

# one first item selected, ability level starts at 0, criterion for
# selecting first items is maximum Fisher information
Start <- list(nrItems = 1, theta = 0, startSelect = "MFI")

# use weighted likelihood, select items through MFI (see previous comment)
Test <- list(method = "WL", itemSelect = "MFI")

# stopping rule by classication, meaning that the test will stop when the
# CI no longer holds the threshold inside it anymore
Stop <- list(rule = "precision", thr = 0.4, alpha = 0.05)

# how estimates of ability are calculated
Final <- list(method = "WL", alpha = 0.05)

# set true ability at 1, calls lists above
res <- randomCAT(trueTheta = rnorm(n=1,mean=0,sd=1), itemBank = Bank,
                 start = Start, test = Test,
                 stop = Stop, final = Final)

# plotting the response pattern
plot(res, ci = TRUE, trueTh = TRUE, classThr = 2)

Bits adicionales: extracción de los parámetros de los elementos de los patrones de respuesta

A partir de la pregunta, me di cuenta de que ya tenía patrones de respuesta que le gustaría utilizar para extraer los parámetros del artículo (discriminación, dificultad, factor de adivinación, etc.). Para ello, recomiendo el mirt que hace justamente eso (y mucho más). Puedes encontrar ejemplos de cómo usar este paquete aquí y aquí .

El único trabajo extra que predigo que tendrías que hacer es convertir mirt de la matriz de salida al formato de entrada que catr usos.

0voto

nobody Puntos 41

He incluido un simdata() función en el mirt en R para el cálculo de datos simulados de la TRI dada una variedad de condiciones conocidas para varias clases diferentes de modelos unidimensionales y multidimensionales de la TRI. Así que si necesitas algo un poco más flexible que puede ser un buen lugar para buscar, y debería ahorrarte el tener que reinventar la rueda.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X