problems with iteminfo for multidimensional model?

59 views
Skip to first unread message

Jay Verkuilen

unread,
Jun 5, 2025, 2:31:13 PMJun 5
to mirt-package
Dear Phil,

My grad student Peter Johnson (who is a group member) and I are running some multidimensional models and want to get item information functions in directions. iteminfo seems to be able to do this but I'm not sure it's doing things correctly. This code is lightly adapted from the iteminfo help file. 

## Customized test information plot dat <- expand.table(LSAT7)
# multidimensional mod <- mirt(dat, 2, TOL=1e-2) ii <- extract.item(mod, 1) Theta <- as.matrix(expand.grid(-4:4, -4:4)) ii45 <- iteminfo(ii, Theta, degrees=c(45,45)) # equal angle ii90 <- iteminfo(ii, Theta, degrees=c(90,0)) # first dimension only
ii0 <- iteminfo(ii, Theta, degrees=c(0,0)) # ??

plot(ii45)
points(ii90,col="blue")
points(ii45,col="red")


When these are plotted they end up generating different curves but they are perfectly
correlated. The look like bouncy balls, not at all what I'd expect a 2PL2D information curve
to look like. It seems like the function is plotting the item information for one dimension
at a time—generating values for one dimension before moving to the second, following the theta
grid—instead of generating the values in the order they should be to suggest a unimodal curve
in the direction of the angles chosen. It also doesn't make sense to me that the first dimension
angle would be 90, but perhaps I'm not understanding something or multiple somethings.

We can send additional code and examples if that would be helpful.

Thanks,

Jay

Phil Chalmers

unread,
Jul 3, 2025, 3:41:05 PMJul 3
to Jay Verkuilen, mirt-package
Hi Jay,

The degrees input ultimate gets changed into radians first, after which it is cos()-ed to reflect the angular property. So 90 would drop a specific dimension, while 0 would include it (think 90 degrees as orthogonal), and these are used as weights when summing the information contribution (see Reckase, 2009). Here's what is happening internally:

cos(mirt:::d2r(90))  # numerically 0, so excluded
cos(mirt:::d2r(0))    # numerically 1, so completely included

I think your code should look something like this if you want to drop the information from both dimensions (see changes to last few lines). HTH for now.

## Customized test information plot
dat <- expand.table(LSAT7)

# multidimensional
mod <- mirt(dat, 2, TOL=1e-2)
ii <- extract.item(mod, 1)
Theta <- as.matrix(expand.grid(-4:4, -4:4))

ii45 <- iteminfo(ii, Theta, degrees=c(45,45)) # equal angle
ii90 <- iteminfo(ii, Theta, degrees=c(90,0)) # *second* dimension only
ii0 <- iteminfo(ii, Theta, degrees=c(90,90)) # drop both

plot(ii45)
points(ii90,col="blue")
points(ii0,col="red")
###


Phil


--
You received this message because you are subscribed to the Google Groups "mirt-package" group.
To unsubscribe from this group and stop receiving emails from it, send an email to mirt-package...@googlegroups.com.
To view this discussion visit https://groups.google.com/d/msgid/mirt-package/9eb87b4e-c05e-4630-8663-4ea27d713cbfn%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages