Skip to content

Instantly share code, notes, and snippets.

@AustinRochford
Last active January 19, 2017 01:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AustinRochford/0d6926e9953e8b8093a110863fc0487f to your computer and use it in GitHub Desktop.
Save AustinRochford/0d6926e9953e8b8093a110863fc0487f to your computer and use it in GitHub Desktop.
Dependent Density Regression with PyMC3
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"title: Dependent Density Regression with PyMC3\n",
"tags: PyMC3, Dirichlet Processes, Bayesian Nonparametric Statistics, Bayesian Statistics, Nonparametric Statistics\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"My last [post](http://austinrochford.com/posts/2016-02-25-density-estimation-dpm.html) showed how to use Dirichlet processes and [`pymc3`](http://pymc-devs.github.io/pymc3/) to perform Bayesian nonparametric density estimation. This post expands on the previous one, illustrating dependent density regression with `pymc3`.\n",
"\n",
"Just as Dirichlet process mixtures can be thought of as infinite mixture models that select the number of active components as part of inference, dependent density regression can be thought of as infinite [mixtures of experts](https://en.wikipedia.org/wiki/Committee_machine) that select the active experts as part of inference. Their flexibility and modularity make them powerful tools for performing nonparametric Bayesian Data analysis."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"from IPython.display import HTML"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"from matplotlib import animation as ani, pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"import pymc3 as pm\n",
"import seaborn as sns\n",
"from theano import shared, tensor as tt"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"plt.rc('animation', writer='avconv')\n",
"blue, *_ = sns.color_palette()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"SEED = 972915 # from random.org; for reproducibility\n",
"np.random.seed(SEED)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Throughout this post, we will use the LIDAR data set from Larry Wasserman's excellent book, [_All of Nonparametric Statistics_](http://www.stat.cmu.edu/~larry/all-of-nonpar/). We standardize the data set to improve the rate of convergence of our samples."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/conda/lib/python3.5/site-packages/pandas/io/parsers.py:1728: FutureWarning: split() requires a non-empty pattern match.\n",
" yield pat.split(line.strip())\n",
"/opt/conda/lib/python3.5/site-packages/pandas/io/parsers.py:1730: FutureWarning: split() requires a non-empty pattern match.\n",
" yield pat.split(line.strip())\n"
]
}
],
"source": [
"DATA_URI = 'http://www.stat.cmu.edu/~larry/all-of-nonpar/=data/lidar.dat'\n",
"\n",
"def standardize(x):\n",
" return (x - x.mean()) / x.std()\n",
"\n",
"df = (pd.read_csv(DATA_URI, sep=' *', engine='python')\n",
" .assign(std_range=lambda df: standardize(df.range),\n",
" std_logratio=lambda df: standardize(df.logratio)))"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>range</th>\n",
" <th>logratio</th>\n",
" <th>std_logratio</th>\n",
" <th>std_range</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>390</td>\n",
" <td>-0.050356</td>\n",
" <td>0.852467</td>\n",
" <td>-1.717725</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>391</td>\n",
" <td>-0.060097</td>\n",
" <td>0.817981</td>\n",
" <td>-1.707299</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>393</td>\n",
" <td>-0.041901</td>\n",
" <td>0.882398</td>\n",
" <td>-1.686447</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>394</td>\n",
" <td>-0.050985</td>\n",
" <td>0.850240</td>\n",
" <td>-1.676020</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>396</td>\n",
" <td>-0.059913</td>\n",
" <td>0.818631</td>\n",
" <td>-1.655168</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" range logratio std_logratio std_range\n",
"0 390 -0.050356 0.852467 -1.717725\n",
"1 391 -0.060097 0.817981 -1.707299\n",
"2 393 -0.041901 0.882398 -1.686447\n",
"3 394 -0.050985 0.850240 -1.676020\n",
"4 396 -0.059913 0.818631 -1.655168"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We plot the LIDAR data below."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fafc420ba58>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(figsize=(8, 6))\n",
"\n",
"ax.scatter(df.std_range, df.std_logratio,\n",
" c=blue);\n",
"\n",
"ax.set_xticklabels([]);\n",
"ax.set_xlabel(\"Standardized range\");\n",
"\n",
"ax.set_yticklabels([]);\n",
"ax.set_ylabel(\"Standardized log ratio\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This data set has a two interesting properties that make it useful for illustrating dependent density regression.\n",
"\n",
"1. The relationship between range and log ratio is nonlinear, but has locally linear components.\n",
"2. The observation noise is [heteroskedastic](https://en.wikipedia.org/wiki/Heteroscedasticity); that is, the magnitude of the variance varies with the range.\n",
"\n",
"The intuitive idea behind dependent density regression is to reduce the problem to many (related) density estimates, conditioned on fixed values of the predictors. The following animation illustrates this intuition."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"fig, (scatter_ax, hist_ax) = plt.subplots(ncols=2, figsize=(16, 6))\n",
"\n",
"scatter_ax.scatter(df.std_range, df.std_logratio,\n",
" c=blue, zorder=2);\n",
"\n",
"scatter_ax.set_xticklabels([]);\n",
"scatter_ax.set_xlabel(\"Standardized range\");\n",
"\n",
"scatter_ax.set_yticklabels([]);\n",
"scatter_ax.set_ylabel(\"Standardized log ratio\");\n",
"\n",
"bins = np.linspace(df.std_range.min(), df.std_range.max(), 25)\n",
"\n",
"hist_ax.hist(df.std_logratio, bins=bins,\n",
" color='k', lw=0, alpha=0.25,\n",
" label=\"All data\");\n",
"\n",
"hist_ax.set_xticklabels([]);\n",
"hist_ax.set_xlabel(\"Standardized log ratio\");\n",
"\n",
"hist_ax.set_yticklabels([]);\n",
"hist_ax.set_ylabel(\"Frequency\");\n",
"\n",
"hist_ax.legend(loc=2);\n",
"\n",
"endpoints = np.linspace(1.05 * df.std_range.min(), 1.05 * df.std_range.max(), 15)\n",
"\n",
"frame_artists = []\n",
"\n",
"for low, high in zip(endpoints[:-1], endpoints[2:]):\n",
" interval = scatter_ax.axvspan(low, high,\n",
" color='k', alpha=0.5, lw=0, zorder=1);\n",
" *_, bars = hist_ax.hist(df[df.std_range.between(low, high)].std_logratio,\n",
" bins=bins,\n",
" color='k', lw=0, alpha=0.5);\n",
" \n",
" frame_artists.append((interval,) + tuple(bars))\n",
" \n",
"animation = ani.ArtistAnimation(fig, frame_artists,\n",
" interval=500, repeat_delay=3000, blit=True)\n",
"plt.close(); # prevent the intermediate figure from showing"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/html": [
"<video width=\"1152.0\" height=\"432.0\" controls autoplay loop>\n",
" <source type=\"video/mp4\" src=\"data:video/mp4;base64,AAAAHGZ0eXBNNFYgAAACAGlzb21pc28yYXZjMQAAAAhmcmVlAACJGm1kYXQAAAKtBgX//6ncRem9\n",
"5tlIt5Ys2CDZI+7veDI2NCAtIGNvcmUgMTQyIHIyNDMxIGE1ODMxYWEgLSBILjI2NC9NUEVHLTQg\n",
"QVZDIGNvZGVjIC0gQ29weWxlZnQgMjAwMy0yMDE0IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcv\n",
"eDI2NC5odG1sIC0gb3B0aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9\n",
"MHgzOjB4MTEzIG1lPWhleCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVm\n",
"PTEgbWVfcmFuZ2U9MTYgY2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6\n",
"b25lPTIxLDExIGZhc3RfcHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9NiBsb29r\n",
"YWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFj\n",
"ZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJh\n",
"bWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdl\n",
"aWdodHA9MiBrZXlpbnQ9MjUwIGtleWludF9taW49MiBzY2VuZWN1dD00MCBpbnRyYV9yZWZyZXNo\n",
"PTAgcmNfbG9va2FoZWFkPTQwIHJjPWNyZiBtYnRyZWU9MSBjcmY9MjMuMCBxY29tcD0wLjYwIHFw\n",
"bWluPTAgcXBtYXg9NjkgcXBzdGVwPTQgaXBfcmF0aW89MS40MCBhcT0xOjEuMDAAgAAARYZliIQA\n",
"Fv/+99M/zLLr9zm146j3op4mX0N1JQGblsTtOoAAAAMAAAMAAAMAAAVxrHCOXEcOH+g8AAADAAAf\n",
"tmP/5HfCYD2/am4z+cOi0BO5NXHTmyxvtuMETV0y5mpPX9kBp1jyjRbSjYoZNLzrgb8Goz3DHr8f\n",
"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\n",
"b28AAAAaZGF0YQAAAAEAAAAATGF2ZjU2LjEuMA==\n",
"\">\n",
" Your browser does not support the video tag.\n",
"</video>"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"HTML(animation.to_html5_video())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As we slice the data with a window sliding along the x-axis in the left plot, the empirical distribution of the y-values of the points in the window varies in the right plot. An important aspect of this approach is that the density estimates that correspond to close values of the predictor are similar.\n",
"\n",
"In the previous post, we saw that a Dirichlet process estimates a probability density as a mixture model with infinitely many components. In the case of normal component distributions,\n",
"\n",
"$$\n",
"y \\sim \\sum_{i = 1}^{\\infty} w_i \\cdot N(\\mu_i, \\tau_i^{-1}),\n",
"$$\n",
"\n",
"where the mixture weights, $w_1, w_2, \\ldots$, are generated by a [stick-breaking process](https://en.wikipedia.org/wiki/Dirichlet_process#The_stick-breaking_process).\n",
"\n",
"Dependent density regression generalizes this representation of the Dirichlet process mixture model by allowing the mixture weights and component means to vary conditioned on the value of the predictor, $x$. That is,\n",
"\n",
"$$\n",
"y\\ |\\ x \\sim \\sum_{i = 1}^{\\infty} w_i\\ |\\ x \\cdot N(\\mu_i\\ |\\ x, \\tau_i^{-1}).\n",
"$$\n",
"\n",
"In this post, we will follow Chapter 23 of [_Bayesian Data Analysis_](http://www.stat.columbia.edu/~gelman/book/) and use a probit stick-breaking process to determine the conditional mixture weights, $w_i\\ |\\ x$. The probit stick-breaking process starts by defining\n",
"\n",
"$$\n",
"v_i\\ |\\ x = \\Phi(\\alpha_i + \\beta_i x),\n",
"$$\n",
"\n",
"where $\\Phi$ is the cumulative distribution function of the standard normal distribution. We then obtain $w_i\\ |\\ x$ by applying the stick breaking process to $v_i\\ |\\ x$. That is,\n",
"\n",
"$$\n",
"w_i\\ |\\ x = v_i\\ |\\ x \\cdot \\prod_{j = 1}^{i - 1} (1 - v_j\\ |\\ x).\n",
"$$\n",
"\n",
"For the LIDAR data set, we use independent normal priors $\\alpha_i \\sim N(0, 5^2)$ and $\\beta_i \\sim N(0, 5^2)$. We now express this this model for the conditional mixture weights using `pymc3`."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def norm_cdf(z):\n",
" return 0.5 * (1 + tt.erf(z / np.sqrt(2)))\n",
"\n",
"def stick_breaking(v):\n",
" return v * tt.concatenate([tt.ones_like(v[:, :1]),\n",
" tt.extra_ops.cumprod(1 - v, axis=1)[:, :-1]],\n",
" axis=1)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [],
"source": [
"N, _ = df.shape\n",
"K = 20\n",
"\n",
"std_range = df.std_range.values[:, np.newaxis]\n",
"std_logratio = df.std_logratio.values[:, np.newaxis]\n",
"\n",
"x_lidar = shared(std_range, broadcastable=(False, True))\n",
"\n",
"with pm.Model() as model:\n",
" alpha = pm.Normal('alpha', 0., 5., shape=K)\n",
" beta = pm.Normal('beta', 0., 5., shape=K)\n",
" v = norm_cdf(alpha + beta * x_lidar)\n",
" w = pm.Deterministic('w', stick_breaking(v))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We have defined `x_lidar` as a `theano` [`shared`](http://deeplearning.net/software/theano/library/compile/shared.html) variable in order to use `pymc3`'s posterior prediction capabilities later.\n",
"\n",
"While the dependent density regression model theoretically has infinitely many components, we must truncate the model to finitely many components (in this case, twenty) in order to express it using `pymc3`. After sampling from the model, we will verify that truncation did not unduly influence our results.\n",
"\n",
"Since the LIDAR data seems to have several linear components, we use the linear models\n",
"\n",
"$$\n",
"\\begin{align*}\n",
"\\mu_i\\ |\\ x\n",
" & \\sim \\gamma_i + \\delta_i x \\\\\n",
"\\gamma_i\n",
" & \\sim N(0, 10^2) \\\\\n",
"\\delta_i\n",
" & \\sim N(0, 10^2)\n",
"\\end{align*}\n",
"$$\n",
"\n",
"for the conditional component means."
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"with model:\n",
" gamma = pm.Normal('gamma', 0., 10., shape=K)\n",
" delta = pm.Normal('delta', 0., 10., shape=K)\n",
" mu = pm.Deterministic('mu', gamma + delta * x_lidar)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally, we place the prior $\\tau_i \\sim \\textrm{Gamma}(1, 1)$ on the component precisions."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"with model:\n",
" tau = pm.Gamma('tau', 1., 1., shape=K)\n",
" obs = pm.NormalMixture('obs', w, mu, tau=tau, observed=std_logratio)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We now draw sample from the dependent density regression model."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 20000/20000 [01:30<00:00, 204.48it/s]\n"
]
}
],
"source": [
"SAMPLES = 20000\n",
"BURN = 10000\n",
"THIN = 10\n",
"\n",
"with model:\n",
" step = pm.Metropolis()\n",
" trace_ = pm.sample(SAMPLES, step, random_seed=SEED)\n",
" \n",
"trace = trace_[BURN::THIN]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To verify that truncation did not unduly influence our results, we plot the largest posterior expected mixture weight for each component. (In this model, each point has a mixture weight for each component, so we plot the maximum mixture weight for each component across all data points in order to judge if the component exerts any influence on the posterior.)"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n2XwV/R5XzXNh3qp+LYKCAjzy+sE92H41F9uuZruc7VfRG4RqU/xWq1UpKSkaPny47Ha74uPjFRoa\nqrfeektUTW7IAAAM4klEQVQRERHq3Lmz0tLSVFxcrNGjR8tut+v666/XO++8U9XRAQCoMapN8UtS\ndHT0JRfsJSUlOX5+9913PR0JAIA/lGpzVT8AAHA/ih8AABOh+AEAMBGKHwAAE6H4AQAwEYofAAAT\nofgBADARih8AABOh+AEAMBGKHwAAE6H4AQAwEYofAAATofgBADARih8AABOh+AEAMBGKHwAAE6H4\nAQAwEYofAAATofgBADARih8AABOh+AEAMBGKHwAAE6H4AQAwEYofAAATofgBADARih8AABOh+AEA\nMBGKHwAAE6H4AQAwEYofAAATofgBADARih8AABOh+AEAMBGKHwAAE6H4AQAwEYofAAATofgBADAR\nih8AABOh+AEAMBGKHwAAE6H4AQAwEYofAAATofgBADARih8AABOh+AEAMBGKHwAAE6H4AQAwEYof\nAAATofgBADARih8AABOh+AEAMBGKHwAAE6H4AQAwEYofAAATofgBADARih8AABOh+AEAMBGKHwAA\nE6l2xb9p0yb17NlTPXr00Jw5cy55/OzZsxo7dqy6d++ugQMH6siRI1WQEgCAmqlaFX9paalSU1M1\nf/58rV27VhkZGdq3b1+ZMcuXL1e9evX02WefadiwYUpLS6uitAAA1DzVqvh37NihJk2aqHHjxvL2\n9lavXr2UmZlZZkxmZqbi4uIkST169NCWLVuqIioAADVStSp+m82mRo0aOZZDQkKUk5NTZkxOTo4a\nNmwoSbJarapbt65OnDjh0ZwAANRUtao6wIXsdvtlj7Hb7bJYLJWav+hkjvGgK5hj374frnpeSQoN\nvbVSv+9yOHt+Vb4W+fn+yssrqHBMea+FK15nd81b3tw1bd7Kzn0l2++P+lpcydxVOW9V/u2VN3dN\nm9edc7tz+13MYq9M23rId999pxkzZmj+/PmS5Li4b+TIkY4xjzzyiEaNGqVWrVqppKRE9957L4f7\nAQCopGp1qD8iIkLZ2dk6fPiwzp49q4yMDHXt2rXMmM6dO2vlypWSpE8//VR33313VUQFAKBGqlZ7\n/NLvH+d76aWXZLfbFR8fr5EjR+qtt95SRESEOnfurLNnz2rChAnau3ev6tevr2nTpumGG26o6tgA\n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\nAICJ/C87EVbWnTzQyAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fafaadb82b0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(figsize=(8, 6))\n",
"\n",
"ax.bar(np.arange(K) + 1 - 0.4,\n",
" trace['w'].mean(axis=0).max(axis=0));\n",
"\n",
"ax.set_xlim(1 - 0.5, K + 0.5);\n",
"ax.set_xlabel('Mixture component');\n",
"\n",
"ax.set_ylabel('Largest posterior expected\\nmixture weight');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Since only three mixture components have appreciable posterior expected weight for any data point, we can be fairly certain that truncation did not unduly influence our results. (If most components had appreciable posterior expected weight, truncation may have influenced the results, and we would have increased the number of components and sampled again.)\n",
"\n",
"Visually, it is reasonable that the LIDAR data has three linear components, so these posterior expected weights seem to have identified the structure of the data well. We now sample from the posterior predictive distribution to get a better understand the model's performance."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 5000/5000 [01:18<00:00, 66.54it/s]\n"
]
}
],
"source": [
"PP_SAMPLES = 5000\n",
"\n",
"lidar_pp_x = np.linspace(std_range.min() - 0.05, std_range.max() + 0.05, 100)\n",
"x_lidar.set_value(lidar_pp_x[:, np.newaxis])\n",
"\n",
"with model:\n",
" pp_trace = pm.sample_ppc(trace, PP_SAMPLES, random_seed=SEED)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Below we plot the posterior expected value and the 95% posterior credible interval."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nHgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7faf4f24d390>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots()\n",
"\n",
"ax.scatter(df.std_range, df.std_logratio,\n",
" c=blue, zorder=10,\n",
" label=None);\n",
"\n",
"low, high = np.percentile(pp_trace['obs'], [2.5, 97.5], axis=0)\n",
"ax.fill_between(lidar_pp_x, low, high,\n",
" color='k', alpha=0.35, zorder=5,\n",
" label='95% posterior credible interval');\n",
"\n",
"ax.plot(lidar_pp_x, pp_trace['obs'].mean(axis=0),\n",
" c='k', zorder=6,\n",
" label='Posterior expected value');\n",
"\n",
"ax.set_xticklabels([]);\n",
"ax.set_xlabel('Standardized range');\n",
"\n",
"ax.set_yticklabels([]);\n",
"ax.set_ylabel('Standardized log ratio');\n",
"\n",
"ax.legend(loc=1);\n",
"ax.set_title('LIDAR Data');"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The model has fit the linear components of the data well, and also accomodated its heteroskedasticity. This flexibility, along with the ability to modularly specify the conditional mixture weights and conditional component densities, makes dependent density regression an extremely useful nonparametric Bayesian model.\n",
"\n",
"To learn more about depdendent density regression and related models, consult [_Bayesian Data Analysis_](http://www.stat.columbia.edu/~gelman/book/), [_Bayesian Nonparametric Data Analysis_](http://www.springer.com/us/book/9783319189673), or [_Bayesian Nonparametrics_](https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=bayesian+nonparametrics+book).\n",
"\n",
"This post is available as a Jupyter notebook [here](https://nbviewer.jupyter.org/gist/AustinRochford/0d6926e9953e8b8093a110863fc0487f)."
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
},
"widgets": {
"state": {},
"version": "1.1.2"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment