# Get different IRT model result when use functions from different R package?

Reproducible example as below:

library(eRm)
library(ltm)
library(mirt)
data(WIRS)
rm1 <- RM(WIRS,sum0 = FALSE)
rm1
rm2<-rasch(WIRS)
rm2
rm3<-mirt(WIRS,model =1,itemtype = 'Rasch')
coef(rm3,IRTpars = TRUE)


rasch() is rasch model,mirt(model =1,itemtype = 'Rasch') is Rasch model too. The expect result rm1, rm2 ,rm3 should be equal or close.

But output are quiet different.

Is there anything wrong with my R script?If not,how to explain the result difference?

I am new to IRT, thanks in advance!

As @philchalmers said, there are a number of ways to parameterize IRT models. I'll expand on this. The IRT parameterization of a 1-parameter logistic model (aka the logistic Rasch model) is:

$$P(Y_{ij} = 1|\theta_j) = logit^{-1}[a(\theta_j - b_i)]$$

Where $$a$$ is discrimination, $$b_i$$ are the item difficulties, $$i$$ indexes items, and $$j$$ indexes respondents. However, the software might report the slope-intercept parameterization:

$$P(Y_{ij} = 1|\theta_j) = logit^{-1}(\alpha\theta_j + \beta_i)$$

Here, $$a = \alpha$$, and $$b_i = -\frac{\beta_i}{\alpha}$$

I know that behind the scenes, Stata's IRT commands fit all IRT models in the slope-intercept parameterization behind the scenes (actually, they call on the generalized SEM command, which uses that parameterization), and I suspect the same is true of many other software packages.

To my knowledge, Phil's mirt package will report the slope-intercept parameterization by default unless you ask otherwise (via the IRTpars = TRUE option). You appear to have done so with the coef function. But I don't know the defaults of the other two packages, and they may well be reporting the slope-intercept parameterization. If so, that is probably why you are getting different difficulty parameters. If your discrimination parameters differ, that would be a problem, and it would invalidate my explanation.