{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Frequentism vs Bayesianism II: When Results Differ"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*This notebook originally appeared as a [post](http://jakevdp.github.io/blog/2014/06/06/frequentism-and-bayesianism-2-when-results-differ/) on the blog [Pythonic Perambulations](http://jakevdp.github.io). The content is BSD licensed.*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "*This post is part of a 5-part series: [Part I](http://jakevdp.github.io/blog/2014/03/11/frequentism-and-bayesianism-a-practical-intro/)  [Part II](http://jakevdp.github.io/blog/2014/06/06/frequentism-and-bayesianism-2-when-results-differ/)  [Part III](http://jakevdp.github.io/blog/2014/06/12/frequentism-and-bayesianism-3-confidence-credibility/)  [Part IV](http://jakevdp.github.io/blog/2014/06/14/frequentism-and-bayesianism-4-bayesian-in-python/) [Part V](http://jakevdp.github.io/blog/2015/08/07/frequentism-and-bayesianism-5-model-selection/)*\n",
    "\n",
    "*See also [Frequentism and Bayesianism: A Python-driven Primer](http://arxiv.org/abs/1411.5018), a peer-reviewed article partially based on this content.*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<!-- PELICAN_BEGIN_SUMMARY -->\n",
    "\n",
    "In a [previous post](http://jakevdp.github.io/blog/2014/03/11/frequentism-and-bayesianism-a-practical-intro/) I gave a brief practical introduction to frequentism and Bayesianism as they relate to the analysis of scientific data. In it, I discussed the fundamental philosophical difference between frequentism and Bayesianism, and showed several simple problems where the two approaches give basically the same results.\n",
    "\n",
    "While it is easy to show that the two approaches are often equivalent for simple problems, it is also true that they can diverge greatly for more complicated problems. I've found that in practice, this divergence makes itself most clear in two different situations:\n",
    "\n",
    "1. The handling of nuisance parameters\n",
    "2. The subtle (and often overlooked) difference between frequentist confidence intervals and Bayesian credible intervals\n",
    "\n",
    "The second point is a bit more philosophical and in-depth, and I'm going to save it for a later post and focus here on the first point: the difference between frequentist and Bayesian treatment of nuisance parameters. Though I tried my best to stay impartial in the previous post, here you'll start to see my leanings toward the Bayesian approach. Consider this a warmup for when I get around to addressing point number 2: that will likely get downright polemical.\n",
    "\n",
    "<!-- PELICAN_END_SUMMARY -->"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## What is a Nuisance Parameter?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "A nuisance parameter is any quantity whose value is not relevant to the goal of an analysis, but is nevertheless required to determine some quantity of interest. For example, in the [second application](http://jakevdp.github.io/blog/2014/03/11/frequentism-and-bayesianism-a-practical-intro/#Varying-Photon-Counts:-The-Bayesian-Approach) worked-through in the previous post, we estimated both the mean $\\mu$ and intrinsic scatter $\\sigma$ for the observed photons. In practice, we may only be interested in $\\mu$, the mean of the distribution. In this case $\\sigma$ is a nuisance parameter: it is not of immediate interest, but is nevertheless an essential stepping-stone in determining the final estimate of $\\mu$, the parameter of interest.\n",
    "\n",
    "To illustrate this, I'm going to go through two examples where nuisance parameters come into play. We'll explore both the frequentist and the Bayesian approach to solving both of these problems:"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example #1: The Bayesian Billiard Game"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "I'll start with an example of nuisance parameters that, in one form or another, dates all the way back to the posthumous [1763 paper](http://www.stat.ucla.edu/history/essay.pdf) written by Thomas Bayes himself. The particular version of this problem I use here is borrowed from [Eddy 2004](ftp://selab.janelia.org/pub/publications/Eddy-ATG3/Eddy-ATG3-reprint.pdf).\n",
    "\n",
    "The setting is a rather contrived game in which Alice and Bob bet on the outcome of a process they can't directly observe:\n",
    "\n",
    "Alice and Bob enter a room. Behind a curtain there is a billiard table, which they cannot see, but their friend Carol can. Carol rolls a ball down the table, and marks where it lands. Once this mark is in place, Carol begins rolling new balls down the table. If the ball lands to the left of the mark, Alice gets a point; if it lands to the right of the mark, Bob gets a point.  We can assume for the sake of example that Carol's rolls are unbiased: that is, the balls have an equal chance of ending up anywhere on the table.  The first person to reach **six points** wins the game.\n",
    "\n",
    "Here the location of the mark (determined by the first roll) can be considered a nuisance parameter: it is unknown, and not of immediate interest, but it clearly must be accounted for when predicting the outcome of subsequent rolls. If the first roll settles far to the right, then subsequent rolls will favor Alice. If it settles far to the left, Bob will be favored instead.\n",
    "\n",
    "Given this setup, here is the question we ask of ourselves:\n",
    "\n",
    "> In a particular game, after eight rolls, Alice has five points and Bob has three points. What is the probability that Bob will go on to win the game?\n",
    "\n",
    "Intuitively, you probably realize that because Alice received five of the eight points, the marker placement likely favors her. And given this, it's more likely that the next roll will go her way as well. And she has three opportunities to get a favorable roll before Bob can win; she seems to have clinched it.  But, **quantitatively**, what is the probability that Bob will squeak-out a win?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### A Naïve Frequentist Approach"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Someone following a classical frequentist approach might reason as follows:\n",
    "\n",
    "To determine the result, we need an intermediate estimate of where the marker sits. We'll quantify this marker placement as a probability $p$ that any given roll lands in Alice's favor.  Because five balls out of eight fell on Alice's side of the marker, we can quickly show that the maximum likelihood estimate of $p$ is given by:\n",
    "\n",
    "$$\n",
    "\\hat{p} = 5/8\n",
    "$$\n",
    "\n",
    "(This result follows in a straightforward manner from the [binomial likelihood](http://en.wikipedia.org/wiki/Binomial_distribution)). Assuming this maximum likelihood probability, we can compute the probability that Bob will win, which is given by:\n",
    "\n",
    "$$\n",
    "P(B) = (1 - \\hat{p})^3\n",
    "$$\n",
    "\n",
    "That is, he needs to win three rolls in a row. Thus, we find that the following estimate of the probability:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Naïve Frequentist Probability of Bob Winning: 0.05\n"
     ]
    }
   ],
   "source": [
    "p_hat = 5. / 8.\n",
    "freq_prob = (1 - p_hat) ** 3\n",
    "print(\"Naïve Frequentist Probability of Bob Winning: {0:.2f}\".format(freq_prob))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In other words, we'd give Bob the following odds of winning:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Odds against Bob winning: 18 to 1\n"
     ]
    }
   ],
   "source": [
    "print(\"Odds against Bob winning: {0:.0f} to 1\".format((1. - freq_prob) / freq_prob))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So we've estimated using frequentist ideas that Alice will win about 18 times for each time Bob wins. Let's try a Bayesian approach next."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Bayesian Approach"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also approach this problem from a Bayesian standpoint. This is slightly more involved, and requires us to first define some notation.\n",
    "\n",
    "We'll consider the following random variables:\n",
    "\n",
    "- $B$ = Bob Wins\n",
    "- $D$ = observed data, i.e. $D = (n_A, n_B) = (5, 3)$\n",
    "- $p$ = unknown probability that a ball lands on Alice's side during the current game\n",
    "\n",
    "We want to compute $P(B~|~D)$; that is, the probability that Bob wins given our observation that Alice currently has five points to Bob's three.\n",
    "\n",
    "The general Bayesian method of treating nuisance parameters is *marginalization*, or integrating the joint probability over the entire range of the nuisance parameter. In this case, that means that we will first calculate the joint distribution\n",
    "$$\n",
    "P(B,p~|~D)\n",
    "$$\n",
    "and then marginalize over $p$ using the following identity:\n",
    "$$\n",
    "P(B~|~D) \\equiv \\int_{-\\infty}^\\infty P(B,p~|~D) {\\mathrm d}p\n",
    "$$\n",
    "This identity follows from the definition of conditional probability, and the law of total probability: that is, it is a fundamental consequence of probability axioms and will always be true. Even a frequentist would recognize this; they would simply disagree with our interpretation of $P(p)$ as being a measure of uncertainty of our own knowledge."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Building our Bayesian Expression"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To compute this result, we will manipulate the above expression for $P(B~|~D)$ until we can express it in terms of other quantities that we can compute."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We'll start by applying the following definition of [conditional probability](http://en.wikipedia.org/wiki/Conditional_probability#Definition) to expand the term $P(B,p~|~D)$:\n",
    "\n",
    "$$\n",
    "P(B~|~D) = \\int P(B~|~p, D) P(p~|~D) dp\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Next we use [Bayes' rule](http://en.wikipedia.org/wiki/Bayes%27_theorem) to rewrite $P(p~|~D)$:\n",
    "\n",
    "$$\n",
    "P(B~|~D) = \\int P(B~|~p, D) \\frac{P(D~|~p)P(p)}{P(D)} dp\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Finally, using the same probability identity we started with, we can expand $P(D)$ in the denominator to find:\n",
    "\n",
    "$$\n",
    "P(B~|~D) = \\frac{\\int P(B~|~p,D) P(D~|~p) P(p) dp}{\\int P(D~|~p)P(p) dp}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now the desired probability is expressed in terms of three quantities that we can compute. Let's look at each of these in turn:\n",
    "\n",
    "- $P(B~|~p,D)$: This term is exactly the frequentist likelihood we used above. In words: given a marker placement $p$ and the fact that Alice has won 5 times and Bob 3 times, what is the probability that Bob will go on to six wins?  Bob needs three wins in a row, i.e. $P(B~|~p,D) = (1 - p) ^ 3$.\n",
    "- $P(D~|~p)$: this is another easy-to-compute term. In words: given a probability $p$, what is the likelihood of exactly 5 positive outcomes out of eight trials? The answer comes from the well-known [Binomial distribution](http://en.wikipedia.org/wiki/Binomial_distribution): in this case $P(D~|~p) \\propto p^5 (1-p)^3$\n",
    "- $P(p)$: this is our prior on the probability $p$. By the problem definition, we can assume that $p$ is evenly drawn between 0 and 1.  That is, $P(p) \\propto 1$, and the integrals range from 0 to 1."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Putting this all together, canceling some terms, and simplifying a bit, we find\n",
    "$$\n",
    "P(B~|~D) = \\frac{\\int_0^1 (1 - p)^6 p^5 dp}{\\int_0^1 (1 - p)^3 p^5 dp}\n",
    "$$\n",
    "where both integrals are evaluated from 0 to 1."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "These integrals might look a bit difficult, until we notice that they are special cases of the [Beta Function](http://en.wikipedia.org/wiki/Beta_function):\n",
    "$$\n",
    "\\beta(n, m) = \\int_0^1 (1 - p)^{n - 1} p^{m - 1}\n",
    "$$\n",
    "The Beta function can be further expressed in terms of gamma functions (i.e. factorials), but for simplicity we'll compute them directly using Scipy's beta function implementation:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "P(B|D) = 0.09\n"
     ]
    }
   ],
   "source": [
    "from scipy.special import beta\n",
    "bayes_prob = beta(6 + 1, 5 + 1) / beta(3 + 1, 5 + 1)\n",
    "\n",
    "print(\"P(B|D) = {0:.2f}\".format(bayes_prob))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The associated odds are the following:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Bayesian odds against Bob winning: 10 to 1\n"
     ]
    }
   ],
   "source": [
    "print(\"Bayesian odds against Bob winning: {0:.0f} to 1\".format((1. - bayes_prob) / bayes_prob))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "So we see that the Bayesian result gives us 10 to 1 odds, which is quite different than the 18 to 1 odds found using the frequentist approach. So which one is correct?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### A Brute Force/Monte Carlo Approach"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For this type of well-defined and simple setup, it is actually relatively easy to use a Monte Carlo simulation to determine the correct answer. This is essentially a brute-force tabulation of possible outcomes: we generate a large number of random games, and simply count the fraction of relevant games that Bob goes on to win. The current problem is especially simple because so many of the random variables involved are uniformly distributed.  We can use the ``numpy`` package to do this as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(Sanity check passed)\n",
      "Number of suitable games: 11068\n",
      "Number of these games Bob won: 979\n",
      "Monte Carlo Probability of Bob winning: 0.09\n",
      "MC Odds against Bob winning: 10 to 1\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "np.random.seed(0)\n",
    "\n",
    "# play 100000 games with randomly-drawn p, between 0 and 1\n",
    "p = np.random.random(100000)\n",
    "\n",
    "# each game needs at most 11 rolls for one player to reach 6 wins\n",
    "rolls = np.random.random((11, len(p)))\n",
    "\n",
    "# count the cumulative wins for Alice and Bob at each roll\n",
    "Alice_count = np.cumsum(rolls < p, 0)\n",
    "Bob_count = np.cumsum(rolls >= p, 0)\n",
    "\n",
    "# sanity check: total number of wins should equal number of rolls\n",
    "total_wins = Alice_count + Bob_count\n",
    "assert np.all(total_wins.T == np.arange(1, 12))\n",
    "print(\"(Sanity check passed)\")\n",
    "\n",
    "# determine number of games which meet our criterion of (A wins, B wins)=(5, 3)\n",
    "# this means Bob's win count at eight rolls must equal 3\n",
    "good_games = Bob_count[7] == 3\n",
    "print(\"Number of suitable games: {0}\".format(good_games.sum()))\n",
    "\n",
    "# truncate our results to consider only these games\n",
    "Alice_count = Alice_count[:, good_games]\n",
    "Bob_count = Bob_count[:, good_games]\n",
    "\n",
    "# determine which of these games Bob won.\n",
    "# to win, he must reach six wins after 11 rolls.\n",
    "bob_won = np.sum(Bob_count[10] == 6)\n",
    "print(\"Number of these games Bob won: {0}\".format(bob_won.sum()))\n",
    "\n",
    "# compute the probability\n",
    "mc_prob = bob_won.sum() * 1. / good_games.sum()\n",
    "print(\"Monte Carlo Probability of Bob winning: {0:.2f}\".format(mc_prob))\n",
    "print(\"MC Odds against Bob winning: {0:.0f} to 1\".format((1. - mc_prob) / mc_prob))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The Monte Carlo approach gives 10-to-1 odds on Bob, which agrees with the Bayesian approach. Apparently, our naïve frequentist approach above was flawed."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Discussion"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This example shows several different approaches to dealing with the presence of a nuisance parameter *p*. The Monte Carlo simulation gives us a close brute-force estimate of the true probability (assuming the validity of our assumptions), which the Bayesian approach matches. The naïve frequentist approach, by utilizing a single maximum likelihood estimate of the nuisance parameter $p$, arrives at the wrong result.\n",
    "\n",
    "Before my comment thread explodes and I get ripped to shreds – again – on Reddit and Hacker News, I should emphasize that **this does not imply frequentism itself is incorrect**. The incorrect result above is more a matter of the approach being \"naïve\" than it being \"frequentist\". There certainly exist frequentist methods for handling this sort of nuisance parameter – for example, it is theoretically possible to apply a transformation and conditioning of the data to isolate the dependence on $p$ – but I've not been able to find any approach to this particular problem that does not somehow take advantage of Bayesian-like marginalization over $p$.\n",
    "\n",
    "Another potential point of contention is that the question itself is posed in a way that is perhaps unfair to the classical, frequentist approach. A frequentist might instead hope to give the answer in terms of null tests or confidence intervals: that is, they might devise a procedure to construct limits which would provably bound the correct answer in $100\\times(1 - p)$ percent of similar trials, for some value of $p$ – say, 0.05 (note this is a different $p$ than the $p$ we've been talking about above). This might be classically accurate, but it doesn't quite answer the question at hand. I'll leave discussion of the meaning of such confidence intervals for my follow-up post on the subject.\n",
    "\n",
    "There is one clear common point of these two potential frequentist responses: both require some degree of effort and/or special expertise; perhaps a suitable frequentist approach would be immediately obvious to someone with a PhD in statistics, but is most definitely *not* obvious to a statistical lay-person simply trying to answer the question at hand. In this sense, I think Bayesianism provides a better approach for this sort of problem: by simple algebraic manipulation of a few well-known axioms of probability within a Bayesian framework, we can straightforwardly arrive at the correct answer without need for other special expertise.\n",
    "\n",
    "We'll explore a more data-oriented example of dealing with nuisance parameters next."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Example #2: Linear Fit with Outliers"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "One situation where the concept of nuisance parameters can be helpful is accounting for outliers in data. Consider the following dataset, relating the observed variables $x$ and $y$, and the error of $y$ stored in $e$."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "x = np.array([ 0,  3,  9, 14, 15, 19, 20, 21, 30, 35,\n",
    "              40, 41, 42, 43, 54, 56, 67, 69, 72, 88])\n",
    "y = np.array([33, 68, 34, 34, 37, 71, 37, 44, 48, 49,\n",
    "              53, 49, 50, 48, 56, 60, 61, 63, 44, 71])\n",
    "e = np.array([ 3.6, 3.9, 2.6, 3.4, 3.8, 3.8, 2.2, 2.1, 2.3, 3.8,\n",
    "               2.2, 2.8, 3.9, 3.1, 3.4, 2.6, 3.4, 3.7, 2.0, 3.5])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We'll visualize this data below:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10388aa10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "plt.errorbar(x, y, e, fmt='.k', ecolor='gray');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our task is to find a line of best-fit to the data. It's clear upon visual inspection that there are some outliers among these points, but let's start with a simple non-robust maximum likelihood approach. Like we saw in the previous post, the following simple maximum likelihood result can be considered to be either frequentist or Bayesian (with uniform priors): in this sort of simple problem, the approaches are essentially equivalent.\n",
    "\n",
    "We'll propose a simple linear model, which has a slope and an intercept encoded in a parameter vector $\\theta$. The model is defined as follows:\n",
    "$$\n",
    "\\hat{y}(x~|~\\theta) = \\theta_0 + \\theta_1 x\n",
    "$$\n",
    "Given this model, we can compute a Gaussian likelihood for each point:\n",
    "$$\n",
    "p(x_i,y_i,e_i~|~\\theta) \\propto \\exp\\left[-\\frac{1}{2e_i^2}\\left(y_i - \\hat{y}(x_i~|~\\theta)\\right)^2\\right]\n",
    "$$\n",
    "The total likelihood is the product of all the individual likelihoods. Computing this and taking the log, we have:\n",
    "$$\n",
    "\\log \\mathcal{L}(D~|~\\theta) = \\mathrm{const} - \\sum_i \\frac{1}{2e_i^2}\\left(y_i - \\hat{y}(x_i~|~\\theta)\\right)^2\n",
    "$$\n",
    "This should all look pretty familiar if you read through the previous post. This final expression is the log-likelihood of the data given the model, which can be maximized to find the $\\theta$ corresponding to the maximum-likelihood model. Equivalently, we can minimize the summation term, which is known as the *loss*:\n",
    "$$\n",
    "\\mathrm{loss} = \\sum_i \\frac{1}{2e_i^2}\\left(y_i - \\hat{y}(x_i~|~\\theta)\\right)^2\n",
    "$$\n",
    "This loss expression is known as a *squared loss*; here we've simply shown that the squared loss can be derived from the Gaussian log likelihood."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Standard Likelihood Approach"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Following the logic of the previous post, we can maximize the likelihood (or, equivalently, minimize the loss) to find $\\theta$ within a frequentist paradigm. For a flat prior in $\\theta$, the maximum of the Bayesian posterior will yield the same result. (note that there are good arguments based on the principle of maximum entropy that a flat prior is not the best choice here; we'll ignore that detail for now, as it's a very small effect for this problem).\n",
    "\n",
    "For simplicity, we'll use scipy's ``optimize`` package to minimize the loss (in the case of squared loss, this computation can be done more efficiently using matrix methods, but we'll use numerical minimization for simplicity here)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nXKyVoC9GUcsAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108ad7750>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from scipy import optimize\n",
    "\n",
    "def squared_loss(theta, x=x, y=y, e=e):\n",
    "    dy = y - theta[0] - theta[1] * x\n",
    "    return np.sum(0.5 * (dy / e) ** 2)\n",
    "\n",
    "theta1 = optimize.fmin(squared_loss, [0, 0], disp=False)\n",
    "\n",
    "xfit = np.linspace(0, 100)\n",
    "plt.errorbar(x, y, e, fmt='.k', ecolor='gray')\n",
    "plt.plot(xfit, theta1[0] + theta1[1] * xfit, '-k')\n",
    "plt.title('Maximum Likelihood fit: Squared Loss');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It's clear on examination that the outliers are exerting a disproportionate influence on the fit. This is due to the nature of the squared loss function. If you have a single outlier that is, say 10 standard deviations away from the fit, its contribution to the loss will out-weigh that of 25 points which are 2 standard deviations away!\n",
    "\n",
    "Clearly the squared loss is overly sensitive to outliers, and this is causing issues with our fit. One way to address this within the frequentist paradigm is to simply adjust the loss function to be more robust."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Frequentist Correction for Outliers: Huber Loss"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The variety of possible loss functions is quite literally infinite, but one relatively well-motivated option is the [Huber loss](http://en.wikipedia.org/wiki/Huber_loss_function). The Huber loss defines a critical value at which the loss curve transitions from quadratic to linear. Let's create a plot which compares the Huber loss to the standard squared loss for several critical values $c$:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108b06f10>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "t = np.linspace(-20, 20)\n",
    "\n",
    "def huber_loss(t, c=3):\n",
    "    return ((abs(t) < c) * 0.5 * t ** 2\n",
    "            + (abs(t) >= c) * -c * (0.5 * c - abs(t)))\n",
    "\n",
    "plt.plot(t, 0.5 * t ** 2, label=\"squared loss\", lw=2)\n",
    "for c in (10, 5, 3):\n",
    "    plt.plot(t, huber_loss(t, c), label=\"Huber loss, c={0}\".format(c), lw=2)\n",
    "plt.ylabel('loss')\n",
    "plt.xlabel('standard deviations')\n",
    "plt.legend(loc='best', frameon=False);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The Huber loss is equivalent to the squared loss for points which are well-fit by the model, but reduces the loss contribution of outliers. For example, a point 20 standard deviations from the fit has a squared loss of 200, but a c=3 Huber loss of just over 55. Let's see the result of the best-fit line using the Huber loss rather than the squared loss. We'll plot the squared loss result in light gray for comparison:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108b02c90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def total_huber_loss(theta, x=x, y=y, e=e, c=3):\n",
    "    return huber_loss((y - theta[0] - theta[1] * x) / e, c).sum()\n",
    "\n",
    "theta2 = optimize.fmin(total_huber_loss, [0, 0], disp=False)\n",
    "\n",
    "plt.errorbar(x, y, e, fmt='.k', ecolor='gray')\n",
    "plt.plot(xfit, theta1[0] + theta1[1] * xfit, color='lightgray')\n",
    "plt.plot(xfit, theta2[0] + theta2[1] * xfit, color='black')\n",
    "plt.title('Maximum Likelihood fit: Huber loss');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "By eye, this seems to have worked as desired: the fit is much closer to our intuition!\n",
    "\n",
    "However a Bayesian might point out that the motivation for this new loss function is a bit suspect: as we showed, the squared-loss can be straightforwardly derived from a Gaussian likelihood. The Huber loss seems a bit *ad hoc*: where does it come from? How should we decide what value of $c$ to use? Is there any good motivation for using a linear loss on outliers, or should we simply remove them instead? How might this choice affect our resulting model?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### A Bayesian Approach to Outliers: Nuisance Parameters"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The Bayesian approach to accounting for outliers generally involves *modifying the model* so that the outliers are accounted for. For this data, it is abundantly clear that a simple straight line is not a good fit to our data. So let's propose a more complicated model that has the flexibility to account for outliers. One option is to choose a mixture between a signal and a background:\n",
    "\n",
    "$$\n",
    "\\begin{array}{ll}\n",
    "p(\\{x_i\\}, \\{y_i\\},\\{e_i\\}~|~\\theta,\\{g_i\\},\\sigma,\\sigma_b) = & \\frac{g_i}{\\sqrt{2\\pi e_i^2}}\\exp\\left[\\frac{-\\left(\\hat{y}(x_i~|~\\theta) - y_i\\right)^2}{2e_i^2}\\right] \\\\\n",
    "&+ \\frac{1 - g_i}{\\sqrt{2\\pi \\sigma_B^2}}\\exp\\left[\\frac{-\\left(\\hat{y}(x_i~|~\\theta) - y_i\\right)^2}{2\\sigma_B^2}\\right]\n",
    "\\end{array}\n",
    "$$\n",
    "\n",
    "What we've done is expanded our model with some nuisance parameters: $\\{g_i\\}$ is a series of weights which range from 0 to 1 and encode for each point $i$ the degree to which it fits the model. $g_i=0$ indicates an outlier, in which case a Gaussian of width $\\sigma_B$ is used in the computation of the likelihood. This $\\sigma_B$ can also be a nuisance parameter, or its value can be set at a sufficiently high number, say 50.\n",
    "\n",
    "Our model is much more complicated now: it has 22 parameters rather than 2, but the majority of these can be considered nuisance parameters, which can be marginalized-out in the end, just as we marginalized (integrated) over $p$ in the Billiard example.  Let's construct a function which implements this likelihood. As in the previous post, we'll use the [emcee](http://dan.iel.fm/emcee/current/) package to explore the parameter space.\n",
    "\n",
    "To actually compute this, we'll start by defining functions describing our prior, our likelihood function, and our posterior:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [],
   "source": [
    "# theta will be an array of length 2 + N, where N is the number of points\n",
    "# theta[0] is the intercept, theta[1] is the slope,\n",
    "# and theta[2 + i] is the weight g_i\n",
    "\n",
    "def log_prior(theta):\n",
    "    #g_i needs to be between 0 and 1\n",
    "    if (all(theta[2:] > 0) and all(theta[2:] < 1)):\n",
    "        return 0\n",
    "    else:\n",
    "        return -np.inf  # recall log(0) = -inf\n",
    "\n",
    "def log_likelihood(theta, x, y, e, sigma_B):\n",
    "    dy = y - theta[0] - theta[1] * x\n",
    "    g = np.clip(theta[2:], 0, 1)  # g<0 or g>1 leads to NaNs in logarithm\n",
    "    logL1 = np.log(g) - 0.5 * np.log(2 * np.pi * e ** 2) - 0.5 * (dy / e) ** 2\n",
    "    logL2 = np.log(1 - g) - 0.5 * np.log(2 * np.pi * sigma_B ** 2) - 0.5 * (dy / sigma_B) ** 2\n",
    "    return np.sum(np.logaddexp(logL1, logL2))\n",
    "\n",
    "def log_posterior(theta, x, y, e, sigma_B):\n",
    "    return log_prior(theta) + log_likelihood(theta, x, y, e, sigma_B)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now we'll run the MCMC samples to explore the parameter space:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "-c:16: RuntimeWarning: divide by zero encountered in log\n",
      "-c:15: RuntimeWarning: divide by zero encountered in log\n"
     ]
    }
   ],
   "source": [
    "# Note that this step will take a few minutes to run!\n",
    "\n",
    "ndim = 2 + len(x)  # number of parameters in the model\n",
    "nwalkers = 50  # number of MCMC walkers\n",
    "nburn = 10000  # \"burn-in\" period to let chains stabilize\n",
    "nsteps = 15000  # number of MCMC steps to take\n",
    "\n",
    "# set theta near the maximum likelihood, with \n",
    "np.random.seed(0)\n",
    "starting_guesses = np.zeros((nwalkers, ndim))\n",
    "starting_guesses[:, :2] = np.random.normal(theta1, 1, (nwalkers, 2))\n",
    "starting_guesses[:, 2:] = np.random.normal(0.5, 0.1, (nwalkers, ndim - 2))\n",
    "\n",
    "import emcee\n",
    "sampler = emcee.EnsembleSampler(nwalkers, ndim, log_posterior, args=[x, y, e, 50])\n",
    "sampler.run_mcmc(starting_guesses, nsteps)\n",
    "\n",
    "sample = sampler.chain  # shape = (nwalkers, nsteps, ndim)\n",
    "sample = sampler.chain[:, nburn:, :].reshape(-1, ndim)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Once we have these samples, we can exploit a very nice property of the Markov chains. Because their distribution models the posterior, we can integrate out (i.e. marginalize) over nuisance parameters simply by ignoring them!\n",
    "\n",
    "We can look at the (marginalized) distribution of slopes and intercepts by examining the first two columns of the sample:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\ncWbwghcAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x109805110>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(sample[:, 0], sample[:, 1], ',k', alpha=0.1)\n",
    "plt.xlabel('intercept')\n",
    "plt.ylabel('slope');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We see a distribution of points near a slope of $\\sim 0.45$, and an intercept of $\\sim 31$. We'll plot this model over the data below, but first let's see what other information we can extract from this trace.\n",
    "\n",
    "One nice feature of analyzing MCMC samples is that the choice of nuisance parameters is completely symmetric: just as we can treat the $\\{g_i\\}$ as nuisance parameters, we can also treat the slope and intercept as nuisance parameters! Let's do this, and check the posterior for $g_1$ and $g_2$, the outlier flag for the first two points:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "g1 mean: 0.63\n",
      "g2 mean: 0.39\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nz3/cVVdd5T72sY+5SqWyDSPcPoTMxdGjR92hQ4fcI4884v7617+6T3/60+706dNuZmZmG0a4u5CV\nb+4q4bB371730ksvRZ9feuml6Gjsu+bll192e/fu3bYxbhdC5sI5555++ml3+PBh1+12E4+V72WE\nzEWv13M33nijc+6cE/Lhhx92hULB3XDDDds61q1GyFyUy2U3Nzfnpqam3NTUlPvkJz/pTp8+fd4J\nh5C5OHnypPvGN77hnHNucXHRLSwsuOeee85dccUV2zrWncZQfHPTPCKbgLNnz8oll1wiZ86ckbff\nfjvVIX3q1Knz1gkbMhcvvviiLC4uyqlTp3ZolNuDkLlgfOELX5D7779/G0e4fQiZiz//+c9Sr9fl\n3XfflX//+99y4MABeeaZZ3ZoxFuHkLn42te+Jt/85jdFROTVV1+VvXv3yj//+c+dGO6W48yZM0EO\n6VC+uatODnnC3DpC5uLb3/62e+ONNyI7e6FQcE8++eRODntLEDIXFwpC5uLSSy911113nTt48KAb\nHR11hw8fdtVqdYdHvvkImYuvf/3r7otf/KKr1Wruf//7n/vOd77jLrrooh0e+ebjc5/7nHv00Ufd\na6+95srlsvvWt77lzp4965wbnm/mSXA5cuTIkWMAuypaKUeOHDly7A7kwiFHjhw5cgwgFw45cuTI\nkWMAuXDIkSNHjhwDyIVDjhw5cuQYQC4ccuTIkSPHAHLhkCNHjhw5BpALhxw5cuTIMYBdlSGdI8d7\nCa+88oq78847XblcdidPnowyc3PkOB+QC4ccOYZEq9VynU7HvfXWW+706dM7PZwcOTYVuVkpR44h\n8MILLzgRce973/vcE0884a666ir34IMPuldeeWWnh5Yjx6YgFw45cgyBN9980+3fv98559yjjz7q\nrr76anfXXXedt30kclx4yIVDjhxD4PLLL3djY2Pu/vvvd0888YTbu3evq9VqOz2sHDk2DbnPIUeO\nIfDaa6+548ePu3/961/u17/+9U4PJ0eOTUd+csiRYwjcdttt7pe//KX74Q9/6I4cOeL+/ve/u+ee\ne86dOHFip4eWI8emIO/nkCNHjhw5BpCfHHLkyJEjxwBy4ZAjR44cOQaQC4ccOXLkyDGAXDjkyJEj\nR44B5MIhR44cOXIMIBcOOXLkyJFjALlwyJEjR44cA8iFQ44cOXLkGEAuHHLkyJEjxwD+H3Sr2SvG\nSW91AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10981c0d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(sample[:, 2], sample[:, 3], ',k', alpha=0.1)\n",
    "plt.xlabel('$g_1$')\n",
    "plt.ylabel('$g_2$')\n",
    "\n",
    "print(\"g1 mean: {0:.2f}\".format(sample[:, 2].mean()))\n",
    "print(\"g2 mean: {0:.2f}\".format(sample[:, 3].mean()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There is not an extremely strong constraint on either of these, but we do see that $(g_1, g_2) = (1, 0)$ is slightly favored: the means of $g_1$ and $g_2$ are greater than and less than 0.5, respecively. If we choose a cutoff at $g=0.5$, our algorithm has identified $g_2$ as an outlier.\n",
    "\n",
    "Let's make use of all this information, and plot the marginalized best model over the original data. As a bonus, we'll draw red circles to indicate which points the model detects as outliers:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": false,
    "jupyter": {
     "outputs_hidden": false
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10982f850>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "theta3 = np.mean(sample[:, :2], 0)\n",
    "g = np.mean(sample[:, 2:], 0)\n",
    "outliers = (g < 0.5)\n",
    "\n",
    "plt.errorbar(x, y, e, fmt='.k', ecolor='gray')\n",
    "plt.plot(xfit, theta1[0] + theta1[1] * xfit, color='lightgray')\n",
    "plt.plot(xfit, theta2[0] + theta2[1] * xfit, color='lightgray')\n",
    "plt.plot(xfit, theta3[0] + theta3[1] * xfit, color='black')\n",
    "plt.plot(x[outliers], y[outliers], 'ro', ms=20, mfc='none', mec='red')\n",
    "plt.title('Maximum Likelihood fit: Bayesian Marginalization');"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The result, shown by the dark line, matches our intuition! Furthermore, the points automatically identified as outliers are the ones we would identify by hand.  For comparison, the gray lines show the two previous approaches: the simple maximum likelihood and the frequentist approach based on Huber loss."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Discussion"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here we've dived into linear regression in the presence of outliers. A typical Gaussian maximum likelihood approach fails to account for the outliers, but we were able to correct this in the frequentist paradigm by modifying the loss function, and in the Bayesian paradigm by adopting a mixture model with a large number of nuisance parameters.\n",
    "\n",
    "Both approaches have their advantages and disadvantages: the frequentist approach here is relatively straightforward and computationally efficient, but is based on the use of a loss function which is not particularly well-motivated. The Bayesian approach is well-founded and produces very nice results, but requires a rather subjective specification of a prior. It is also much more intensive in both coding time and computational time."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Conclusion... for now"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In the previous post, I discussed the philosophical differences between frequentism and Bayesianism, and showed that, despite these differences, they often give the same result for simple problems. Here we've explored one category of problem where the results begin to diverge: accounting for nuisance parameters.\n",
    "\n",
    "For Bayes' billiard ball example, we showed that a naïve frequentist approach leads to the wrong answer, while a naïve Bayesian approach leads to the correct answer. This doesn't mean frequentism is wrong, but it does mean we must be very careful when applying it.\n",
    "\n",
    "For the linear regression example, we showed one possible approach from both frequentism and Bayesianism for accounting for outliers in our data. Using a robust frequentist cost function is relatively fast and painless, but is dubiously motivated and leads to results which are difficult to interpret. Using a Bayesian mixture model takes more effort and requires more intensive computation, but leads to a very nice result in which multiple questions can be answered at once: in this case, marginalizing one way to find the best-fit model, and marginalizing another way to identify outliers in the data.\n",
    "\n",
    "So which is better, frequentism or Bayesianism?\n",
    "\n",
    "The answer probably depends on your level of expertise in frequentist and Bayesian methods, as well as the size of your problem and your available computational resources. I, like many with a Physics background, tend to lean toward Bayesian methods partly because they appeal to my desire to be able to derive anything from fundamental principles. With Bayesianism, based on algebraic manipulation of a few probability axioms, we can construct extremely flexible methods to address a wide variety of problems. Just as the conservation of mass-energy can be applied to everything from projectile motion to stellar structure, Bayes' rule and the Bayesian probability interpretation can be applied to solve virtually any statistical problem: from computing gambling odds to detecting exoplanet transits in noisy photometric data. In a Bayesian paradigm, you need not spend years memorizing and understanding obscure frequentist techniques and jargon (p-values, null tests, confidence intervals, breakdown points, etc.) in order to do such nontrivial analyses. It's a common misconception, I think: people imagine that Bayesian analysis is hard. On the contrary, many scientists use it just because it's easy!\n",
    "\n",
    "Ease and aesthetics aside, though, there's a further important reason that I sit firmly in the Bayesian camp, and that has to do with the interpretation of frequentist confidence intervals and Bayesian credibility regions within the context of scientific data. As this post is already way too long, that discussion will have to wait for [next time](http://jakevdp.github.io/blog/2014/06/12/frequentism-and-bayesianism-3-confidence-credibility/).\n",
    "\n",
    "*This post was written entirely in the IPython notebook.  You can [download](http://jakevdp.github.io/downloads/notebooks/FreqBayes2.ipynb) this notebook, or see a static view on [nbviewer](http://nbviewer.ipython.org/url/jakevdp.github.io/downloads/notebooks/FreqBayes2.ipynb).*"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
