Answers.Body: <p>It's basically just table 8.1a with the columns switched. E.g. the entry in table 8.1b with rating difference 92-98 and expected score (for the higher rated player) of .63, corresponds with the entry (.63, 95) in table 8.1a.</p>
  
  <p><em>That</em> table is based on the expected score formula mentioned <a href="https://en.wikipedia.org/wiki/Elo_rating_system#Mathematical_details" rel="noreferrer">here</a>:</p>
  
  <blockquote>
    <p>If Player A has a rating of R<sub>A</sub> and Player B a rating of R<sub>B</sub>, the exact formula <a href="https://en.wikipedia.org/wiki/Logistic_curve" rel="noreferrer">(using the logistic curve)</a> for the expected score of Player A is </p>
    
    <p>E<sub>A</sub> = 1 / (1 + 10 <sup>(R<sub>B</sub> - R<sub>A</sub>) / 400</sup>)</p>
  </blockquote>
  
  <p>but it's also possible to directly generate table 8.1b from this formula. For example, a rating difference of 92 points (in A's favor) leads to E<sub>A</sub> = 0.6294.</p>
  
  <p>The inverse formula, calculating the rating difference which corresponds to a certain expected score, is R<sub>B</sub> - R<sub>A</sub> = 400 log<sub>10</sub>(1 / E<sub>A</sub> - 1).</p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2018-10-31T07:49:02.917Z
