philchalmers / mirt

Multidimensional item response theory
https://philchalmers.github.io/mirt/
199 stars 75 forks source link

Error in marginal_rxx(ICAR_diff$fits$original) : extract.mirt(mod, "nfact") == 1L is not TRUE #184

Closed Deleetdk closed 4 years ago

Deleetdk commented 4 years ago

It seems that Error in marginal_rxx() also does not work for multi-dimensional models, but empirical_rxx() does. The error message is not hugely informative, is this a bug?

Simplest REPREX I could think of.

library(mirt)
library(psych)
library(tidyverse)

#data
ICAR = psychTools::ability %>% na.omit() %>% as_tibble()
names(ICAR)
dim(ICAR)

#fit models
fit_icar_g = mirt(ICAR[1:8], model = 1)
fit_icar_bf = mirt(ICAR[1:8], model = mirt.model(
  "g = 1-8
   reason = 1-4
   letter = 5-8"
), technical = list("NCYCLES" = 10e3))

#reliabilities
fit_icar_g_scores = fscores(fit_icar_g, full.scores = T, full.scores.SE = T)
empirical_rxx(fit_icar_g_scores)
marginal_rxx(fit_icar_g)

fit_icar_bf_scores = fscores(fit_icar_bf, full.scores = T, full.scores.SE = T)
empirical_rxx(fit_icar_bf_scores)
marginal_rxx(fit_icar_bf)

Output:

> #reliabilities
> fit_icar_g_scores = fscores(fit_icar_g, full.scores = T, full.scores.SE = T)
> empirical_rxx(fit_icar_g_scores)
  F1 
0.73 
> marginal_rxx(fit_icar_g)
[1] 0.71
> fit_icar_bf_scores = fscores(fit_icar_bf, full.scores = T, full.scores.SE = T)
> empirical_rxx(fit_icar_bf_scores)
     g reason letter 
  0.66   0.14   0.25 
> marginal_rxx(fit_icar_bf)
Error in marginal_rxx(fit_icar_bf) : 
  extract.mirt(mod, "nfact") == 1L is not TRUE
philchalmers commented 4 years ago

With help(extract.mirt) you could find the element nfact, which indicates the number of factors for the fitted model. This error message says that nfact != 1, so the function only works for unidimensional models (for now, at least). I don't see this as bad or uninformative message, it's just little terse.