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
  
  ```
  
  
  ---
  
  