Skip to content

Instantly share code, notes, and snippets.

@tturocy
Created May 27, 2016 11:59
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tturocy/593de15f4eab3af2113815f357a4ba57 to your computer and use it in GitHub Desktop.
Save tturocy/593de15f4eab3af2113815f357a4ba57 to your computer and use it in GitHub Desktop.
Doing statistical game theory: (Towards) the missing manual
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<center>\n",
"<h1>Doing statistical game theory: (Towards) the missing manual</h1>\n",
"<i>Theodore L. Turocy</i><br/>\n",
"<i>University of East Anglia</i>\n",
"<br/><br/>\n",
"<h3>GW4 Game Theory Workshop,\n",
"10 May 2016</h3>\n",
"</center>\n",
"\n",
"<img src=\"https://www.uea.ac.uk/cbess-theme/images/custom/img-cbess-logo.png\"/>\n",
"<img src=\"http://beta.nottingham.ac.uk/esrc-nibs/images-multimedia/logos/NIBS-logo.png\"/>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is part of a larger project on the practical application of quantal response equilibrium and related concepts of statistical game theory.\n",
"\n",
"It is inspired in part by several recent papers by Camerer, Palfrey, and coauthors, developing various generalizations of quantal response equilibrium (including heterogeneous QRE) and links between QRE and cognitive hierarchy/level-k models.\n",
"\n",
"These are exciting developments (in the view of this researcher) because this appears to offer a coherent and flexible statistical framework to use as a foundation for behavioural modeling in games, and a data-driven approach to behavioural game theory.\n",
"\n",
"What we will do in this talk is to use the facilities in Gambit to explore how to fit QRE to small games. We'll focus on small games so that all computations can be done live in this Jupyter notebook - making this talk equally a useful practical tutorial, and automatically documenting all the computations done in support of the development of the lines of thought herein."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Advertisement**: Thanks to some friends of Gambit at Cardiff (and support from a Google Summer of Code internship), Gambit is being integrated into the SAGE package for computational mathematics in Python (http://www.sagemath.org). Also as part of this, it will soon be possible to interact with Gambit (alongside all of the mathetmatical tools that SAGE bundles) using notebooks like this one, on a server via your web browser."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**DISCLAIMERS**: This was run using the version of Gambit 15 in the git repository, master branch, as of the time of the talk. The quantal response analysis features are new, and the API for these may evolve. Consult the version of the Gambit documentation (or a newer persentation or tutorial) for up-to-date details."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We begin by looking at some of the examples from the original Quantal Response Equilibrium paper:\n",
"\n",
"McKelvey, R. D. and Palfrey, T. R. (1995) Quantal response equilibrium for normal form games. *Games and Economic Behavior* **10**: 6-38.\n",
"\n",
"We will take the examples slightly out of order, and look first at the non-constant sum game of \"asymmetric\" matching pennies they consider from\n",
"\n",
"Ochs, J. (1995) Games with unique mixed strategy equilibria: An experimental study. *Games and Economic Behavior* **10**: 174-189."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import math\n",
"import numpy\n",
"import scipy.optimize\n",
"import pandas\n",
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"import gambit"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Set up the payoff matrices. McKPal95 multiply the basic payoff matrix by a factor to translate to 1982 US cents. In addition, the exchange rates for the two players were different in the original experiment, accounting for the different multiplicative factors."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(array([[Decimal('1.1140'), Decimal('0.0000')],\n",
" [Decimal('0.0000'), Decimal('0.2785')]], dtype=object),\n",
" array([[Decimal('0.0000'), Decimal('1.1141')],\n",
" [Decimal('1.1141'), Decimal('0.0000')]], dtype=object))"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m1 = numpy.array([[ 4, 0 ], [ 0, 1 ]], dtype=gambit.Decimal) * gambit.Decimal(\"0.2785\")\n",
"m2 = numpy.array([[ 0, 1 ], [ 1, 0 ]], dtype=gambit.Decimal) * gambit.Decimal(\"1.1141\") \n",
"m1, m2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a Gambit game object from these payoff matrices (`from_arrays` is new in Gambit 15.1.0)"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"NFG 1 R \"\" { \"1\" \"2\" }\n",
"\n",
"{ { \"1\" \"2\" }\n",
"{ \"1\" \"2\" }\n",
"}\n",
"\"\"\n",
"\n",
"{\n",
"{ \"\" 1.1140, 0.0000 }\n",
"{ \"\" 0.0000, 1.1141 }\n",
"{ \"\" 0.0000, 1.1141 }\n",
"{ \"\" 0.2785, 0.0000 }\n",
"}\n",
"1 2 3 4 "
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"g = gambit.Game.from_arrays(m1, m2)\n",
"g"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First, we can verify there is a unique mixed strategy equilibrium. Player 1 should randomize equally between his strategies; player 2 should play his second strategy with probability 4/5. It is the \"own-payoff\" effect to Player 1 which made QRE of interest in this game."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[[[Fraction(1, 2), Fraction(1, 2)], [Fraction(1, 5), Fraction(4, 5)]]]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"gambit.nash.lcp_solve(g)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we set out to replicate the QRE estimation using the fixed-point method from the original paper.\n",
"We set up a mixed strategy profile, which we populate with frequencies of each strategy.\n",
"Data are reported in blocks of 16 plays, with $n=128$ pairs of players."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"$\\left[[1079.296, 968.704],[749.568, 1298.432]\\right]$"
],
"text/plain": [
"[[1079.296, 968.704], [749.568, 1298.432]]"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data1 = g.mixed_strategy_profile()\n",
"data1[g.players[0]] = [ 16*128*0.527, 16*128*(1.0-0.527) ]\n",
"data1[g.players[1]] = [ 16*128*0.366, 16*128*(1.0-0.366) ]\n",
"data1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"With the data in hand, we ask Gambit to find the QRE which best fits the data, using maximum likelihood."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"LogitQREMixedStrategyProfile(lam=1.845871,profile=[[0.6156446318590159, 0.38435536814098414], [0.383281508340127, 0.616718491659873]])"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"qre1 = gambit.nash.logit_estimate(data1)\n",
"qre1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We successfully replicate the same value of lambda and the same fitted mixed strategy profile as reported by McKPal95.\n",
"Note that the method Gambit uses to find the maximizer is quite accurate; you can trust these to about 8 decimal\n",
"places.\n",
"\n",
"<i>\n",
"What Gambit does is to use standard path-following methods to traverse the \"principal branch\" of the QRE correspondence, and look for extreme points of the log-likelihood function restricted to that branch. This is the \"right way\" to do it. Some people try to use fixed-point iteration or other methods at various values of lambda. These are wrong; do not listen to them!\n",
"</i>\n",
"\n",
"What does not quite match up is the log-likelihood; McKPal95 claim a logL of -1747, whereas ours is much larger in magnitude. I have not been able to reconcile the difference in an obvious way; it is much too large simply to be rounding errors."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"-2796.2259707889207"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"numpy.dot(list(data1), numpy.log(list(qre1)))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The unexplained variance in log-likelihood notwithstanding, we can move on to periods 17-32 and again replicate\n",
"McKPal95's fits:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"LogitQREMixedStrategyProfile(lam=1.567977,profile=[[0.6100787526260509, 0.389921247373949], [0.40502047327790697, 0.5949795267220931]])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data2 = g.mixed_strategy_profile()\n",
"data2[g.players[0]] = [ 16*128*0.573, 16*128*(1.0-0.573) ]\n",
"data2[g.players[1]] = [ 16*128*0.393, 16*128*(1.0-0.393) ]\n",
"qre2 = gambit.nash.logit_estimate(data2)\n",
"qre2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And for periods 33-48:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"LogitQREMixedStrategyProfile(lam=3.306454,profile=[[0.6143028691464325, 0.38569713085356744], [0.30108853856548057, 0.6989114614345194]])"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data3 = g.mixed_strategy_profile()\n",
"data3[g.players[0]] = [ 16*128*0.610, 16*128*(1.0-0.610) ]\n",
"data3[g.players[1]] = [ 16*128*0.302, 16*128*(1.0-0.302) ]\n",
"qre3 = gambit.nash.logit_estimate(data3)\n",
"qre3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"And finally for periods 49-52 (the caption in the table for McKPal95 says 48-52). Our lambda of $\\approx 10^7$ translates\n",
"essentially to infinity, i.e., Nash equilibrium."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"LogitQREMixedStrategyProfile(lam=1040316.548725,profile=[[0.5000005980476384, 0.4999994019523616], [0.20000000000165133, 0.7999999999983487]])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data4 = g.mixed_strategy_profile()\n",
"data4[g.players[0]] = [ 4*128*0.455, 4*128*(1.0-0.455) ]\n",
"data4[g.players[1]] = [ 4*128*0.285, 4*128*(1.0-0.285) ]\n",
"qre4 = gambit.nash.logit_estimate(data4)\n",
"qre4"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As an estimation method, this works a treat if the game is small. However, under the hood, `logit_estimate` is solving a fixed-point problem, and fixed-point problems are computationally difficult problems, meaning the running times does not scale well as you make the size of the problem (i.e., the game) larger. A practical feasible limit for estimating QRE is with games of perhaps 100 strategies in total - less if one also wants to recover estimates of e.g. risk-aversion parameters (of which more anon).\n",
"\n",
"Recently, in several papers, Camerer, Palfrey, and coauthors have been using a method first proposed by Bajari and Hortacsu in 2005. The idea is that, given the actual observed data, under the assumption that the model (QRE) is correct, then one can compute a consistent estimator of the expected payoffs for each strategy from the existing data, and from there compute a consistent estimator of lambda.\n",
"\n",
"This is an interesting development because it finesses the problem of having to compute fixed points, and therefore one can compute estimates of lambda (and more interestingly of other parameters) in a computationally efficient way.\n",
"\n",
"To fix ideas, return to `data1`. We can ask Gambit to compute the expected payoffs to players facing that empirical distribution of play:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/latex": [
"$\\left[[0.527, 0.473],[0.366, 0.634]\\right]$"
],
"text/plain": [
"[[0.527, 0.473], [0.366, 0.634]]"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p1 = data1.copy()\n",
"p1.normalize()\n",
"p1"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[[0.40772400000000003, 0.17656900000000003], [0.5269693, 0.5871307000000001]]"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"p1.strategy_values()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The idea of Bajari-Hortacsu is to take these expected payoffs and for any given $\\lambda$, say the $\\lambda=1.84$ estimated above, compute the logit response probabilities, say for the first player:"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([ 0.60475682, 0.39524318])"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"resp = 1.84*numpy.array(p1.strategy_values(g.players[0]))\n",
"resp = numpy.exp(resp)\n",
"resp /= resp.sum()\n",
"resp"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To estimate $\\lambda$, then, it is a matter of picking the $\\lambda$ that maximises the likelihood of the actual choice probabilities against those computed via the logit rule. If we assume for the moment the same $\\lambda$ for\n",
"both players, we see this is going to be very efficient: the choice probabilities are monotonic in $\\lambda$, and\n",
"we have a one-dimensional optimisation problem, so it is going to be very fast to find the likelihood-maximising\n",
"choice -- even if we had hundreds or thousands of strategies!\n",
"\n",
"It takes just a few lines of code to set up the optimisation:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import scipy.optimize\n",
"\n",
"def estimate_payoff_method(freqs):\n",
" def log_like(freqs, values, lam):\n",
" logit_probs = [ [ math.exp(lam*v) for v in player ] for player in values ]\n",
" sums = [ sum(v) for v in logit_probs ]\n",
" logit_probs = [ [ v/s for v in vv ]\n",
" for (vv, s) in zip(logit_probs, sums) ]\n",
" logit_probs = [ v for player in logit_probs for v in player ]\n",
" logit_probs = [ max(v, 1.0e-293) for v in logit_probs ]\n",
" return sum([ f*math.log(p) for (f, p) in zip(list(freqs), logit_probs) ])\n",
" p = freqs.copy()\n",
" p.normalize()\n",
" v = p.strategy_values()\n",
" res = scipy.optimize.minimize(lambda x: -log_like(freqs, v, x[0]), (0.1,),\n",
" bounds=((0.0, None),))\n",
" return res.x[0]\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we can estimate the QRE using the same data as above, for each of the four groups of periods, and compare the resulting estimates of $\\lambda$. In each pair, the first value is the $\\lambda$ as estimated by the payoff method, the second as estimated by the (traditional) fixed-point path-following method."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1.0070478027919727, 1.8458712502750365)"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"estimate_payoff_method(data1), qre1.lam"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(1.5178672707029293, 1.567976743237242)"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"estimate_payoff_method(data2), qre2.lam"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(3.3446122798176647, 3.30645430631916)"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"estimate_payoff_method(data3), qre3.lam"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"(0.0, 1040316.5487249079)"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"estimate_payoff_method(data4), qre4.lam"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We get different estimates $\\hat{\\lambda}$ for the different methods. This is of course completely OK; they are different estimation procedures so we don't expect to get the same answer. But there are some patterns: in three of the four cases, the payoff method estimates a smaller $\\hat{\\lambda}$ than the fixed-point method, that is, it estimates less precise behaviour. In the last case, where the fixed-point method claims play is close to Nash, the payoff method claims it is closest to uniform randomisation.\n",
"\n",
"We can pursue this idea further by some simulation exercises. Suppose we knew that players were actually playing a QRE with a given value of $\\lambda$, which we set to $1.5$ for our purposes here, as being roughly in the range observed over most of the Ochs experiment. Using Gambit we can compute the corresponding mixed strategy profile."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"LogitQREMixedStrategyProfile(lam=1.500000,profile=[[0.608210533987243, 0.391789466012757], [0.4105548658372969, 0.5894451341627032]])"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"qre = gambit.nash.logit_atlambda(g, 1.5)\n",
"qre"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We knock together a little function which lets us simulate two players playing the game $N$ times according to the QRE mixed strategy profile at $\\lambda$, and then, for each simulated play, we use both methods to estimate $\\hat\\lambda$ based on the realised play. This is repeated `trials` times, and then the results are summarised for us in a handy dataset (a `pandas.DataFrame`)."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def simulate_fits(game, lam, N, trials=100):\n",
" qre = gambit.nash.logit_atlambda(game, lam).profile\n",
" samples = [ ]\n",
" for sample in xrange(trials):\n",
" f = game.mixed_strategy_profile()\n",
" for player in game.players:\n",
" f[player] = numpy.random.multinomial(N, qre[player], size=1)[0]\n",
" samples.append(f)\n",
" labels = [ \"p%ds%d\" % (i, j)\n",
" for (i, player) in enumerate(game.players)\n",
" for (j, strategy) in enumerate(player.strategies) ]\n",
" return pandas.DataFrame([ list(freqs) +\n",
" [ gambit.nash.logit_estimate(freqs).lam,\n",
" estimate_payoff_method(freqs),\n",
" lam ]\n",
" for freqs in samples ],\n",
" columns=labels + [ 'fixedpoint', 'payoff', 'actual' ])\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's have a look at 100 simulations of 50 plays each with $\\lambda=1.5.$"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>p0s0</th>\n",
" <th>p0s1</th>\n",
" <th>p1s0</th>\n",
" <th>p1s1</th>\n",
" <th>fixedpoint</th>\n",
" <th>payoff</th>\n",
" <th>actual</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>28</td>\n",
" <td>22</td>\n",
" <td>21</td>\n",
" <td>29</td>\n",
" <td>1.134753</td>\n",
" <td>1.048783</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>31</td>\n",
" <td>19</td>\n",
" <td>18</td>\n",
" <td>32</td>\n",
" <td>2.175313</td>\n",
" <td>2.170704</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>27</td>\n",
" <td>23</td>\n",
" <td>25</td>\n",
" <td>25</td>\n",
" <td>0.363116</td>\n",
" <td>0.367016</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>35</td>\n",
" <td>15</td>\n",
" <td>20</td>\n",
" <td>30</td>\n",
" <td>1.843455</td>\n",
" <td>1.496438</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>27</td>\n",
" <td>23</td>\n",
" <td>14</td>\n",
" <td>36</td>\n",
" <td>5.202281</td>\n",
" <td>4.826605</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>33</td>\n",
" <td>17</td>\n",
" <td>31</td>\n",
" <td>19</td>\n",
" <td>0.607586</td>\n",
" <td>0.435012</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>32</td>\n",
" <td>18</td>\n",
" <td>19</td>\n",
" <td>31</td>\n",
" <td>1.939425</td>\n",
" <td>1.854825</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>28</td>\n",
" <td>22</td>\n",
" <td>19</td>\n",
" <td>31</td>\n",
" <td>1.712525</td>\n",
" <td>1.557034</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>33</td>\n",
" <td>17</td>\n",
" <td>17</td>\n",
" <td>33</td>\n",
" <td>2.481689</td>\n",
" <td>2.230695</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>32</td>\n",
" <td>18</td>\n",
" <td>25</td>\n",
" <td>25</td>\n",
" <td>0.953056</td>\n",
" <td>0.868549</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>35</td>\n",
" <td>15</td>\n",
" <td>22</td>\n",
" <td>28</td>\n",
" <td>1.525918</td>\n",
" <td>1.231727</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>32</td>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>29</td>\n",
" <td>1.518546</td>\n",
" <td>1.443110</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>28</td>\n",
" <td>22</td>\n",
" <td>24</td>\n",
" <td>26</td>\n",
" <td>0.616003</td>\n",
" <td>0.616416</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>32</td>\n",
" <td>18</td>\n",
" <td>19</td>\n",
" <td>31</td>\n",
" <td>1.939425</td>\n",
" <td>1.854825</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>35</td>\n",
" <td>15</td>\n",
" <td>27</td>\n",
" <td>23</td>\n",
" <td>0.982959</td>\n",
" <td>0.734198</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>30</td>\n",
" <td>20</td>\n",
" <td>12</td>\n",
" <td>38</td>\n",
" <td>5.625146</td>\n",
" <td>5.336051</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>29</td>\n",
" <td>21</td>\n",
" <td>14</td>\n",
" <td>36</td>\n",
" <td>4.274515</td>\n",
" <td>4.552230</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>31</td>\n",
" <td>19</td>\n",
" <td>20</td>\n",
" <td>30</td>\n",
" <td>1.657714</td>\n",
" <td>1.641344</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>35</td>\n",
" <td>15</td>\n",
" <td>18</td>\n",
" <td>32</td>\n",
" <td>2.238725</td>\n",
" <td>1.800755</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>27</td>\n",
" <td>23</td>\n",
" <td>18</td>\n",
" <td>32</td>\n",
" <td>2.035965</td>\n",
" <td>1.497994</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>32</td>\n",
" <td>18</td>\n",
" <td>21</td>\n",
" <td>29</td>\n",
" <td>1.518546</td>\n",
" <td>1.443110</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>29</td>\n",
" <td>21</td>\n",
" <td>21</td>\n",
" <td>29</td>\n",
" <td>1.263495</td>\n",
" <td>1.246869</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>39</td>\n",
" <td>11</td>\n",
" <td>22</td>\n",
" <td>28</td>\n",
" <td>1.685950</td>\n",
" <td>1.078983</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>33</td>\n",
" <td>17</td>\n",
" <td>16</td>\n",
" <td>34</td>\n",
" <td>2.788881</td>\n",
" <td>2.473906</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>25</td>\n",
" <td>25</td>\n",
" <td>18</td>\n",
" <td>32</td>\n",
" <td>1.870406</td>\n",
" <td>0.000000</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>33</td>\n",
" <td>17</td>\n",
" <td>25</td>\n",
" <td>25</td>\n",
" <td>1.031196</td>\n",
" <td>0.895560</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>33</td>\n",
" <td>17</td>\n",
" <td>20</td>\n",
" <td>30</td>\n",
" <td>1.764202</td>\n",
" <td>1.603860</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>35</td>\n",
" <td>15</td>\n",
" <td>18</td>\n",
" <td>32</td>\n",
" <td>2.238725</td>\n",
" <td>1.800755</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>36</td>\n",
" <td>14</td>\n",
" <td>22</td>\n",
" <td>28</td>\n",
" <td>1.572449</td>\n",
" <td>1.197447</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>31</td>\n",
" <td>19</td>\n",
" <td>17</td>\n",
" <td>33</td>\n",
" <td>2.495276</td>\n",
" <td>2.491594</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>70</th>\n",
" <td>28</td>\n",
" <td>22</td>\n",
" <td>21</td>\n",
" <td>29</td>\n",
" <td>1.134753</td>\n",
" <td>1.048783</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>71</th>\n",
" <td>26</td>\n",
" <td>24</td>\n",
" <td>16</td>\n",
" <td>34</td>\n",
" <td>3.354322</td>\n",
" <td>1.527508</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>72</th>\n",
" <td>31</td>\n",
" <td>19</td>\n",
" <td>14</td>\n",
" <td>36</td>\n",
" <td>3.819055</td>\n",
" <td>3.679817</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>73</th>\n",
" <td>32</td>\n",
" <td>18</td>\n",
" <td>20</td>\n",
" <td>30</td>\n",
" <td>1.715223</td>\n",
" <td>1.636994</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>74</th>\n",
" <td>29</td>\n",
" <td>21</td>\n",
" <td>19</td>\n",
" <td>31</td>\n",
" <td>1.788733</td>\n",
" <td>1.776369</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75</th>\n",
" <td>30</td>\n",
" <td>20</td>\n",
" <td>24</td>\n",
" <td>26</td>\n",
" <td>0.876599</td>\n",
" <td>0.868581</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>76</th>\n",
" <td>35</td>\n",
" <td>15</td>\n",
" <td>21</td>\n",
" <td>29</td>\n",
" <td>1.676026</td>\n",
" <td>1.359073</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>77</th>\n",
" <td>29</td>\n",
" <td>21</td>\n",
" <td>26</td>\n",
" <td>24</td>\n",
" <td>0.563585</td>\n",
" <td>0.559700</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>78</th>\n",
" <td>27</td>\n",
" <td>23</td>\n",
" <td>18</td>\n",
" <td>32</td>\n",
" <td>2.035965</td>\n",
" <td>1.497994</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>79</th>\n",
" <td>32</td>\n",
" <td>18</td>\n",
" <td>29</td>\n",
" <td>21</td>\n",
" <td>0.640900</td>\n",
" <td>0.523557</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>80</th>\n",
" <td>30</td>\n",
" <td>20</td>\n",
" <td>21</td>\n",
" <td>29</td>\n",
" <td>1.365188</td>\n",
" <td>1.367302</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>81</th>\n",
" <td>27</td>\n",
" <td>23</td>\n",
" <td>20</td>\n",
" <td>30</td>\n",
" <td>1.256126</td>\n",
" <td>0.943009</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>82</th>\n",
" <td>22</td>\n",
" <td>28</td>\n",
" <td>19</td>\n",
" <td>31</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>83</th>\n",
" <td>31</td>\n",
" <td>19</td>\n",
" <td>18</td>\n",
" <td>32</td>\n",
" <td>2.175313</td>\n",
" <td>2.170704</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>84</th>\n",
" <td>34</td>\n",
" <td>16</td>\n",
" <td>18</td>\n",
" <td>32</td>\n",
" <td>2.226296</td>\n",
" <td>1.902289</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>85</th>\n",
" <td>33</td>\n",
" <td>17</td>\n",
" <td>19</td>\n",
" <td>31</td>\n",
" <td>1.974243</td>\n",
" <td>1.794819</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>86</th>\n",
" <td>28</td>\n",
" <td>22</td>\n",
" <td>17</td>\n",
" <td>33</td>\n",
" <td>2.529547</td>\n",
" <td>2.404379</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>87</th>\n",
" <td>29</td>\n",
" <td>21</td>\n",
" <td>21</td>\n",
" <td>29</td>\n",
" <td>1.263495</td>\n",
" <td>1.246869</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>88</th>\n",
" <td>32</td>\n",
" <td>18</td>\n",
" <td>16</td>\n",
" <td>34</td>\n",
" <td>2.824466</td>\n",
" <td>2.661393</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>89</th>\n",
" <td>36</td>\n",
" <td>14</td>\n",
" <td>21</td>\n",
" <td>29</td>\n",
" <td>1.716420</td>\n",
" <td>1.312375</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>90</th>\n",
" <td>26</td>\n",
" <td>24</td>\n",
" <td>18</td>\n",
" <td>32</td>\n",
" <td>1.969211</td>\n",
" <td>0.830928</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>91</th>\n",
" <td>28</td>\n",
" <td>22</td>\n",
" <td>18</td>\n",
" <td>32</td>\n",
" <td>2.084625</td>\n",
" <td>1.925047</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>92</th>\n",
" <td>35</td>\n",
" <td>15</td>\n",
" <td>17</td>\n",
" <td>33</td>\n",
" <td>2.471927</td>\n",
" <td>1.966549</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>93</th>\n",
" <td>32</td>\n",
" <td>18</td>\n",
" <td>18</td>\n",
" <td>32</td>\n",
" <td>2.195197</td>\n",
" <td>2.097987</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94</th>\n",
" <td>33</td>\n",
" <td>17</td>\n",
" <td>21</td>\n",
" <td>29</td>\n",
" <td>1.578448</td>\n",
" <td>1.430625</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>95</th>\n",
" <td>28</td>\n",
" <td>22</td>\n",
" <td>23</td>\n",
" <td>27</td>\n",
" <td>0.747397</td>\n",
" <td>0.730750</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>96</th>\n",
" <td>33</td>\n",
" <td>17</td>\n",
" <td>20</td>\n",
" <td>30</td>\n",
" <td>1.764202</td>\n",
" <td>1.603860</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>97</th>\n",
" <td>32</td>\n",
" <td>18</td>\n",
" <td>17</td>\n",
" <td>33</td>\n",
" <td>2.487890</td>\n",
" <td>2.367087</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>98</th>\n",
" <td>22</td>\n",
" <td>28</td>\n",
" <td>16</td>\n",
" <td>34</td>\n",
" <td>1040316.877127</td>\n",
" <td>0.000000</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99</th>\n",
" <td>31</td>\n",
" <td>19</td>\n",
" <td>25</td>\n",
" <td>25</td>\n",
" <td>0.864904</td>\n",
" <td>0.821704</td>\n",
" <td>1.5</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>100 rows × 7 columns</p>\n",
"</div>"
],
"text/plain": [
" p0s0 p0s1 p1s0 p1s1 fixedpoint payoff actual\n",
"0 28 22 21 29 1.134753 1.048783 1.5\n",
"1 31 19 18 32 2.175313 2.170704 1.5\n",
"2 27 23 25 25 0.363116 0.367016 1.5\n",
"3 35 15 20 30 1.843455 1.496438 1.5\n",
"4 27 23 14 36 5.202281 4.826605 1.5\n",
"5 33 17 31 19 0.607586 0.435012 1.5\n",
"6 32 18 19 31 1.939425 1.854825 1.5\n",
"7 28 22 19 31 1.712525 1.557034 1.5\n",
"8 33 17 17 33 2.481689 2.230695 1.5\n",
"9 32 18 25 25 0.953056 0.868549 1.5\n",
"10 35 15 22 28 1.525918 1.231727 1.5\n",
"11 32 18 21 29 1.518546 1.443110 1.5\n",
"12 28 22 24 26 0.616003 0.616416 1.5\n",
"13 32 18 19 31 1.939425 1.854825 1.5\n",
"14 35 15 27 23 0.982959 0.734198 1.5\n",
"15 30 20 12 38 5.625146 5.336051 1.5\n",
"16 29 21 14 36 4.274515 4.552230 1.5\n",
"17 31 19 20 30 1.657714 1.641344 1.5\n",
"18 35 15 18 32 2.238725 1.800755 1.5\n",
"19 27 23 18 32 2.035965 1.497994 1.5\n",
"20 32 18 21 29 1.518546 1.443110 1.5\n",
"21 29 21 21 29 1.263495 1.246869 1.5\n",
"22 39 11 22 28 1.685950 1.078983 1.5\n",
"23 33 17 16 34 2.788881 2.473906 1.5\n",
"24 25 25 18 32 1.870406 0.000000 1.5\n",
"25 33 17 25 25 1.031196 0.895560 1.5\n",
"26 33 17 20 30 1.764202 1.603860 1.5\n",
"27 35 15 18 32 2.238725 1.800755 1.5\n",
"28 36 14 22 28 1.572449 1.197447 1.5\n",
"29 31 19 17 33 2.495276 2.491594 1.5\n",
".. ... ... ... ... ... ... ...\n",
"70 28 22 21 29 1.134753 1.048783 1.5\n",
"71 26 24 16 34 3.354322 1.527508 1.5\n",
"72 31 19 14 36 3.819055 3.679817 1.5\n",
"73 32 18 20 30 1.715223 1.636994 1.5\n",
"74 29 21 19 31 1.788733 1.776369 1.5\n",
"75 30 20 24 26 0.876599 0.868581 1.5\n",
"76 35 15 21 29 1.676026 1.359073 1.5\n",
"77 29 21 26 24 0.563585 0.559700 1.5\n",
"78 27 23 18 32 2.035965 1.497994 1.5\n",
"79 32 18 29 21 0.640900 0.523557 1.5\n",
"80 30 20 21 29 1.365188 1.367302 1.5\n",
"81 27 23 20 30 1.256126 0.943009 1.5\n",
"82 22 28 19 31 0.000000 0.000000 1.5\n",
"83 31 19 18 32 2.175313 2.170704 1.5\n",
"84 34 16 18 32 2.226296 1.902289 1.5\n",
"85 33 17 19 31 1.974243 1.794819 1.5\n",
"86 28 22 17 33 2.529547 2.404379 1.5\n",
"87 29 21 21 29 1.263495 1.246869 1.5\n",
"88 32 18 16 34 2.824466 2.661393 1.5\n",
"89 36 14 21 29 1.716420 1.312375 1.5\n",
"90 26 24 18 32 1.969211 0.830928 1.5\n",
"91 28 22 18 32 2.084625 1.925047 1.5\n",
"92 35 15 17 33 2.471927 1.966549 1.5\n",
"93 32 18 18 32 2.195197 2.097987 1.5\n",
"94 33 17 21 29 1.578448 1.430625 1.5\n",
"95 28 22 23 27 0.747397 0.730750 1.5\n",
"96 33 17 20 30 1.764202 1.603860 1.5\n",
"97 32 18 17 33 2.487890 2.367087 1.5\n",
"98 22 28 16 34 1040316.877127 0.000000 1.5\n",
"99 31 19 25 25 0.864904 0.821704 1.5\n",
"\n",
"[100 rows x 7 columns]"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"simdata = simulate_fits(g, 1.5, 50)\n",
"simdata"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In what proportion of these simulated plays does the fixed-point method estimate a higher $\\hat\\lambda$ than the payoff-based method? (This very compact notation that pandas allows us to use will be familiar to users of e.g. R.)"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"0.87"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"(simdata.fixedpoint>simdata.payoff).astype(int).mean()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can also get summary descriptions of the distributions of $\\hat\\lambda$ for each method individually. This confirms the payoff method does return systematically lower values of $\\hat\\lambda$ - and that they are lower than the true value, which we know by construction."
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"count 100.000000\n",
"mean 10404.942812\n",
"std 104031.508521\n",
"min 0.000000\n",
"25% 1.134753\n",
"50% 1.715822\n",
"75% 2.229403\n",
"max 1040316.877127\n",
"Name: fixedpoint, dtype: float64"
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"simdata.fixedpoint.describe()"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"count 100.000000\n",
"mean 1.530026\n",
"std 0.974806\n",
"min 0.000000\n",
"25% 0.975332\n",
"50% 1.463790\n",
"75% 1.854825\n",
"max 5.336051\n",
"Name: payoff, dtype: float64"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"simdata.payoff.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can visualise the results by doing a scatterplot comparing the estimated $\\hat\\lambda$ by the two methods for each simulated play. Each point in this scatterplot corresponds to one simulated outcome."
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def method_scatterplot(df, lam):\n",
" plt.plot([ row['payoff']/(1.0+row['payoff']) for (index, row) in df.iterrows() ],\n",
" [ row['fixedpoint']/(1.0+row['fixedpoint']) for (index, row) in df.iterrows() ],\n",
" 'kp')\n",
" plt.plot([ 0, 1 ], [ 0, 1 ], 'k--')\n",
" plt.plot([ lam/(1.0+lam) ], [ lam/(1.0+lam) ], 'm*', ms=20)\n",
" plt.xticks([ 0.0, 0.25, 0.50, 0.75, 1.00 ],\n",
" [ '0.00', '0.50', '1.00', '2.00', 'Nash' ])\n",
" plt.xlabel('Estimated lambda via payoff method')\n",
" plt.yticks([ 0.0, 0.25, 0.50, 0.75, 1.00 ],\n",
" [ '0.00', '0.50', '1.00', '2.00', 'Nash' ])\n",
" plt.ylabel('Estimated lambda via fixed point method')\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x11653e4d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"method_scatterplot(simdata, 1.5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the case of a 2x2 game, we can do something else to visualise what is going on. Because the space of mixed strategy profiles is just equivalent to a square, we can project the QRE correspondence down onto a square. This next function sets that up."
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def correspondence_plot(game, df=None):\n",
" corresp = gambit.nash.logit_principal_branch(game)\n",
" plt.plot([ x.profile[game.players[0]][0] for x in corresp ],\n",
" [ x.profile[game.players[1]][0] for x in corresp ], 'k--')\n",
" plt.xlabel(\"Pr(Player 0 strategy 0)\")\n",
" plt.ylabel(\"Pr(Player 1 strategy 0)\")\n",
" \n",
" for lam in numpy.arange(1.0, 10.1, 1.0):\n",
" qrelam = gambit.nash.logit_atlambda(game, lam).profile\n",
" plt.plot([ qrelam[game.players[0]][0] ],\n",
" [ qrelam[game.players[1]][0] ], 'kd')\n",
" \n",
" if df is None: return\n",
"\n",
" for (index, sample) in df.iterrows():\n",
" lam = sample['payoff']\n",
" fitted = gambit.nash.logit_atlambda(game, lam).profile\n",
" plt.plot([ sample['p0s0']/(sample['p0s0']+sample['p0s1']),\n",
" fitted[game.players[0]][0] ],\n",
" [ sample['p1s0']/(sample['p1s0']+sample['p1s1']),\n",
" fitted[game.players[1]][0] ], 'r')\n",
" \n",
" lam = sample['fixedpoint']\n",
" fitted = gambit.nash.logit_atlambda(game, lam).profile\n",
" plt.plot([ sample['p0s0']/(sample['p0s0']+sample['p0s1']),\n",
" fitted[game.players[0]][0] ],\n",
" [ sample['p1s0']/(sample['p1s0']+sample['p1s1']),\n",
" fitted[game.players[1]][0] ], 'b')"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAVH+a5Tb67o0AAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1165c6d10>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"correspondence_plot(g)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now, we can add to this correspondence plot information about our simulated data and fits. For each simulated observation, we plot the simulated strategy frequencies. We then plot from that point a red line, which links the observed frequencies to the fitted point on the QRE correspondence using the payoff method, and a blue line, which links the observed frequencies to the fitted point using the fixed-point method. It becomes clear that the fixed-point method (blue) lines generally link up to points farther along the correspondence, i.e. ones with higher $\\lambda$."
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x1167acb90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"correspondence_plot(g, simdata)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Other games from McKPal95"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is reasonable to ask whether this biased performance is due to some special characteristic of the games studied by Ochs. We can look to some other games from McKelvey-Palfrey (1995) to investigate this further.\n",
"\n",
"The second case study is a constant-sum game with four strategies for each player reported in\n",
"\n",
"O'Neill, B. (1987) Nonmetric test of the minimax theory of two-person zerosum games. *Proceedings of the National Academy of Sciences of the USA*, **84**:2106-2109."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"matrix = numpy.array([ [ 5, -5, -5, -5 ],\n",
" [ -5, -5, 5, 5 ],\n",
" [ -5, 5, -5, 5 ],\n",
" [ -5, 5, 5, -5 ] ], dtype=gambit.Rational)\n",
"matrix"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We again follow McKPal95 and translate these payoffs into 1982 cents for comparability."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"matrix *= gambit.Rational(913, 1000)\n",
"game = gambit.Game.from_arrays(matrix, -matrix)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We simulate our data around the $\\hat\\lambda\\approx 1.3$ reported by McKPal95."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"simdata = simulate_fits(g, 1.3, 50)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"(simdata.fixedpoint>simdata.payoff).astype(int).mean()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"simdata.fixedpoint.describe()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"simdata.payoff.describe()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"method_scatterplot(simdata, 1.5)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Another game considered by McKPal95 is a 5x5 constant-sum game from\n",
"\n",
"Rapoport, A. and Boebel, R. (1992) Mixed strategies in strictly competitive games: A further test of the minimax hypothesis. *Games and Economic Behavior* **4**: 261-283.\n",
"\n",
"We put the estimation approaches through their paces, around the $\\hat\\lambda \\approx 0.25$ reported by McKPal95."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"matrix = numpy.array([ [ 10, -6, -6, -6, -6 ],\n",
" [ -6, -6, 10, 10, 10 ],\n",
" [ -6, 10, -6, -6, 10 ],\n",
" [ -6, 10, -6, 10, -6 ],\n",
" [ -6, 10, 10, -6, -6 ] ], dtype=gambit.Rational)\n",
"matrix *= gambit.Rational(713, 1000)\n",
"game = gambit.Game.from_arrays(matrix, -matrix)\n",
"simdata = simulate_fits(g, 0.25, 50)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"simdata.fixedpoint.describe()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"simdata.payoff.describe()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"method_scatterplot(simdata, 0.25)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Estimating other parameters"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"While it appears, from these (still preliminary) results, that the payoff method for estimating $\\lambda$ is biased towards estimates which are more \"noisy\" than the true behaviour, this may not in practice be much of a concern.\n",
"\n",
"In the view of this researcher, the real strength of the logit model is in using it to estimate other parameters of interest. The logit model has some attractive foundations in terms of information theory which make it ideal for this task (in addition to being computationally quite tractable).\n",
"\n",
"It is precisely in these applications where the payoff-based estimation approach is most attractive. The fixed-point method becomes progressively more computationally infeasible as the game gets larger, or as the number of parameters to be considered grows. The payoff approach on the other hand scales much more attractively. What we really want to know, then, is not so much whether $\\hat\\lambda$ is biased, but whether estimates of *other* parameters of interest are systematically biased as well.\n",
"\n",
"We pick this up by looking at some examples from\n",
"\n",
"Goeree, Holt, and Palfrey (2002), Risk averse behavior in generalized matching pennies games."
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"matrix1 = numpy.array([ [ 200, 160 ], [ 370, 10 ]], dtype=gambit.Decimal)\n",
"matrix2 = numpy.array([ [ 160, 10 ], [ 200, 370 ]], dtype=gambit.Decimal)\n",
"game = gambit.Game.from_arrays(matrix1, matrix2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The idea in GHP2002 is to estimate simultaneously a QRE with a common constant-relative risk aversion parameter $r$. This utility function transforms the basic payoff matrix into (scaled) utilities given CRRA paramater $r$."
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def transform_matrix(m, r):\n",
" r = gambit.Decimal(str(r))\n",
" return (numpy.power(m, 1-r) - numpy.power(10, 1-r)) / \\\n",
" (numpy.power(370, 1-r) - numpy.power(10, 1-r))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The next few functions set up the optimisation. For the purposes of the talk, we simply look over a discrete grid of possible risk aversion parameters (to keep the running time short and reliable for a live demo!)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def estimate_risk_fixedpoint_method(matrix1, matrix2, freqs):\n",
" def log_like(r):\n",
" tm1 = transform_matrix(matrix1, r)\n",
" tm2 = transform_matrix(matrix2, r)\n",
" g = gambit.Game.from_arrays(tm1, tm2)\n",
" profile = g.mixed_strategy_profile()\n",
" for i in xrange(len(profile)):\n",
" profile[i] = freqs[i]\n",
" qre = gambit.nash.logit_estimate(profile)\n",
" logL = numpy.dot(numpy.array(list(freqs)), numpy.log(list(qre.profile)))\n",
" return logL\n",
" results = [ (x0, log_like(x0))\n",
" for x0 in numpy.linspace(0.01, 0.99, 100) ]\n",
" results.sort(key=lambda r: -r[1])\n",
" return results[0][0]"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def estimate_payoff_method(freqs):\n",
" def log_like(freqs, values, lam):\n",
" logit_probs = [ [ math.exp(lam*v) for v in player ] for player in values ]\n",
" sums = [ sum(v) for v in logit_probs ]\n",
" logit_probs = [ [ v/s for v in vv ]\n",
" for (vv, s) in zip(logit_probs, sums) ]\n",
" logit_probs = [ v for player in logit_probs for v in player ]\n",
" logit_probs = [ max(v, 1.0e-293) for v in logit_probs ]\n",
" return sum([ f*math.log(p) for (f, p) in zip(list(freqs), logit_probs) ])\n",
" p = freqs.copy()\n",
" p.normalize()\n",
" v = p.strategy_values()\n",
" res = scipy.optimize.minimize(lambda x: -log_like(freqs, v, x[0]), (0.1,),\n",
" bounds=((0.0, 10.0),))\n",
" return log_like(freqs, v, res.x[0])\n",
"\n",
"def estimate_risk_payoff_method(matrix1, matrix2, freqs):\n",
" def log_like(r):\n",
" tm1 = transform_matrix(matrix1, r)\n",
" tm2 = transform_matrix(matrix2, r)\n",
" g = gambit.Game.from_arrays(tm1, tm2)\n",
" profile = g.mixed_strategy_profile()\n",
" for i in xrange(len(profile)):\n",
" profile[i] = freqs[i]\n",
" logL = estimate_payoff_method(profile)\n",
" return logL\n",
" results = [ (x0, log_like(x0))\n",
" for x0 in numpy.linspace(0.01, 0.99, 100) ]\n",
" results.sort(key=lambda r: -r[1])\n",
" return results[0][0]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is a variation on the simulator driver, where we will focus on collecting statistics on the risk aversion parameters estimated."
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def simulate_fits(game, matrix1, matrix2, r, lam, N, trials=100):\n",
" qre = gambit.nash.logit_atlambda(game, lam).profile\n",
" samples = [ ]\n",
" for sample in xrange(trials):\n",
" f = game.mixed_strategy_profile()\n",
" for player in game.players:\n",
" f[player] = numpy.random.multinomial(N, qre[player], size=1)[0]\n",
" samples.append(f)\n",
" labels = [ \"p%ds%d\" % (i, j)\n",
" for (i, player) in enumerate(game.players)\n",
" for (j, strategy) in enumerate(player.strategies) ]\n",
" return pandas.DataFrame([ list(freqs) +\n",
" [ estimate_risk_fixedpoint_method(matrix1, matrix2, freqs),\n",
" estimate_risk_payoff_method(matrix1, matrix2, freqs),\n",
" r ]\n",
" for freqs in samples ],\n",
" columns=labels + [ 'r_fixedpoint', 'r_payoff', 'actual' ])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"GHP02 report a risk aversion parameter estimate of $r=0.44$ for this game, so we adopt this as the true value. Likewise, they report a logit parameter estimate of $\\frac{1}{\\lambda}=0.150$ which we use as the parameter for the data generating process in the simulation."
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"game = gambit.Game.from_arrays(transform_matrix(matrix1, gambit.Decimal(\"0.44\")),\n",
" transform_matrix(matrix2, gambit.Decimal(\"0.44\")))"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>p0s0</th>\n",
" <th>p0s1</th>\n",
" <th>p1s0</th>\n",
" <th>p1s1</th>\n",
" <th>r_fixedpoint</th>\n",
" <th>r_payoff</th>\n",
" <th>actual</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>48</td>\n",
" <td>52</td>\n",
" <td>71</td>\n",
" <td>29</td>\n",
" <td>0.623737</td>\n",
" <td>0.623737</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>44</td>\n",
" <td>56</td>\n",
" <td>68</td>\n",
" <td>32</td>\n",
" <td>0.504949</td>\n",
" <td>0.504949</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>50</td>\n",
" <td>50</td>\n",
" <td>67</td>\n",
" <td>33</td>\n",
" <td>0.554444</td>\n",
" <td>0.554444</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>53</td>\n",
" <td>47</td>\n",
" <td>61</td>\n",
" <td>39</td>\n",
" <td>0.524747</td>\n",
" <td>0.524747</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>43</td>\n",
" <td>57</td>\n",
" <td>72</td>\n",
" <td>28</td>\n",
" <td>0.594040</td>\n",
" <td>0.594040</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>50</td>\n",
" <td>50</td>\n",
" <td>56</td>\n",
" <td>44</td>\n",
" <td>0.257475</td>\n",
" <td>0.257475</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>33</td>\n",
" <td>67</td>\n",
" <td>63</td>\n",
" <td>37</td>\n",
" <td>0.495051</td>\n",
" <td>0.010000</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>55</td>\n",
" <td>45</td>\n",
" <td>64</td>\n",
" <td>36</td>\n",
" <td>0.752424</td>\n",
" <td>0.752424</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>47</td>\n",
" <td>53</td>\n",
" <td>56</td>\n",
" <td>44</td>\n",
" <td>0.227778</td>\n",
" <td>0.237677</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>50</td>\n",
" <td>50</td>\n",
" <td>56</td>\n",
" <td>44</td>\n",
" <td>0.257475</td>\n",
" <td>0.257475</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>40</td>\n",
" <td>60</td>\n",
" <td>62</td>\n",
" <td>38</td>\n",
" <td>0.396061</td>\n",
" <td>0.405960</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>44</td>\n",
" <td>56</td>\n",
" <td>65</td>\n",
" <td>35</td>\n",
" <td>0.425758</td>\n",
" <td>0.435657</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>49</td>\n",
" <td>51</td>\n",
" <td>71</td>\n",
" <td>29</td>\n",
" <td>0.643535</td>\n",
" <td>0.643535</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>54</td>\n",
" <td>46</td>\n",
" <td>67</td>\n",
" <td>33</td>\n",
" <td>0.722727</td>\n",
" <td>0.722727</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>55</td>\n",
" <td>45</td>\n",
" <td>63</td>\n",
" <td>37</td>\n",
" <td>0.742525</td>\n",
" <td>0.742525</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>46</td>\n",
" <td>54</td>\n",
" <td>71</td>\n",
" <td>29</td>\n",
" <td>0.594040</td>\n",
" <td>0.594040</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>48</td>\n",
" <td>52</td>\n",
" <td>60</td>\n",
" <td>40</td>\n",
" <td>0.326768</td>\n",
" <td>0.326768</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>47</td>\n",
" <td>53</td>\n",
" <td>64</td>\n",
" <td>36</td>\n",
" <td>0.415859</td>\n",
" <td>0.415859</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>45</td>\n",
" <td>55</td>\n",
" <td>64</td>\n",
" <td>36</td>\n",
" <td>0.405960</td>\n",
" <td>0.405960</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>44</td>\n",
" <td>56</td>\n",
" <td>61</td>\n",
" <td>39</td>\n",
" <td>0.346566</td>\n",
" <td>0.356465</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>46</td>\n",
" <td>54</td>\n",
" <td>67</td>\n",
" <td>33</td>\n",
" <td>0.485152</td>\n",
" <td>0.485152</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>50</td>\n",
" <td>50</td>\n",
" <td>66</td>\n",
" <td>34</td>\n",
" <td>0.524747</td>\n",
" <td>0.524747</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>45</td>\n",
" <td>55</td>\n",
" <td>63</td>\n",
" <td>37</td>\n",
" <td>0.386162</td>\n",
" <td>0.386162</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>40</td>\n",
" <td>60</td>\n",
" <td>62</td>\n",
" <td>38</td>\n",
" <td>0.396061</td>\n",
" <td>0.405960</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>41</td>\n",
" <td>59</td>\n",
" <td>69</td>\n",
" <td>31</td>\n",
" <td>0.524747</td>\n",
" <td>0.534646</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25</th>\n",
" <td>44</td>\n",
" <td>56</td>\n",
" <td>59</td>\n",
" <td>41</td>\n",
" <td>0.306970</td>\n",
" <td>0.316869</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>47</td>\n",
" <td>53</td>\n",
" <td>69</td>\n",
" <td>31</td>\n",
" <td>0.554444</td>\n",
" <td>0.554444</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>27</th>\n",
" <td>49</td>\n",
" <td>51</td>\n",
" <td>59</td>\n",
" <td>41</td>\n",
" <td>0.316869</td>\n",
" <td>0.316869</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>28</th>\n",
" <td>45</td>\n",
" <td>55</td>\n",
" <td>63</td>\n",
" <td>37</td>\n",
" <td>0.386162</td>\n",
" <td>0.386162</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>39</td>\n",
" <td>61</td>\n",
" <td>62</td>\n",
" <td>38</td>\n",
" <td>0.405960</td>\n",
" <td>0.405960</td>\n",
" <td>0.44</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" p0s0 p0s1 p1s0 p1s1 r_fixedpoint r_payoff actual\n",
"0 48 52 71 29 0.623737 0.623737 0.44\n",
"1 44 56 68 32 0.504949 0.504949 0.44\n",
"2 50 50 67 33 0.554444 0.554444 0.44\n",
"3 53 47 61 39 0.524747 0.524747 0.44\n",
"4 43 57 72 28 0.594040 0.594040 0.44\n",
"5 50 50 56 44 0.257475 0.257475 0.44\n",
"6 33 67 63 37 0.495051 0.010000 0.44\n",
"7 55 45 64 36 0.752424 0.752424 0.44\n",
"8 47 53 56 44 0.227778 0.237677 0.44\n",
"9 50 50 56 44 0.257475 0.257475 0.44\n",
"10 40 60 62 38 0.396061 0.405960 0.44\n",
"11 44 56 65 35 0.425758 0.435657 0.44\n",
"12 49 51 71 29 0.643535 0.643535 0.44\n",
"13 54 46 67 33 0.722727 0.722727 0.44\n",
"14 55 45 63 37 0.742525 0.742525 0.44\n",
"15 46 54 71 29 0.594040 0.594040 0.44\n",
"16 48 52 60 40 0.326768 0.326768 0.44\n",
"17 47 53 64 36 0.415859 0.415859 0.44\n",
"18 45 55 64 36 0.405960 0.405960 0.44\n",
"19 44 56 61 39 0.346566 0.356465 0.44\n",
"20 46 54 67 33 0.485152 0.485152 0.44\n",
"21 50 50 66 34 0.524747 0.524747 0.44\n",
"22 45 55 63 37 0.386162 0.386162 0.44\n",
"23 40 60 62 38 0.396061 0.405960 0.44\n",
"24 41 59 69 31 0.524747 0.534646 0.44\n",
"25 44 56 59 41 0.306970 0.316869 0.44\n",
"26 47 53 69 31 0.554444 0.554444 0.44\n",
"27 49 51 59 41 0.316869 0.316869 0.44\n",
"28 45 55 63 37 0.386162 0.386162 0.44\n",
"29 39 61 62 38 0.405960 0.405960 0.44"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"simdata = simulate_fits(game, matrix1, matrix2, 0.44, 1.0/0.150, 100, trials=30)\n",
"simdata"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"count 30.000000\n",
"mean 0.469973\n",
"std 0.143914\n",
"min 0.227778\n",
"25% 0.386162\n",
"50% 0.455455\n",
"75% 0.554444\n",
"max 0.752424\n",
"Name: r_fixedpoint, dtype: float64"
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"simdata.r_fixedpoint.describe()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"count 30.000000\n",
"mean 0.456114\n",
"std 0.165395\n",
"min 0.010000\n",
"25% 0.363889\n",
"50% 0.425758\n",
"75% 0.554444\n",
"max 0.752424\n",
"Name: r_payoff, dtype: float64"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"simdata.r_payoff.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## (Tentative) conclusions\n",
"\n",
"* The payoff-based approach to estimating QRE is attractive and offers hope of fitting much richer models.\n",
"* Preliminary indications are that estimated QRE parameters $\\hat\\lambda$ obtained by using the payoff method are biased (in the direction of understating precision), so these should be used with care in small samples.\n",
"* At least in the generalized matching pennies game, the bias in $\\hat\\lambda$ does not seem to result in any bias in risk attitude estimates."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.11"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment