# How can I estimate student abilities with a Rasch Model?

I have a dataset of test results. There are 400 students, and 100 items. I ran ltm::rasch in R, and I computed ability scores for each student, and difficulty scores for each item.

I would now like to reuse this model. There is a method called fitted that allows you to compute a new student's ability, even if that student was not part of the original dataset.

How is fitted implemented? In other words, how can I use a pretrained Rasch model to compute ability scores for new students?

• From the ltm manual: fittet "computes the expected frequencies for vectors of response patterns". As far as I understand, it's the method factor.scores that you are looking for.
– Tom
Commented Feb 5, 2019 at 8:46

Preamble

Good question. Computing ability estimates $$\hat\theta$$ for individuals who were not a part of the calibration (or "training") sample is one of the most common applications of item response theory (IRT) methods. Though this may not be obvious from reading the published literature, as many such applications are documented as technical reports or not published at all. For more information on scoring using IRT methods, I highly recommend Thissen & Wainer (2001).

Yes it is possible to compute ability estimates using data outside the calibration sample. See the code below, where I simulate two sets of responses to a 100 item scale. First, I estimate item parameters using the sim_data_train dataset. Then, using the parameter estimates obtained using sim_data_train, I score the sim_data_scoring dataset. Finally, I do this using both the ltm and mirt packages. Your question concerned the ltm package, though I also provided mirt code as it is the most popular R package for IRT these days.

R code

# Packages
library("mirt")
library("ltm")
set.seed(123) # For reproducibility

# Define the number of students and items
n_students_train <- 400
n_students_score <- 200
n_items <- 100

# Simulate data for training
sim_data_train <- mirt::simdata(a = rep(1,n_items),
d = rep(0, n_items),
itemtype = rep("2PL",n_items),
N = n_students_train)

# Simulate data for scoring
sim_data_scoring <- mirt::simdata(a = rep(1,n_items),
d = rep(0, n_items),
itemtype = rep("2PL",n_items),
N = n_students_score)

# Fit the Rasch model using using the training data via the ltm package
rasch_model_ltm <- ltm::rasch(sim_data_train)

# Scoring using the ltm package
new_student_scores_ltm <- ltm::factor.scores(rasch_model_ltm,
method = "EAP",
resp.patterns = sim_data_scoring)\$score.dat

# Fit the Rasch model using the mirt package
rasch_model_mirt <- mirt::mirt(data = sim_data_train,
model = 1,
itemtype = 'Rasch')

# Scoring using the mirt package
new_student_scores_mirt <- mirt::fscores(rasch_model_mirt,
method = "EAP",
response.pattern = sim_data_scoring)


References

Thissen, D., & Wainer, H. (Eds.). (2001). Test scoring. Routledge.