{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Chapter 6. The Haunted DAG & The Causal Terror" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!pip install -q numpyro arviz daft networkx" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import collections\n", "import itertools\n", "import os\n", "import warnings\n", "\n", "import arviz as az\n", "import daft\n", "import matplotlib.pyplot as plt\n", "import networkx as nx\n", "import pandas as pd\n", "\n", "import jax.numpy as jnp\n", "from jax import lax, random\n", "\n", "import numpyro\n", "import numpyro.distributions as dist\n", "import numpyro.optim as optim\n", "from numpyro.diagnostics import print_summary\n", "from numpyro.infer import SVI, Trace_ELBO\n", "from numpyro.infer.autoguide import AutoLaplaceApproximation\n", "\n", "if \"SVG\" in os.environ:\n", " %config InlineBackend.figure_formats = [\"svg\"]\n", "warnings.formatwarning = lambda message, category, *args, **kwargs: \"{}: {}\\n\".format(\n", " category.__name__, message\n", ")\n", "az.style.use(\"arviz-darkgrid\")\n", "numpyro.set_platform(\"cpu\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.1" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "DeviceArray(-0.6453402, dtype=float32)" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "with numpyro.handlers.seed(rng_seed=1914):\n", " N = 200 # num grant proposals\n", " p = 0.1 # proportion to select\n", " # uncorrelated newsworthiness and trustworthiness\n", " nw = numpyro.sample(\"nw\", dist.Normal().expand([N]))\n", " tw = numpyro.sample(\"tw\", dist.Normal().expand([N]))\n", " # select top 10% of combined scores\n", " s = nw + tw # total score\n", " q = jnp.quantile(s, 1 - p) # top 10% threshold\n", " selected = jnp.where(s >= q, True, False)\n", "jnp.corrcoef(jnp.stack([tw[selected], nw[selected]], 0))[0, 1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.2" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "N = 100 # number of individuals\n", "with numpyro.handlers.seed(rng_seed=909):\n", " # sim total height of each\n", " height = numpyro.sample(\"height\", dist.Normal(10, 2).expand([N]))\n", " # leg as proportion of height\n", " leg_prop = numpyro.sample(\"prop\", dist.Uniform(0.4, 0.5).expand([N]))\n", " # sim left leg as proportion + error\n", " leg_left = leg_prop * height + numpyro.sample(\n", " \"left_error\", dist.Normal(0, 0.02).expand([N])\n", " )\n", " # sim right leg as proportion + error\n", " leg_right = leg_prop * height + numpyro.sample(\n", " \"right_error\", dist.Normal(0, 0.02).expand([N])\n", " )\n", " # combine into data frame\n", " d = pd.DataFrame({\"height\": height, \"leg_left\": leg_left, \"leg_right\": leg_right})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.3" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 2000/2000 [00:01<00:00, 1291.68it/s, init loss: 62894.3672, avg. loss [1901-2000]: 112.9629]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " a 0.81 0.34 0.80 0.27 1.31 1049.96 1.00\n", " bl 2.61 2.28 2.63 -1.06 6.26 813.11 1.00\n", " br -0.59 2.28 -0.60 -4.41 2.96 805.68 1.00\n", " sigma 0.67 0.05 0.67 0.60 0.74 968.52 1.00\n", "\n" ] } ], "source": [ "def model(leg_left, leg_right, height):\n", " a = numpyro.sample(\"a\", dist.Normal(10, 100))\n", " bl = numpyro.sample(\"bl\", dist.Normal(2, 10))\n", " br = numpyro.sample(\"br\", dist.Normal(2, 10))\n", " sigma = numpyro.sample(\"sigma\", dist.Exponential(1))\n", " mu = a + bl * leg_left + br * leg_right\n", " numpyro.sample(\"height\", dist.Normal(mu, sigma), obs=height)\n", "\n", "\n", "m6_1 = AutoLaplaceApproximation(model)\n", "svi = SVI(\n", " model,\n", " m6_1,\n", " optim.Adam(0.1),\n", " Trace_ELBO(),\n", " leg_left=d.leg_left.values,\n", " leg_right=d.leg_right.values,\n", " height=d.height.values,\n", ")\n", "svi_result = svi.run(random.PRNGKey(0), 2000)\n", "p6_1 = svi_result.params\n", "post = m6_1.sample_posterior(random.PRNGKey(1), p6_1, sample_shape=(1000,))\n", "print_summary(post, 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.4" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAmMAAALvCAYAAAApusLeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAyy0lEQVR4nO3deZTXdd3//8cgmyzKIK6EAiq4oJCilpJbaCrapV2uFWbb1bfNct9/ipKloYZLuV2SWqKGZi4XJpw0JXcUF4w0WVQsUxhQEgTk8/uDM5MToGDMvJiZ2+2cTvF+f5bnvBs+c+e9TVWlUqkEAIAiWpUeAACgJRNjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTGgwc2aNSsXXHBBhgwZkv79+2e77bbL4MGDc9ZZZ2XGjBkrfN4777yTkSNH5sADD0z//v0zcODAfOlLX8rdd9/9H83z8ssv54QTTsigQYPqZrngggvy9ttvL/fx77//fkaOHJk99tgj/fr1y0EHHZT77rtvha8/ZcqUbLPNNrngggs+1nyPPfZY+vbtm759+37o41577bW6x7322mv11p166ql162r/079//wwaNCiHH354zj333DzyyCP5sN+Id9lll6Vv374ZOnTox/o6gJXTuvQAQPM2derUfPnLX86sWbPSpk2bfOITn0ibNm0yY8aM3Hrrrbnrrrty9dVXZ+edd673vDfeeCNHH310pk+fnrXWWitbbrllFi9enIkTJ+bJJ5/ME088kWHDhq3yPI8++mi+9a1vZcGCBenatWu23HLLTJ06Ndddd13GjRuXm2++Od26dav3nIsvvjjXXnttOnbsmF69emXq1Kk59thjc8UVV+Szn/3sMu9x7rnnpmvXrvnud7+7yvOtbuutt14222yzJEuj8u23384LL7yQZ555Jr/+9a+z1VZb5cILL/zI8AMajj1jQIM699xzM2vWrOywww4ZP3587r333tx111354x//mL333jvz58/PaaedtswempNOOinTp0/Plltumfvuuy+/+93vcs899+SOO+7IBhtskJtvvjl33HHHKs0yb968HHfccVmwYEGGDh2aBx98MLfffnvuv//+7LDDDnn11Vdzxhln1HvO7Nmzc+ONN6Z79+657777ctddd+WXv/xlqqqqcumlly7zHnfccUcmTpyYk046KZ06dVrl7bW67b777hk9enRGjx6dW2+9Nffee2+efPLJXHbZZenTp0+mTJmSI444Ii+88ELpUaHFEmNAg5k/f34ee+yxJMk555yTjTbaqG5ddXV1fvKTn6SqqiqvvfZapk6dWrduypQpdc8bPnx4PvGJT9St22qrrXLaaaclSS6//PJVmufmm2/O7Nmzs/nmm+e0005LmzZt6ma56KKL0rp16zzwwAOZPHly3XNefPHFvPfee/nCF75Qt8dsp512yo477pgpU6Zk3rx5dY+dN29eRowYkR133DH/9V//tUqzNab27dtn3333zW9+85t8+tOfzvz58/PDH/4w77//funRoEUSY0CDWbRoUZYsWZIk6dGjxzLr11133ay77rpJksWLF9ctnzhxYpJko402yoABA5Z53uDBg9OqVau8+uqref7551d6nnHjxiVJDjnkkKy11lr11m2yySb59Kc/nST5/e9/X7d89uzZSZYe7vug9ddfP0nyz3/+s27Z5ZdfntmzZ+ess85a6ZlKat++fX7605+mbdu2mTFjRu69997SI0GLJMaABrPOOutk4403TpI8/fTTy6yfOnVq5syZk3XWWSc9e/asW157Iv2GG2643Ndt27ZtqqurkyTPPPPMSs2yePHiuj1eO+yww3IfU7v8g69ZO//06dPrPXbatGlp3bp1unTpkmTpRQG/+tWvcsQRR2TrrbdeqZnWBOuvv34GDx6cJHnggQfKDgMtlBgDGtQPf/jDJMnpp5+e3//+96mpqck777yThx56KN/97ndTVVWVk046Ke3atat7TufOnZMsPYl/eRYuXJiampokS6NoZcycOTOLFi1Ksvy9dB9c/sErPLfaaqust956GTNmTB5++OHMmzcv119/ff785z9n4MCBdXOfd9556dSpU93X25TsuOOOSZLnnnuu8CTQMrmaEmhQBx98cDp06JCf//znOfbYY+ut69u3b66++ursvvvu9ZZvt912SZK///3vefbZZ7P99tvXWz9+/Pi6w59z585dqTk++LjaQ6P/bp111lnmsWuvvXaOP/74nHHGGfnqV79at7xDhw459dRTkyRjx47NI488kvPOO6/utRctWpSampp06dIlbdu2XakZl6cxrnKsPZev9pAs0LjEGNCgKpVKXn311cyZMydrrbVWvVtbvPTSS7n11luz/fbb1x3uS5L+/ftn2223zeTJk3PqqafmiiuuSK9evZIsPYT44x//uO6x77333krNsXDhwrr/XXvi/r+rjaZ/f81DDz00G2ywQW6//fbMnj07PXv2zDHHHJPevXtn/vz5ufDCC9OvX78ceuihqVQq+dnPfpYbbrgh7777bjp06JChQ4fmuOOOS1VV1UrN+kErOqRa+zWtyjlzK9KhQ4ck9c9/AxqPGAMa1Nlnn51bbrkln/zkJ/OrX/2q7srIWbNm5Ywzzsi4cePyyiuv5Le//W29k+pHjBiRo48+Oi+//HIOOOCAbLrpplm0aFFmzpyZddZZJ3vttVfuv//+upD4KB/cO7Vo0aJ6h0Vr1Qbb8tbtvvvuy+zBS5Irr7wyf/vb3/Kzn/0srVq1ys9//vNceeWV2WuvvfK5z30u9913X6666qqsvfba+fa3v71Ss37Q6NGjV7jutddeW+59zlbVu+++myRrxK04oCVyzhjQYKZMmZJbb701bdq0ySWXXFLvFhXrrbdeRowYkerq6vzlL3/J2LFj6z23d+/e+e1vf5ujjz463bt3z8yZMzN//vwcdNBBuf322+vC4d9v0LoiHzw0uaJDm7UXDqzoMOa/e+WVV3LdddflkEMOSf/+/bNo0aKMGjUqm222WX7+85/nkEMOyRVXXJHNNtsso0aNqnfF6Jrk9ddfT5J07dq18CTQMokxoMFMnDgxlUolPXv2rLsq8YM6depUdz7Y8g63rb/++jnjjDMyfvz4PP/883nkkUcyYsSI9OjRo+7x22677UrN0r1797rDk6+++upyH1O7vPaO9R/lRz/6Udq1a5cTTzwxydKrQ99+++3stttuadVq6cdrq1atsttuu2Xu3LkrfbFBY6u9lci/n5sHNA4xBjSYlTkHqfbO+yt77leSvPTSS5k2bVratWuXXXfddaWe07p162yzzTZJkqeeemq5j6ld3r9//498vfvvvz8PPPBAjj322Lp7kNUe7uvYsWO9x9b+eUW/+7Kkf/zjH/nDH/6QJNljjz0KTwMtkxgDGkztvcOmT5+ev/3tb8usnzdvXt3tFD54n7EPU6lUctFFFyVJDjrooJU+pJgk++yzT5Lkt7/97TJ3m3/99dfzyCOPJEn23XffD32dhQsX5vzzz0+fPn3yxS9+sW557d6/V155pd7ja/9ce2+0NcWCBQty8sknZ+HChenZs2c+97nPlR4JWiQxBjSY3XbbLdXV1Vm0aFGOO+64vPbaa3XrZs2alRNPPDE1NTVp165d9ttvv3rPffLJJ/PII4/U+52VNTU1Oe2003L//fenW7duOeGEE5Z5z3vvvTd77713jjrqqGXWHXXUUamurs7LL7+cH//4x3X3HaupqckJJ5yQxYsXZ/fdd0+/fv0+9Ou65ppr8sorr+Sss85K69b/ug5qww03zMYbb5z7778/U6ZMSZL85S9/yf3335/1119/pYOzoS1YsCDjxo3LYYcdlkceeSQdOnTIyJEjl/mtBEDjcDUl0GA6duyYCy64IN///vfz9NNPZ999902PHj3SunXrzJgxI4sWLUrr1q0zbNiwZe62//zzz+fHP/5xOnbsmE984hOpVCqZOnVqFi9enA033DDXXnvtck84f/fddzNz5szlztOpU6dccskl+da3vpUbb7wx99xzTzbeeONMnTo18+fPT/fu3XP++ed/6Nf0+uuv55prrsmQIUOy884711tXVVWV733veznjjDNy6KGHplevXpk+fXoWLlyY7373u3XnkTWmBx98sC5MlyxZkrlz5+a1116rC9Gtt946F154Yfr06dPoswFLiTGgQe2xxx753e9+l1GjRuXRRx/N66+/nkqlkg022CADBw7MV77yleWehL/LLrvk4IMPzqRJk+pOrN98882z77775phjjvnYt2H49Kc/ndtuuy2/+MUv8uijj+bFF1/MhhtumH322Sff/va3P/KwZ+0vNz/llFOWu/7QQw/Ne++9l+uvvz7Tpk3LJptskq9+9avL3VPXGGbNmpVZs2YlWXrLjs6dO2ebbbZJv379ss8++9T9Pk6gnKrKB48BAADQqJwzBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBbvq6kmpqakqPsFLWXXfdzJ07t/QYzZ7t3Dhs58ZhOzcO27lxrGnbeWV+J609Y81MiV+30hLZzo3Ddm4ctnPjsJ0bR1Pczk1vYgCAZkSMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgoNalBwBoCqZNr2TmzKR796RXz6rS4wDNSIuJsYULF+aWW27JAw88kL/+9a+ZNWtWOnfunB133DHf+c53ss0225QeESikZk5lhevmvl3JiIuSSc/8a9mA/pWceEKy7jorjrLqLoINWDktJsbmzp2b888/PwMHDswee+yRddZZJ6+++mr+8Ic/5MEHH8yvfvWrbL/99qXHBP4D8+evOKo+zEEHr/h5rVolHTsm555Tlf7bJc88l/z0okqOPiZZsmTFzxs3dtVmWHtt8QYtVYuJsXXXXTcPPPBANtxww3rLX3rppRx++OG55JJLMmrUqELTAavDPvt/vBj7MEuWJCedUJW991waS3vvmVQqydnDPvy9VnWWCQ+IMWipWswJ/G3btl0mxJJkyy23zC677JInnngiixYtKjAZsKbrv139Pw+wEx1YjVrMnrEk+fOf/5xrr702EydOzFtvvbVMfNXU1GSDDTYoNB3wnxo39uPtXfqovVjPPLd0j1itSc823CxAy9NiYuypp57KV77ylSTJbrvtlp49e6ZDhw6pqqrK+PHjM2XKlCxcuLDwlMB/4uOed3XXHSted9bZlVz8s0oqlaV7xCY9m1wyspIB/ZPzhq34/ZwDBqysFhNjV155ZRYuXJibbropO+64Y711kyZNKjMUsEb4sCsfhw9Lhg2v1DtHbKeBydlnVqWLKyaB1aDFxNgrr7ySLl26LBNi8+fPzwsvvFBoKmBN16VLVS4ZUeU+Y0CDaTEn8Hfv3j1z587NSy+9VLfs/fffzwUXXJDZs2cXnAxoCnr1rMqg3aqEGLDatZg9Y1/+8pczYcKEfPGLX8z++++ftm3b5vHHH88bb7yRnXfeOY8//njpEQGAFqjF7Bnba6+9cumll6ZHjx658847c/fdd6d3794ZM2ZMunfvXno8AKCFqqpUKqv/LonNUE1NTekRVkp1dXWTmbUps50bh+3cOGznxmE7N441bTtXV1d/5GNazJ4xAIA1kRgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDACioWcbYY489lr59++ayyy5bqccPHTo0ffv2beCpAACW1SxjDACgqRBjAAAFtS49AAAtx7TplcycmXTvnvTqWVV6HFgjNPsYe+KJJzJy5MhMnjw5bdq0yWc+85mcdNJJ2WijjUqPBrQwNXMqpUdYrkplSebMbdjZ5r5dyYiLkknP/GvZgP6VnHhCsu46LSPKlredq7u0jK+dD9esY2zSpEm56qqrsueee2bo0KGZPHly7r777kycODFjxoxJt27dSo8IDWr+/DXzh//Kateu0uS/hg866OA19WupafB3aNUq6dgxOfecqvTfLnnmueSnF1Vy9DHJkiVr6nZZ3ZbdzuPGFhijmVvVz4211y4fxM06xiZMmJDhw4fnsMMOq1t2+eWX57LLLsvFF1+c888/v+B00PD22b+p/5CbXXoAVpMlS5KTTqjK3nsu/cG3955JpZKcPaypf4/+Z5r+39E10ap9bkx4oHyMNesT+Hv16pVDDz203rJvfOMb6dq1a+65554sXLiw0GQALU//7er/ecD2ZeaANU2z3jO2ww47pKqqfvG2b98+2267bR566KFMnz49ffr0KTQdNLxxY8v/i+8/0aVLdebMafhDaI2lpe8Feea5pXvEak16ttgoa4ym/nd0TdQUPzeadYytt956y11ee67YO++805jjQKNbE86F+E906FCV995r2l/DB911R+kJlq/Lul0yZ+6cBn2Ps86u5OKfVVKpLN0jNunZ5JKRlQzon5w3rPn8f/xhlredm/rf0TVRU/zcaNYxNmvWrOUuf+utt5IknTt3bsxxgBZuTb1yrrq61TJHEVa34cOSYcMr9c4R22lgcvaZVemyhm6X1a0xtjNNU7OOsaeeeiqVSqXeN/+CBQsyefLktG/fPj179iw3HEAL0qVLVS4ZUeU+Y7AczfoE/mnTpmXMmDH1ll177bWZPXt2hgwZkrZt2xaaDKBl6tWzKoN2qxJi8AHNes/YoEGDMmzYsPzxj39M7969M3ny5EyYMCEbb7xxjj/++NLjAQA07z1jAwYMyKhRo1JTU5Mbbrghzz77bIYMGZLRo0e74SsAsEaoqlQqLfta65VUU9M0LpOtrq5uMrM2ZbZz47CdG4ft3Dhs58axpm3n6urqj3xMs94zBgCwphNjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgIKaTYw99thj6du3by677LLSowAArLRmE2MAAE2RGAMAKKh16QGApmPa9Epmzky6d0969awqPQ5As9AsY+yJJ57IyJEjM3ny5LRp0yaf+cxnctJJJ2WjjTaqe8zee++dJLnjjjty6aWXZty4cXnzzTczfPjwfOELXyg1Omu4mjmVJEmlsiRz5lYKT9N45r5dyYiLkknP/GvZgP6VnHhCsu46DRdla/p2ru4iSIH/XLOLsUmTJuWqq67KnnvumaFDh2by5Mm5++67M3HixIwZMybdunWre+zChQvzla98Jf/85z+z1157pU2bNllvvfWKzD1//ur5gdOuXWW1vRbLOujg2m1bU3SOxtaqVdKxY3LuOVXpv13yzHPJTy+q5OhjkiVLGvL7bc3ezuPGlp5g9WhKnxtrry2AaX6aXYxNmDAhw4cPz2GHHVa37PLLL89ll12Wiy++OOeff37d8jfffDN9+/bN6NGj0759+xLj1tln/9X1QTh7Nb0O/MuSJclJJ1Rl7z2X/iDce8+kUknOHtY0foA3lNX397a0pvO5MeEBMUbz0+xO4O/Vq1cOPfTQesu+8Y1vpGvXrrnnnnuycOHCeutOOumk4iEGTUH/7er/ecD2ZeYAaG6a3Z6xHXbYIVVV9f/l1L59+2y77bZ56KGHMn369PTp0ydJ0q5du/Tt27fEmMsYN3b1/GuvS5fqzJmzZh/aacqaz56QVffMc0v3iNWa9GyxUdYYq+vvbWk+N6CsZhdjKzrnq/ZcsXfeeafeY/893EpZXedBdOhQlffeWzO+puborjuW/neXdbtkztw5JUdpVGedXcnFP6ukUlm6R2zSs8klIysZ0D85b1jDfb+t6du5uZy/5HMDymp2MTZr1qzlLn/rrbeSJJ07d65btqaEGE1H7dVz1dWtWtT3z/BhybDhlXrniO00MDn7zKp0acArClvadgZapmYXY0899VQqlUq9D/AFCxZk8uTJad++fXr27FluOGiiunSpyiUjqtxnDKABNLsT+KdNm5YxY8bUW3bttddm9uzZGTJkSNq2bVtoMmj6evWsyqDdqoQYwGrU7PaMDRo0KMOGDcsf//jH9O7dO5MnT86ECROy8cYb5/jjjy89HgBAPc1uz9iAAQMyatSo1NTU5IYbbsizzz6bIUOGZPTo0fVu+AoAsCaoqlQqLfda/VVQU9M0Lvuurq5uMrM2ZbZz47CdG4ft3Dhs58axpm3n6urqj3xMs9szBgDQlIgxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCxBgAQEFiDACgIDEGAFCQGAMAKEiMAQAUJMYAAAoSYwAABYkxAICCGiTG+vbtm6FDhzbESwMANCv2jAEAFNS6IV70//7v/7L22ms3xEsDADQrDRJjm2++eUO8LECDmza9kpkzk+7dk149q0qPA7QAqxxjv//973PjjTfm5Zdfzrx589K1a9dsscUWOeqoozJ48OAkS88Z23nnnXPjjTfWe+5rr72WESNG5OGHH86iRYuy7bbb5gc/+EEeffTRXH755bnhhhuyyy67JEkee+yxHH300fne976X3XbbLZdcckmef/75tGvXLvvtt19OPfXUtG/fPg8++GB+/vOfZ8qUKenQoUMOOeSQHH/88VlrrbXq3vedd97J6NGj8+CDD2b69OmZM2dOunTpkl133TXf+973summm/4n2xBoBubMqeSc8yp5cuK/lg3csZJzzqpKly6iDGg4q3TO2E033ZRjjz0206dPzz777JOvfvWr2XXXXfP3v/8948eP/9DnvvHGGznyyCMzduzYDBgwIEOHDk11dXW+9rWv5Zlnnlnh85555pkcc8wx6dy5c4488shssskmGT16dM4888yMHTs23//+97PxxhvniCOOSOfOnXPttdfm6quvrvcaL7/8ci699NK0a9cu++yzT44++uj069cvd999dw477LDMnDlzVTYD0Az9f8Mq+evLybnnVOV3t1Xl3HOq8teXk2HDK6VHA5q5VdozNmbMmLRp0yZ33nlnunbtWm9dTU3Nhz53xIgRefPNN3PyySfn61//et3y22+/PaeddtoKn/fQQw/liiuuqNvrtmjRovz3f/937r777kyYMCE33nhjtt9++yTJ97///ey777755S9/mW9+85tp3Xrpl7f55ptnwoQJ6dKlS73XfvTRR/PVr341v/jFLzJ8+PCV3g5A8zJteiVPPb00xPbec+lesL33TCqV5OxhlUybXnHIEmgwq3w1ZZs2beoi54Oqq6tX+JyFCxfm3nvvTbdu3Za55cUhhxyS3r17r/C5O++8c12I1b7/5z73uVQqley11151IZYknTp1yp577pk5c+bk73//e93yzp07LxNiSfKpT30qW2yxRR5++OEVvj/Q/NXuHO+/Xf3lA7avvx6gIaxSjO2333559913c+CBB+aCCy7I/fffn7fffvsjnzd16tQsXLgw/fr1S9u2beutq6qqyoABA1b43G222WaZZRtssEGSZOutt15m3frrr59k6WHRD3rsscfyne98J4MGDcq2226bvn37pm/fvnnxxRfzj3/84yO/BqD56t596X8/81z95ZOerb8eoCGs0mHKb37zm6murs7o0aMzatSoXHfddWndunV23333nH766enRo8dynzdv3rwkWebQZq1u3bqt8D07deq0zLLak/OXt652r93ixYvrlo0dOzbHHXdcOnTokEGDBqV79+5Ze+21U1VVld/+9rfOGYMWrlfPqgzcsZKLf1ZJpbJ0j9ikZ5NLRlay00BXVQINa5VirKqqKocddlgOO+yw1NTUZOLEibn77rszduzYzJgxI3fddVe9qxhr1UbT7Nmzl/u6b7311scYfeVdfvnladeuXW6//fb07Nmz3rp77rmnQd8baBrOOasqw4ZXcvawf52wv9PA5OwzhRjQsD72fcaqq6szePDgDB48ODU1NXn00UczY8aM5Z7/1bt377Rt2zaTJ0/OwoUL6x2qrFQqH3o15erwyiuvZMstt1wmxN544428+uqrDfreQNPQpUtVLhlR5T5jQKNbpXPGHnrooXqH/5KlVzfOnTs3SdK+ffvlPq9t27b53Oc+lzfffHOZe4/dcccdefnll1dljFW2ySabZMaMGfX2wL333ns555xzlvl6gJatV8+qDNqtSogBjWaV9owdd9xxad++fXbcccdssskmWbx4cR5++OH89a9/zQEHHJBNNtlkhc894YQT8sgjj+TCCy/MY489lq233jrTpk3L/fffn8985jN56KGH0qpVw/yqzKFDh+a8887LwQcfnP32269u7kqlkq222ipTpkxpkPcFAPgoq1Q/xx9/fLbbbrs899xz+fWvf50777wzHTt2zLnnnpuf/vSnH/rcjTfeODfffHP222+/PPXUU7n++usza9asXHfdddlss82SLP+E/NXhS1/6UoYNG5YuXbrk1ltvzfjx47PTTjvl5ptvzjrrrNMg7wkAsDKqKpVK8dtLH3XUUZk0aVKefPLJdOzYsfQ4y/VRN7VdU1RXVzeZWZsy27lx2M6Nw3ZuHLZz41jTtvOH3Ye1VsMcF1yB5d3P684778xTTz2VXXfddY0NMQCAhvKxr6b8OA466KBsvfXW2WKLLdKqVav8+c9/zuOPP56OHTvm5JNPbsxRAADWCI0aY0ceeWT+8Ic/5Pnnn8/8+fNTXV2dAw88MN/5zney+eabN+YoAABrhEaNseOOOy7HHXdcY74lAMAarVHPGQMAoD4xBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFCTGAAAKEmMAAAWJMQCAgsQYAEBBVZVKpVJ6CACAlsqeMQCAgsQYAEBBYgwAoCAxBgBQkBgDAChIjAEAFNS69AA0nkmTJuWoo47KkiVLcsIJJ+R//ud/So/U5L377rsZN25c/vCHP2TKlCn529/+lrZt22arrbbKkUcemQMPPLD0iE3Os88+m8suuyyTJk3KokWLssUWW+QrX/lKDjrooNKjNQtvvPFGxo4dmwcffDBTp07NW2+9lXXXXTc77LBDvvGNb6R///6lR2y2rrnmmowYMSJJcsstt2TAgAFlB2pmxo0bl5tuuikvvPBC5s+fn27dumXAgAE56aSTsvHGG5ce70OJsRZiwYIFOfXUU9O+ffu8++67pcdpNp588smcfPLJ6dKlSz796U9n3333zaxZszJu3LiccMIJefrpp3PWWWeVHrPJeOyxx/L1r389bdq0yZAhQ9K5c+fcd999OfHEEzNz5sz8v//3/0qP2OTdeOONueaaa7Lppptm1113zXrrrZcZM2Zk/PjxGT9+fC666KIccMABpcdsdl5++eVceuml6dChg8/g1axSqeTss8/OLbfckk033TQHHHBAOnbsmH/84x954oknMnPmzDU+xtz0tYX48Y9/nDFjxuTrX/96Ro4cac/YajJlypS89NJL2W+//dKmTZu65W+99VYOP/zwzJw5M7/5zW+y/fbbF5yyaVi8eHH233///P3vf88tt9ySbbbZJkkyb968HHnkkZk2bVruueee9OzZs+ygTdx9992Xrl27ZuDAgfWWP/nkkznmmGPSsWPHPPTQQ2nbtm2hCZuf999/P0cccUSqqqrSs2fP3HnnnfaMrUY33HBDfvSjH+VLX/pSzjjjjKy11lr11i9evDitW6/Z+56cM9YCTJw4MTfccENOOeWUbLTRRqXHaVa22mqrHHTQQfVCLEm6deuWI444IknyxBNPlBityXn00Ufzyiuv5MADD6wLsSTp1KlTvvOd72Tx4sW5/fbbC07YPOy7777LhFiSDBw4MLvsskvmzJmTv/zlLwUma76uueaaTJkyJeeff/4yocB/ZsGCBbniiivSo0ePnH766cvdvmt6iCVirNmbP39+TjvttOy88845/PDDS4/TotR+APjwXTmPP/54kmTQoEHLrNttt93qPYaGUfs92xR+eDUVL774Yi6//PJ8+9vfzpZbbll6nGbnT3/6U+bMmZPBgwdnyZIlue+++3L11Vdn9OjRmTFjRunxVpq/cc3cRRddlDfffDP/+7//W3qUFuX999/PHXfckaqqquy6666lx2kSpk+fniTZbLPNllm37rrrprq6ukl9uDY1r7/+eh5++OGsv/766dOnT+lxmoXFixfn1FNPzeabb+60kAby/PPPJ1n6j97Pf/7zmTZtWt26Vq1a5Zhjjskpp5xSaryVZs9YM/b444/nV7/6VY477rj06NGj9DgtysiRI/Piiy/mC1/4gh9sK2nevHlJks6dOy93fadOnfLOO+805kgtxqJFi3LyySdn4cKFOfHEE+3NXU2uvPLK/OUvf8n555+/zKkMrB6zZs1KkowaNSqdOnXKb37zmzz11FP59a9/nZ49e+a6667LTTfdVHjKj2bP2Bqu9hyOlXXDDTdkl112ybvvvpvTTz89AwYMyJe//OWGG7CZ+LjbeXluueWWXHXVVdlmm21yxhlnrKYJoWEsWbIkp59+ep544okcfvjhOfjgg0uP1CxMmTIlV155Zb72ta9l2223LT1Os1V7DWKbNm1yxRVXZMMNN0yy9BzISy+9NJ///OczatSofPGLXyw55kcSY2u4Aw88MP/85z9X+vHdunVLklxyySX5xz/+kauvvjqtWtkB+lE+7nb+d7fddlvOPvvs9OnTJ9ddd106duy4ukZs9jp16pQkK9z7NW/evBXuNePjqVQqOfPMM3PnnXfm85//fIYNG1Z6pGbjlFNOSY8ePfL973+/9CjNWu3nRr9+/epCrNaWW26ZHj16ZMaMGXn77bezzjrrlBhxpYixNdzHvUfVlClT8t5772X//fdf7vqLLrooF110UY4++mh7b/Lxt/MHjRkzJmeddVa22GKLXH/99amurl4Nk7UctbesmDFjRvr161dv3dy5c1NTU5NPfvKTBSZrnpYsWZIzzjgjt99+ew488MD85Cc/8Q+31WjKlClJku22226562uvtr7iiisyePDgRpuruendu3eSFZ/eULt8wYIFYozGt8cee2TTTTddZvmMGTPyxBNPZLvttkvfvn39cFtNxowZkzPPPDObb755rr/++nTt2rX0SE3OTjvtlKuuuioTJkzIkCFD6q3705/+lCTZeeedS4zW7HwwxA444IBceOGFzhNbzQ499NDlLn/yySczffr07L333unatWu6d+/eyJM1L7Wni0ydOnWZdYsWLcorr7ySDh06rPmfyRValNtuu63Sp0+fylVXXVV6lGbj1ltvrfTt27ey//77V958883S4zRZixYtqnz2s5+t9OvXr/LCCy/ULX/nnXcqQ4YMqWyzzTaVqVOnFpyweXj//fcrp556aqVPnz6VY489trJo0aLSI7Uop5xySqVPnz6Vp59+uvQozcbXvva1Sp8+fSq33nprveWXX355pU+fPpUTTzyx0GQrz54x+A888sgjOeuss1KpVDJw4MCMHj16mcdsvfXWDkOshNatW2f48OH5xje+kS9+8Ys58MAD06lTp9x333157bXX8sMf/jC9evUqPWaTd8UVV+T2229Phw4d0rNnz/ziF79Y5jGDBw/O1ltvXWA6WHVnn312jjzyyJx55pkZP358evfunRdeeCGPPvpounfvnpNPPrn0iB9JjMF/4G9/+1vd1Ty33HLLch9zyCGHiLGV9KlPfSo33XRTLr300owdO7buF4X/4Ac/yOc///nS4zULM2fOTLL0l9xfeeWVy31M9+7dxRhNxqabbprbbrstl156aR566KH86U9/Srdu3fKlL30p3/3ud7PeeuuVHvEj+d2UAAAFuXQGAKAgMQYAUJAYAwAoSIwBABQkxgAAChJjAAAFiTEAgILEGABAQWIMAKAgMQYAUJAYAwAoSIwBABT0/wPPHGHWkTsZZwAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "az.plot_forest(post, hdi_prob=0.89)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.5" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtsAAAHrCAYAAAAe4lGYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAA9hAAAPYQGoP6dpAABnfklEQVR4nO3deZTkdX3v/+e3vlXVVV3VS/W+TPfMMMOsbBI2wd/V4ByiOJJIjBI16jW4ROONSQggy+V4j1eIiTcRxYAYCRJIEMWEmOsNcPXGiCAgEAVmEZh9enrfu9ZvfX5/vKdnYYZhpnuqq7v69ThnTk9XVXd/+nMG5tWfeX/eb8855xARERERkZMuVO4FiIiIiIhUKoVtEREREZESUdgWERERESkRhW0RERERkRJR2BYRERERKRGFbRERERGRElHYFhEREREpEYVtEREREZESCZd7AfPR8PDwnHyduro6RkdH5+RrVRrt3exo/2ZOezdz2ruZ097NjvZv5rR3x5ZKpV73NTrZLqNQSNs/U9q72dH+zZz2bua0dzOnvZsd7d/Mae9mTzsoIiIiIlIiCtsiIiIiIiWisC0iIiIiUiIK2yIiIiIiJaKwLSIiIiJSIgrbIiIiIiIlorAtIiIiIlIiCtsiIiIiIiWisC0iIiIiUiILZlz7P//zP/Pzn/+c559/nq1bt5LP57n55pu5/PLLj/r6iYkJvvKVr/Dwww/T399Pc3Mzl1xyCZ/+9KdJJpNzvHoRERERWYwWTNj+8pe/zJ49e0ilUrS0tLBnz57XfO3U1BQf+MAH2LRpExdddBHveMc72Lx5M3/3d3/Hz372M+677z6qq6vncPUiIiIishgtmDKSz3/+8/zwhz/kiSee4Iorrjjma7/xjW+wadMmrrzySr75zW9y1VVX8Y1vfINPfepTbNq0iW984xtztGoRERERWcwWTNi+8MIL6ezsfN3XOed44IEHqK6u5lOf+tRhz3384x+nrq6O73znOzjnSrVUERERERFgAYXt47V9+3b6+vo4++yzjygVqaqq4pxzzqG3t5cdO3aUaYUiIiIislgsmJrt4zUdopctW3bU55cuXXrgda/1mrq6OkKhufk5JJVKzcnXqUTau9nR/s2c9m7mtHczp72bHe3fzGnvZqfiwvb4+DjAa3YcmX58+nVHMzo6evIXdhSpVIrh4WEAgsARBOD74PvenHz9hezQvZMTp/2bOe3dzGnvZk57Nzvav5nT3h3b8fwgUnFheyHKZByDQ46gAH4YGhsgFlPgFhEREVnoKq5mu6amBrA+20cz/fj068otCCxo5/NQVQX5PBa8A13gFBEREVnoKi5sT9dkb9++/ajPT9d0T7+u3IIAggLEY1Y+Eo/Z+0FQ7pWJiIiIyGxVXNhetmwZLS0tPPPMM0xNTR32XDab5emnn6alpWXehG3ft9KRdMZOudMZe9/3y70yEREREZmtigvbnufxO7/zO0xNTXHbbbcd9twdd9zB6Ogov/M7v4PnzY+aaN/3aGzwiEQgm4VIBBobPF2SFBEREakAC+aC5AMPPMDPf/5zALZu3XrgsSeffBKADRs2sGHDBgCuvPJKfvjDHx6YJLl+/Xo2b97Mj3/8Y9auXcuVV15Znm/iNcRiHm2tqBuJiIiISIVZMGH75z//Od/73vcOe+yZZ57hmWeeAaCzs/NA2K6uruaee+7hq1/9Kv/2b//Gk08+SVNTEx/+8If5wz/8wyOG3cwHvu+pdERERESkwnhOc8uPMFf9JNW7cua0d7Oj/Zs57d3Mae9mTns3O9q/mdPeHdvx9NmuuJptEREREZH5QmFbRERERKREFLZFREREREpEYVtEREREpEQUtkVERERESkRhW0RERESkRBS2RURERERKRGFbRERERKREFLZFREREREpEYVtEREREpEQUtkVERERESkRhW0RERESkRBS2RURERERKRGFbRERERKREFLZFREREREpEYVtEREREpETC5V6ALBxB4AgC8H3wfa/cyxERERGZ9xS25bhkMo7BIUdQAD8MjQ0QiaDwLSIiInIMCtvyuoLAgnY+D/EYpDOwt8cRiYArHgzfsZgCt4iIiMihVLMtrysIIChY0PZ9j2gUBgchk4GqKsjnsVPvwJV7qSIiIiLzisK2vC7ft9PrdMZOuScnwQGJagvf8ZiF8SAo90pFRERE5heFbXldvu/R2OARiUA2C7EYNDdCLm/hO52xMO775V6piIiIyPyimm05LrGYR1vrwQuR06Uj2axdlGxs8HRJUkRERORVFLbluPm+d+D02vc5LHwraIuIiIgcSWFbZuzQ8H006sstIiIii53CtpSE+nKLiIiIKGxLCagvt4iIiIhRNxI56dSXW0RERMQobMtJd2hf7lzOMTICQfHYfbmDwJHLKYCLiIhIZVEZiZx01pcbenocu/da6QjA+ATUJB2TU9are/py5dHqu1ViIiIiIpVAYVtKIhKBcARS9ZBIwPg4DI/YLz8EjY1WThIERXp6IJeDmlp7OzjkaGvVJUoRERFZ+BS2pSSCwE60a2ssNNckHcMj9n59vYXqnh5HJguvvAJ+xKZSNjcdLDHRREoRERFZ6BS2pSQOrduOx6x0xA9Z0I5GPHCOnbuhkLfXBXnoG7DT7s5OBW0RERGpDLogKSVhddsekQhks1aj3dhoJ9pBYOHbFa07SVsrJGsAB85BXa1KSERERKQy6GRbSiYW8w4b6T7d8m86fDc3w+DQwTaBYR862iGRUNAWERGRyqCwLSV16Eh33+eI8B0KOQYHAc+Cdmurp1NtERERqRgVG7adczzyyCPcc889bNu2jfHxcdra2jj//PP56Ec/SldXV7mXuCi9Onwv7Yb2NuutHY0qaIuIiEhlqdiw/ed//ufcddddNDc389a3vpVkMsnmzZv59re/zfe//33+8R//kVWrVpV7mYue73vE4wrYIiIiUpkqMmz39/dz991309nZyUMPPUQymTzw3N/93d9x8803c9ddd3HzzTeXcZVyMgSBO1CWolNxERERmW8qshvJnj17KBaLnH322YcFbYC3vOUtAAwNDZVhZXIyZTKOfb2OffvsbSajUe8iIiIyv1Rk2F66dCmRSIRnnnmGiYmJw57793//dwAuuOCCcixNTpIgsBHv+by1D5zudBIECtwiIiIyf1RkGUkqleKP//iP+eIXv8ill17KxRdfTCKRYOvWrTz++OO8973v5QMf+EC5lymzEAQHWwb6vkc85piagnTaEY+rpERERETmB885V7FHgf/yL//Cf//v/52pqakDj73hDW/gqquu4pxzznnNjysWi4RCFXnoXzGCwNHTUySXc8TjHsPDRSanHKl6j1gsRH29t7+7iYK3iIiIlE/Fhu2vfe1rfO1rX+MP//AP+a3f+i1qa2vZtGkTt9xyCy+88AJ//dd/zSWXXHLUjx0eHp6TNaZSqTn7WpUmlUrR0zPE4JAjl4XhEUgkoL4ORkZhchIaUhCJ2mORiIL3ofRnb+a0dzOnvZs57d3saP9mTnt3bKlU6nVfU5HHt48//jhf/vKXef/7388nPvEJ2traqK6u5td+7de44447qKqq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Ue/NzbBrN4RDdjFydBRiURjK2yAc56BuFMDR0a4LkyIiIvOBwrbIPJVIhFi61BEE1lfb86C5CXJ52LcPxids6uTAkJ1w+yGIRmxATjLhSKWODNtBcPDziYiISOkpbIvMY9NtAoMA/LAjn7epk85BSzMMj1j4Hh6AqhhseQlqElAMYM2aIvV1VpoCkMk4BoccQQHy+SK+71RuIiIiUmIK2yILgO97NDZYT+1c1npyx+NQKMLYOARFCBy4op1w/+IXMDAAHR1w6soi9fUeg0MW1uMxG5AzlVZ/bhERkVKr+LD9yCOPcN999/Hiiy+STqdpamrirLPO4s/+7M9ob28v9/JEjtuh0ydbWhwDg1ZO0pCy2u2+ASjkoafHTruTNVDcDWNjcOYZjkwa4tUWruNxj/Fx9ecWEREptYoN2845brrpJu6//366u7u59NJLSSQS9PX18dRTT7Fnzx6FbVlwpstKolGPUKjI5FKYykDPHhgYtFHvFMHzbOR7stUe3/Ir62riDUF7q8P3HX5YQVtERKTUKjZs33PPPdx///28//3v5/rrr8d/VaooFAplWpnIyRGNetTVO2IZSMQhk7Opk5MTMJm20+0tW+wSZSQC69bCxKT18K6vh8YG9eQWEREptYoM25lMhttuu42uri6uu+66I4I2QDhckd+6LCKH1nF7HixfZt1ICkX46U+t/3YqBVWetQ/M5a1fdzYLLS0hMhkL2tMdSnxf9dsiIiInW0Umzscee4yRkRHe9a53USwWefjhh9m+fTs1NTVceOGFLF26tNxLFDkpXl3HPTJqkybXrYGhUetMMpW27iWTE1AVgUQCwJHLOSYnrfbbw6ZVNjc5EolQmb8rERGRylGRYfv5558HwPd9LrvsMrZt23bguVAoxIc//GGuueaaci1P5KQ6tI47FrMQHQ5DfJ89H43A3l4rH5mYhKYGmEoXGBt3bN8G+YKF7YYGGGqF1auKCtwiIiInSUWG7cHBQQDuuusu1q1bxwMPPMCKFSvYtGkTN954I9/85jfp6urife9731E/vq6ujlBobsJGKpWak69TibR3ry2VciSSAX29AYV8kdWnOqqiISamivT2O7y+PP2DESYmHOl0kULBY2zcIxYPMzkZpaXFP9CfW46kP3szp72bOe3d7Gj/Zk57NzsVGbads+l4kUiE2267jdbWVgDOOecc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qdG95qm4yNHo30NERERE9otGPRobIVeAycmDHU2qotCzD/buhX29jkzGlXupskBU3Mm2iIiIyExNtw/0fcdeD/CgIQV9A+DcwY4mg0OOtlZ1KpHXp7AtIiIicohYzGNJJ6TqHaNjFq6DvJ1y9/XZ22TiYHtBkWNRGYmIiIjIq/i+R21tiI52j7ZWIAS9fTaFctduGBwGOLKUJAis40kQqMxEjE62RURERF6D9ex2ULTx7n7I3hYLdrJ9qEzGMTjkCAp2+t3YoP7copNtERERkdcViVrtdkOjvY1ED38+CCxo5/M2CCeft7punXCLwraIiIjIMUx3KHFYK0AHNDYePuo9COy5aASC4v63Rzn9lsVHZSQiIiIixzDdoSQScaSnrCNJS8vhnUh834J1T69NnswH0NKkC5Sik20RERGR1xWLeTSkIFoFnmcXJV/da/vVBSMqIBHQybaIiIjI6woCx8io/T4eh3Tm8F7bQQBhH7qW7J9ACRTyB9sDBoE78Hv15l5cFLZFREREXsd0TXY8ZmE5HnPWf/tAgLYOJLmcvSadsXIT31eXksVOZSQiIiIir2M6TKczdkqdztj70zXZvu/R2OAdmDAZiUBjgwVqdSlZ3HSyLSIiIvI6LExbUD40TB9aEhKL2QCcQ8tFcjl3zBNxqXwK2yIiIiLH4Whh+tVsCM6h7x88EY/H3GHlJbI4qIxERERE5Dj5vkc06h33JcfXKi/RJcnFQyfbIiIiIiV0PCfiUrkUtkVERERK7NXlJbJ4qIxERERERKREFLZFREREREpEYVtEREREpEQUtkVERERESkRhW0RERESkRBS2RURERERKRGFbRERERKREFLZFREREREpEYVtEREREpEQUtkVERERESkRhW0RERESkRBS2RURERERKRGFbRERERKREFLZFREREREpEYVtEREREpEQUtkVERERESkRhW0RERESkRMLlXoCIiIiIlE8QOIIAfB983yv3ciqOwraIiIjIIpXJOAaHHEEB/DDU1zkiEU/B+yRS2BYRERFZhILAgnY+D/EYjIxCby80pByRKDQ2lHuFlWFR1Gw/99xzrF27ltWrV/P1r3+93MsRERERKbsggKBgQRsgnYFMFsJhyOexE+/AlXeRFaDiw3Ymk+Haa68lFouVeykiIiIi84bvW+lIOgO5PKQnIVENkYgF8KBggVxmp+LD9l/91V/R39/PRz/60XIvRURERGTe8H2PxgaPSAQKeaiKQeyQU24/bIFcZqeia7Z//vOf861vfYvPfe5zhMMV/a2KiIiInLBYzKOt1U6wW1ocI6OQzdrpdmODp0uSJ0HFnmyn02k++9nPct555/Ge97yn3MsRERERmZd83yMa9UgkQrS1erS1ebS1esRiCtonQ8Ue937pS1+iv7+fv/3bvy33UkREREQWBN/3VDpyklVk2H7yySf5+7//e6677jq6urpO+OPr6uoIhebm0D+VSs3J16lE2rvZ0f7NnPZu5rR3M6e9mx3t38xp72Zn3obt888/n5GRkeN+/be+9S3OP/98pqamuO666zjrrLP4wAc+MKOvPTo6OqOPO1GpVIrh4eE5+VqVRns3O9q/mdPezZz2bua0d7Oj/Zs57d2xHc8PIvM2bG/cuJHJycnjfn1TUxNg3Uf6+vr4+te/Pmen0yIiIiIiR+M55yqqW/nv/d7v8eSTT77u6z74wQ9y/fXXH/W5ufoJTj8tzpz2bna0fzOnvZs57d3Mae9mR/s3c9q7Y1vQJ9sz9eY3v5nu7u4jHt+xYwdPPfUUp59+OqtXr+YNb3hDGVYnIiIiUpmCwBEE+4flqGXgARUXtq+88sqjPv7ggw/y1FNPcckll/Cxj31sjlclIiIiUrkyGWfj3Qs2DKexAbUO3E9FzSIiIiIyY0FgQTufh6oqyOex4B1UVKXyjClsi4iIiMiMBQEEBYjHrHwkHrP3g6DcK5sfKq6M5LVcfvnlXH755eVehoiIiEhF8X0rHUlnIB5zpDM27l3DcYxOtkVERERkxnzfo7HBIxKBbNaCdmODp0uS+y2ak20RERERKY1YzKOtFXUjOQqFbRERERGZNd/3Xrd0ZDG2B1TYFhEREZGSW6ztAVWzLSIiIiIltZjbAypsi4iIiEhJLeb2gArbIiIiIlJSh7YHDAJrD+iHF0d7QIVtERERESmpxdweUBckRURERKTkFmt7QIVtEREREZkTx9MesNKojEREREREpEQUtkVERERESkRhW0RERESkRBS2RURERERKRGFbRERERKRE1I1ERERERBasIHDzup2gwraIiIiILEiZjGNwyBEUbCJlY4P1855PVEYiIiIiIgtOEFjQzuehqgryeSx4B67cSzuMwraIiIiILDhBAEEB4jErH4nH7P0gKPfKDqewLSIiIiILju9b6Ug6Y6fc6Yy9P98mVCpsi4iIiMiC4/sejQ0ekQhksxCJQGODN+8uSeqCpIiIiIgsSLGYR1sr6kYiIiIiIlIKvu/Nu9KRQ6mMRERERESkRBS2RURERERKRGFbRERERKREFLZFREREREpEYVtEREREpEQUtkVERERESkRhW0RERESkRBS2RURERERKRGFbRERERKREFLZFREREREpEYVtEREREpEQUtkVERERESkRhW0RERESkRBS2RURERERKRGFbRERERKREPOecK/ciREREREQqkU62RURERERKRGFbRERERKREFLZFREREREpEYVtEREREpEQUtkVERERESiRc7gXIQS+88AJ33HEHzz//PAMDAzQ2NrJmzRo+8pGPcO6555Z7efPe5s2bufPOO3nyyScZHh6mvr6eNWvWcOWVV3LBBReUe3kLwnPPPcfv/u7vUiwW+dM//VM+9rGPlXtJ89bU1BSPPPIIP/zhD9m8eTM9PT1Eo1HWrFnDFVdcwcaNG8u9xHnhF7/4BV/5yld47rnnyOfzrFy5kg996EO8853vLPfS5rXe3l5+8IMf8OMf/5hXXnmFgYEB6urqOPvss7nyyis588wzy73EBePOO+/kL//yLwG4//77Oeuss8q7oAXikUce4b777uPFF18knU7T1NTEWWedxZ/92Z/R3t5e7uUtKArb88Sjjz7Kpz/9aaLRKBs2bKC9vZ2enh4effRRfvjDH3LzzTdz+eWXl3uZ89Y//dM/cd1111FTU8Nb3vIWWltbGR4e5vnnn+fZZ59V2D4OmUyGa6+9llgsxtTUVLmXM+89/fTTXH311dTX1/PGN76RSy65hMHBQR555BH+9E//lGeffZYbb7yx3Mssq5/97Gf8/u//PpFIhHe84x3U1NTw8MMPc9VVV7Fnzx4+8YlPlHuJ89Y999zDnXfeSXd3NxdeeCGNjY3s2LGDRx99lEcffZQvfelLXHrppeVe5rz38ssvc+utt1JdXa3/rx0n5xw33XQT999/P93d3Vx66aUkEgn6+vp46qmn2LNnj8L2iXIyL7z97W93q1evdi+++OJhjz///PNu9erV7uKLLy7Tyua/X/7yl27dunXuve99rxsZGTni+Xw+X4ZVLTxf+MIX3Nlnn+1uu+02t2rVKnfHHXeUe0nz2qZNm9xDDz3kcrncYY/39/e7X//1X3erVq1y//mf/1mm1ZVfPp93GzZscKeddpp74YUXDjw+Pj7u3vGOd7h169a5bdu2lW+B89y//du/uaeeeuqIx5966im3fv16d95557lsNluGlS0chULB/fZv/7Z797vf7a666iq3atUq9+yzz5Z7WfPe3Xff7VatWuU+97nPuUKhcMTz+jv1xKlme57YtWsXLS0trF279rDH169fT3NzM0NDQ2Va2fz313/91wRBwJ//+Z9TV1d3xPPhsP4B5/X8/Oc/51vf+hbXXHMNbW1t5V7OgrBmzRre+c53EolEDnu8qamJ9773vQA89dRT5VjavPDEE0+wc+dONm7cyLp16w48nkwm+eQnP0mhUODBBx8s4wrnt0suuYRzzjnniMfPOecczj//fEZGRtiyZUsZVrZw3HnnnWzevJkvfOEL+L5f7uUsCJlMhttuu42uri6uu+66o+6b/k49cdqxeeLUU09l06ZNbN68mTVr1hx4fNOmTfT39/OWt7ylfIubx8bGxnjsscdYt24dS5cu5cknn+QXv/gF4XCYM844g7PPPrvcS5z30uk0n/3sZznvvPN4z3veowB0Ekz/ZbSY/4J/8sknAXjTm950xHMXXXTRYa+REzP950uh57Vt3bqVr371q/zBH/wBp556armXs2A89thjjIyM8K53vYtiscjDDz/M9u3bqamp4cILL2Tp0qXlXuKCpP9S54lrr72Wj3/84/zu7/4uGzZsoK2tjX379vHII49wzjnn8D/+x/8o9xLnpRdeeIFisUhbWxuf+MQn+NGPfnTY8xdddBFf/vKXqampKdMK578vfelL9Pf387d/+7flXkpFCIKAf/qnf8LzPC688MJyL6dstm/fDnDUv5zr6upIpVLs2LFjjle18O3du5ef/vSnNDc3s2rVqnIvZ14qFApce+21rFixQpe8T9Dzzz8P2EHBZZddxrZt2w48FwqF+PCHP8w111xTruUtWCojmSfOO+887r33XpqamnjooYf4+te/zkMPPUR9fT2XX345LS0t5V7ivDRdXvP//t//45e//CW33XYbP//5z/nf//t/c/HFF/PYY48t+ktqx/Lkk0/y93//9/zxH/8xXV1d5V5ORfjyl7/M1q1bufzyyxd1GJqYmAB4zR90k8kk4+Pjc7mkBS+fz3P11VeTy+W46qqrFvW/nBzL7bffzpYtW/jCF75wRJmXHNvg4CAAd911F8lkkgceeIBnnnmGe++9l2XLlvHNb36T++67r8yrXHh0sn0STdfRHa9vfetbnH/++QD8+7//O3/yJ3/CW97yFm6//XY6OzvZs2cPd9xxB5/97GfZsmULn/3sZ0u08vKb6d4Vi0XAThM/97nPsWHDBsD+Iv/yl7/Mb/zGb/B//s//oaenp2JvT89076amprjuuus466yz+MAHPlC6Bc5zs/nv9tXuv/9+7rjjDtatW8f1119/klYoAsVikeuuu46nnnqK97znPfzWb/1WuZc0L23evJnbb7+dj3zkI6xfv77cy1lwnHMARCIRbrvtNlpbWwG7K3Drrbdy2WWXcdddd/G+972vnMtccBS2T6KNGzcyOTl53K9vamoCYGRkhKuuuoqlS5fyF3/xF4RC9g8OK1as4M///M/ZsWMH3/rWt3j/+99Pd3d3SdZebjPdu+lTM9/3efOb33zYa6LRKBdddBEPPPAAL7zwQsWG7Znu3V/91V/R19fH17/+9QN/5hajme7fq333u9/lpptuYtWqVXzzm98kkUicrCUuSMlkEuA1T68nJiZU3nWcnHPccMMNPPTQQ1x22WV87nOfK/eS5q1rrrmGrq4uPv3pT5d7KQvS9H+3p5122oGgPe3UU0+lq6uLHTt2MDY2Rm1tbTmWuCApbJ9EMy1XeOaZZxgbG+O88847IvR4nsf555/Pc889x4svvlixYXume7d8+XIAYrHYUf+5cPov80wmM/PFzXMz3bvNmzeTzWZ5+9vfftTnv/SlL/GlL32JD37wgxV9Snsyyoy+853vcOONN7Jy5UruvvtuUqnUSVjZwrZs2TIAduzYwWmnnXbYc6OjowwPD/OGN7yhDCtbWIrFItdffz0PPvggGzdu5JZbblnUPxy/ns2bNwNw+umnH/X56U5Bt91224F/CZWDTjnlFOC1y78O/TtVYfv4KWzPA/l8HuA12/tNPx6NRudsTQtFd3c3HR0d7N27l3379h3Rtu7ll18GoLOzsxzLm9fe/OY3H/WHtx07dvDUU09x+umns3r1agWi1/Gd73yHG264gRUrVnD33XfT0NBQ7iXNC+eeey533HEHP/nJT3jHO95x2HOPPfYYYHdV5LUdGrQvvfRSvvjFL6pO+3W8+93vPurjTz/9NNu3b+fiiy+moaFBfye8hukSuVdeeeWI5/L5PDt37qS6ulr/nztR5W70Lc7t27fPrV271p1xxhlu06ZNhz23detWd9ZZZ7nTTjvNDQ4OlmmF89vtt9/uVq1a5f7sz/7MBUFw4PGf/exnbvXq1e7Xf/3X1YT/BHz3u9/VUJvj9O1vf9utXr3avf3tb3f9/f3lXs68ks/n3Vvf+lZ32mmnHTas69ChNq+88koZVzi/BUHgrr32Wrdq1Sr33/7bf9P/w2bpmmuu0VCb4/SRj3zErVq1yn37298+7PGvfvWrbtWqVe6qq64q08oWLp1szwOtra187GMf42/+5m9497vfzYYNG+js7KSnp4dHHnmEXC7H1VdfrZ8kX8N//a//lR/96Ef88z//My+99BLnnnsu/f39PPzww0SjUb7whS+oH62cdI8//jg33ngjzjnOOecc/uEf/uGI16xdu3bR/lN1OBzm85//PFdeeSXve9/72LhxI8lkkocffpjdu3fzmc985kAZmBzptttu48EHH6S6upply5bxN3/zN0e8ZsOGDUcMQhOZrZtuuokrrriCG264gUcffZRTTjmFF198kSeeeILOzk6uvvrqci9xwVECmSc+85nPsHr1au6//35++tOfHrg8dN555/GBD3yAX//1Xy/3EuetaDTKXXfdxde//nX+9V//lXvvvZdEIsFb3vIW/vAP//CwIUEiJ0tPT8+Bm/v333//UV/zrne9a9GGbYALLriA++67j1tvvZUf/OAH5PN5Vq5cyR/90R9x2WWXlXt589qePXsAmJqa4vbbbz/qazo7OxW25aTr7u7mu9/9Lrfeeiv/8R//wWOPPUZTUxPvf//7+dSnPkVjY2O5l7jgeG76bwsRERERETmpdKVZRERERKREFLZFREREREpEYVtEREREpEQUtkVERERESkRhW0RERESkRBS2RURERERKRGFbRERERKREFLZFREREREpEYVtEREREpEQUtkVEFrndu3ezevVqfu/3fq/cSxERqTgK2yIiIiIiJaKwLSIiIiJSIgrbIiIiIiIlorAtIiIHTExM8PnPf543v/nNnH766bz97W/n7/7u7ygWi4e97uKLL2b16tU457jnnnu47LLLOPPMM/nN3/zNMq1cRGR+Cpd7ASIiMj/kcjk++MEPsmvXLi644ALy+TyPP/44N998M1u2bOHmm28+4mNuuukmHnzwQc4991xWrFhBPp8vw8pFROYvhW0REQHgueeeY/Xq1fzbv/0bDQ0NAOzcuZP3v//9PPjgg2zYsIG3vvWth33Mww8/zPe+9z1OPfXUcixZRGTeUxmJiIgccM011xwI2gDd3d188pOfBOC+++474vUf/ehHFbRFRI5BYVtERACor6/noosuOuLxd77znQA888wzOOcOe+7iiy+ek7WJiCxUCtsiIgJAR0fHUR9PJpPU1tYyNTXFxMTEcX2MiIgYhW0REXldrz7RnlZVVTXHKxERWVgUtkVEBIC9e/ce9fGJiQnGx8eprq4mmUzO8apERBY2hW0REQFgZGSEn/70p0c8/v3vfx+AN7zhDXieN9fLEhFZ0BS2RUTkgC9+8YsMDw8feH/Xrl187WtfA+B973tfuZYlIrJgqc+2iIgAcNZZZ5HP5/mN3/gNLrjgAnK5HE888QTpdJrLLruMDRs2lHuJIiILjsK2iIgAEI1G+cY3vsH/+l//i0cffZTh4WGWLFnCe97zHj70oQ+Ve3kiIguS517rirmIiIiIiMyKarZFREREREpEYVtEREREpEQUtkVERERESkRhW0RERESkRBS2RURERERKRGFbRERERKREFLZFREREREpEYVtEREREpEQUtkVERERESkRhW0RERESkRBS2RURERERKRGFbRERERKRE/n+MMB74Y1d3PQAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "post = m6_1.sample_posterior(random.PRNGKey(1), p6_1, sample_shape=(1000,))\n", "az.plot_pair(post, var_names=[\"br\", \"bl\"], scatter_kwargs={\"alpha\": 0.1})\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.6" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtsAAAHrCAYAAAAe4lGYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/d3fzzAAAACXBIWXMAAA9hAAAPYQGoP6dpAABepklEQVR4nO3dd3hU1drG4WelklBCAFEIIB0VBKT33ps0wXIEFcWjguXoZ69Yj/2gWMCGKE2q9N6LdFGq0qQrEEoIpK7vj52E0EmYybTffV1cbPYMk5ewMvPMO2uvZay1VgAAAABcLsjTBQAAAAD+irANAAAAuAlhGwAAAHATwjYAAADgJoRtAAAAwE0I2wAAAICbELYBAAAANyFsAwAAAG4SkpNfLDY2Nie/nE+IiorSsWPHPF0GvATjAediTCAzxgMyYzx4XnR09GXvQ2fbw4KC+C/AGYwHnIsxgcwYD8iM8eAb+F8CAAAA3ISwDQAAALgJYRsAAABwE8I2AAAA4CaEbQAAAMBNCNsAAACAmxC2AQAAADchbAMAAABuQtgGAAAA3ISwDQAAALgJYRsAAABwE8I2AAAA4CaEbQAAAMBNCNsAAACAmxC2AQAAADchbAMAAABuQtgGAADIQcuWLVOfPn3UvHlz1alTRwMGDLjk/Tt37qzOnTtf8eNPnjxZderU0eTJk6+yUvcbMGCA6tSpo3379l32vqtXr1adOnU0ZMiQHKjMdUI8XQAAwL2OH7favUeKj5dOnZKSkqXo/FKBAlLBAlLevMbTJQIBY9++fXrmmWeUL18+derUSZGRkSpfvryny4IbEbYBwM+cPm21cJG0arXV7xukv3Zf+v7FYqxuqSpVrWJUq5YUnZ/wDbjLypUrlZiYqMcee0wtW7b0dDnIAYRtAPATGzZaTZpsNXe+08XOrHBhKW8eKSJCCg6Wjh6VDh+R4uKkPXudX5OmWAUHSbVqWbVsbtSwgRQRQfAGXOnQoUOSpAIFCni4EuSUbIXtZs2aae/evRe8rWfPnpedewQAcJ39+60GfWE1f8GZc0WLSs2bSpVvNrrpRikq6sKhOS7Oav1v0tp1VqtWS3/8KS1bLi1bbpUnj9TlVqvuXY0KFiR0w33mzp2rn376STt37tTJkyeVP39+lS5dWl26dFHjxo0lOfN1H3nkEfXp00cPPPDAWX9/37596tq1q9q1a6eXX34543z6POcffvhBgwYN0sKFC3Xy5EndcMMNevzxx3XDDTfo8OHDGjRokJYtW6b4+HhVrVpVTz31lIoXL37F9W/fvl1ff/211qxZo7i4OBUqVEiNGzfWvffeq6ioqLNqTPfII49kHI8bN05Fixa97Nc5fvy4Pv30Uy1atEjx8fEqX7687r77bjVq1OiKa72Q1atXa9q0aVq/fr3++ecfSdL1119/0bniderU0S233KK33npLgwYN0pIlSxQfH6+yZcvq4YcfVvXq1c/7O9u3b9egQYO0du1aGWNUuXJl9evXL9s1r127VoMHD9bmzZsVGhqqOnXqqF+/fipcuPBZ90uvf9iwYRo8eLAWLFigw4cP67nnnlOHDh2y/fWzItud7bx586p3797nna9UqdJVFQQAuDIJCVZDh1mNHCUlJklBQVLLFlKHdkZVKktBQZcPyHnyGNWrK9Wr69x31y6r2XOtZsyS9u2Thv0ojRxt1baNVe+7ja4tTOiGa40dO1bvvfdeRkCNiorSoUOHtHHjRi1YsCAjbGdXcnKyHn30USUkJKhFixY6cuSI5syZo0cffVSDBw/W448/roIFC6p169bas2ePFi9erKeeekrDhw9XcHDwZR9//fr1euyxx5SYmKhmzZqpSJEi+v333zVy5EgtWbJEX331laKiopQ3b1716dNHa9as0dq1a9WuXTsVKVJEkpOpruTf0b9/fyUkJKhdu3aKi4vT7Nmz9cwzz+iVV15RmzZtsv09GjZsmPbs2aOKFSuqcePGiouL07Jly/TOO+9o165deuyxx877O3Fxcerbt69y586t1q1bZ3xfH3/8cX333XcqU6ZMxn23bdumvn376tSpU2rSpImKFy+uDRs2qG/fvipXrlyW692wYYO+//571atXTz169NCWLVs0c+ZM/frrr/rmm29UsGDBs+6flJSkRx55RPHx8WrQoIFCQ0Nz9JOFbIftfPnyqX///q6sBQBwhf76y+rl16z+3Ob8uXo16dF+RmVKX10Yvv56oz73Gt3b22rxEmnEKKvffpd+niRNm27V5Varu/9lmNedQ6y1On36zJ/Dw61OnbKeK+gcuXJJxlzdWPj5558VGhqqYcOGKTo6+qzbjh07dlWPLTnTNqpUqaLXXntNISFO7ClXrpw+++wzPfDAA2rfvr0ee+yxjH/Hu+++q3HjxmnRokVq0qTJJR87NTVVr7/+uk6dOqWPP/5YderUybjt888/19ChQ/Xpp5/qhRdeUN68efXAAw9oyJAhWrt2rdq3b3/BDvCl/h0lS5bU119/nfHvePDBB9WlSxd98MEHatiwoXLnzp3F747j6aefPq+znpycrP/85z8aPXq0evbsqeuuu+6s2//44w9169ZNTz75pIKCnMXtatSoobfeektjxozRM888k3Hf999/XydPntSrr7561puC9O9RVi1fvlzPP/+8OnXqlHHu66+/1pAhQ/TFF1/ohRdeOOv+hw8fVtmyZTV48GDlypUry1/vajFnGwB8zLTpVh9+bHXqtJQ/v/R//zFq1PDqQ09mQUHOYzZqaPTrequvvrFau04aPcaZ2937bqlHdyksjNDtLtZaPdzfebNzxhFPlXNBN1eSPvvk6sdeSEhIRoDMLH0KxtXq16/fWY/funVrffbZZ0pJSdGDDz54Vv2tWrXSuHHj9Mcff1w2bK9fv167d+9W3bp1zwraknTPPfdowoQJmjlzpp5++mmFhoZe9b+jb9++Z/07ypQpo44dO2rMmDFauHCh2rZtm63HvdAUlpCQEHXp0kUrVqzQ6tWr1b59+7Nuj4iI0COPPJIRtCWpXbt2+u9//6uNGzdmnDtw4IDWrl2rsmXLntd97927t8aNG6cTJ05kqd7rr79eHTt2POvcXXfdpTFjxlz0+92vXz+PBG3pKtbZTkxM1Pjx4/XFF19o+PDh2rx5syvrAgCcIyXF6sOPU/XmO07QrnaL9N1XRo0bGZcG7XNVqWw08COjj943uqGCs3zgF4Otet1rtXiplbXe02mF72nevLlOnTqlO++8UwMHDtTixYuzHL4uJW/evBnTNdKlTzMoVqyYIiIiLnhb+tzlS9myZYskqVq1aufdFhERoRtvvFEJCQn666+/slV7ZiEhIRecqlulShVJTqc5u06ePKkhQ4boX//6l5o2bao6deqoTp06eu655ySduagzs+LFiysyMvK8GgsUKKC4uLiMc+l1pdeZWWRkZLamkVSuXPm857xcuXKpQoUKF/x+h4eHq2zZsln+Oq6S7c72P//8o2efffascw0bNtS777570XkwUVFRZ70DguPcj80Q2BgPOFd0dLROn7Z6+tkTmjMvSZL0yEMRevCBCAUH51xnuVVLqUVzq0lTEvXhxye1Z6/Vs89bNW0Sqheey60i111+fiuyZsQPVqdOebqKi4uIuPqu9qOPPqqiRYtqxIgRGjFihIYPH66QkBA1atRIzz//fMaFiunzmiMiIs57njx58qQkJ1Rlvi04OFj58uW76PNq/vz5L/pYwcHBl30+Tk1NleQEzwvdNz3kG2Mybk8P93nz5r3i5/v0Ws6diyw5XV7JmZec/njp00ly58592a+RmJioPn36aMOGDbrpppt06623Kn/+/AoJCdHevXs1fvz4C34vLvS9k6SwsDBJZ17L0t+MFy1a9IL3T5+eEhUVddla08dAkSJFrvj7HRwcrIIFC3p09Zdshe2uXbuqVq1aKlu2rMLCwrRt2zZ9+umnWrhwoR5++GGNGDHigj98rph75W+io6MVGxvr6TLgJRgPOFd0dLR27DiiZ19w1swOC5VefMGoWZMEHT+e4JGaGjWQalSThg6TRo6W5s1P0vJfjqrv/UZdOytH3wAEGm97jkhw0RBs0aKFWrRooWPHjmndunWaOXOm5syZo+3bt+vHH39UcHBwRgiOi4s773uQvvtgQkLCWbelpKRI0kW/Z0lJSefdlp5Vzn2sC0lvIO7evfuC992/f78kJ5Sn334q7d3TiRMnrvj/MiUlRbGxsTp8+PBZTcvo6Gjt2rVLkhQaGprxeOnfq5MnT172a8yZM0cbNmxQp06d9Pzzz59126xZszR+/HidOnXqvMe50PcuvVbpzPc8PQ/u27fvgvc/cOCAJOf7frk55+mfeOzfv/+S329rbcbtlxsDV+tK3jBlq83cr18/1apVSwUKFFCePHlUpUoVffnll6pevbrWrl2rBQsWXP5BAACXdeJEqh5/0gnaefNKH31g1KyJ58NsZKTRQw8G6duvjG6u5Ewt+d8nVv9+xOqPP5hWguyJiopS48aN9eabb6pGjRrauXOn9uzZI+lMV/NC0zvSp3PktAoVKkiS1qxZc95tp0+f1ubNmxUeHp7Rfb4aycnJ+v333887/+uvv0pStqZjSMpYyrlhw4bn3bZu3bpsPWZm6XWl15lZfHx8tqa/rF+//rzpa6dPn9aWLVsUHh6uEiVKZK9YN3HZnI6goKCM9SMvNOgAAFmTkGDV77ET+nObVCBa+uwToyqVPR+0MytdymjQQKOnnjDKnVvatFm6/0Grz75I9apVM+C9li9fruTk5LPOJScn6/jx45KcqSGSM10iMjJSixYtOuuT8sOHD+u7777LsXozq1y5sooVK6Zly5ZpxYoVZ902dOhQHT16VK1atXLJxZGSNHjw4LO+V9u2bdOkSZOUJ0+ebK+1nT6N49wwvGbNGk2cODH7xWZ6/FtuuUV//vmnpk+fftZtQ4cOzdb8/F27dmnSpElnnfvxxx8VGxvr0u+3q7h0NZL0Vvopb55gBgA+IDnZ6tXXrVatTlbu3NL77xqVKuldQTtdUJBR51ulBg2c7va8+dLwkdK8+VZPPiHVqe2ddcM7vPjii8qVK5eqVKmi6667TsnJyVqxYoV27NihFi1aZITB0NBQde/eXd9//7169+6tRo0aKT4+XosXL9Ytt9yS0QHPSUFBQXrxxRf1+OOP6z//+U/GOtsbNmzQqlWrVKxYMT388MMu+VqFChXSiRMndPfdd6tevXo6efKkZs2apcTERD333HPZXvavQYMGKlKkiH744Qdt375dpUuX1l9//aUlS5aoUaNGmjdv3lXX/tRTT6lv374aMGCAFi5cqOLFi2vjxo3auHGjqlatmuUOeu3atfXee+9pyZIlKlmypLZs2aLly5fr2muv1b///e+rrtfVXHq14vr16yVJMTExrnxYAAgo1lp98LHVosVSWJj09htG5ct5f2AtVNDo9VeD9N+3jAoXlvYfkJ56xurV11N15AhdblzYQw89pBtvvFEbNmzQmDFjNH36dEVGRurZZ5/Vq6++etZ9H3zwQfXp00fWWo0fP17r16/Xvffe69F9P6pWraqvvvpKjRo10ooVK/Tjjz9qz5496tGjh7766iuXXfQeEhKigQMH6uabb9bUqVM1depUlSpVSv/973+vakObyMhIDRo0SE2bNtWmTZs0ZswYHTp0SK+++qq6d+/uktrLlCmjwYMHq06dOlq+fLl++uknhYSEaPDgwVe0c+a5KlWqpIEDB+rYsWMaNWqUNmzYoJYtW2rw4MEXvIjU04zN4ppNf/75pwoXLqx8+fKddX7VqlW67777ZK3VjBkzLvjN86aLOryFt13sAs9iPECSxoyz+nigVVCQ9NH7eVS9WrynS8qy+Hirr7+1+mmslJoqReWTnnvGqEF973/T4M14jkBmjAfPu5I3U1meRjJt2jR99dVXqlu3rmJiYhQWFqatW7dqyZIlCgoK0muvvZatdykAAGnVaqtP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AADfl6WwXbduXRUvXlyTJ0/Wpk2bMs7HxcXps88+U0hIiLp06eLyIgEAAABflKULJENCQvTGG2/o/vvv15133qkOHTooT548mjlzpvbs2aPHH39cpUqVcletAAAAgE/J8mokderU0fDhwzVw4EBNmzZNSUlJKlu2rB577DF16tTJHTUCAAAAPilbS/9VrlxZX331latrAQAAAPwKO8wAAAAAbkLYBgAAANyEsA0AAAC4CWEbAAAAcBPCNgAAAOAmhG0AAADATQjbAAAAgJsQtgEAAAA3IWwDAAAAbkLYBgAAANyEsA0AAAC4ibHWWk8XAQAAAPgjOtsAAACAmxC2AQAAADchbAMAAABuQtgGAAAA3ISwDQAAALgJYRsAAABwkxBPF+AvJk6cqNWrV+v333/X1q1blZSUpLfffltdu3bN0uMcP35c3377rWbPnq09e/YoLCxMxYoVU5cuXXTbbbcpPDzcTf8CuJqrxsSBAwf02WefaeHChTp06JDy58+vhg0b6tFHH1WRIkXcVD1c6eDBg5o2bZoWLlyo7du369ChQ4qKilK1atV0//33q0qVKlf8WKmpqRo+fLhGjRqlXbt2KTIyUrVr19YTTzyhkiVLuu8fAZdy1Zg4fPiwxowZow0bNuj333/X3r17JUlbtmxxZ/lwMVeNh1WrVmn27NlasWKF9u7dq/j4eMXExKh58+Z68MEHlS9fPjf/S3AhrLPtIs2aNdPevXsVHR2tyMhI7d27N8vB6vjx4+ratat2796t6tWrq0qVKkpMTNTChQv1119/qU6dOvr2228VFMQHEr7AFWPir7/+0u23367Dhw+rfv36qlChgnbt2qW5c+eqQIECGjlypEqUKOHGfwVc4f3339eQIUNUokQJ1axZUwULFtSuXbs0e/ZsWWv1wQcfqF27dlf0WC+99JJGjx6tsmXLqnHjxjp8+LCmTp2q8PBwjRw5UmXLlnXzvwau4Kox8csvv6hXr14yxuj666/XwYMHderUKcK2j3HVeKhfv75iY2NVvXp13XjjjTLGaMWKFdq4caNKlCihkSNHqmDBgjnwL8JZLFxiyZIlds+ePdZaa7/88ktbvnx5O3bs2Cw9xuDBg2358uXtW2+9ddb5hIQE261bN1u+fHm7YsUKl9UM93LFmOjbt68tX768HTp06Fnnp06dasuXL2/vu+8+l9UL95kxY4ZduXLleedXrlxpK1asaGvVqmUTEhIu+zjLli2z5cuXt3feeedZ91+6dKmtUKGCveuuu1xaN9zHVWPin3/+sStWrLAnTpyw1lrbunVrW758eZfXC/dy1Xj48ssv7cGDB886l5qaal955RVbvnx5++qrr7qsZlw5WqQuUq9ePcXExFzVY+zevVuS1Lhx47POh4WFqX79+pKcjwzhG652TCQkJGjx4sUqVKiQ7r777rNua9u2rW688UYtXrw4Y9zAe7Vq1Uo1atQ473yNGjVUu3ZtHT169Io6kT/99JMk6fHHH1dYWFjG+bp166pBgwZauXKlduzY4brC4TauGhOFChVSzZo1lSdPHneUiRziqvHQt29fFS5c+Kxzxhg9/PDDkqSVK1e6pmBkCWHbi5QrV06StGjRorPOJyUlaenSpcqVK5duueUWT5QGDzh69KiSk5NVtGhRGWPOu71YsWKSpOXLl+d0aXChkJCQs36/lF9++UWRkZGqVq3aebc1aNBAEi+m/iArYwL+zxXjIf3vBgcHu6QmZA0/yV7ktttu08SJE/XNN9/o999/V6VKlZSUlKRFixbp2LFj+uCDD3Tttdd6ukzkkHz58ik4OFj79u2Ttfa8wL1nzx5J0s6dOz1QHVxh3759Wrp0qa655hqVL1/+kveNj4/XP//8o/Lly1/wBTP94kjGg2/LypiA/3PVeBg7dqwkZXxKjpxFZ9uL5MqVS8OGDVOnTp20YsUKffPNNxo2bJj++usvdejQ4YLdLPiviIgI1axZU4cOHdLw4cPPum3mzJnatGmTJOnEiROeKA9XKSkpSU8//bQSExP11FNPXbbjlP7/fLHpAunn4+LiXFsockxWxwT8m6vGw6ZNmzRo0CAVLFhQ999/v4urxJWgs+1Fjhw5oocfflhHjhzR4MGDVa1aNSUkJGju3Ll65513NH/+fI0dO1ZRUVGeLhU55LnnntMdd9yhAQMGaO7cuapQoYL++usvzZkzRxUqVNCWLVtYncYHpaam6vnnn9fKlSvVo0cPde7c2dMlwcMYE8jMVeNh9+7devDBB5WSkqIPP/xQBQoUcG2huCK8SnuRd955R2vXrtXAgQPVuHFj5c2bV4UKFVKPHj30f//3f9q9e7eGDh3q6TKRg2644QaNGTNGbdu21caNG/X9999rx44dGjBggG699VZJ4snTx1hr9eKLL+rnn39Wp06d9Nprr13R38ubN6+ki3eu089zoZzvye6YgH9y1XjYu3evevfurSNHjmjgwIGqU6eOiyvFlaKz7UUWLFig/Pnz64YbbjjvtvQfkg0bNuR0WfCwMmXK6OOPPz7v/LPPPitJqlSpUg5XhOxKTU3VCy+8oHHjxqlDhw565513rviTicjISF1zzTXas2ePUlJSzvtIOX2uNhvb+JarGRPwP64aD3v27FGvXr30999/6+OPP1bTpk3dUC2uFD/RXiQxMVFxcXFKTEw877YjR45I0lnLfSFwxcXFad68ecqfPz8XvPiIzC+i7dq107vvvpvlOZi1atVSfHy81qxZc95tixcvliTVrFnTJfXC/VwxJuA/XDUeMgftjz76SC1atHBDtcgKwrYHHDlyRNu2bcsI0OmqVaum5ORkffbZZ2edT0xMzDhXu3btHKsTOediY+L06dNKTk4+61xiYqJeeOEFHT16VI888ojCw8NzslRkQ+YX0TZt2ui999675IvoxcZDjx49JEkff/zxWW/Kly1bpsWLF6tmzZoqVaqUe/4RcClXjQn4B1eNh/SgffDgQX344Ydq2bKlu0vHFWC7dhf56aeftHr1aknS1q1btWHDBlWrVk3XX3+9JKlFixYZ7y4/+eQTffrpp+rXr5/69++f8RibNm3SXXfdpZMnT6py5coZF0imb1xSsWJFjRgxgnDlI1wxJlatWqX+/furXr16KlKkiOLi4rRgwQLt27dPPXr00IABAy64Bje8S/r/b2RkpHr16nXB9XJbtGihG2+88az7nzseJOnFF1/UTz/9xHbtPs6VYyJ9SpkkzZo1S3FxcerSpUvGuaeffpprO7ycq8ZDs2bNtHfvXlWtWjVj7f1znTt+4H7M2XaR1atXa/z48WedW7NmTcbHvTExMZf9KOfGG2/UuHHj9OWXX2r58uX68ccfFRwcrBIlSqh///7q06cPQduHuGJMFC1aVLVq1dLq1at16NAhRURE6KabbtKzzz6r1q1bu612uNbevXslOWtlf/HFFxe8T0xMTMYL6aUMGDBAFSpU0KhRozRs2DBFRkaqadOmeuKJJ+hq+xBXjolzn2fOPdevXz/Ctpdz1XhIf5x169Zp3bp1F7wPYTvn0dkGAAAA3IQ52wAAAICbELYBAAAANyFsAwAAAG5C2AYAAADchLANAAAAuAlhGwAAAHATwjYAAADgJoRtAAAAwE0I2wAAAICbELYBAAAANyFsAwAAAG5C2AYAAADc5P8Bu+cYrxb8AjAAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sum_blbr = post[\"bl\"] + post[\"br\"]\n", "az.plot_kde(sum_blbr, label=\"sum of bl and br\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.7" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [00:01<00:00, 936.38it/s, init loss: 2486.2402, avg. loss [951-1000]: 108.4584]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " a 0.83 0.35 0.84 0.25 1.35 931.50 1.00\n", " bl 2.02 0.08 2.02 1.91 2.15 940.42 1.00\n", " sigma 0.67 0.05 0.67 0.60 0.75 949.09 1.00\n", "\n" ] } ], "source": [ "def model(leg_left, height):\n", " a = numpyro.sample(\"a\", dist.Normal(10, 100))\n", " bl = numpyro.sample(\"bl\", dist.Normal(2, 10))\n", " sigma = numpyro.sample(\"sigma\", dist.Exponential(1))\n", " mu = a + bl * leg_left\n", " numpyro.sample(\"height\", dist.Normal(mu, sigma), obs=height)\n", "\n", "\n", "m6_2 = AutoLaplaceApproximation(model)\n", "svi = SVI(\n", " model,\n", " m6_2,\n", " optim.Adam(1),\n", " Trace_ELBO(),\n", " leg_left=d.leg_left.values,\n", " height=d.height.values,\n", ")\n", "svi_result = svi.run(random.PRNGKey(0), 1000)\n", "p6_2 = svi_result.params\n", "post = m6_2.sample_posterior(random.PRNGKey(1), p6_2, sample_shape=(1000,))\n", "print_summary(post, 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.8" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "milk = pd.read_csv(\"../data/milk.csv\", sep=\";\")\n", "d = milk\n", "d[\"K\"] = d[\"kcal.per.g\"].pipe(lambda x: (x - x.mean()) / x.std())\n", "d[\"F\"] = d[\"perc.fat\"].pipe(lambda x: (x - x.mean()) / x.std())\n", "d[\"L\"] = d[\"perc.lactose\"].pipe(lambda x: (x - x.mean()) / x.std())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.9" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [00:00<00:00, 1426.15it/s, init loss: 198.3563, avg. loss [951-1000]: 20.1324]\n", "100%|██████████| 1000/1000 [00:00<00:00, 1464.26it/s, init loss: 1449.6163, avg. loss [951-1000]: 15.5010]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " a 0.01 0.08 0.01 -0.13 0.12 931.50 1.00\n", " bF 0.86 0.09 0.86 0.73 1.01 1111.41 1.00\n", " sigma 0.46 0.06 0.46 0.37 0.57 940.36 1.00\n", "\n", "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " a 0.01 0.07 0.01 -0.10 0.11 931.50 1.00\n", " bL -0.90 0.07 -0.90 -1.01 -0.78 1111.89 1.00\n", " sigma 0.39 0.05 0.39 0.31 0.48 957.39 1.00\n", "\n" ] } ], "source": [ "# kcal.per.g regressed on perc.fat\n", "def model(F, K):\n", " a = numpyro.sample(\"a\", dist.Normal(0, 0.2))\n", " bF = numpyro.sample(\"bF\", dist.Normal(0, 0.5))\n", " sigma = numpyro.sample(\"sigma\", dist.Exponential(1))\n", " mu = a + bF * F\n", " numpyro.sample(\"K\", dist.Normal(mu, sigma), obs=K)\n", "\n", "\n", "m6_3 = AutoLaplaceApproximation(model)\n", "svi = SVI(model, m6_3, optim.Adam(1), Trace_ELBO(), F=d.F.values, K=d.K.values)\n", "svi_result = svi.run(random.PRNGKey(0), 1000)\n", "p6_3 = svi_result.params\n", "\n", "\n", "# kcal.per.g regressed on perc.lactose\n", "def model(L, K):\n", " a = numpyro.sample(\"a\", dist.Normal(0, 0.2))\n", " bL = numpyro.sample(\"bL\", dist.Normal(0, 0.5))\n", " sigma = numpyro.sample(\"sigma\", dist.Exponential(1))\n", " mu = a + bL * L\n", " numpyro.sample(\"K\", dist.Normal(mu, sigma), obs=K)\n", "\n", "\n", "m6_4 = AutoLaplaceApproximation(model)\n", "svi = SVI(model, m6_4, optim.Adam(1), Trace_ELBO(), L=d.L.values, K=d.K.values)\n", "svi_result = svi.run(random.PRNGKey(0), 1000)\n", "p6_4 = svi_result.params\n", "\n", "post = m6_3.sample_posterior(random.PRNGKey(1), p6_3, sample_shape=(1000,))\n", "print_summary(post, 0.89, False)\n", "post = m6_4.sample_posterior(random.PRNGKey(1), p6_4, sample_shape=(1000,))\n", "print_summary(post, 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.10" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [00:00<00:00, 1346.20it/s, init loss: 1360.7051, avg. loss [951-1000]: 15.2050]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " a -0.02 0.07 -0.03 -0.13 0.07 1049.96 1.00\n", " bF 0.25 0.19 0.25 -0.05 0.56 823.80 1.00\n", " bL -0.67 0.19 -0.67 -0.99 -0.37 875.48 1.00\n", " sigma 0.38 0.05 0.38 0.30 0.46 982.83 1.00\n", "\n" ] } ], "source": [ "def model(F, L, K):\n", " a = numpyro.sample(\"a\", dist.Normal(0, 0.2))\n", " bF = numpyro.sample(\"bF\", dist.Normal(0, 0.5))\n", " bL = numpyro.sample(\"bL\", dist.Normal(0, 0.5))\n", " sigma = numpyro.sample(\"sigma\", dist.Exponential(1))\n", " mu = a + bF * F + bL * L\n", " numpyro.sample(\"K\", dist.Normal(mu, sigma), obs=K)\n", "\n", "\n", "m6_5 = AutoLaplaceApproximation(model)\n", "svi = SVI(\n", " model, m6_5, optim.Adam(1), Trace_ELBO(), F=d.F.values, L=d.L.values, K=d.K.values\n", ")\n", "svi_result = svi.run(random.PRNGKey(0), 1000)\n", "p6_5 = svi_result.params\n", "post = m6_5.sample_posterior(random.PRNGKey(1), p6_5, sample_shape=(1000,))\n", "print_summary(post, 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.11" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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e/niF7+YkZGRvOlNb8qv/uqvjvVftmxZbr311gwMDGRwcDCnnnpqtmzZkttuuy1z587NsmXLWvk2oSMt7q9k4YLm0nB9vREEAQAAAACwVy2FQb/0S7+UgYGB/Nmf/Vkuuuiivfb52Mc+locffji/8Ru/Me73fdOb3pSdO3fmq1/9au6888488cQTmT17dn7xF38xb3vb29Lf37/HTJ/u7u5ce+21ueKKK3LTTTdl48aNOfLII7N06dKcf/756e7ubuXbhI5VFJUURburAAAAAACgk1UajUZjfw8eHh7Of/yP/zEPP/xwTjnllLzzne/M8ccfn0qlkm3btmXdunXZsmVLjjzyyNx444054ogjJrP2STM8PNzuEmaUnp4eP3PGxVhhIowXJsJ4YSKMF56pp6en3SUAAABMSEszg3p6evLJT34yF1xwQQYHB/OHf/iHe7zeaDQyZ86cXH755R0bBAEAAAAAAJRZS2FQkrzkJS/J+vXrc/PNN+fLX/5yHnzwwSTJMccck9e85jU566yz9rmfEAAAAAAAAFOrpTDo0ksvzeGHH57ly5fnzW9+c9785jdPVl0AAAAAAABMgmorB//t3/5tvvGNb0xWLQAAAAAAAEyylsKgo48+Oo1GY7JqAQAAAAAAYJK1FAb98i//cjZu3JidO3dOVj0AAAAAAABMopbCoPPPPz/HHntsPvCBD+Tee++drJoAAAAAAACYJF2tHHzeeeflkEMOyebNm/Nrv/ZrOeqoo3LsscfmkEMOeVbfSqWSa665ppXTAQAAAAAAMEEthUEbN24c+3uj0UitVkutVttr30ql0sqpAAAAAAAA2A8thUGf//znJ6sOAAAAAAAApkBLYVBvb+9k1QEAAAAAAMAUqLa7AAAAAAAAAKZOSzODRt13331Zu3Zt7rnnngwPD+fMM8/MypUrkyR33XVXvv71r+etb31rXvCCF0zG6YAZoFZr5L77f5IXzG6kKOw5BgAAAACwv1oOg6666qp8/OMfz09/+tMkSaVSyfDw8NjrTzzxRC699NIccsghefe7393q6egQtVoj24eSvt54UM+kW7+hkVWrG6nXH0u1mqxckSzuN84AAAAAAPZHS8vE3XLLLVm9enWOPfbYrFmzJl/+8pfTaDT26PPa1742PT09ueWWW1oqlM6xfkMj73x3Ixd+sPnn+g2N5z4IxqlW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AJ3P/TvA/mspDPrEJz6Rp59+Oh//+Mdz1lln7fHaKaeckjPPPDO33HJLzj///Fx11VW57LLLWioWYKqY9g8AAACdz/07wP5paZm4u+66K6961aueFQTtbtGiRZk3b142bdrUyqkAAAAAAADYDy2FQY8//niOOeaY5+x3zDHH5PHHH2/lVAAAAAAAAOyHlsKgo446Klu2bHnOflu2bMlRRx3VyqkAAAAAAADYDy2FQWeccUYeeOCB/Pmf/3kajcazXm80GvnYxz6WBx54IGeccUYrpwIAAAAAAGA/dLVy8HnnnZebb745V155ZT73uc/lzW9+c3p7e1OpVLJ9+/Z87nOfy/bt2/OCF7wg55133mTVDAAAAAAAwDi1FAa96EUvyjXXXJMPfehDuf/++3PllVemUqkkydhMoZe+9KX50z/907zoRS9qvVoAAAAAAAAmpKUwKElOPvnk/J//839yxx13ZNOmTanVakmSoigyf/78nHbaaS0XCQAAAAAAwP5pOQwaddpppwl+AAAAAAAAOky1lYPf97735aqrrnrOfn/1V3+V973vfa2cCgAAAAAAgP3Q0sygjRs3pre39zn7ffvb386dd97ZyqkAAAAAAADYDy3NDBqvJ598MgcddNCBOBUAAAAAAAC7mfIwaOfOnbn77rtTFMVUnwoAAAAAAIBnmPAycWeeeeYeX990003ZuHHjXvs+/fTTeeSRR/L000/nve997/5VCAAAAAAAwH6bcBg0NDQ09vdKpZKRkZGMjIzs/c27ulIURd74xjdmxYoV+18lAAAAAAAA+2XCYdCWLVvG/n7KKafk7W9/ey699NJJLQoAAAAAAIDJMeEwaHeXXnppjj/++MmqBQAAAAAAgEnWUhj09re/fbLqAAAAAAAAYApUWzn4s5/9bM4888zcfvvt++zzpS99KWeeeWY+97nPtXIqAAAAAAAA9kNLYdCNN96YH//4xznttNP22efVr351RkZGcsMNN7RyKgAAAAAAAPZDS2HQ/fffn5NPPjldXfteba6rqyunnHJK7r///lZOBQAAAAAAwH5oac+g4eHhHHHEEc/Z74gjjsimTZsm9N5vfOMbMzQ0tNfX3vWud+UP/uAP9mjbuXNnLr/88tx88815+OGHc9RRR+Wss87KBRdckFmzZk3o3AAAAAAAAGXRUhj0ghe8IN/97nefs993v/vdHH744RN+/8MOOyzvf//7n9X+spe9bI+vR0ZGcvbZZ2dwcDCnn356+vv7s2XLllx99dW54447ct1116W7u3vC5wcAAAAAAJjuWgqD5s2bl5tvvjmbNm3K/Pnz99pn06ZN+drXvpZFixZN+P0PP/zwXHDBBc/Zb2BgIIODg1m2bFkuuuiisfbLLrssa9asycDAQC688MIJnx8AAAAAAGC6a2nPoKVLlyZJfvM3fzNXX311RkZGxl4bGRnJ1VdfneXLl6dSqYz1nWyNRiNr165Nd3d3li9fvsdr5557bmbPnp1169al0WhMyfkBAAAAAAA6WUszg171qlflwx/+cP74j/947J8XvvCFSZIf/OAHY/1Wrly5z5lDP8tTTz2VG264IQ899FAOP/zwzJs3L6eccsoefbZu3ZparZYzzjjjWUvBHXrooZk/f34+//nPZ9u2bZkzZ87Ev0kAAAAAAIBprKUwKGnODjr11FPziU98InfeeWceeeSRJMnznve8LFy4MP/1v/7XLFiwYL/e++GHH87FF1+8R9vr/v/2/j1Oq7reG/9f13BQCUVQxgRUTAUJDSUEFS1P20NgeULd5WkTW1Ox252KWv3au4PRZuu2FL0lvE007c5T2260raIWaSIgmKaA2xMnD1OCHCSOc33/mN+MIIMOzAwzc83z+Xj0qPmsz7XW+6p3l+u93mt91uGHZ8yYMenSpUuSZO7cuUmyyUbPHnvsUTNPMwgAAAAAAGht6t0MSpKDDjooBx10UCorK7N48eIkSefOnVNWtuWr0J1yyikZOHBg9t5777Rv3z6vvfZaxo4dm8mTJ+eiiy7Kr371qxQKhSxbtixJ0rFjx1r3Uz1ePa82nTp1qlesbL7OnTs3dQi0EHKFzSFf2Bzyhc0hX9ja1CilzW8KdSFPqCu5Ql3IE+pCnpS2BmkGVSsrK6tZJq6+Ro4cucHf/fr1y7hx43LWWWflueeeyx/+8IccccQRDXKsJUuWNMh+qJvOnTvXNA3h48gVNod8YXPIFzaHfOGjtkaRrEYpXX5TqAt5Ql3JFepCnlAX8qRlq0uN0qJuNSsrK8spp5ySJJkxY0aSZPvtt0+SLF++vNbPVI9XzwMAAAAAAGhN6v1kULFYzG9/+9s8/vjjmTt3bj744IMUi8WN5hUKhUyaNKm+h6vpcP39739P8uE7gd58881a51e/U6h6HgAAAAAAQGtSr2bQ6tWrc8EFF2TKlCm1NoCSqibQprZtiRdeeCFJ0r179yRJz549U15enhkzZmTFihXp0KFDzdxVq1Zl+vTpKS8v1wwCAAAAAABapXotE/eLX/wizzzzTI444og8+uij+cpXvpJCoZAXX3wxDz/8cEaOHJntttsuX//61zN79uw67/fVV1/N0qVLNxqfPn16fvGLX6R9+/Y59thjk1Q1m4YNG5YVK1bkpptu2mD+uHHjsmTJkgwbNiyFQqE+XxUAAAAAAKBFqteTQQ8//HA6deqU6667Lh06dEhZWVVvqV27dvnMZz6TkSNH5uCDD84555yTPffcM6eddlqd9vu73/0ut956aw455JB079497du3zyuvvJKnn346ZWVl+f73v59u3brVzB8xYkSeeOKJ3HrrrZk1a1b69u2b2bNnZ/LkyenTp09GjBhRn68JAAAAAADQYtWrGTRv3rwMGDCgZmm26qdv1q1blzZt2iRJBgwYkP79++fuu++uczNo0KBBee211/Lyyy9n6tSpWb16dXbaaad86UtfynnnnZfPfe5zG8zv0KFD7rzzzowdOzaPPPJIpk6dmp133jnnnXdeRo4cucHScQAAAAAAAK1JvZpBZWVl6dixY83f1U2XRYsWpWvXrjXju+yyS5544ok673fgwIEZOHDgZsWy/fbb5+qrr87VV1+9WZ8DAAAAAAAoZfV6Z9Auu+ySt99+u+bv3XffPUny5z//eYN5c+bMyac+9an6HAoAAAAAAIAtUK9mUL9+/fI///M/WblyZZLki1/8YpLkmmuuyR/+8IfMmTMnP/zhD/Paa69ttLQbAAAAAAAAja9ezaDjjjsu2223XZ5++ukkyR577JFzzz03b7/9dr7xjW/kpJNOyl133ZVtt902l19+eYMEDFtDRUUxM2YWU1FRbOpQAAAAADabaxsArK9e7ww64ogj8tRTT20wdtVVV2X//ffPpEmTsnTp0vTs2TNnn312evbsWZ9DwVYz8aFixlxXTGVlUlaWjLosGTqk0NRhAQAAANSJaxsAfFS9mkGbMmTIkAwZMqQxdg2NqqLiw5OlJKmsTMZcV8zAg5LycidNAAAAQPPm2gYAtanXMnFQahYsTM3JUrXKyqpxAAAAgObOtQ0AaqMZBOvp0b3q8en1lZVVjQMAAAA0d65tAFCb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v74rmnWdDjQ+zSAAGlx5eaFZN1U8Jg8AAMCWaqiad2vWps29Tgcan2XiAGh1LGcHAABAU1ObAluTJ4MAaJVawnJ2AAAAlDa1KbC1aAYB0Gp5TB4AAICmpjYFtgbLxAEAAAAAAJQwzSAAAAAAAIASphkEAAAAAABQwjSDAAAAAAAASphmEAAAAAAAQAlrMc2g8ePHp3fv3undu3eef/75WucsX748o0ePzpFHHpn99tsvRx55ZEaPHp3ly5dv3WABAAAAAACaiRbRDHrttddyww03pEOHDpucs2LFipx11lm5/fbbs+eee+a8887LXnvtldtvvz1nnXVWVqxYsRUjBgAAAAAAaB6afTNo3bp1ufLKK7PvvvvmmGOO2eS8W2+9NbNmzcqIESNy22235fLLL8+tt96aiy++OLNmzcqtt966FaMGAAAAAABoHpp9M2j8+PGZPXt2fvzjH6dNmza1zikWi7n33nvToUOHXHzxxRtsu+CCC9KpU6fcd999KRaLWyNkAAAAAACAZqNZN4NeeeWVjB07NhdeeGH22WefTc578803U1FRkf79+2+0lNw222yTAQMG5N13383cuXMbO2QAAAAAAIBmpdk2g9auXZurrroqe+21V84///yPnVvd5OnZs2et2/fYY48N5gEAAAAAALQWbZs6gE255ZZbMmfOnNxzzz1p167dx85dtmxZkqRjx461bq8er573UZ06dUpZWbPti5Wkzp07N3UItBByhc2xufnyzrvrMnduZfbYoyyf3qX2pUgpXX5f2Bzyha1NjVLa/KZQF/KEupIr1IU8oS5qyxPXTkpHs2wGzZ49O7fcckuGDx+evn37NvrxlixZ0ujH4EOdO3fO4sWLmzoMWgC5wubY3HyZ+FAxY64rprIyKStLRl1WyNAhhUaMkObE7wubQ77wUVvjYooapXT5TaEu5Al1JVeoC3lCXdSWJ66dtBx1qVGa5a1mV155ZXbbbbdccskldZq//fbbJ0mWL19e6/bq8ep5ALRuFRUfnswkSWVlMua6Yioqik0bGAAAAEAz4NpJ6Wm2TwYlyf7771/r9jPOOCNJctNNN+WYY46peSfQm2++Wev86ncFVc8DoHVbsDA1JzPVKiurxsvLmyYmAAAAgObCtZPS0yybQaeddlqt49OnT8+bb76Zo446Kl26dEn37t2TJD179kx5eXlm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Fykr81B1S9YQuTJv3ryceeaZee+99zJ48OD07t07c+fOzRNPPJEuXbrk//7f/5vdd999K3wboLmpvtDSuXPndOjQIQsXLtxkM2jFihX56le/mlmzZmXw4MH57Gc/m9mzZ+ePf/xj+vTpk7vvvjsdOnRogm9BY7r22mszfvz47L777jnooIOy0047Ze7cuZk0aVKKxWKuu+66fOlLX6qZL09ar7lz5+akk05Kv379svvuu2fHHXfMe++9lyeffDLvvfdeTj/99Pzwhz+smS9XeO2113LSSSelbdu2WbFiRa3NIHnSeh111FFZunRpzj333I227bfffjnyyCNr/pYnJa4IW2DNmjXFY445prjffvsVX3rppZrxZcuWFYcMGVL87Gc/W3zjjTc+cT9Tpkwp9urVq3jDDTc0YrQ0tYbKl7Vr1xZPPfXU4uc+97niM888U+txaPkaKl825b//+7+LvXr1Kl5wwQUNEC1NraHy5ec//3mxV69exR//+McbjK9atap46qmnFnv16lWcOnVqQ4fPVtRQuXL++ecXe/XqVZwwYcIG4w8//HCxV69exeHDhzd06EAL8fTTTxcXLFhQLBaLxXHjxhV79epVvP/++2ud+7Of/azYq1ev4pgxY2od/9nPftbo8bL1PfLII8Vp06ZtND5t2rRi3759iwMHDiyuWrWqZlyetF5r166ttb5dtmxZ8Utf+lKxV69exVdeeaVmXK60btXXSk477bTi5ZdfXuzVq1dx5syZG82TJ63XkUceWTzyyCPrNFeelDa3t7JFpkyZknnz5mXo0KH57Gc/WzPesWPHXHTRRVm7dm0eeOCBJoyQ5qSh8uWRRx7Jiy++mOHDh+fggw/eaHvbtla+LAWN/fty7733JklOO+20esdK02uofJk/f36S5Itf/OIG4+3bt8/gwYOTJO+9914DRs7W1hC5smrVqjz11FPZeeedc/bZZ2+w7YQTTkifPn3y1FNP1eQT0Loceuih6d69+yfOKxaLuffee9OhQ4dcfPHFG2y74IIL0qlTp9x3330pWsSj5Bx77LEZMGDARuMDBgzIoEGD8v7772fOnDlJ5Elr16ZNm1rr244dO+awww5LUvX0UCJXqFoebvbs2fnxj3+cNm3a1DpHnlAX8qT0aQaxRarfw1F9ErK+6otmn/SujvW9+eabueOOO/Lzn/88EydOzKJFixomUJqFhsqXhx9+OEly/PHH5+23386vfvWr/PznP8/vfve7fPDBBw0YMU2poX9f1vfOO+/k6aefTteuXXPEEUdscYw0Hw2VL/vss0+S5I9//OMG42vWrMmf/vSnbLvttjnwwAPrGy5NqCFy5f3338/atWvTrVu3jdbpT5IePXokqWo8AWzKm2++mYqKivTv33+jZVa22WabDBgwIO+++27NhV5ah+oL/9X/Lk+ozapVqzJlypQUCoXsvffeSeRKa/fKK69k7NixufDCC2tqmtrIE1avXp3f/OY3ueWWW3L33Xdn9uzZG82RJ6XPbfRskTfffDNJsscee2y0rVOnTuncufNm/TBMnDgxEydOrPl72223zSWXXJIRI0bUO1aaXkPly1/+8pckyXPPPZfRo0dn9erVNdu6dOmSn/70pxk0aFDDBE2Taejfl/Xdf//9qayszMknn+xJshLRUPkybNiwPPjgg7ntttvyl7/8Jfvtt1/WrFmTP/7xj1myZEmuu+4675dq4RoiV3bYYYe0adMmb731VorF4kYNoQULFmxwLIDaVP/W9OzZs9bt1b9Tc+fO3eQcSstbb72VP/3pT+natWt69eqVRJ5QZenSpZkwYUIqKyvz3nvvZfLkyXn77bczcuTImv/d5UrrtXbt2lx11VXZa6+9cv7553/sXHnCX//611x11VUbjB1++OEZM2ZMunTpkkSetAauhLFFli9fniTZfvvta93esWPHvPPOO5+4ny5dumTUqFE54ogj0q1btyxdujTPPvtsrr322vzHf/xHOnbsmDPPPLNBY2fra6h8qV6i6Uc/+lGGDx+es846K+3bt89DDz2Uf//3f8/FF1+chx9+OOXl5Q0XPFtdQ+XLRxWLxZoloCwRVzoaKl+23Xbb3Hnnnfne976X3/72tzVPiJSVleVrX/ta+vfv33BB0yQaIle22267HHTQQZkyZUruvvvufO1rX6vZ9uijj2bWrFlJkmXLljVQ1EApqv6N6NixY63bq8f9lrQOa9asyahRo7J69epcfvnlNUs8yROSqmbQ2LFja/5u165dRo0aleHDh9eMyZXW65ZbbsmcOXNyzz33pF27dh87V560bqecckoGDhyYvffeO+3bt89rr72WsWPHZvLkybnooovyq1/9KoVCQZ60AppBNKl99tlng8dYt9tuu3z5y1/Ovvvum1NOOSU33nhjTj/99JSVWdGQ1KxJesQRR+Tyyy+vGT/77LPz7rvvZvz48bnvvvty0UUXNVWINGNTpkzJggULMnDgwFqfDKB1W7RoUS666KIsWrQoP//5z9O/f/+sWrUqTzzxRH7yk5/k97//fe6///506tSpqUOliV199dX5x3/8x/zgBz/IE088kd69e2fevHl5/PHH07t378yZM8d5CwB1UllZmW9/+9uZNm1aTj/99Jx00klNHRLNTI8ePTJnzpysW7cub7/9dh5++OFcf/31mTlzZn76059a7aAVmz17dm655ZYMHz48ffv2bepwaOZGjhy5wd/9+vXLuHHjctZZZ+W5557LH/7wB0vptxIqVbbIJ3WCly9fvsk7b+uiV69e6devX/72t79Zh7IENFS+VO/nqKOO2mjbkUcemeTDpeRouRrr9+Xee+9N4qmgUtNQ+fKTn/wkM2fOzA033JAvfvGL2X777bPzzjvn9NNPzxVXXJH58+dnwoQJDRo7W1dD5cq+++6b++67LyeccEJefvnl3HHHHXnjjTfygx/8IF/5yleSpGaZBYDaVP/WVD+x+FGf9CQjpaFYLOa73/1ufvvb3+bLX/5yvv/972+wXZ6wvjZt2qRHjx45//zzc+mll+axxx7LPffck0SutFZXXnlldtttt1xyySV1mi9P+KiysrKccsopSZIZM2YkkSetgWYQW+Sja9Oub8mSJVm8eHG977zv3LlzkmTlypX12g9Nr6HyZc8990xS9c6Gj6oeW7VqVT0ipTlojN+XJUuW5LHHHssOO+yQ4447riHCpJloqHz5wx/+kB133DH77rvvRtsOPvjgJMlLL71Uv2BpUg3527LXXnvlpz/9aZ555pn85S9/yUMPPZRhw4blf/7nf5Ik++23X4PFDZSe6t+aTb1frPp3ypPMpav6iaD7778/Q4cOzU9+8pONniqVJ2zKYYcdliQ1yxrLldZp9uzZef3117P//vund+/eNf/6zW9+kyQ544wz0rt370yaNCmJPKF21dde//73vyeRJ62BZhBb5KCDDkqSPPXUUxtte/rpp5MkAwcO3OL9r127Ni+//HIKhUJ23XXXLd4PzUND5Uv1BdlXX311o23VY927d9/iOGkeGuP35be//W1Wr16dE088Mdtuu239g6TZaKh8Wb16dZYvX57Vq1dvtG3RokVJkvbt29cnVJpYY5+7LF++PE8++WR23HHHDB48eIv3A5S+nj17pry8PDNmzMiKFSs22LZq1apMnz495eXlLrSUqMrKynznO9/JAw88kC996UsZM2ZMzXuC1idP2JR33303SWryRq60Tqeddlqt/6q+Aeqoo47KaaedVnONRJ5QmxdeeCFJ5EkrohnEFjnkkEOy2267ZeLEiTUvS06qLoTcfPPNadu2bU4++eSa8UWLFuW1116ruaBWbebMmTXvgam2du3ajBkzJgsXLsxhhx2WHXfcsVG/C42vofLllFNOSfv27fPLX/6y5gS4ej/jxo1LkpxwwgmN/G1obA2VL+u77777klgirhQ1VL70798/a9euzc0337zB+OrVq2vGBg0a1IjfhMbWULmycuXKrF27doOx1atX5zvf+U7ef//9XHzxxdlmm20a98sALVqhUMiwYcOyYsWK3HTTTRtsGzduXJYsWZJhw4alUCg0UYQ0lvUbQccff3z+4z/+o9ZGUCJPWrtZs2bVurTt+++/n+uvvz5J8oUvfCGJXGmtrrnmmlr/deCBByZJLrjgglxzzTXp06dPEnnSmr366qtZunTpRuPTp0/PL37xi7Rv3z7HHntsEnnSGhSKH70SD3U0ZcqUjBgxIu3atcvQoUPTsWPHPProo1mwYEEuvfTSXHjhhTVzb7zxxowdOzYjR47cYD3T6ne/HHjggdlll12ybNmyTJs2LW+88Ua6deuWX/7yl570KBENkS9Jcuedd+ZHP/pRdtxxx/zDP/xD2rdvn9///vdZuHBhzjjjjPzgBz/Y2l+NRtBQ+ZJUvUfq1FNPTd++ffPAAw9sza/BVtIQ+TJr1qx87WtfywcffJDPfe5z6d+/f1atWpWnnnoq8+fPT9++ffOrX/3KRf4WriFyZfr06bnkkkty6KGHZtddd83y5cvzhz/8IW+99VZOP/30/OAHP1AcQSt177335rnnnkuSvPLKK3nppZfSv3//mrtnjznmmBxzzDFJkhUrVuSrX/1qZs2alcGDB6dv376ZPXt2Jk+enD59+uTuu+9Ohw4dmuy70Diq/9nSoUOHnHPOOWnbtu1Gc4455piai7fypPW65pprct9992XQoEHp1q1btttuu7z11lv5/e9/nxUrVuS4447LT3/605rlBeUK1a666qr85je/ya9//esccMABG2yTJ63TjTfemFtvvTWHHHJIunfvnvbt2+eVV17J008/nbKysnz/+9/PsGHDaubLk9K28ZkH1NHBBx+cu+++OzfccEN+97vfZc2aNdl7773zv/7X/8qXv/zlOu3jzDPPzB//+MdMnTo1ixcvTtu2bbP77rvnG9/4RoYPH55OnTo18rdga2mIfEmSs88+O927d8//+T//Jw899FDWrVuXvffeO9/4xjdy+umnN+I3YGtqqHxJPBXUGjREvvTp0ycPPPBAxo0blylTpuSuu+5KmzZtsvvuu+eSSy7J17/+dY2gEtAQudKtW7cMHDgwzz33XP72t79lu+22y2c/+9lcddVV3kkGrdxzzz1X866GajNmzKh5KXP37t1rmkEdOnTInXfembFjx+aRRx7J1KlTs/POO+e8887LyJEjXWQpUQsXLkxSdaHtlltuqXVO9+7da5pB8qT1Ou6447J8+fI8//zzmTZtWlauXJlOnTrl85//fE466aQMGTJkg5tP5Ap1IU9ap0GDBuW1117Lyy+/nKlTp2b16tXZaaed8qUvfSnnnXdePve5z20wX56UNk8GAQAAAAAAlDDvDAIAAAAAAChhmkEAAAAAAAAlTDMIAAAAAACghGkGAQAAAAAAlDDNIAAAAAAAgBKmGQQAAAAAAFDCNIMAAAAAAABKmGYQAAAAAABACdMMAgAAAAAAKGGaQQA0igULFqR37945++yzmzqUJMlRRx2V3r17N3UYAAAAW93EiRNzyimnpF+/fundu3eOOuqopg4JgK2sbVMHAAAAAAA0jhdeeCFXXHFFttlmmwwePDg77LBDOnfuvMX7O+qoo7Jw4cLMmTOnAaMEoLFpBgEAAABAiXryySdTWVmZ7373uznttNOaOhwAmohl4gAAAACgRL3zzjtJkt12262JIwGgKWkGAbDVPfvss+nfv3/69++fqVOn1oy/9dZb+cEPfpBjjz02+++/fwYNGpTTTjstt9xyS1auXFkzb+7cubnxxhtzxhlnZPDgwdlvv/3yhS98IaNGjcobb7zRIDHeeOON6d27dx544IH8+c9/zte//vUMGDAg/fv3zz/90z/l+eef3+Rn58yZk8suuyyHH3549ttvvxx22GG5+uqrs2DBgo89zgsvvJALLrgggwYNSu/evTNr1qyPjfHhhx/Oqaeems997nM59NBDc/XVV+dvf/tbrrrqqvTu3TvPPvtsff9rAACAVmf9958uX748P/rRj/LFL34x+++/f0444YTcfvvtqays3OhzH3zwQcaOHZsTTzwx/fr1S//+/XPWWWdl0qRJn3iMn/zkJznqqKPSt2/fXHPNNTXzFi1alOuuuy5Dhw7NAQcckAEDBuQrX/lKrr/++ixevPhjv8cDDzxQU2skyTnnnJPevXtvMFZRUZHx48fnrLPOqqlfBg8enJEjR+aFF17YYH/PPvtsevfunYULFyZJzb68gwigZbBMHABb1aRJk/Ktb30rn/rUpzJ+/Pjst99+SZJp06blwgsvzLJly7Lbbrvl6KOPzt///ve8+uqruf766zN06ND06NEjSXLvvfdm/Pjx2XvvvbPffvtlm222yauvvpoHH3wwjz/+eO66667su+++DRLvzJkz873vfS977LFHvvCFL2Tu3Ln505/+lGnTpmXcuHEZPHjwBvMfeeSRXHbZZVmzZk369u2bAw88MPPnz88DDzyQJ554Ir/85S+zzz77bHScadOm5Xvf+1569uyZwYMHp6KiIoVCYZNx3X777Rk9enTatGmTgQMHpnPnznn66adrCjQAAKB+Vq9enXPOOSfz58/PwQcfnDVr1uSZZ57J6NGjM2fOnIwePbpm7t/+9rece+65efXVV7PLLrvk0EMPzcqVK/P888/n4osvzmWXXZbzzz9/o2OsXLkyZ511Vt56660cdNBB6du3bzp16pQkefXVVzN8+PC8++676dq1aw4//PCsW7cub7zxRm655ZYceuihGTRo0Cbj33333XPyySfnueeey7x583LYYYela9euNduS5PHHH8+1116bPfbYI7169UrHjh0zb968PPbYY/n973+fW265JYcddliSZOedd87JJ5+cRx55JCtWrMjJJ59cc6z6vIMIgK2jUCwWi00dBAClZ8GCBTn66KMzcODA3HnnnUmq7kz77ne/m/Ly8tx22235zGc+kyRZsmRJjj/++CxatChXX311zj333A0aIdOmTcu+++6b7bffPkny/PPPp0uXLjUFTLX7778/3/72tzNo0KDccccdG2zb3Jec3njjjRk7dmyS5Bvf+EYuvfTSmpjuvvvufP/73095eXkmTZqUbbbZJkkyf/78nHjiiWnbtm3+9//+3znooINq9vdf//VfufLKK7P//vvnvvvuq/U4l19+ef75n//5E2ObP39+TjjhhJSVleW2227LgAEDkiSrVq3KN7/5zfz+979Pktxxxx0fWxwCAAAbq65lkqqnX26//fZ06dIlSTJv3rx87WtfS0VFRW6++eaaef/8z/+cyZMnZ8SIEbn00kvTrl27JFXn7sOHD8/ChQvzwAMP1Ny0tv4xDjzwwPz85z/PDjvsUBPD2rVrc+KJJ+b111/P8OHD861vfatmn0ny8ssvp0uXLvn0pz/9id/nqquuym9+85ta64M5c+akWCxudDPdH//4x1x44YXZdddd8+ijj25Qn21ubQVA82CZOAC2il/84hf59re/nd133z2/+tWvahpBSXLPPfdk0aJFOfLII3Peeedt9ETMQQcdVNMISpIDDjhgo0ZQkpx66qk1S88tW7asQeLu3r17Lrnkkg1i+upXv5p+/fqloqIijz32WM34HXfckb///e+54oorNmgEJclJJ52UY445Ji+++GJeeumljY7Tq1evjBgxok4x3XfffVmzZk1OOumkmkZQkmyzzTb5zne+k7Iy/3gHAICGcOWVV9Y0gpKqJ2ouuuiiJFU3iSXJrFmzMnny5Bx44IG5/PLLN2ja7Lbbbrnyyiuzbt26DW4KW993vvOdDRpBSfLoo4/m9ddfT+/evXPFFVdssM8k+exnP1unRtAn6d27d62rKhx++OE5/vjjM2/evLzyyiv1Pg4ATc8ycQA0uuuvvz633HJL+vbtm1tvvXWDYipJnnnmmSTJGWecUed9fvDBB3nyyScza9asLFmyJGvXrk2S/PWvf02xWMy8efPSt2/fesd+7LHHpm3bjf9xOWTIkPz5z3/Oc889l6FDhyZJ/vSnPyVJzR1+H/X5z38+kyZNyosvvrhRbEceeeTHLgu3vpkzZyZJTjjhhI227b777unTp0+tDScAAKDudtxxx42WhU6SE088Mf/2b/+WGTNmpFgs5umnn05SVQfUdk7/+c9/Pkny4osvbrSta9eu2X///Tcar66RTj/99Ea/2Wv16tWZPHlyXnzxxSxatChr1qxJkpom0Ny5cy1FDVACNIMAaFQzZszI1KlT07Vr19xxxx3p2LHjRnPefvvtJKn1aZ/aPPPMM/nWt76VRYsWbXLOBx98sGUBf0S3bt1qHe/evXuSqheuVqt+kWptBeP6anvR66677lrnmKqPuak7Abt166YZBAAA9bSpWqBjx47ZYYcdsnTp0ixfvrymDrj22mtz7bXXbnJ/tdUBmzpGdY202267bW7Ym2XOnDm58MILa75DbRqqtgKgaWkGAdCo9tprryRVRcYNN9yQb3/72/Xa3wcffJBLL70077//fi666KIMHTo03bp1y7bbbptCoZDLLrssEydOTFO8Em/dunUpFAo56aSTPnbePvvss9FY9XuHNsemniTyOkAAAGhc659zr1u3LkkyYMCAj23edO7ceaOxT6oD6rp6wJYoFou59NJLs3Dhwpx55pn5x3/8x/To0SOf+tSnUigU8p//+Z8ZN26c+gKgRGgGAdCoOnXqlJ/97Gc599xzM2HChLRp0yZXXnnlBnN23XXXvP7665k3b15N82hTpk+fnvfffz/HHXdc/tf/+l8bbZ8/f36Dxv/WW2997Hh5eXnN2Kc//enMmzcv3/3ud2t9AqqhdO3aNW+88Ubefvvt9OzZc6Pt1XcRAgAAW25TtcDy5cuzbNmydOjQIR07dqx5Yv+4447LOeec0yDHrl45YN68eQ2yv9q8/vrref3117Pffvvl+9///kbbG7q2AqBpecM0AI2uS5cuuf3227PPPvvktttu22jphEMOOSRJ8utf//oT97V06dIktS+RNnfu3Lz88ssNEPGHHn300Zo7/db38MMPJ0n69+9fM1b9PSZNmtSgMXxU9TH/+7//e6Nt8+fPz6xZsxr1+AAA0Bq8//77Ne8FXd/EiROTJAceeGAKhUIOPfTQJA1bB1TXFvfee2+jPZmzZMmSJLXXVkuWLKn1uydJu3btkqTmva0AtAyaQQBsFTvttFMmTJiQvfbaK+PHj8/1119fs23YsGHp3Llznnzyyfzyl7/cqNiZPn16li1bliQ1T8I89thjG7wzaOnSpfnOd75T87LTuho1alSOP/74PPbYY7VuX7hwYcaOHbvB2K9//evMnDkzXbt2zT/8wz/UjA8fPjzbbrttRo8enSeeeGKjfb3//vu56667snLlyjrF9thjj+X444/PqFGjNhg/5ZRT0q5du/zmN7/JjBkzasZXrVqVa665JpWVlXXaPwAA8PHGjBmzwbt+5s+fn5tvvjlJ8tWvfjVJcsABB+SQQw7Js88+mx//+McbvWOnsrIyTz31VKZPn17n4x577LHp2bNnZs+enWuvvXajxsusWbPyzjvv1Pz9wgsv5Pjjj8+5555b52PsscceKSsry5QpU/Lmm2/WjK9atSr/+q//mvfff7/Wz1WvjvDGG2/U+VgAND3LxAGw1VQ3hM4+++zccsstadOmTb75zW9mxx13zE9/+tNcdNFF+eEPf5gJEyakb9++WblyZf7nf/4nCxYsyOOPP57tt98++++/fwYPHpynn346xx13XAYOHJgkmTp1ajp37pyjjz46jz/+eJ1jevvtt/PGG2/UNJs+6vTTT8/48ePz2GOPpXfv3pk7d25efPHFtGvXLj/+8Y+z7bbb1szt2bNn/uM//iNXXHFFLrzwwuy5557Za6+9UiwW89Zbb+XVV1/NmjVrcuKJJ27wuU1ZtmxZ3njjjXTt2nWD8T322CP/8i//kjFjxuSss87KoEGDsuOOO2bGjBkpKyvLkUcemSeffLLmjj0AAGDzHXDAAVmzZk2OO+64HHzwwVm9enWmTJmSv//97/nyl7+cY445pmbutddem+HDh2fChAl58MEHs++++6ZLly55991388Ybb2TRokW5+uqrM2DAgDodu23btrnxxhszfPjw3Hrrrfntb3+bAw88MOvWrcsbb7yR1157LXfccUfNUz1///vf88Ybb2T16tV1/n477bRTTjvttNxzzz35yle+koMPPjjbbLNNnnvuuaxbty6nnHJKHnjggY0+d9RRR2Xq1Kk577zzMmjQoGy33Xbp3LlzLr/88jofG4Ctz5NBAGxVXbt2zR133JGePXvmpptuyk033ZQkOfjgg/Pggw/mjDPOyLp16zJp0qQ8//zz2WmnnXLZZZdt0BC5+eab841vfCNdunTJ5MmT89JLL+VLX/pSfv3rX2eHHXZo0HgPPPDA3Hnnndl5553z5JNP5rXXXsshhxySO+64I1/4whc2mn/sscfWfI+1a9dm8uTJmTp1alavXp0TTzwx48aNy/bbb1/vuL7+9a/nP//zP7Pvvvtm+vTpmTJlSgYNGpRf//rXWbVqVZJkxx13rPdxAACgtWrfvn0mTJiQIUOGZObMmXnqqafy6U9/OldeeWV+8pOfbDB35513zj333JOrr746e+yxR1588cVMmjQp77zzTj772c/me9/7Xr785S9v1vF79eqV//qv/8rw4cPToUOHPPnkk5k2bVrat2+fCy+8ML179673d/y3f/u3XHXVVenRo0eeeeaZPPfccznkkENy//33p1u3brV+5uyzz86FF16YDh065NFHH819991Xs4w2AM1XodhYC48CQAt24403ZuzYsRk9enROOeWUpg6nzlasWJGjjjoqq1atyvTp09OmTZumDgkAAFqUBQsW5Oijj87AgQNz5513NnU4ANAgPBkEAC3Q/PnzN1ra7oMPPsi//uu/ZvHixTnhhBM0ggAAAABI4p1BANAi/e53v8uNN96Yvn375tOf/nSWLl2al19+OYsXL0737t3zrW99q6lDBAAAAKCZ0AwCgBbo4IMPzqxZs/LnP/85s2bNSrFYzK677pqTTz45//zP/5wuXbo0dYgAAAAANBPeGQQAAAAAAFDCvDMIAAAAAACghGkGAQAAAAAAlDDNIAAAAAAAgBKmGQQAAAAAAFDCNIMAAAAAAABKmGYQAAAAAABACdMMAgAAAAAAKGGaQQAAAAAAACXs/wOnS0BiTQA+ygAAAABJRU5ErkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "az.plot_pair(d[[\"kcal.per.g\", \"perc.fat\", \"perc.lactose\"]].to_dict(\"list\"))\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.12" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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qLq6Ws8++6zuuusuj9rp7FzF1n8+lJOTozlz5ig8PFwTJkxQVFSUMjIyVFhYqJSUFM2bN69N7TzxxBPasGGDHA6Hxo4dq+LiYm3ZskWRkZFav369HA6Hjz8JmuKN+R0zZoxKS0t18803a/jw4bJYLNq+fbs+/fRTXXnllVq/fr369OnTCZ8G9Xnr3259//u//6u//e1vqqioIGz7mbfm9+jRo5o1a5YKCgr07W9/W8OHD1dVVZUOHz6so0eP6vXXX/fxJ8E3eWNuz5w5o7vuuksFBQW6+eabdeONN6qqqkoffvihDh8+rMTERK1evVohIRQHdLZbb71VR44ckd1ul9Vq1ZEjR9oVtjs9VxnwierqauO2224zrrvuOmP//v3u6+Xl5caECROMESNGGHl5ea22s23bNiM2NtaYOXOmUVlZ6b7+z3/+04iLizPuvfdeXwwfrfDW/L7wwgvG8ePHG1yrq6sznnrqKSM2NtZYsmSJt4eOVnhrbuvbt2+fMWLECOPll182YmNjjX/913/18qjRVt6a35qaGuPuu+82brjhBmPbtm1N9oPO5a25ffHFF43Y2Fjjl7/8ZYPrlZWVxt13323ExsYa27dv9/bw0QZZWVlGYWGhYRjm/3/GxsYaf//73z1qwx+5il/LfCQ7O1uHDx/WxIkTNWLECPd1m82m+fPnq6amRhs3bmy1nfT0dEnS4sWLFRER4b6elJSk5ORk5ebmKi8vz/sfAC3y1vz++7//u/r169fgmsVi0fz58yVJubm53h04WuWtuXWpqqrSY489phtvvFH33XefL4YMD3hrft98803t3btXDz30kBITExvdDwujSrOzeWtuCwoKJEljx45tcD0iIkJjxoyRJBUXF3tx5Girb3/72xo4cGCH2vBHriJs+8j27dslScnJyY3uuf6xut7TkpycHFmtVo0cObLRPVfbBLLO5635bY7r/6hDQ0Pb3Qbax9tzu3LlSuXn5+sXv/iFLBaLdwaJdvPW/G7ZskWSdMcdd+jYsWP6v//7P7344ovaunWrzp4968URo628NbfDhg2TJH300UcNrldXV+uf//ynunXrpptuuqmjw4Wf+CNX8au3jxw6dEiSNHjw4Eb3oqOjZbfblZ+f32IbFRUVOnnypGJjY5sMXa4ifldf6DzemN+W/P3vf5d08f8g0Hm8Obd79uzRn//8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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "milk = pd.read_csv(\"../data/milk.csv\", sep=\";\")\n", "d = milk\n", "\n", "\n", "def sim_coll(i, r=0.9):\n", " sd = jnp.sqrt((1 - r**2) * jnp.var(d[\"perc.fat\"].values))\n", " x = dist.Normal(r * d[\"perc.fat\"].values, sd).sample(random.PRNGKey(3 * i))\n", "\n", " def model(perc_fat, kcal_per_g):\n", " intercept = numpyro.sample(\"intercept\", dist.Normal(0, 10))\n", " b_perc_flat = numpyro.sample(\"b_perc.fat\", dist.Normal(0, 10))\n", " b_x = numpyro.sample(\"b_x\", dist.Normal(0, 10))\n", " sigma = numpyro.sample(\"sigma\", dist.HalfCauchy(2))\n", " mu = intercept + b_perc_flat * perc_fat + b_x * x\n", " numpyro.sample(\"kcal.per.g\", dist.Normal(mu, sigma), obs=kcal_per_g)\n", "\n", " m = AutoLaplaceApproximation(model)\n", " svi = SVI(\n", " model,\n", " m,\n", " optim.Adam(0.01),\n", " Trace_ELBO(),\n", " perc_fat=d[\"perc.fat\"].values,\n", " kcal_per_g=d[\"kcal.per.g\"].values,\n", " )\n", " svi_result = svi.run(random.PRNGKey(3 * i + 1), 20000, progress_bar=False)\n", " params = svi_result.params\n", " samples = m.sample_posterior(random.PRNGKey(3 * i + 2), params, sample_shape=(1000,))\n", " vcov = jnp.cov(jnp.stack(list(samples.values()), axis=0))\n", " stddev = jnp.sqrt(jnp.diag(vcov)) # stddev of parameter\n", " return dict(zip(samples.keys(), stddev))[\"b_perc.fat\"]\n", "\n", "\n", "def rep_sim_coll(r=0.9, n=100):\n", " stddev = lax.map(lambda i: sim_coll(i, r=r), jnp.arange(n))\n", " return jnp.nanmean(stddev)\n", "\n", "\n", "r_seq = jnp.arange(start=0, stop=1, step=0.01)\n", "stddev = lax.map(lambda z: rep_sim_coll(r=z, n=100), r_seq)\n", "plt.plot(r_seq, stddev)\n", "plt.xlabel(\"correlation\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.13" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " fungus 0.31 0.46 0.00 0.00 1.00 18.52 1.17\n", " h0 9.73 1.95 9.63 7.05 13.33 80.22 0.99\n", " h1 13.72 2.47 13.60 10.73 18.38 43.44 1.08\n", " treatment 0.50 0.50 0.50 0.00 1.00 2.64 inf\n", "\n" ] } ], "source": [ "with numpyro.handlers.seed(rng_seed=71):\n", " # number of plants\n", " N = 100\n", "\n", " # simulate initial heights\n", " h0 = numpyro.sample(\"h0\", dist.Normal(10, 2).expand([N]))\n", "\n", " # assign treatments and simulate fungus and growth\n", " treatment = jnp.repeat(jnp.arange(2), repeats=N // 2)\n", " fungus = numpyro.sample(\n", " \"fungus\", dist.Binomial(total_count=1, probs=(0.5 - treatment * 0.4))\n", " )\n", " h1 = h0 + numpyro.sample(\"diff\", dist.Normal(5 - 3 * fungus))\n", "\n", " # compose a clean data frame\n", " d = pd.DataFrame({\"h0\": h0, \"h1\": h1, \"treatment\": treatment, \"fungus\": fungus})\n", "print_summary(dict(zip(d.columns, d.T.values)), 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.14" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " sim_p 1.04 0.27 1.00 0.63 1.44 9936.32 1.00\n", "\n" ] } ], "source": [ "sim_p = dist.LogNormal(0, 0.25).sample(random.PRNGKey(0), (int(1e4),))\n", "print_summary({\"sim_p\": sim_p}, 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.15" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [00:00<00:00, 1057.45it/s, init loss: 279.8950, avg. loss [951-1000]: 200.2917]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " p 1.39 0.02 1.39 1.36 1.42 994.30 1.00\n", " sigma 1.84 0.13 1.84 1.65 2.06 1011.70 1.00\n", "\n" ] } ], "source": [ "def model(h0, h1):\n", " p = numpyro.sample(\"p\", dist.LogNormal(0, 0.25))\n", " sigma = numpyro.sample(\"sigma\", dist.Exponential(1))\n", " mu = h0 * p\n", " numpyro.sample(\"h1\", dist.Normal(mu, sigma), obs=h1)\n", "\n", "\n", "m6_6 = AutoLaplaceApproximation(model)\n", "svi = SVI(model, m6_6, optim.Adam(1), Trace_ELBO(), h0=d.h0.values, h1=d.h1.values)\n", "svi_result = svi.run(random.PRNGKey(0), 1000)\n", "p6_6 = svi_result.params\n", "post = m6_6.sample_posterior(random.PRNGKey(1), p6_6, sample_shape=(1000,))\n", "print_summary(post, 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.16" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [00:01<00:00, 763.78it/s, init loss: 151456.4062, avg. loss [951-1000]: 164.8744]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " a 1.47 0.03 1.47 1.43 1.51 1049.04 1.00\n", " bf -0.28 0.03 -0.28 -0.33 -0.23 910.93 1.00\n", " bt 0.01 0.03 0.01 -0.03 0.06 1123.06 1.00\n", " sigma 1.39 0.10 1.39 1.21 1.54 976.96 1.00\n", "\n" ] } ], "source": [ "def model(treatment, fungus, h0, h1):\n", " a = numpyro.sample(\"a\", dist.LogNormal(0, 0.2))\n", " bt = numpyro.sample(\"bt\", dist.Normal(0, 0.5))\n", " bf = numpyro.sample(\"bf\", dist.Normal(0, 0.5))\n", " sigma = numpyro.sample(\"sigma\", dist.Exponential(1))\n", " p = a + bt * treatment + bf * fungus\n", " mu = h0 * p\n", " numpyro.sample(\"h1\", dist.Normal(mu, sigma), obs=h1)\n", "\n", "\n", "m6_7 = AutoLaplaceApproximation(model)\n", "svi = SVI(\n", " model,\n", " m6_7,\n", " optim.Adam(0.3),\n", " Trace_ELBO(),\n", " treatment=d.treatment.values,\n", " fungus=d.fungus.values,\n", " h0=d.h0.values,\n", " h1=d.h1.values,\n", ")\n", "svi_result = svi.run(random.PRNGKey(0), 1000)\n", "p6_7 = svi_result.params\n", "post = m6_7.sample_posterior(random.PRNGKey(1), p6_7, sample_shape=(1000,))\n", "print_summary(post, 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.17" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [00:01<00:00, 855.77it/s, init loss: 87469.1172, avg. loss [951-1000]: 194.5041]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " a 1.33 0.02 1.33 1.29 1.37 930.82 1.00\n", " bt 0.13 0.04 0.12 0.08 0.19 880.02 1.00\n", " sigma 1.73 0.12 1.73 1.55 1.94 948.82 1.00\n", "\n" ] } ], "source": [ "def model(treatment, h0, h1):\n", " a = numpyro.sample(\"a\", dist.LogNormal(0, 0.2))\n", " bt = numpyro.sample(\"bt\", dist.Normal(0, 0.5))\n", " sigma = numpyro.sample(\"sigma\", dist.Exponential(1))\n", " p = a + bt * treatment\n", " mu = h0 * p\n", " numpyro.sample(\"h1\", dist.Normal(mu, sigma), obs=h1)\n", "\n", "\n", "m6_8 = AutoLaplaceApproximation(model)\n", "svi = SVI(\n", " model,\n", " m6_8,\n", " optim.Adam(1),\n", " Trace_ELBO(),\n", " treatment=d.treatment.values,\n", " h0=d.h0.values,\n", " h1=d.h1.values,\n", ")\n", "svi_result = svi.run(random.PRNGKey(0), 1000)\n", "p6_8 = svi_result.params\n", "post = m6_8.sample_posterior(random.PRNGKey(1), p6_8, sample_shape=(1000,))\n", "print_summary(post, 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.18" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plant_dag = nx.DiGraph()\n", "plant_dag.add_edges_from([(\"H0\", \"H1\"), (\"F\", \"H1\"), (\"T\", \"F\")])\n", "pgm = daft.PGM()\n", "coordinates = {\"H0\": (0, 0), \"T\": (4, 0), \"F\": (3, 0), \"H1\": (2, 0)}\n", "for node in plant_dag.nodes:\n", " pgm.add_node(node, node, *coordinates[node])\n", "for edge in plant_dag.edges:\n", " pgm.add_edge(*edge)\n", "with plt.rc_context({\"figure.constrained_layout.use\": False}):\n", " pgm.render()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.19" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "F _||_ H0\n", "H0 _||_ T\n", "H1 _||_ T | F\n" ] } ], "source": [ "conditional_independencies = collections.defaultdict(list)\n", "for edge in itertools.combinations(sorted(plant_dag.nodes), 2):\n", " remaining = sorted(set(plant_dag.nodes) - set(edge))\n", " for size in range(len(remaining) + 1):\n", " for subset in itertools.combinations(remaining, size):\n", " if any(cond.issubset(set(subset)) for cond in conditional_independencies[edge]):\n", " continue\n", " if nx.d_separated(plant_dag, {edge[0]}, {edge[1]}, set(subset)):\n", " conditional_independencies[edge].append(set(subset))\n", " print(f\"{edge[0]} _||_ {edge[1]}\" + (f\" | {' '.join(subset)}\" if subset else \"\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.20" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [], "source": [ "with numpyro.handlers.seed(rng_seed=71):\n", " N = 1000\n", " h0 = numpyro.sample(\"h0\", dist.Normal(10, 2).expand([N]))\n", " treatment = jnp.repeat(jnp.arange(2), repeats=N // 2)\n", " M = numpyro.sample(\"M\", dist.Bernoulli(probs=0.5).expand([N]))\n", " fungus = numpyro.sample(\n", " \"fungus\", dist.Binomial(total_count=1, probs=(0.5 - treatment * 0.4))\n", " )\n", " h1 = h0 + numpyro.sample(\"diff\", dist.Normal(5 + 3 * M))\n", " d2 = pd.DataFrame({\"h0\": h0, \"h1\": h1, \"treatment\": treatment, \"fungus\": fungus})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.21" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " age 33.00 18.77 33.00 1.00 58.00 2.51 2.64\n", " happiness 0.00 1.21 0.00 -2.00 1.58 338.78 1.00\n", " married 0.28 0.45 0.00 0.00 1.00 48.04 1.18\n", "\n" ] } ], "source": [ "def sim_happiness(seed=1977, N_years=1000, max_age=65, N_births=20, aom=18):\n", " # age existing individuals & newborns\n", " A = jnp.repeat(jnp.arange(1, N_years + 1), N_births)\n", " # sim happiness trait - never changes\n", " H = jnp.repeat(jnp.linspace(-2, 2, N_births)[None, :], N_years, 0).reshape(-1)\n", " # not yet married\n", " M = jnp.zeros(N_years * N_births, dtype=jnp.int32)\n", "\n", " def update_M(i, M):\n", " # for each person over 17, chance get married\n", " married = dist.Bernoulli(logits=(H - 4)).sample(random.PRNGKey(seed + i))\n", " return jnp.where((A >= i) & (M == 0), married, M)\n", "\n", " M = lax.fori_loop(aom, max_age + 1, update_M, M)\n", " # mortality\n", " deaths = A > max_age\n", " A = A[~deaths]\n", " H = H[~deaths]\n", " M = M[~deaths]\n", "\n", " d = pd.DataFrame({\"age\": A, \"married\": M, \"happiness\": H})\n", " return d\n", "\n", "\n", "d = sim_happiness(seed=1977, N_years=1000)\n", "print_summary(dict(zip(d.columns, d.T.values)), 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.22" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "d2 = d[d.age > 17].copy() # only adults\n", "d2[\"A\"] = (d2.age - 18) / (65 - 18)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.23" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [00:00<00:00, 1245.44it/s, init loss: 12964.1768, avg. loss [951-1000]: 1355.7842]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " a[0] -0.20 0.06 -0.20 -0.30 -0.10 1049.96 1.00\n", " a[1] 1.23 0.09 1.23 1.09 1.37 898.97 1.00\n", " bA -0.69 0.11 -0.69 -0.88 -0.53 1126.51 1.00\n", " sigma 1.02 0.02 1.02 0.98 1.05 966.00 1.00\n", "\n" ] } ], "source": [ "d2[\"mid\"] = d2.married\n", "\n", "\n", "def model(mid, A, happiness):\n", " a = numpyro.sample(\"a\", dist.Normal(0, 1).expand([len(set(mid))]))\n", " bA = numpyro.sample(\"bA\", dist.Normal(0, 2))\n", " sigma = numpyro.sample(\"sigma\", dist.Exponential(1))\n", " mu = a[mid] + bA * A\n", " numpyro.sample(\"happiness\", dist.Normal(mu, sigma), obs=happiness)\n", "\n", "\n", "m6_9 = AutoLaplaceApproximation(model)\n", "svi = SVI(\n", " model,\n", " m6_9,\n", " optim.Adam(1),\n", " Trace_ELBO(),\n", " mid=d2.mid.values,\n", " A=d2.A.values,\n", " happiness=d2.happiness.values,\n", ")\n", "svi_result = svi.run(random.PRNGKey(0), 1000)\n", "p6_9 = svi_result.params\n", "post = m6_9.sample_posterior(random.PRNGKey(1), p6_9, sample_shape=(1000,))\n", "print_summary(post, 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.24" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [00:00<00:00, 1244.73it/s, init loss: 19561.3906, avg. loss [951-1000]: 1520.8224]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " a 0.01 0.08 0.01 -0.12 0.12 931.50 1.00\n", " bA -0.01 0.13 -0.01 -0.22 0.21 940.88 1.00\n", " sigma 1.21 0.03 1.21 1.17 1.26 949.78 1.00\n", "\n" ] } ], "source": [ "def model(A, happiness):\n", " a = numpyro.sample(\"a\", dist.Normal(0, 1))\n", " bA = numpyro.sample(\"bA\", dist.Normal(0, 2))\n", " sigma = numpyro.sample(\"sigma\", dist.Exponential(1))\n", " mu = a + bA * A\n", " numpyro.sample(\"happiness\", dist.Normal(mu, sigma), obs=happiness)\n", "\n", "\n", "m6_10 = AutoLaplaceApproximation(model)\n", "svi = SVI(\n", " model,\n", " m6_10,\n", " optim.Adam(1),\n", " Trace_ELBO(),\n", " A=d2.A.values,\n", " happiness=d2.happiness.values,\n", ")\n", "svi_result = svi.run(random.PRNGKey(0), 1000)\n", "p6_10 = svi_result.params\n", "post = m6_10.sample_posterior(random.PRNGKey(1), p6_10, sample_shape=(1000,))\n", "print_summary(post, 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.25" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "N = 200 # number of grandparent-parent-child triads\n", "b_GP = 1 # direct effect of G on P\n", "b_GC = 0 # direct effect of G on C\n", "b_PC = 1 # direct effect of P on C\n", "b_U = 2 # direct effect of U on P and C" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.26" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [], "source": [ "with numpyro.handlers.seed(rng_seed=1):\n", " U = 2 * numpyro.sample(\"U\", dist.Bernoulli(0.5).expand([N])) - 1\n", " G = numpyro.sample(\"G\", dist.Normal().expand([N]))\n", " P = numpyro.sample(\"P\", dist.Normal(b_GP * G + b_U * U))\n", " C = numpyro.sample(\"C\", dist.Normal(b_PC * P + b_GC * G + b_U * U))\n", " d = pd.DataFrame({\"C\": C, \"P\": P, \"G\": G, \"U\": U})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.27" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [00:01<00:00, 733.78it/s, init loss: 4805.8169, avg. loss [951-1000]: 348.3594]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " a -0.08 0.10 -0.09 -0.24 0.06 1049.96 1.00\n", " b_GC -0.71 0.11 -0.71 -0.89 -0.55 813.76 1.00\n", " b_PC 1.72 0.04 1.72 1.65 1.79 982.64 1.00\n", " sigma 1.39 0.07 1.39 1.28 1.49 968.54 1.00\n", "\n" ] } ], "source": [ "def model(P, G, C):\n", " a = numpyro.sample(\"a\", dist.Normal(0, 1))\n", " b_PC = numpyro.sample(\"b_PC\", dist.Normal(0, 1))\n", " b_GC = numpyro.sample(\"b_GC\", dist.Normal(0, 1))\n", " sigma = numpyro.sample(\"sigma\", dist.Exponential(1))\n", " mu = a + b_PC * P + b_GC * G\n", " numpyro.sample(\"C\", dist.Normal(mu, sigma), obs=C)\n", "\n", "\n", "m6_11 = AutoLaplaceApproximation(model)\n", "svi = SVI(\n", " model,\n", " m6_11,\n", " optim.Adam(0.3),\n", " Trace_ELBO(),\n", " P=d.P.values,\n", " G=d.G.values,\n", " C=d.C.values,\n", ")\n", "svi_result = svi.run(random.PRNGKey(0), 1000)\n", "p6_11 = svi_result.params\n", "post = m6_11.sample_posterior(random.PRNGKey(1), p6_11, sample_shape=(1000,))\n", "print_summary(post, 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.28" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "100%|██████████| 1000/1000 [00:01<00:00, 668.45it/s, init loss: 565.4859, avg. loss [951-1000]: 300.9767]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", " mean std median 5.5% 94.5% n_eff r_hat\n", " U 1.87 0.17 1.88 1.59 2.11 1009.20 1.00\n", " a -0.06 0.08 -0.05 -0.18 0.07 766.03 1.00\n", " b_GC 0.01 0.10 0.01 -0.15 0.17 1031.98 1.00\n", " b_PC 0.99 0.07 0.99 0.88 1.11 1106.62 1.00\n", " sigma 1.08 0.05 1.08 0.99 1.16 797.58 1.00\n", "\n" ] } ], "source": [ "def model(P, G, U, C):\n", " a = numpyro.sample(\"a\", dist.Normal(0, 1))\n", " b_PC = numpyro.sample(\"b_PC\", dist.Normal(0, 1))\n", " b_GC = numpyro.sample(\"b_GC\", dist.Normal(0, 1))\n", " b_U = numpyro.sample(\"U\", dist.Normal(0, 1))\n", " sigma = numpyro.sample(\"sigma\", dist.Exponential(1))\n", " mu = a + b_PC * P + b_GC * G + b_U * U\n", " numpyro.sample(\"C\", dist.Normal(mu, sigma), obs=C)\n", "\n", "\n", "m6_12 = AutoLaplaceApproximation(model)\n", "svi = SVI(\n", " model,\n", " m6_12,\n", " optim.Adam(1),\n", " Trace_ELBO(),\n", " P=d.P.values,\n", " G=d.G.values,\n", " U=d.U.values,\n", " C=d.C.values,\n", ")\n", "svi_result = svi.run(random.PRNGKey(0), 1000)\n", "p6_12 = svi_result.params\n", "post = m6_12.sample_posterior(random.PRNGKey(1), p6_12, sample_shape=(1000,))\n", "print_summary(post, 0.89, False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.29" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'A'}\n", "{'C'}\n" ] } ], "source": [ "dag_6_1 = nx.DiGraph()\n", "dag_6_1.add_edges_from(\n", " [(\"X\", \"Y\"), (\"U\", \"X\"), (\"A\", \"U\"), (\"A\", \"C\"), (\"C\", \"Y\"), (\"U\", \"B\"), (\"C\", \"B\")])\n", "backdoor_paths = [path for path in nx.all_simple_paths(dag_6_1.to_undirected(), \"X\", \"Y\")\n", " if dag_6_1.has_edge(path[1], \"X\")]\n", "remaining = sorted(set(dag_6_1.nodes) - {\"X\", \"Y\", \"U\"} - set(nx.descendants(dag_6_1, \"X\")))\n", "adjustment_sets = []\n", "for size in range(len(remaining) + 1):\n", " for subset in itertools.combinations(remaining, size):\n", " subset = set(subset)\n", " if any(s.issubset(subset) for s in adjustment_sets):\n", " continue\n", " need_adjust = True\n", " for path in backdoor_paths:\n", " d_separated = False\n", " for x, z, y in zip(path[:-2], path[1:-1], path[2:]):\n", " if dag_6_1.has_edge(x, z) and dag_6_1.has_edge(y, z):\n", " if set(nx.descendants(dag_6_1, z)) & subset:\n", " continue\n", " d_separated = z not in subset\n", " else:\n", " d_separated = z in subset\n", " if d_separated:\n", " break\n", " if not d_separated:\n", " need_adjust = False\n", " break\n", " if need_adjust:\n", " adjustment_sets.append(subset)\n", " print(subset)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.30" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'S'}\n", "{'A', 'M'}\n" ] } ], "source": [ "dag_6_2 = nx.DiGraph()\n", "dag_6_2.add_edges_from(\n", " [(\"S\", \"A\"), (\"A\", \"D\"), (\"S\", \"M\"), (\"M\", \"D\"), (\"S\", \"W\"), (\"W\", \"D\"), (\"A\", \"M\")])\n", "backdoor_paths = [path for path in nx.all_simple_paths(dag_6_2.to_undirected(), \"W\", \"D\")\n", " if dag_6_2.has_edge(path[1], \"W\")]\n", "remaining = sorted(set(dag_6_2.nodes) - {\"W\", \"D\"} - set(nx.descendants(dag_6_2, \"W\")))\n", "adjustment_sets = []\n", "for size in range(len(remaining) + 1):\n", " for subset in itertools.combinations(remaining, size):\n", " subset = set(subset)\n", " if any(s.issubset(subset) for s in adjustment_sets):\n", " continue\n", " need_adjust = True\n", " for path in backdoor_paths:\n", " d_separated = False\n", " for x, z, y in zip(path[:-2], path[1:-1], path[2:]):\n", " if dag_6_2.has_edge(x, z) and dag_6_2.has_edge(y, z):\n", " if set(nx.descendants(dag_6_2, z)) & subset:\n", " continue\n", " d_separated = z not in subset\n", " else:\n", " d_separated = z in subset\n", " if d_separated:\n", " break\n", " if not d_separated:\n", " need_adjust = False\n", " break\n", " if need_adjust:\n", " adjustment_sets.append(subset)\n", " print(subset)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Code 6.31" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "A _||_ W | S\n", "D _||_ S | A M W\n", "M _||_ W | S\n" ] } ], "source": [ "conditional_independencies = collections.defaultdict(list)\n", "for edge in itertools.combinations(sorted(dag_6_2.nodes), 2):\n", " remaining = sorted(set(dag_6_2.nodes) - set(edge))\n", " for size in range(len(remaining) + 1):\n", " for subset in itertools.combinations(remaining, size):\n", " if any(cond.issubset(set(subset)) for cond in conditional_independencies[edge]):\n", " continue\n", " if nx.d_separated(dag_6_2, {edge[0]}, {edge[1]}, set(subset)):\n", " conditional_independencies[edge].append(set(subset))\n", " print(f\"{edge[0]} _||_ {edge[1]}\" + (f\" | {' '.join(subset)}\" if subset else \"\"))" ] } ], "metadata": { "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.11.6" } }, "nbformat": 4, "nbformat_minor": 4 }