1) Are Chess Players More Rational than the Rest of the Population?¶
E-mail: econometrics.methods@gmail.com
Last updated: 10-28-2020
Look at the figure of the Centipede game below from Palacios-Huerta & Volij (2009). Each player has only two strategies: “Stop” or “Continue”. If player 1 stops in the first round, he gets $4 and player 2 gets $1. If player 1 continues, player 2 can stop or continue. If player 2 stops, he will receive $8, and player 1 will receive $2. If player 2 continues, player 1 again can decide between “Stop” or “Continue”. From the social point of view, it is better that both players play “Continue” in the six rounds, then player 1 can receive $256 and player 2 can receive $64. However, if player 2 is rational, he will never play “Continue” in the round 6, because he can receive $128, if he stops. Knowing that by backward induction, it is irrational to player 1 to continue in round 1.
Source: Palacios-Huerta & Volij (2009)
Several experimental studies show that almost nobody stops at the first opportunity. According with the table below from Palacios-Huerta & Volij (2009), only 7.5% of students stopped in the first round. The most part of students (35%) stopped in the round 3. Similar results with big sample size can be found in McKelvey & Palfrey (1992).
Source: Palacios-Huerta & Volij (2009)
Let’s open the data set from Palacios-Huerta & Volij (2009), containing information on how chess players played the Centipede game.
import pandas as pd
path = "https://github.com/causal-methods/Data/raw/master/"
sheet_name = "Data Chess Tournaments"
chess = pd.read_excel(path + "Chess.xls", sheet_name)
chess
Tournament | Title1 | ELORating1 | Title2 | ELORating2 | EndNode | |
---|---|---|---|---|---|---|
0 | Benasque | GM | 2634 | 0 | 2079 | 1 |
1 | Benasque | GM | 2621 | 0 | 2169 | 1 |
2 | Benasque | GM | 2562 | FM | 2307 | 1 |
3 | Benasque | GM | 2558 | 0 | 2029 | 1 |
4 | Benasque | GM | 2521 | 0 | 2090 | 1 |
... | ... | ... | ... | ... | ... | ... |
206 | Sestao | GM | 2501 | 0 | 2019 | 1 |
207 | Sestao | 0 | 2050 | 0 | 2240 | 2 |
208 | Sestao | 0 | 2020 | 0 | 2004 | 1 |
209 | Sestao | 0 | 2133 | GM | 2596 | 1 |
210 | Sestao | 0 | 2070 | FM | 2175 | 1 |
211 rows × 6 columns
Let’s count the number of chess players in each category. In the sample, we can see 26 Grandmasters (GM), 29 International Masters (IM), and 15 Federation Masters (FM).
chess['Title1'].value_counts()
0 130
IM 29
GM 26
FM 15
WGM 6
WIM 3
WFM 1
CM 1
Name: Title1, dtype: int64
Let’s combine all other chess players under the label “Other”.
dictionary = { 'Title1':
{ 0: "Other",
'WGM': "Other",
'WIM': "Other",
'WFM': "Other",
'CM': "Other" }}
chess.replace(dictionary, inplace=True)
We have 141 chess players in the category “Other”.
chess['Title1'].value_counts()
Other 141
IM 29
GM 26
FM 15
Name: Title1, dtype: int64
Let’s focus on the title and rating of the chess players marked by 1. Let’s ignore the title and rating of their opponents, that is, chess players marked by 2.
title_rating1 = chess.filter(["Title1", "ELORating1"])
title_rating1
Title1 | ELORating1 | |
---|---|---|
0 | GM | 2634 |
1 | GM | 2621 |
2 | GM | 2562 |
3 | GM | 2558 |
4 | GM | 2521 |
... | ... | ... |
206 | GM | 2501 |
207 | Other | 2050 |
208 | Other | 2020 |
209 | Other | 2133 |
210 | Other | 2070 |
211 rows × 2 columns
We can see that the average rating of Grandmasters is 2513, while International Masters has average rating of 2411.
Note that rating is a great predictor of who will win a chess match.
It is extremely unlikely that a chess player in the category “Other” beats a Grandmaster.
The rating can be understood as a proxy for rationality and backward induction.
# Round 2 decimals
pd.set_option('precision', 2)
import numpy as np
title_rating1.groupby('Title1').agg(np.mean)
ELORating1 | |
---|---|
Title1 | |
FM | 2324.13 |
GM | 2512.96 |
IM | 2411.69 |
Other | 2144.60 |
Let’s restrict our analysis to only Grandmasters.
grandmasters = chess[chess['Title1'] == "GM"]
grandmasters
Tournament | Title1 | ELORating1 | Title2 | ELORating2 | EndNode | |
---|---|---|---|---|---|---|
0 | Benasque | GM | 2634 | 0 | 2079 | 1 |
1 | Benasque | GM | 2621 | 0 | 2169 | 1 |
2 | Benasque | GM | 2562 | FM | 2307 | 1 |
3 | Benasque | GM | 2558 | 0 | 2029 | 1 |
4 | Benasque | GM | 2521 | 0 | 2090 | 1 |
5 | Benasque | GM | 2521 | FM | 2342 | 1 |
7 | Benasque | GM | 2510 | 0 | 2018 | 1 |
8 | Benasque | GM | 2507 | 0 | 2043 | 1 |
9 | Benasque | GM | 2500 | 0 | 2097 | 1 |
10 | Benasque | GM | 2495 | 0 | 2043 | 1 |
12 | Benasque | GM | 2488 | 0 | 2045 | 1 |
13 | Benasque | GM | 2488 | GM | 2514 | 1 |
15 | Benasque | GM | 2485 | 0 | 2092 | 1 |
16 | Benasque | GM | 2482 | 0 | 2040 | 1 |
18 | Benasque | GM | 2475 | 0 | 2229 | 1 |
19 | Benasque | GM | 2473 | 0 | 2045 | 1 |
35 | Benasque | GM | 2378 | 0 | 2248 | 1 |
156 | Leon | GM | 2527 | 0 | 2200 | 1 |
168 | Sestao | GM | 2671 | 0 | 2086 | 1 |
170 | Sestao | GM | 2495 | 0 | 2094 | 1 |
172 | Sestao | GM | 2532 | 0 | 2075 | 1 |
174 | Sestao | GM | 2501 | 0 | 2005 | 1 |
176 | Sestao | GM | 2516 | GM | 2501 | 1 |
177 | Sestao | GM | 2444 | 0 | 2136 | 1 |
193 | Sestao | GM | 2452 | 0 | 2027 | 1 |
206 | Sestao | GM | 2501 | 0 | 2019 | 1 |
All the 26 Grandmasters stopped the Centipede game in the first round. They are the Homo Economicus described in the standard economics textbooks.
Unfortunately, in a population of 7.8 billion people, we have only 1721 Grandmasters according with the International Chess Federation (FIDE).
List of Grandmasters accessed on 7/13/2020
grandmasters.groupby('EndNode').size()
EndNode
1 26
dtype: int64
Let’s check the International Masters (IM).
international_master = chess[chess['Title1'] == "IM"]
# Return only 4 observations
international_master.head(4)
Tournament | Title1 | ELORating1 | Title2 | ELORating2 | EndNode | |
---|---|---|---|---|---|---|
6 | Benasque | IM | 2521 | 0 | 2179 | 1 |
11 | Benasque | IM | 2492 | 0 | 2093 | 1 |
14 | Benasque | IM | 2487 | IM | 2474 | 2 |
17 | Benasque | IM | 2479 | 0 | 2085 | 1 |
Not all International Masters stopped in the first round.
5 International Masters stopped in the second round, and 2 in the third round.
node_IM = international_master.groupby('EndNode').size()
node_IM
EndNode
1 22
2 5
3 2
dtype: int64
These 5 International Masters that stopped in the second round represents 17% of the total numbers of International Masters.
Only 76% of International Masters acted as predicted by the neoclassical economic theory.
length_IM = len(international_master)
prop_IM = node_IM / length_IM
prop_IM
EndNode
1 0.76
2 0.17
3 0.07
dtype: float64
Let’s apply the same procedures to the Federation Masters.
The proportion of Federation Masters that stopped at each node is like the International Masters.
federation_master = chess[chess['Title1'] == "FM"]
node_FM = federation_master.groupby('EndNode').size()
length_FM = len(federation_master)
prop_FM = node_FM / length_FM
prop_FM
EndNode
1 0.73
2 0.20
3 0.07
dtype: float64
Let’s put the previous descriptive statistics in a bar chart.
It will be easier to visualize the proportion of chess players at each node that ended the Centipedes game.
The bar chart suggests that Grandmasters plays Centipedes game differently from International Masters and Federation Masters. However, it looks that International Masters and Federation Masters play centipede game in a similar way.
import plotly.graph_objects as go
node = ['Node 1', 'Node 2', 'Node 3']
fig = go.Figure(data=[
go.Bar(name='Grandmasters', x=node, y=[1,0,0]),
go.Bar(name='International Masters', x=node, y=prop_IM),
go.Bar(name='Federation Masters', x=node, y=prop_FM) ])
fig.update_layout(barmode='group',
title_text = 'Share of Chess Players that Ended Centipede Game at Each Node',
font=dict(size=21) )
fig.show()
Let’s be formal and test if the proportion of Grandmasters (\(p_{g}\)) is equal to the proportion of International Masters (\(p_{i}\)). The null hypothesis (\(H_0\)) is:
The z-statistic is:
where \(se(\hat{p}_{g}-\hat{p}_{i})\) is the standard error of the difference between the sample proportions:
where \(n_g\) is the sample size of Grandmasters and \(n_i\) is the sample size of International Masters.
For node 1, we know that:
Then:
The p-value of the z-statistic is 0.007. Therefore, the null hypothesis (\(H_0\)) is rejected at level of significance at \(\alpha=1\%\).
from statsmodels.stats.proportion import proportions_ztest
# I inserted manually the data from Grandmasters to
# ilustrate the input format
count = np.array([ 26, node_IM[1] ]) # number of stops
nobs = np.array([ 26, length_IM ]) # sample size
proportions_ztest(count, nobs)
C:\Anaconda\envs\textbook\lib\site-packages\statsmodels\tools\_testing.py:19: FutureWarning:
pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.
(2.68162114289528, 0.00732663816543149)
Let’s also test at node 1, if the proportion of International Masters (\(p_{i}\)) is equal to the proportion of Federation Masters (\(p_{f}\)). The null hypothesis (\(H_0\)) is:
The z-statistic is 0.18 and the respective p-value is 0.85. Therefore, we cannot reject the null hypothesis that the proportion of International Masters is equal to the proportion of Federation Masters.
count = np.array([ node_IM[1], node_FM[1] ])
nobs = np.array([ length_IM, length_FM ])
proportions_ztest(count, nobs)
(0.1836204648065827, 0.8543112075010346)
Exercises¶
1| Use the spreadsheet “Data Chess Tournaments” from Palacios-Huerta & Volij (2009) to calculate the proportion of other chess players that stopped in node 1, node 2, node 3, node 4, and node 5. The proportions will sum up to 100%. Other chess players is a category that excludes all chess players with the titles: Grandmasters, International Masters, and Federation Masters.
2| This question refers to the spreadsheet “Data UPV Students-One shot” from Palacios-Huerta & Volij (2009).
a) Open the spreadsheet “Data UPV Students-One shot” here in Google Colab.
b) How many pairs of centipede games did the students of University of Pais Vasco (UPV) play?
c) Calculate the proportion of students that stopped in node 1, node 2, node 3, node 4, node 5, and node 6. The proportions will sum up to 100%.
3| Compared the results of exercise 1 (Chess Players) vs exercise 2 (c) (Students). Why these two subpopulations play the centipede game differently? Speculate and justify your reasoning.
4| Use the spreadsheet “Data Chess Tournaments” from Palacios-Huerta & Volij (2009) to test if the proportion of International Masters that stopped at node 3 is equal to the proportion of other chess players that stopped at node 3 of the centipede game.
5| For this question use the spreadsheet “Data Chess Tournaments” from Palacios-Huerta & Volij (2009). Create a bar chart to compare the proportion of International Masters and other chess players that stopped the centipede game at each node.
6| Suppose you are a neoclassical economist. How you can justify the standard economic theory built under the assumption of stronger rationality and self-interested against the empirical evidence presented in the paper of Palacios-Huerta & Volij (2009)? Give details about your justifications.
Reference¶
Fey, Mark, Richard D. McKelvey, and Thomas R. Palfrey. (1996). An Experimental Study of Constant-Sum Centipede Games. International Journal of Game Theory, 25(3): 269–87.
Palacios-Huerta, Ignacio, and Oscar Volij. (2009). Field Centipedes. American Economic Review, 99 (4): 1619-35.