Statistical & Clinical Analysis
Glicko Rating & Rating Deviation (RD) Formula: Inactivity Uncertainty & Match Update
Upgrade Elo by incorporating Mark Glickman’s Rating Deviation (RD): inflate pre-period uncertainty RD_pre = MIN(350, SQRT(RD_0^2 + c^2*t)), compute opponent attenuation g(RD_j), and update post-match rating and RD.
Why Glicko beats fixed-K Elo: rating movement scales with YOUR uncertainty and shrinks with OPPONENT uncertainty!
Formulated by Harvard statistician Mark E. Glickman (1995), the Glicko system fixes Elo’s biggest flaw—treating a rusty player returning after 2 years identically to an active tournament regular! Glicko pairs every player’s skill rating r (default 1500) with a Rating Deviation RD (95% confidence interval ≈ r ± 1.96 * RD, capped at 350 for unrated players). Across t inactive periods with volatility constant c, pre-match uncertainty expands via RD_pre = MIN(350, SQRT(RD_0^2 + c^2 * t))!
With q = LN(10) / 400 ≈ 0.00575646, an opponent’s uncertainty RD_j attenuates match information via g(RD_j) = 1 / SQRT(1 + 3 * q^2 * RD_j^2 / PI()^2), giving win expectation E = 1 / (1 + 10^(-g(RD_j) * (r - r_j) / 400)), Fisher information d^2 = 1 / (q^2 * g(RD_j)^2 * E * (1 - E)), updated RD' = 1 / SQRT(1 / RD_pre^2 + 1 / d^2), and updated rating r' = r + q * RD'^2 * g(RD_j) * (s - E)! Under full IEEE-754 precision (without intermediate hand-rounding), when r = 1500 (RD_pre = 200) beats r_j = 1400 (RD_j = 30, s = 1), r jumps to 1563.43 while RD tightens to 175.22!
| Glicko Step (r=1500, RD_pre=200 vs r_j=1400, RD_j=30, Win s=1) | Glickman (1995) Formula | Exact IEEE-754 Value |
|---|---|---|
| Opponent Attenuation g(RD_j = 30) | 1 / SQRT(1 + 3 * q^2 * 30^2 / PI()^2) | 0.9955 |
| Expected Score E(r, r_j, RD_j) | 1 / (1 + 10^(-g * (1500 - 1400) / 400)) | 0.6395 |
| Post-Match Rating Deviation RD' | 1 / SQRT(1/200^2 + q^2 * g^2 * E * (1 - E)) | 175.22 |
| Post-Match Glicko Rating r' | 1500 + q * RD'^2 * g * (1 - E) | 1563.43 (+63.43 pts) |
Post-Match Updated Glicko Rating r' (Single Match Outcome s in {0, 0.5, 1})
Inflates RD_0 (B3) across t inactive periods (B4) with constant c (B5), then updates rating r (B2) against opponent (B6, B7) for score s (B8).
=IF(OR(B3 <= 0, B7 <= 0, B4 < 0, B5 < 0, B8 < 0, B8 > 1), "Invalid Glicko Inputs", ROUND(B2 + (LN(10) / 400) / (1 / (MIN(350, SQRT(B3 ^ 2 + (B5 ^ 2) * B4)) ^ 2) + ((LN(10) / 400) ^ 2) * (1 / (1 + 3 * ((LN(10) / 400) ^ 2) * (B7 ^ 2) / (PI() ^ 2))) * (1 / (1 + 10 ^ (-(1 / SQRT(1 + 3 * ((LN(10) / 400) ^ 2) * (B7 ^ 2) / (PI() ^ 2))) * (B2 - B6) / 400))) * (1 - (1 / (1 + 10 ^ (-(1 / SQRT(1 + 3 * ((LN(10) / 400) ^ 2) * (B7 ^ 2) / (PI() ^ 2))) * (B2 - B6) / 400))))) * (1 / SQRT(1 + 3 * ((LN(10) / 400) ^ 2) * (B7 ^ 2) / (PI() ^ 2))) * (B8 - (1 / (1 + 10 ^ (-(1 / SQRT(1 + 3 * ((LN(10) / 400) ^ 2) * (B7 ^ 2) / (PI() ^ 2))) * (B2 - B6) / 400)))), 2))Post-Match Updated Rating Deviation RD'
Computes the tightened post-match Rating Deviation RD' after incorporating match Fisher information 1/d^2.
=IF(OR(B3 <= 0, B7 <= 0, B4 < 0, B5 < 0), "Invalid Glicko Inputs", ROUND(1 / SQRT(1 / (MIN(350, SQRT(B3 ^ 2 + (B5 ^ 2) * B4)) ^ 2) + ((LN(10) / 400) ^ 2) * (1 / (1 + 3 * ((LN(10) / 400) ^ 2) * (B7 ^ 2) / (PI() ^ 2))) * (1 / (1 + 10 ^ (-(1 / SQRT(1 + 3 * ((LN(10) / 400) ^ 2) * (B7 ^ 2) / (PI() ^ 2))) * (B2 - B6) / 400))) * (1 - (1 / (1 + 10 ^ (-(1 / SQRT(1 + 3 * ((LN(10) / 400) ^ 2) * (B7 ^ 2) / (PI() ^ 2))) * (B2 - B6) / 400))))), 2))Try the example
Use the original values or change them to test your understanding.