The basic formula for updating Team A's Offensive Rating (OR_{A})
is this:

OR_{A}^{+}= OR_{A}^{-}+K_{ORA}(OR_{A,G}-OR_{A}^{-}DR_{B}^{-}/R) OR_{A}^{+}: Updated estimate of team A's offensive rating OR_{A}^{-}: Prior estimate of team A's offensive rating (before the game) K_{ORA}: Kalman weight for updating the Offensive Rating of Team A = s_{e}^{2}/(s_{e}^{2}+s_{G}^{2}) OR_{A,G}: Actual offensive rating of Team A in the game DR_{B}^{-}: Prior estimate of team B's defensive rating (before the game) R: League average offensive rating s_{e}^{2}: Variance of the predicted offensive rating (fixed on 11/16/97) = [Var(OR_{A})^{-}Var(DR_{B})^{-}+ OR_{A}^{-}OR_{A}^{-}Var(DR_{B})^{-}+DR_{B}^{-}DR_{B}^{-}Var(OR_{A})^{-}]/R^{2}s_{G}^{2}: Variance of the offensive ratings in games = 100 to 150 usually

This formula essentially takes the original estimate
(OR_{A}^{-}), then changes
it by comparing how Team A actually did
(OR_{A,G})
to how they were predicted to do
(OR_{A}^{-}DR_{B}^{-}/R)
It changes it only so much as the Kalman weight
(K_{ORA}) says it should.
This Kalman weight is found from comparing the variance of
the predicted rating to the variance of ratings from
game to game. In other words, it acknowledges that there is noise
in basketball games
(s_{G}^{2})
and that there is noise in our predictions
(s_{e}^{2});
it then gives relative weight
to our prediction and to the score according to the amount
of noise in each of them.

The variance of the offensive rating estimate is updated according to

Var(OR_{A})^{+}= (1-K_{ORA})Var(OR_{A})^{-}

The uncertainty in the estimate decreases with every piece of information.
This equation honors this. It also decreases the uncertainty most when
any game is very certain to produce a "true" result. Of course, there is
no such game that does this, which is why K_{ORA}
is usually pretty small.

© 1997, L. Dean Turcoliver