Answers.Text: I checked some calculations in MATLAB. I get that if I enter for example 1/(1 + 10^((300-392)/400)) it equals 0.6294 just like you said. However, if I enter 1/(1 + 10^((300-838)/400)) I get 0.9568, when the table seems to indicate that a difference of 538 rating points should accord to .97. The table seems to be slightly 'out' in relation to your formula as soon as we get into high probabilities.
Answers.UserDisplayName: user1205901 - Слава Україні
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2018-10-31T07:53:38.433Z
Answers.Text: Yeah, maybe they have a slightly different formula for the tails. It could be that they don't want people to gain rating from playing a lot of games against much weaker opponents, and therefore using a slightly higher expected score.
Answers.UserDisplayName: Glorfindel
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2018-01-18T15:46:06.687Z
Answers.LastActivityDate: 2018-10-31T07:32:52.333Z
Answers.LastEditDate: 2018-10-31T07:32:52.333Z
Answers.UserDisplayName: Glorfindel
Answers.Body: <p>As stated in 12.1 the formula above gives a close approximation to tables 8.1a and 8.1b. However it does not explain the precise construction of the table.  Take fore example Rb-Ra = -736. According to the table 8.1b, the resulting expectation equals 100%. But according to the formula, the expectation is 98,57%. </p>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-07-05T12:48:11.983Z
Answers.Text: This question is similar to `https://stats.stackexchange.com/questions/619127/on-the-cradle-of-the-elo-rating-system-and-how-to-find-it`.
Answers.UserDisplayName: clp
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2018-01-18T16:57:30.337Z
Answers.LastActivityDate: 2018-01-18T16:57:30.337Z
Answers.UserDisplayName: Cornelius P
Answers.Body: <p>Table 8.1a is a mirror image of:</p>
  <p>The Percentage Expectancy Table (A.E. Elo <em>The Rating of Chess Players</em>, 2.11)</p>
  <pre><code>   D        P    |    D       P    |    D        P
  Rtg.Dif   H   L  | Rtg Dif  H   L  | Rtg Dif   H   L   
    0-3    .50 .50 | 122-129 .67 .33 | 279-290  .84 .16 
    4-10   .51 .49 | 130-137 .68 .32 | 291-302  .85 .15  
   11-17   .52 .48 | 138-145 .69 .31 | 303-315  .86 .14  
   18-25   .53 .47 | 146-153 .70 .30 | 316-328  .87 .13  
   
   26-32   .54 .46 | 154-162 .71 .29 | 329-344  .88 .12    
   33-39   .55 .45 | 163-170 .72 .28 | 345-357  .89 .11   
   40-46   .56 .44 | 171-179 .73 .27 | 358-374  .90 .10   
   47-53   .57 .43 | 180-188 .74 .26 | 375-391  .91 .09
   
   54-61   .58 .42 | 189-197 .75 .25 | 392-411  .92 .08   
   62-68   .59 .41 | 198-206 .76 .24 | 412-432  .93 .07    
   69-76   .60 .40 | 207-215 .77 .23 | 433-456  .94 .06    
   77-83   .61 .39 | 216-225 .78 .22 | 457-484  .95 .05 
   
   84-91   .62 .38 | 226-235 .79 .21 | 485-517  .96 .04    
   92-98   .63 .37 | 236-245 .80 .20 | 518-559  .97 .03 
   99-106  .64 .36 | 246-256 .81 .19 | 560-619  .98 .02
   107-113 .65 .35 | 257-267 .82 .18 | 620-735  .99 .01
   114-121 .66 .34 | 268-278 .83 .17 | over735 1.00 .00
  </code></pre>
  <p><strong>How to reproduce this table?</strong></p>
  <p>Since the normal curve flattens, one would expect that the number of rating differences does not decrease.
  However, there is a discontinuity at D = 345-357, P = 89%. This suggests that the table may contain irregularities</p>
  <pre><code>Rtg Dif Range                
  279 290 11
  291 302 11  
  303 315 12
  316 328 12
  329 344 15
  345 357 12 &lt;---
  358 374 16
  375 391 16  
  392 411 19
  </code></pre>
  <p>Construction of the table is most likely:</p>
  <ul>
  <li>Let <em>sigma = 200 * (10 / 7)</em>, where <em>10 / 7</em> is an approximation for <em>sqrt(2)</em>. Reference: A.E. Elo, <em>Theory of Rating Systems</em>, privately printed monograph, 1966.</li>
  <li>Convert 0, 20, 40, 60, etc. into Z scores: 0, 0.07, 0.14, 0.21, etc. using Z = D / sigma.
  The corresponding probabilities can be found in the &quot;Standard normal table&quot;, which gives 0.5000, 0.5040, 0.5080, 0.5120. Elo could have used table X, p.91 from Garrett, H.E. <em>Statistics in Psychology and Education</em>. David McKay , New York , 1966.</li>
  <li>Intermediate values can be derived by linear interpolation.</li>
  </ul>
  <p>The following differences exist between this calculation (in R base) and the Elo table:</p>
  <pre><code>D     &lt;- c(343, 344, 358, 392)      # import from Elo table                      
  P     &lt;- c(.88, .88, .88, .92)      # import from Elo table 
  dD    &lt;- 20L                        # increment    in D = 0, 20, 40, etc.
  sd    &lt;- 200L * (10L / 7L)          # standard deviation.
  dZ    &lt;- 0.07                       # dD / sd, increment in Z.
  Z0    &lt;- trunc(D / dD) * dD / sd    # index in Z table begin.
  Z1    &lt;- round(Z0 + dZ, 2)          # index in Z table end.
  PZ0   &lt;- round(pnorm(Z0), 4)        # P before.
  PZ1   &lt;- round(pnorm(Z1), 4)        # P after.
  
  ix    &lt;- D %% dD                    # index 0 - 20.
  Pstep &lt;- (PZ1 - PZ0) / dD           # interpolation step.
  
  P4    &lt;- PZ0 + ix * Pstep           # intermediate percentage.
  P2    &lt;- round(P4 + 5E-5 + 1E-6, 2) # rounded up to 4 decimals then 2.
  Diff  &lt;- round(P2 - P, 15)          # Diff with Elo table.
  cbind(D=D, P=P, Diff=Diff, P2=P2, P4=P4, Pstep=Pstep, ix=ix, PZ1=PZ1, PZ0=PZ0, Z1=Z1, Z0=Z0)
  </code></pre>
  <p>Output.</p>
  <pre><code>##        D    P  Diff   P2      P4   Pstep ix    PZ1    PZ0   Z1   Z0
  ## [1,] 343 0.88  0.01 0.89 0.88498 0.00066  3 0.8962 0.8830 1.26 1.19
  ## [2,] 344 0.88  0.01 0.89 0.88564 0.00066  4 0.8962 0.8830 1.26 1.19
  ## [3,] 358 0.88  0.01 0.89 0.89488 0.00066 18 0.8962 0.8830 1.26 1.19
  ## [4,] 392 0.92 -0.01 0.91 0.91480 0.00055 12 0.9192 0.9082 1.40 1.33
  
  </code></pre>
  <p>Elo probably made a few clerical errors during the laborious manual calculation.</p>
  <pre><code>##      D    P   Diff   P2      P4    Pstep  ix    PZ1     PZ0    Z1   Z0
  ##     343 0.88     0 0.88 0.88416 0.000720*  3 0.8962  0.8820* 1.26 1.19
  ##     344 0.88     0 0.88 0.88488 0.000720*  4 0.8962  0.8820* 1.26 1.19
  ##     358 0.90     0 0.90 0.89496 0.000720* 18 0.8962  0.8820* 1.26 1.19
  ##     392 0.92     0 0.92 0.91498 0.000565  12 0.9195* 0.9082  1.40 1.33
  </code></pre>
  
