philchalmers / mirt

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

differing number of categories with rating scale model #158

Closed marerikri closed 5 years ago

marerikri commented 5 years ago

I have a dataset with polytomous Likert items. These items all have the same number of response options (5) but not all response options are used due to differing use of the scale across items.

I would like to use a rating scale model (preferably with item-specific slopes) with these items for identification reasons (if a rating scale model is not used, the only alternative would probably be to use a normal distribution, which is even more inaccurate). However, when I attempt to fit a rating scale model, I receive an error that the items must have the same number of response options.

Is it possible to somehow indicate the possible response options, independent of the actual observed response options? It seems that this would be a typical scenario in a rating scale model scenario, where the item-specific intercept parameter might result in unobserved response options in a given sample.

I tried specifying the possible values by changing the observed data type to a factor but this didn't seem to work.

philchalmers commented 5 years ago

See the argument related to rsm.block = NULL. You can specify RSMs for different sets that way, in which case having items with different categories can be clustered together.

marerikri commented 5 years ago

Thanks for drawing my attention to the grsm.block argument; I had noticed it before but not realized the implications of it. Unfortunately, at least as I understand it, this doesn't solve the dilemma. If I leave grsm.block=NULL it will produce an error when the items don't have the same number of observed categories. If I specify, say grsm.block = 1:10 for a set of 10 items, it will run the model, but treat each item as distinct (that is, the category intercept parameters will be estimated separately). If I specify that they all belong to the same block, say grsm.block=rep(1,10), I get the same error as if grsm.block=NULL (that is, that the items have different number of categories).

I think I could work out something where I specify each item belongs to a different block, but then constrain the category intercept parameters to be equal across items using a constraint command, although in my situation it will be complicated because there's many many of these datasets. It would simplify things to be able to specify that items are in the same block even if they don't have the same observed categories.