6 votos

IRT en R: ¿Alguien conoce una función de calibración de ítems de la TRI que pueda hacer frente a los NA?

Tengo un conjunto de datos con el siguiente aspecto.

test.takers item1   item2 item3 item4 item5 item6 item7 item8 item9 item10 item11 item12 item13 item14 item16 item17 item18 total_score
tt1             1       1     0     1     0     1     1     1     0     NA      1      1     NA      1      1      1      1          12
tt2             0       1     0     0     0     0     0    NA     1      1     NA      0      1      0     NA      1      0           6
tt3             1       1     1     1     0     0    NA     1    NA     NA      1      1      1     NA      0     NA      0           8
tt4             1       1     1     0     1    NA     1     1     0      0     NA      1     NA      1      0      0     NA           8
tt5             0       1     1     0     1     1    NA    NA     0      1      1      1     NA      0      0      1      1           9
tt6             0       0     0     1     1     1     1    NA     1      1      1     NA      1      1     NA      0      0           9
tt7             1       0     0     1     1     1     1     1    NA      0      1      1      1      0      1      1     NA          11

El conjunto de datos consta de 3.000 examinados con sus respuestas en una prueba de habilidad. No todos los examinados pudieron responder a los 18 ítems. Así, algunos examinados sólo vieron 10 ítems, otros sólo 12, etc. El resultado es un marco de datos con muchos NA. Ahora quiero calibrar los parámetros de los ítems utilizando un modelo 2pl irt. Y después quiero calibrar las habilidades de los examinados en el mismo conjunto de datos. El problema al que me enfrento es que no puedo encontrar un paquete de R que pueda manejar la calibración en un marco de datos con datos perdidos.

¿Alguien sabe de algún paquete o función de R que pueda hacer el trabajo por mí o sabe cómo tratar este problema de alguna otra manera genial?

0 votos

La pregunta me recuerda a algo que leí una vez, pero no lo he aplicado, así que no puedo dar más información, y no sé si es útil en tu caso: "Los datos que faltan se pueden manejar en el paquete smacof pasando el argumento weightmat a la función smacofIndDiff".

1 votos

Puede que me esté perdiendo algo en su pregunta, pero tanto el ltm y mirt pueden manejar los datos que faltan sin problemas para los modelos 2PL. ¿Ha probado alguno de esos paquetes? Además, la razón por la que no publiqué esta respuesta es porque me preocupa cómo se produjeron los datos faltantes. ¿Se puede suponer que los NA son MCAR o MAR?

0 votos

Gracias por su respuesta. ¡He examinado el paquete ltm una vez más y parece ser capabel para tratar el problema! Como me centré primero en el paquete irtoys (y al principio me encontré con errores al utilizar ltm), concluí erróneamente que la calibración no era posible con mi conjunto de datos. Se puede suponer que los NA son MCAR.

5voto

nobody Puntos 41

Como dije en los comentarios anteriores, los datos que faltan pueden ser tratados por el ltm ou mirt paquete cuando los datos son MCAR. He aquí un ejemplo de cómo utilizar ambos en un conjunto de datos con valores perdidos:

> library(ltm)
> library(mirt
> set.seed(1234)
> dat <- expand.table(LSAT7)
> dat[sample(1:(nrow(dat)*ncol(dat)), 150)] <- NA
> head(dat)
     Item.1 Item.2 Item.3 Item.4 Item.5
[1,]      0      0      0      0      0
[2,]      0      0      0      0      0
[3,]      0      0      0      0      0
[4,]      0      0      0      0      0
[5,]      0      0      0      0      0
[6,]      0      0      0      0     NA
> (ltmmod <- ltm(dat ~ z1))

Call:
ltm(formula = dat ~ z1)

Coefficients:
        Dffclt  Dscrmn
Item.1  -1.891   0.967
Item.2  -0.720   1.147
Item.3  -1.008   1.885
Item.4  -0.671   0.760
Item.5  -2.554   0.729

Log.Lik: -2572.402

> (mirtmod <- mirt(dat, 1))
Iteration: 22, Log-Lik: -2572.402, Max-Change: 0.00010
Call:
mirt(data = dat, model = 1)

Full-information item factor analysis with 1 factors 
Converged in 22 iterations with 41 quadrature. 
Log-likelihood = -2572.402
AIC = 5164.805; AICc = 5165.027
BIC = 5213.882; SABIC = 5182.122
> coef(mirtmod)
$Item.1
       a1     d g u
par 0.967 1.829 0 1

$Item.2
       a1     d g u
par 1.148 0.826 0 1

$Item.3
       a1     d g u
par 1.886 1.902 0 1

$Item.4
      a1    d g u
par 0.76 0.51 0 1

$Item.5
       a1     d g u
par 0.729 1.863 0 1

$GroupPars
    MEAN_1 COV_11
par      0      1

También es posible imputar los valores que faltan dada una buena estimación de $\theta$ para obtener cosas como las estadísticas de ajuste del modelo y del ítem (debería hacer esto varias veces si la cantidad de omisiones no es trivial, y es incluso mejor jitter el $\hat{\theta}$ en función de los respectivos $SE_{\hat{\theta}}$ para obtener resultados de imputación más razonables).

> Theta <- fscores(mirtmod, full.scores = TRUE, scores.only = TRUE)
> fulldat <- imputeMissing(mirtmod, Theta)
> head(fulldat)
  Item.1 Item.2 Item.3 Item.4 Item.5
1      0      0      0      0      0
2      0      0      0      0      0
3      0      0      0      0      0
4      0      0      0      0      0
5      0      0      0      0      0
6      0      0      0      0      0

0 votos

Si intento estimar las capacidades utilizando el conjunto de datos de samen me dice: Error en solve.default(object$hessian) : system is computationally singular: reciprocal condition number. ¿Alguna idea sobre cómo pasar este problema?

0 votos

¿Qué paquete estás utilizando, mirt o ltm?

0 votos

Estoy utilizando ltm.

0voto

annaken Puntos 91

El paquete eRm (Mair& Hatzinger) también se ocupa de los valores perdidos. Pero eRm sólo estima modelos unidimensionales http://erm.r-forge.r-project.org/

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