Answers.ContentLicense: CC BY-SA 4.0
Answers.CreationDate: 2023-07-05T12:47:17.903Z
Answers.LastActivityDate: 2023-07-08T06:03:18.077Z
Answers.LastEditDate: 2023-07-08T06:03:18.077Z
Answers.UserDisplayName: clp
Body: <p><a href="https://www.fide.com/fide/handbook.html?id=197&amp;view=article" rel="noreferrer">Section 8 of the FIDE Rating Regulations</a> provides the following table</p>
  
  <p><a href="https://i.sstatic.net/8zv1Z.png" rel="noreferrer"><img src="https://i.sstatic.net/8zv1Z.png" alt="p and dp"></a></p>
  
  <p>I understand that dp=800 and dp=-800 are arbitary caps at the top and bottom of the table. </p>
  
  <p>However, in relation to the other scores, what's the formula for the conversion of p into dp, and vice-versa?</p>
  
  <p>As noted in the comments, the regular Elo formula almost works but does not quite work. Does anyone know what the formula is for the adjustment made in the tails?</p>
  
Tags: <rating><elo>
Title: How to calculate the FIDE Percentage Expectancy Table
ThreadText: # How to calculate the FIDE Percentage Expectancy Table
  
  (Asked by: username_0 on 2018-01-18)
  
  [Section 8 of the FIDE Rating Regulations](https://www.fide.com/fide/handbook.html?id=197&view=article) provides the following table
  
  [![p and dp](https://i.sstatic.net/8zv1Z.png)](https://i.sstatic.net/8zv1Z.png)
  
  I understand that dp=800 and dp=-800 are arbitary caps at the top and bottom of the table.
  
  However, in relation to the other scores, what's the formula for the conversion of p into dp, and vice-versa?
  
  As noted in the comments, the regular Elo formula almost works but does not quite work. Does anyone know what the formula is for the adjustment made in the tails?
  
  **Tags:** rating, elo
  
  
  ---
  
  ## 3 answers
  
  ### Answer by username_1 on 2018-01-18. Score: 8
  
  It's basically just table 8.1a with the columns switched. E.g. the entry in table 8.1b with rating difference 92-98 and expected score (for the higher rated player) of .63, corresponds with the entry (.63, 95) in table 8.1a.
  
  *That* table is based on the expected score formula mentioned [here](https://en.wikipedia.org/wiki/Elo_rating_system#Mathematical_details):
  
  > If Player A has a rating of RA and Player B a rating of RB, the exact formula [(using the logistic curve)](https://en.wikipedia.org/wiki/Logistic_curve) for the expected score of Player A is
  >
  > EA = 1 / (1 + 10 (RB - RA) / 400)
  
  but it's also possible to directly generate table 8.1b from this formula. For example, a rating difference of 92 points (in A's favor) leads to EA = 0.6294.
  
  The inverse formula, calculating the rating difference which corresponds to a certain expected score, is RB - RA = 400 log10(1 / EA - 1).
  
  > **Comments:**
  > **username_2**: I checked some calculations in MATLAB. I get that if I enter for example 1/(1 + 10^((300-392)/400)) it equals 0.6294 just like you said. However, if I enter 1/(1 + 10^((300-838)/400)) I get 0.9568, when the table seems to indicate that a difference of 538 rating points should accord to .97. The table seems to be slightly 'out' in relation to your formula as soon as we get into high probabilities.  
  > **username_1**: Yeah, maybe they have a slightly different formula for the tails. It could be that they don't want people to gain rating from playing a lot of games against much weaker opponents, and therefore using a slightly higher expected score.  
  
  ---
  
  ### Answer by username_3 on 2018-01-18. Score: 2
  
  As stated in 12.1 the formula above gives a close approximation to tables 8.1a and 8.1b. However it does not explain the precise construction of the table. Take fore example Rb-Ra = -736. According to the table 8.1b, the resulting expectation equals 100%. But according to the formula, the expectation is 98,57%.
  
  > **Comments:**
  > **username_0**: This question is similar to `https://stats.stackexchange.com/questions/619127/on-the-cradle-of-the-elo-rating-system-and-how-to-find-it`.  
  
  ---
  
  ### Answer by username_0 on 2023-07-05. Score: 1
  
  Table 8.1a is a mirror image of:
  The Percentage Expectancy Table (A.E. Elo The Rating of Chess Players, 2.11)
     D        P    |    D       P    |    D        P
  Rtg.Dif   H   L  | Rtg Dif  H   L  | Rtg Dif   H   L   
    0-3    .50 .50 | 122-129 .67 .33 | 279-290  .84 .16 
    4-10   .51 .49 | 130-137 .68 .32 | 291-302  .85 .15  
   11-17   .52 .48 | 138-145 .69 .31 | 303-315  .86 .14  
   18-25   .53 .47 | 146-153 .70 .30 | 316-328  .87 .13  
   
   26-32   .54 .46 | 154-162 .71 .29 | 329-344  .88 .12    
   33-39   .55 .45 | 163-170 .72 .28 | 345-357  .89 .11   
   40-46   .56 .44 | 171-179 .73 .27 | 358-374  .90 .10   
   47-53   .57 .43 | 180-188 .74 .26 | 375-391  .91 .09
   
   54-61   .58 .42 | 189-197 .75 .25 | 392-411  .92 .08   
   62-68   .59 .41 | 198-206 .76 .24 | 412-432  .93 .07    
   69-76   .60 .40 | 207-215 .77 .23 | 433-456  .94 .06    
   77-83   .61 .39 | 216-225 .78 .22 | 457-484  .95 .05 
   
   84-91   .62 .38 | 226-235 .79 .21 | 485-517  .96 .04    
   92-98   .63 .37 | 236-245 .80 .20 | 518-559  .97 .03 
   99-106  .64 .36 | 246-256 .81 .19 | 560-619  .98 .02
   107-113 .65 .35 | 257-267 .82 .18 | 620-735  .99 .01
   114-121 .66 .34 | 268-278 .83 .17 | over735 1.00 .00
  
  How to reproduce this table?
  Since the normal curve flattens, one would expect that the number of rating differences does not decrease.
  However, there is a discontinuity at D = 345-357, P = 89%. This suggests that the table may contain irregularities
  Rtg Dif Range                
  279 290 11
  291 302 11  
  303 315 12
  316 328 12
  329 344 15
  345 357 12 <---
  358 374 16
  375 391 16  
  392 411 19
  
  Construction of the table is most likely:
  
  Let sigma = 200 * (10 / 7), where 10 / 7 is an approximation for sqrt(2). Reference: A.E. Elo, Theory of Rating Systems, privately printed monograph, 1966.
  Convert 0, 20, 40, 60, etc. into Z scores: 0, 0.07, 0.14, 0.21, etc. using Z = D / sigma.
  The corresponding probabilities can be found in the "Standard normal table", which gives 0.5000, 0.5040, 0.5080, 0.5120. Elo could have used table X, p.91 from Garrett, H.E. Statistics in Psychology and Education. David McKay , New York , 1966.
  Intermediate values can be derived by linear interpolation.
  
  The following differences exist between this calculation (in R base) and the Elo table:
  D     <- c(343, 344, 358, 392)      # import from Elo table                      
  P     <- c(.88, .88, .88, .92)      # import from Elo table 
  dD    <- 20L                        # increment    in D = 0, 20, 40, etc.
  sd    <- 200L * (10L / 7L)          # standard deviation.
  dZ    <- 0.07                       # dD / sd, increment in Z.
  Z0    <- trunc(D / dD) * dD / sd    # index in Z table begin.
  Z1    <- round(Z0 + dZ, 2)          # index in Z table end.
  PZ0   <- round(pnorm(Z0), 4)        # P before.
  PZ1   <- round(pnorm(Z1), 4)        # P after.
  
  ix    <- D %% dD                    # index 0 - 20.
  Pstep <- (PZ1 - PZ0) / dD           # interpolation step.
  
  P4    <- PZ0 + ix * Pstep           # intermediate percentage.
  P2    <- round(P4 + 5E-5 + 1E-6, 2) # rounded up to 4 decimals then 2.
  Diff  <- round(P2 - P, 15)          # Diff with Elo table.
  cbind(D=D, P=P, Diff=Diff, P2=P2, P4=P4, Pstep=Pstep, ix=ix, PZ1=PZ1, PZ0=PZ0, Z1=Z1, Z0=Z0)
  
  Output.
  ##        D    P  Diff   P2      P4   Pstep ix    PZ1    PZ0   Z1   Z0
  ## [1,] 343 0.88  0.01 0.89 0.88498 0.00066  3 0.8962 0.8830 1.26 1.19
  ## [2,] 344 0.88  0.01 0.89 0.88564 0.00066  4 0.8962 0.8830 1.26 1.19
  ## [3,] 358 0.88  0.01 0.89 0.89488 0.00066 18 0.8962 0.8830 1.26 1.19
  ## [4,] 392 0.92 -0.01 0.91 0.91480 0.00055 12 0.9192 0.9082 1.40 1.33
  
  
  Elo probably made a few clerical errors during the laborious manual calculation.
  ##      D    P   Diff   P2      P4    Pstep  ix    PZ1     PZ0    Z1   Z0
  ##     343 0.88     0 0.88 0.88416 0.000720*  3 0.8962  0.8820* 1.26 1.19
  ##     344 0.88     0 0.88 0.88488 0.000720*  4 0.8962  0.8820* 1.26 1.19
  ##     358 0.90     0 0.90 0.89496 0.000720* 18 0.8962  0.8820* 1.26 1.19
  ##     392 0.92     0 0.92 0.91498 0.000565  12 0.9195* 0.9082  1.40 1.33
  
  
  ---
  
  