{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Bayes Factors and Marginal Likelihood"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running on PyMC3 v3.3\n"
     ]
    }
   ],
   "source": [
    "%matplotlib inline\n",
    "import pymc3 as pm\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "plt.style.use('seaborn-darkgrid')\n",
    "from pymc3.step_methods import smc\n",
    "from tempfile import mkdtemp\n",
    "from scipy.special import betaln\n",
    "from scipy.stats import beta\n",
    "\n",
    "print('Running on PyMC3 v{}'.format(pm.__version__))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The \"Bayesian way\" to compare models is to compute the _marginal likelihood_ of each model $p(y \\mid M_k)$, _i.e._ the probability of the observed data $y$ given the $M_k$ model. This quantity, the marginal likelihood, is just the normalizing constant of the Bayes' theorem. We can see this if we write Bayes' theorem and make explicit the fact that all inferences are model-dependant. \n",
    "\n",
    "$$p (\\theta \\mid y, M_k ) = \\frac{p(\\theta \\mid \\theta, M_k) p(\\theta \\mid M_k)}{p( y \\mid M_k)}$$\n",
    "\n",
    "where:\n",
    "* $y$ is the data\n",
    "* $\\theta$ the parameters\n",
    "* $M_k$ one model out of K competing models\n",
    "\n",
    "\n",
    "Usually when doing inference we do not need to compute this normalizing constant, so in practice we often compute the posterior up to a constant factor, that is:\n",
    "\n",
    "$$p (\\theta \\mid y, M_k ) \\propto p(\\theta \\mid \\theta, M_k) p(\\theta \\mid M_k)$$\n",
    "\n",
    "However, for model comparison and model averaging the marginal likelihood is an important quantity. Although, it's not the only way to perform these tasks, you can read about model averaging and model selection using alternative methods [here](model_comparison.ipynb), [there](model_averaging.ipynb) and [elsewhere](GLM-model-selection.ipynb)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bayesian model selection\n",
    "\n",
    "If our main objective is to choose only one model, the _best_ one, from a set of models we can just choose the one with the largest $p(y \\div M_k)$. This is totally fine if all models are assumed to have the same _a priori_ probability. Otherwise, we have to take into account that not all models are equally likely _a priori_ and compute:\n",
    "\n",
    "$$p(M_k \\mid y) \\propto p(y \\mid M_k) p(M_k)$$\n",
    "\n",
    "Sometimes the main objective is not to just keep a single model but instead to compare models to determine which ones are more likely and by how much. This can be achieved using Bayes factors:\n",
    "\n",
    "$$BF =  \\frac{p(y \\mid M_0)}{p(y \\mid M_1)}$$\n",
    "\n",
    "that is, the ratio between the marginal likelihood of two models. The larger the BF the _better_ the model in the numerator (M_0 in this example). To ease the interpretation of the BF some authors have proposed tables with levels of _support_ or _strength_, a way to put numbers into words. \n",
    "\n",
    "* 1-3: anecdotal\n",
    "* 3-10: moderate\n",
    "* 10-30: strong\n",
    "* 30-100: very strong\n",
    "* $>$ 100: extreme\n",
    "\n",
    "Notice that if you get numbers below 1 then the support is for the model in the denominator, tables for those cases are also available. Of course, you can also just take the inverse of the values in the above table or take the inverse of the BF value and you will be OK.\n",
    "\n",
    "Is very important to remember that these rules are just conventions, simple guides at best. Results should always be put into context of our problems and should be accompanied with enough details that others could potentially check if they agree with our conclusions. The evidence necessary to make a claim is not the same in particle physics, or a court, or to evacuate a town to prevent hundreds of deaths. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bayesian model averaging\n",
    "\n",
    "Instead of choosing one single model from a set of candidate models, model averaging is about getting one meta-model by averaging the separate models. The Bayesian version of this weights each model by its marginal posterior probability.\n",
    "\n",
    "$$p(\\theta \\mid y) = \\sum_{k=1}^K p(\\theta \\mid y, M_k) p(M_k \\mid y)$$\n",
    "\n",
    "This is the optimal way to average models if the prior is _correct_ and the _correct_ model is one of the $M_k$ models in our set. Otherwise, _bayesian model averaging_ will asymptotically select the one single model in the set of compared models that is closest in [Kullback-Leibler divergence](https://en.wikipedia.org/wiki/Kullback%E2%80%93Leibler_divergence).\n",
    "\n",
    "Check this [example](model_averaging.ipynb) as an alternative way to perform model averaging."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##  Some remarks\n",
    "\n",
    "Now we will briefly discuss some key facts about the _marginal likelihood_\n",
    "\n",
    "* The good\n",
    "    * **Occam Razor included**: Models with more parameters have a larger penalization than models with fewer parameters. The intuitive reason is that the larger the number of parameters the more _spread_ the _prior_ with respect to the likelihood.\n",
    "\n",
    "\n",
    "* The bad\n",
    "    * Computing the marginal likelihood is, generally, a hard task because it’s an integral of a highly variable function over a high dimensional parameter space. In general this integral needs to be solved numerically using more or less sophisticated methods.\n",
    "    \n",
    "$$p(y \\mid M_k) = \\int_{\\theta_k} p(y \\mid \\theta_k, M_k) p(\\theta_k, M_k) d\\theta_k$$\n",
    "\n",
    "* The ugly\n",
    "    * The marginal likelihood depends **sensitively** on the specified prior $p(\\theta_k \\mid M_k)$ for each model.\n",
    "\n",
    "Notice that _the good_ and _the ugly_ are related. Using the marginal likelihood to compare models is a good idea because a penalization for complex models is already included (thus preventing us from overfitting) and, at the same time, a change in the prior will affect the computations of the _marginal likelihood_. At first this sounds a little bit silly we already know that priors affect computations (otherwise we could simply avoid them), but the point here is the word **sensitively**. We are talking about changes in the prior that will keep inference of $\\theta$ more or less the same, but could have a big impact in the value of the marginal likelihood."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Computing Bayes factors\n",
    "\n",
    "The _marginal likelihood_ is generally not available in closed-form except for some restricted models. For this reason many methods have been devised to compute the _marginal likelihood_ and the derived Bayes factors, some of these methods are so simple and [naive](https://radfordneal.wordpress.com/2008/08/17/the-harmonic-mean-of-the-likelihood-worst-monte-carlo-method-ever/) that works very bad in practice. Most of the useful methods have been originally proposed in the field of Statistical Mechanics. This connection is explained because the marginal likelihood is analogous to a central quantity in statistical physics known as the _partition function_ which in turn is closely related to another very important quantity the _free-energy_. Many of the connections between Statistical Mechanics and Bayesian inference are summarized [here](https://arxiv.org/abs/1706.01428)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Using a hierarchical model\n",
    "\n",
    "Computation of Bayes factors can be framed as a hierarchical model, where the high-level parameter is an index assigned to each model and sampled from a categorical distribution. In other words, we perform inference for two (or more) competing models at the same time and we use a discrete _dummy_ variable that _jumps_ between models. How much time we spend sampling each model is proportional to $p(M_k \\mid y)$.\n",
    "\n",
    "Some common problems when computing Bayes factors this way is that if one model is better than the other, by definition, we will spend more time sampling from it than from the other model. And this could lead to inaccuracies because we will be undersampling the less likely model. Another problem is that the values of the parameters get updated even when the parameters are not used to fit that model. That is, when model 0 is chosen, parameters in model 1 are updated but since they are not used to explain the data, they only get restricted by the prior. If the prior is too vague, it is possible that when we choose model 1, the parameter values are too far away from the previous accepted values and hence the step is rejected. Therefore we end up having a problem with sampling.\n",
    "\n",
    "In case we find these problems, we can try to improve sampling by implementing two modifications to our model:\n",
    "\n",
    "* Ideally, we can get a better sampling of both models if they are visited equally, so we can adjust the prior for each model in such a way to favour the less favourable model and disfavour the most favourable one. This will not affect the computation of the Bayes factor because we have to include the priors in the computation.\n",
    "\n",
    "* Use pseudo priors, as suggested by Kruschke and others. The idea is simple: if the problem is that the parameters drift away unrestricted, when the model they belong to is not selected, then one solution is to try to restrict them artificially, but only when not used! You can find an example of using pseudo priors in a model used by Kruschke in his book and [ported](https://github.com/aloctavodia/Doing_bayesian_ data_analysis.) to Python/PyMC3.\n",
    "\n",
    "If you want to learn more about this approach to the computation of the marginal likelihood see [Chapter 12 of Doing Bayesian Data Analysis](http://www.sciencedirect.com/science/book/9780124058880). This chapter also discuss how to use Bayes Factors as a Bayesian alternative to classical hypothesis testing."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Analytically\n",
    "\n",
    "For some models, like the beta-binomial model (AKA the _coin-flipping_ model) we can compute the marginal likelihood analytically. If we write this model as:\n",
    "\n",
    "$$\\theta \\sim Beta(\\alpha, \\beta)$$\n",
    "$$y \\sim Bin(n=1, p=\\theta)$$\n",
    "\n",
    "the _marginal likelihood_ will be:\n",
    "\n",
    "$$p(y) = \\binom {n}{h}  \\frac{B(\\alpha + h,\\ \\beta + n - h)} {B(\\alpha, \\beta)}$$\n",
    "\n",
    "where:\n",
    "\n",
    "* $B$ is the [beta function](https://en.wikipedia.org/wiki/Beta_function) not to get confused with the $Beta$ distribution\n",
    "* $n$ is the number of trials\n",
    "* $h$ is the number of success\n",
    "\n",
    "Since we only care about the relative value of the _marginal likelihood_ under two different models (for the same data), we can omit the binomial coefficient $\\binom {n}{h}$, thus we can write:\n",
    "\n",
    "$$p(y) \\propto \\frac{B(\\alpha + h,\\ \\beta + n - h)} {B(\\alpha, \\beta)}$$\n",
    "\n",
    "This have been coded in the following cell, with a twist we will be using the `betaln` function instead of the `beta` function, this is done to prevent underflow."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def beta_binom(prior, y):\n",
    "    \"\"\"\n",
    "    Compute the marginal likelihood, analytically, for a beta-binomial model.\n",
    "\n",
    "    prior : tuple\n",
    "        tuple of alpha and beta parameter for the prior (beta distribution)\n",
    "    y : array\n",
    "        array with \"1\" and \"0\" corresponding to the success and fails respectively\n",
    "    \"\"\"\n",
    "    alpha, beta = prior\n",
    "    h = np.sum(y)\n",
    "    n = len(y)\n",
    "    p_y = np.exp(betaln(alpha + h, beta+n-h) - betaln(alpha, beta))\n",
    "    return p_y"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Our data for this example consist on 100 \"flips of a coin\" and the same number of observed \"heads\" and \"tails\". We will compare two models one with a uniform prior and one with a _more concentrated_ prior around $\\theta = 0.5$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y = np.repeat([1, 0], [50, 50])  # 50 \"heads\" and 50 \"tails\"\n",
    "priors = ((1, 1), (30, 30))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\ndAsLC9HU1NT/94aGBuTl5Z31tfr6euTn50e7S+kGO2Yg/AV600034fbbb8fFF18sI6LlBjvmrVu3\nwu/34/rrr8ett96Kffv24f7775cV1RKDHW92djaKioowYcIEqKqKiy66CDU1NbKiWmawYz506BBK\nSkqQk5ODpKQkXHDBBdi7d6+ulimbAAACjUlEQVSsqI6xo8OiLt1FixbhL3/5CwBg//79KCgo6P/1\nevz48ejs7MTx48eh6zreeOMNLFq0KNpdSjfYMQPhsc0bb7wxLoYVIgY75mXLluHVV1/FH//4Rzz2\n2GOYOXMmvv/978uMG7XBjlfTNJSUlODIkSMAgH379sXFr9qDHfO4ceNw6NAh9Pb2QgiBvXv3YtKk\nSRLTOsOODrPkNuCHHnoIO3bsgKIouPvuu7F//35kZGTgsssuw/bt2/HQQw8BAC6//HJ86UtfinZ3\nrjDQMV988cWYP38+5s2b1//eFStWoKKiQmJaawz27xxx/Phx3HHHHXjqqackJrXGYMd79OhR3H33\n3QgEAigtLcU999wDjyf2p70PdszPPPMMNm7cCFVVMW/ePHz3u9+VHdcSe/fuxU9/+lOcOHECmqah\nsLAQS5Yswfjx423pMD57gYjIQbH/o5mIKIawdImIHMTSJSJyEEuXiMhBLF0iIgexdImIHMTSJSJy\nEEuXYo5hGPjxj3+M5cuX46qrrsKxY8dkRyIaNpYuxZwNGzagpKQEr7zyCm644Qb84Q9/kB2JaNhY\nuhRTuru7sWnTJtx4440AwvfGHz16VHIqouHTZAcgGonNmzejrq4O11xzDQCgra0NF110keRURMPH\n0qWYUllZidtuuw1r1qwBAPzgBz9AWVmZ5FREw8fhBYopbW1tSElJAQDouo63334bl1xyieRURMPH\n0qWYMmnSJOzevRsA8Nvf/haLFy9GSUmJ5FREw8dHO1JMaWtrw0033YSWlhbMnTsX995774DrWxG5\nEUuXiMhBHF4gInIQS5eIyEEsXSIiB7F0iYgcxNIlInIQS5eIyEEsXSIiB7F0iYgc9P8BrhAASlQB\nrJwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fd0a3b36588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "for a, b in priors:\n",
    "    distri = beta(a, b)\n",
    "    x = np.linspace(0, 1, 100)\n",
    "    x_pdf = distri.pdf(x)\n",
    "    plt.plot (x, x_pdf, label=r'$\\alpha$ = {:d}, $\\beta$ = {:d}'.format(a, b))\n",
    "    plt.yticks([])\n",
    "    plt.xlabel('$\\\\theta$')\n",
    "    plt.legend()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The following cell returns the Bayes factor"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5.0\n"
     ]
    }
   ],
   "source": [
    "BF = (beta_binom(priors[1], y) / beta_binom(priors[0], y))\n",
    "print(round(BF))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We see that the model with the more concentrated prior $Beta(30, 30)$ has $\\approx 5$ times more support than the model with the more extended prior $Beta(1, 1)$. Besides the exact numerical value this should not be surprising since the prior for the most favoured model is concentrated around $\\theta = 0.5$ and the data $y$ has equal number of head and tails, consintent with a value of $\\theta$ around 0.5."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Sequential Monte Carlo\n",
    "\n",
    "The [Sequential Monte Carlo](SMC2_gaussians.ipynb) sampler is a method that basically progress by a series of successive interpolated (or _annealed_) sequences from the prior to the posterior. A nice _by product_ of this process is that we get an estimation of the marginal likelihood."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/osvaldo/proyectos/00_PyMC3/pymc3/pymc3/step_methods/smc.py:491: UserWarning: Warning: SMC is an experimental step method, and not yet recommended for use in PyMC3!\n",
      "  warnings.warn(EXPERIMENTAL_WARNING)\n",
      "Argument `step` is None. Auto-initialising step object using given/default parameters.\n",
      "/home/osvaldo/proyectos/00_PyMC3/pymc3/pymc3/step_methods/smc.py:118: UserWarning: Warning: SMC is an experimental step method, and not yet recommended for use in PyMC3!\n",
      "  warnings.warn(EXPERIMENTAL_WARNING)\n",
      "Adding model likelihood to RVs!\n",
      "Init new trace!\n",
      "Sample initial stage: ...\n",
      "Beta: 0.000000 Stage: 0\n",
      "Initializing chain traces ...\n",
      "Sampling ...\n",
      "Beta: 0.096191 Stage: 1\n",
      "Initializing chain traces ...\n",
      "Sampling ...\n",
      "Beta: 0.728315 Stage: 2\n",
      "Initializing chain traces ...\n",
      "Sampling ...\n",
      "Beta > 1.: 1.999999\n",
      "Sample final stage\n",
      "Initializing chain traces ...\n",
      "Sampling ...\n",
      "/home/osvaldo/proyectos/00_PyMC3/pymc3/pymc3/step_methods/smc.py:491: UserWarning: Warning: SMC is an experimental step method, and not yet recommended for use in PyMC3!\n",
      "  warnings.warn(EXPERIMENTAL_WARNING)\n",
      "Argument `step` is None. Auto-initialising step object using given/default parameters.\n",
      "/home/osvaldo/proyectos/00_PyMC3/pymc3/pymc3/step_methods/smc.py:118: UserWarning: Warning: SMC is an experimental step method, and not yet recommended for use in PyMC3!\n",
      "  warnings.warn(EXPERIMENTAL_WARNING)\n",
      "Adding model likelihood to RVs!\n",
      "Init new trace!\n",
      "Sample initial stage: ...\n",
      "Beta: 0.000000 Stage: 0\n",
      "Initializing chain traces ...\n",
      "Sampling ...\n",
      "Beta > 1.: 1.999999\n",
      "Sample final stage\n",
      "Initializing chain traces ...\n",
      "Sampling ...\n"
     ]
    }
   ],
   "source": [
    "n_chains = 1000\n",
    "\n",
    "models = []\n",
    "traces = []\n",
    "for alpha, beta in priors:\n",
    "    test_folder = mkdtemp(prefix='SMC_TEST')\n",
    "    with pm.Model() as model:\n",
    "        a = pm.Beta('a', alpha, beta)\n",
    "        yl = pm.Bernoulli('yl', a, observed=y)\n",
    "        trace = smc.sample_smc(samples=2000,\n",
    "                               n_chains=n_chains,\n",
    "                               progressbar=False,\n",
    "                               homepath=test_folder,\n",
    "                               stage=0,\n",
    "                               random_seed=42)\n",
    "        models.append(model)\n",
    "        traces.append(trace)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5.0\n"
     ]
    }
   ],
   "source": [
    "BF_smc = models[1].marginal_likelihood / models[0].marginal_likelihood\n",
    "print(round(BF_smc))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As we can see from the previous cell, SMC give essentially the same answer than the analytical calculation! \n",
    "\n",
    "The advantage of using SMC is that we can use it to compute the _marginal likelihood_ for a wider range of models, given that we do not need an analytical expression for the _marginal likelihood_. The cost we pay is that the computations is more expensive with SMC, we should take into account that for more complex models we should need to increase the number of `n_steps` and `n_chains` for a more accurate estimation of the _marginal likelihood_."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Bayes factors and inference\n",
    "\n",
    "In this example we have used Bayes factors to judge which model seems to be better at explaining the data, and we get that one of the models is $\\approx 5$ _better_ than the other. \n",
    "\n",
    "But what about the posterior we get from these models? How different they are?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>sd</th>\n",
       "      <th>mc_error</th>\n",
       "      <th>hpd_2.5</th>\n",
       "      <th>hpd_97.5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>0.5</td>\n",
       "      <td>0.05</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.41</td>\n",
       "      <td>0.6</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   mean    sd  mc_error  hpd_2.5  hpd_97.5\n",
       "a   0.5  0.05       0.0     0.41       0.6"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pm.summary(traces[0], varnames='a').round(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>mean</th>\n",
       "      <th>sd</th>\n",
       "      <th>mc_error</th>\n",
       "      <th>hpd_2.5</th>\n",
       "      <th>hpd_97.5</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>0.5</td>\n",
       "      <td>0.03</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.44</td>\n",
       "      <td>0.57</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   mean    sd  mc_error  hpd_2.5  hpd_97.5\n",
       "a   0.5  0.03       0.0     0.44      0.57"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pm.summary(traces[1], varnames='a').round(2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We may argue that the results are pretty similar, we have the same mean value for $\\theta$, and a slightly wider posterior for `model_0`, as expected since this model has a wider prior. We can also check the posterior predictive distribution to see how similar they are."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 1000/1000 [00:02<00:00, 467.10it/s]\n",
      "100%|██████████| 1000/1000 [00:01<00:00, 589.37it/s]\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nhvspewAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7fd091c6bb00>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "_, ax = plt.subplots()\n",
    "ppc_0 = pm.sample_ppc(traces[0], 1000, models[0], size=(len(y), 20))\n",
    "ppc_1 = pm.sample_ppc(traces[1], 1000, models[1], size=(len(y), 20))\n",
    "for m_0, m_1 in zip(ppc_0['yl'].T, ppc_1['yl'].T):\n",
    "    pm.kdeplot(np.mean(m_0, 0), ax=ax, color='C0', label='model 0')\n",
    "    pm.kdeplot(np.mean(m_1, 0), ax=ax, color='C1', label='model 1')\n",
    "plt.xlabel('θ')\n",
    "plt.yticks([]);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "Summarizing, while is true that the observed data $y$ is more consistent with `model_1` than `model_0`, the posteriors distributions we got from both models are similar and hence if we use these posteriors to make predictions we will get similar results."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "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.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
