{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Visualizing Uncertainties" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For any scientific measurement, accurate accounting of uncertainties is nearly as important, if not more so, as accurate reporting of the number itself.\n", "For example, imagine that I am using some astrophysical observations to estimate the Hubble Constant, the local measurement of the expansion rate of the Universe.\n", "I know that the current literature suggests a value of around 70 (km/s)/Mpc, and I measure a value of 74 (km/s)/Mpc with my method. Are the values consistent? The only correct answer, given this information, is this: there is no way to know.\n", "\n", "Suppose I augment this information with reported uncertainties: the current literature suggests a value of 70 ± 2.5 (km/s)/Mpc, and my method has measured a value of 74 ± 5 (km/s)/Mpc. Now are the values consistent? That is a question that can be quantitatively answered.\n", "\n", "In visualization of data and results, showing these errors effectively can make a plot convey much more complete information." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Basic Errorbars\n", "\n", "One standard way to visualize uncertainties is using an errorbar. A basic errorbar can be created with a single Matplotlib function call, as shown in the following figure:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [] }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "plt.style.use('seaborn-whitegrid')\n", "import numpy as np" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0, 10, 50)\n", "dy = 0.8\n", "y = np.sin(x) + dy * np.random.randn(50)\n", "\n", "plt.errorbar(x, y, yerr=dy, fmt='.k');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here the `fmt` is a format code controlling the appearance of lines and points, and it has the same syntax as the shorthand used in `plt.plot`, outlined in the previous chapter and earlier in this chapter.\n", "\n", "In addition to these basic options, the `errorbar` function has many options to fine-tune the outputs.\n", "Using these additional options you can easily customize the aesthetics of your errorbar plot.\n", "I often find it helpful, especially in crowded plots, to make the errorbars lighter than the points themselves (see the following figure):" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.errorbar(x, y, yerr=dy, fmt='o', color='black',\n", " ecolor='lightgray', elinewidth=3, capsize=0);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In addition to these options, you can also specify horizontal errorbars, one-sided errorbars, and many other variants.\n", "For more information on the options available, refer to the docstring of `plt.errorbar`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Continuous Errors\n", "\n", "In some situations it is desirable to show errorbars on continuous quantities.\n", "Though Matplotlib does not have a built-in convenience routine for this type of application, it's relatively easy to combine primitives like `plt.plot` and `plt.fill_between` for a useful result.\n", "\n", "Here we'll perform a simple *Gaussian process regression*, using the Scikit-Learn API (see [Introducing Scikit-Learn](05.02-Introducing-Scikit-Learn.ipynb) for details).\n", "This is a method of fitting a very flexible nonparametric function to data with a continuous measure of the uncertainty.\n", "We won't delve into the details of Gaussian process regression at this point, but will focus instead on how you might visualize such a continuous error measurement:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [], "source": [ "from sklearn.gaussian_process import GaussianProcessRegressor\n", "\n", "# define the model and draw some data\n", "model = lambda x: x * np.sin(x)\n", "xdata = np.array([1, 3, 5, 6, 8])\n", "ydata = model(xdata)\n", "\n", "# Compute the Gaussian process fit\n", "gp = GaussianProcessRegressor()\n", "gp.fit(xdata[:, np.newaxis], ydata)\n", "\n", "xfit = np.linspace(0, 10, 1000)\n", "yfit, dyfit = gp.predict(xfit[:, np.newaxis], return_std=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now have `xfit`, `yfit`, and `dyfit`, which sample the continuous fit to our data.\n", "We could pass these to the `plt.errorbar` function as in the previous section, but we don't really want to plot 1,000 points with 1,000 errorbars.\n", "Instead, we can use the `plt.fill_between` function with a light color to visualize this continuous error (see the following figure):" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false, "jupyter": { "outputs_hidden": false } }, "outputs": [ { "data": { "image/png": "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Y4/xwAMPcO+99/Laa69le0hZNTIyws6dO2lra8v2ULLuZz/7Gffddx+f/vSneeGFF7I9nKyJxWI8+uij3H///TzwwAPL9r3R0tLCQw89BEBnZyf/8A//wAMPPMC//Mu/kEwmL/nYjAfxV199lWg0yu9//3seffRRfvjDH2b6JXLGiy++iMfj4Te/+Q2/+MUv+N73vpftIWVNLBbjiSeekIMWgP3793Po0CF++9vf8uyzz9Lf35/tIWXN7t27icfj/O53v+ORRx7hxz/+cbaHtOh+/vOf8+1vf5tIJALAD37wA77yla/wm9/8Bk3TLjv5y3gQb25uZseOHQBs3LiRY8eOZfolcsZdd93Fl7/8ZQA0TcNgMGR5RNnz1FNPcf/991NSUpLtoWTd3r17qa+v55FHHuGLX/wit956a7aHlDU1NTUkEgmSySRTU1OzO08uA6tWreLf//3f9T8fP36crVu3AnDLLbewb9++Sz4+43dsamoKp9Op/9lgMBCPx5flX47D4QCm78mXvvQlvvKVr2R3QFnyxz/+EZ/Px44dO3jmmWeyPZysGxsbo7e3l6effpqzZ8/y8MMP88orryzL04Tsdjs9PT3cfffdjI2N8fTTT2d7SIvuzjvv5OzZs/qfNU3T3wsOh4PJyclLPj7jM3Gn00kgEND/nEwml2UAT+nr6+Of/umf+OQnP8knPvGJbA8nK/7whz+wb98+HnroIVpbW/nGN77B0NBQtoeVNR6Ph+3bt2M2m6mtrcVisTA6OprtYWXFr371K7Zv386f//xn/vu//5tvfvObelphuVLVc2E5EAjgcrkufX2mB7B582b27NkDwOHDh6mvr8/0S+SM4eFhPv/5z/PYY49x7733Zns4WfP888/z3HPP8eyzz9LQ0MBTTz1FcXFxtoeVNVu2bOHNN99E0zQGBgYIhUJ4PJ5sDysrXC4XBQUFALjd7hmnMS1X69evZ//+/QDs2bOH66677pLXZ3yKfMcdd/DWW29x//33o2ka3//+9zP9Ejnj6aefxu/385Of/ISf/OQnwPQihizuLW+33XYbBw8e5N5770XTNJ544ollu17yuc99jscff5wHHniAWCzGV7/6Vex2e7aHlVXf+MY3+M53vsO//uu/Ultby5133nnJ62XHphBC5DDZ7COEEDlMgrgQQuQwCeJCCJHDJIgLIUQOkyAuhBA5TIK4EELkMAniQgiRwySICyFEDvv/AesHPKBSNsy2AAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Visualize the result\n", "plt.plot(xdata, ydata, 'or')\n", "plt.plot(xfit, yfit, '-', color='gray')\n", "plt.fill_between(xfit, yfit - dyfit, yfit + dyfit,\n", " color='gray', alpha=0.2)\n", "plt.xlim(0, 10);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Take a look at the `fill_between` call signature: we pass an x value, then the lower *y*-bound, then the upper *y*-bound, and the result is that the area between these regions is filled.\n", "\n", "The resulting figure gives an intuitive view into what the Gaussian process regression algorithm is doing: in regions near a measured data point, the model is strongly constrained, and this is reflected in the small model uncertainties.\n", "In regions far from a measured data point, the model is not strongly constrained, and the model uncertainties increase.\n", "\n", "For more information on the options available in `plt.fill_between` (and the closely related `plt.fill` function), see the function docstring or the Matplotlib documentation.\n", "\n", "Finally, if this seems a bit too low-level for your taste, refer to [Visualization With Seaborn](04.14-Visualization-With-Seaborn.ipynb), where we discuss the Seaborn package, which has a more streamlined API for visualizing this type of continuous errorbar." ] } ], "metadata": { "anaconda-cloud": {}, "jupytext": { "formats": "ipynb,md" }, "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.9.2" } }, "nbformat": 4, "nbformat_minor": 4 }