En general, es una mala idea. ltm
utiliza la estimación de máxima verosimilitud marginal (MML), por lo que los vectores de respuesta cero se siguen utilizando en la estimación y proporcionan información sobre la "dificultad" de un ítem, a diferencia de la máxima verosimilitud conjunta (JML), en cuyo caso es necesario eliminarlos (como en el programa LOGIT).
Lo mismo puede decirse de la eliminación de filas con datos ausentes. Aunque no debería introducir sesgos si las respuestas que contienen datos perdidos son perdidas al azar (MAR), disminuirá la precisión de la recuperación de los parámetros de población. Sin embargo, eliminar las respuestas extremas no es eliminar mediante un esquema MAR (claramente), por lo que se introduce sesgo y los parámetros se estiman con menos precisión.
He aquí una simulación rápida (tal vez 3 minutos más o menos...y podría ejecutarse fácilmente en paralelo pasando parallel = TRUE
a runSimulation()
) donde se estima el modelo con y sin patrones de respuesta extrema, y se puede ver que el RMSE y el estadístico de sesgo son mayores sin estos patrones debido a la pérdida de información y al sesgo introducido.
library(SimDesign)
Design <- createDesign(nitems=10, N=1000)
Generate <- function(condition, fixed_objects = NULL) {
Attach(condition)
a <- matrix(rlnorm(nitems, .2, .2))
d <- matrix(rnorm(nitems))
resp <- simdata(a,d, N, itemtype='2PL')
list(resp=resp, a=a, d=d)
}
Analyse <- function(condition, dat, fixed_objects = NULL) {
Attach(dat)
modwith <- mirt(resp, 1, verbose = FALSE)
sums <- rowSums(resp)
modwithout <- mirt(resp[sums != 0 & sums != condition$nitems, ], 1,
verbose = FALSE)
cfs1 <- coef(modwith, simplify=TRUE)
cfs2 <- coef(modwithout, simplify=TRUE)
ret <- c(biaswith = bias(cbind(a,d) - cfs1$items[,1:2]),
RMSDwith = RMSE(cbind(a,d) - cfs1$items[,1:2]),
biaswithout = bias(cbind(a,d) - cfs2$items[,1:2]),
RMSDwithout = RMSE(cbind(a,d) - cfs2$items[,1:2]))
ret
}
Summarise <- function(condition, results, fixed_objects = NULL) {
colMeans(results)
}
results <- runSimulation(design=Design, replications=200, generate=Generate,
analyse=Analyse, summarise=Summarise,
packages='mirt', progress=TRUE)
Con los resultados
> print(results, drop.extras = TRUE)
nitems N biaswith.a1 biaswith.d RMSDwith.a1 RMSDwith.d biaswithout.a1 biaswithout.d RMSDwithout.a1 RMSDwithout.d
1 10 1000 -0.0063 -0.00527 0.0183 0.00925 0.242 -0.00868 0.0809 0.015
Esto utiliza mirt
para el modelo logístico biparamétrico (2PL), pero la idea es la misma para el modelo logístico biparamétrico (2PL). ltm
y podría reproducirse fácilmente. Como se puede ver, se introduce un sesgo para todos los parámetros, y la precisión global de las estimaciones de los parámetros es peor cuando se eliminan las filas max/min.
1 votos
El código R es de código abierto y puedes consultarlo.
0 votos
¿Cuál fue el tamaño de las estimaciones de los parámetros cuando se incluyeron en el modelo los alumnos que obtuvieron una puntuación de 0 o 100%?