Estimating Measures with Known
Polytomous (or Rating Scale) Item Difficulties

For dichotomies see www.rasch.org/rmt/rmt102t.htm

Once item and step difficulties have been calibrated, we can administer some or all of the calibrated items to further examinees and measure them:

1) Collect responses by person n to the desired subset of L calibrated polytomous or dichotomous items.

Person n has a raw score of R. RMin is the minimum possible score on these items, RMax the maximum possible.

If R = RMin then set R = RMin + 0.3

If R = RMax, then set R = RMax - 0.3

2) Each item i has a calibration Di, and each step j a calibration Fj, in user-scaled units. If not already in logits, convert these to logits.

3) The average item difficulty of person n's L items is


4) The initial estimate of person n's ability M can be any finite value. Convenient ones are the mean item difficulty, a previous ability estimate, or


5) Compute expected score and variance for M. The categories for item i of difficulty D i are numbered b,..,t. Fb=0, and the other Fk are the Rasch-Andrich step thresholds. The denominator is the sum of the numerators for all categories, so that the sum of the probabilities across all categories is 1:


Expected Score =



where e = 2.7183

For "Partial Credit", replace Fk by Fik, or replace j(M - Di) - ΣFk by jM - ΣDik, and replace h(M - Di) - ΣFk by hM - ΣDik, with the same subscript ranges as above.

Dichotomous items are exactly the same as Partial Credit items with only two categories. Dik=Di. Fik=0.

6) Obtain a better estimate M' of the measure M:


7) Stop the iterative process when the change per iteration is less than .01 logits, i.e., if |M'-M|<.01, and go to 8.
Set the measure estimate, M, to M', but do not change the estimate by more than one logit per iteration, i.e., M = max(min(M+1,M'),M-1)
Go back to (5).

8) Set M=M' and report this final ability estimate with standard error = 1/sqrt(Variance). Convert measure and standard error to user-scaled units.
"Variance" is the Fisher statistical information in the observations = Test information function

John Michael Linacre
with typesetting assistance from Stacie Hudgens

Estimating measures with known polytomous item difficulties.Linacre J.M. … Rasch Measurement Transactions, 1998, 12:2 p. 638.


Visual Basic Code to do the above and more ...

' for the person
Dim ability!, outfitmeansquare!, infitmeansquare!
ability = 2.34 ' logit estimate of ability

' for the items
Dim itemcount&
itemcount = 50 ' the number of items
ReDim itemdifficulty!(itemcount), expectation!(itemcount), variance!(itemcount)
itemdifficulty(1) = 1.23 ' in logits
' all the other items
itemdifficulty(itemcount) = 3.45

' for the ratings
Dim bottom&
bottom& = 1 ' the score for your lowest level
' responses by this person in observedrating&()
ReDim observedrating&(itemcount), standardizedresidual!(itemcount)
Dim stepdifficulty!(5) ' for 5 levels = categories from 0 to 4
stepdifficulty(1) = -3 ' from bottom category to 2nd categgor
stepdifficulty(2) = -1 ' your values go here
stepdifficulty(3) = 1
stepdifficulty(4) = 3 ' step difficulty into top level

Dim item&, logit!, cat&, normalizer!, currentlogit!
Dim value!, expect!, sumsqu!
For item = 1 To itemcount
   logit! = ability - itemdifficulty(item)

' compute the category probabilities
' and rating expectation
   normalizer = 1
   expect = 0
   sumsqu = 0
   currentlogit = 0
   For cat = 1 To 4
     currentlogit = currentlogit + logit - stepdifficulty(cat)
     value! = Exp(currentlogit)
     normalizer = normalizer + value
     expect = expect + cat * value
     sumsqu = sumsqu + cat * cat * value
   Next cat
   ' expected rating on the item
   expect = expect / normalizer
   expectation(item) = expect + bottom ' matches observed rating
   ' model variance on the item
   variance(item) = sumsqu / normalizer - expect ^ 2
Next item

' we now have the expected ratings for the 5 items and their model variances
' the observed ratings are rating&(50)
Dim infitmeansquaredivisor!, residual!
outfitmeansquare = 0
infitmeansquare = 0
infitmeansquaredivisor = 0
For item = 1 To itemcount
    residual = observedrating&(item) - expectation(item)
    standardizedresidual!(item) = residual / Sqr(variance(item))
    If standardizedresidual(item) > 2 Then
       Stop
      ' unexpectedly high rating
    ElseIf standardizedresidual(item) < 2 Then
      ' unexpectedly low rating
    End If
    outfitmeansquare = outfitmeansquare + standardizedresidual(item) ^ 2
    infitmeansquare = infitmeansquare + residual ^ 2
    infitmeansquaredivisor = infitmeansquaredivisor + variance(item)
Next item
' fit for the person
outfitmeansquare = outfitmeansquare / itemcount
infitmeansquare = infitmeansquare / infitmeansquaredivisor
' if outfitmeansquare or infitmeansquare are > 1.5 there is noticeable noisy misfit.

' and similarly for each item across the persons

The URL of this page is www.rasch.org/rmt/rmt122q.htm

Website: www.rasch.org/rmt/contents.htm