{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook was put together by Jake VanderPlas for UW's [Astro 599](http://www.astro.washington.edu/users/vanderplas/Astr599_2014/) course. Source and license info is on [GitHub](https://github.com/jakevdp/2014_fall_ASTR599/)." ] }, { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Optimization and Minimization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*adapted from material by Andrew Becker*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Today we're going to go over several methods for **fitting a model to data**." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Straight-line Fit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A classic example of this is finding a \"line of best fit\": that is, given some data $\\{x_i, y_i\\}$, find a best-fit line defined by the slope $m$ and the intercept $b$. Below we'll think more generally about model fitting and show some means of doing model fitting in Python.\n", "\n", "We'll present some of the formalism (you can read about the statistical details elsewhere), and show how to approach this in Python." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's create some fake data to try this out:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "N = 50\n", "m_true = 2\n", "b_true = -1\n", "dy = 2.0\n", "\n", "np.random.seed(0)\n", "xdata = 10 * np.random.random(N)\n", "ydata = np.random.normal(b_true + m_true * xdata, dy)\n", "\n", "plt.errorbar(xdata, ydata, dy,\n", " fmt='.k', ecolor='lightgray');" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n0nyuhefwP9QH+Cwe4LN4gM8ieSmF+f79+zV//nxt3ryZ0+0BwKBhw7yiokKlpaUDvo4fP64tW7bo\n6tWramlpUUFBgbZv356pNgMA+rHlDNC2tjYtX75cFy5cGPC7mTNn6vLly6leAgCyyowZM/S3v/0t\n7ucnPc/8xo0bKigokCQdPXpUpaWlgz4vkcYAAJKTdM98w4YNamlpkc/n07Rp03TgwAH5/X672wcA\niIMtZRYAgFlpWwHa1NSkOXPmaNasWaqvr0/XZVyho6NDixcvVnFxsUpKSrRv3z7TTTKqt7dX5eXl\nWr58uemmGNXd3a01a9Zo7ty5Kioq0pkzZ0w3yZiXX35ZxcXFKi0t1TPPPKPbt2+bblLGbNq0SX6/\nv0+p+ubNm6qoqNDs2bNVWVkZ12zBtIR5b2+vtm7dqqamJn3wwQdqbGzUxYsX03EpV8jJydGePXv0\npz/9SWfOnNH//d//ZfXnsXfvXhUVFcnn85luilHPP/+8li1bposXL+qPf/yj5s6da7pJRrS1tekn\nP/mJzp8/rwsXLqi3t1evvfaa6WZlTFVV1YAV9HV1daqoqNClS5e0ZMkS1dXVjfg+aQnzs2fPaubM\nmZo6dapycnK0bt06vf766+m4lCvk5+errKxM0v1VsHPnztWHH35ouFVmXLt2TW+++aaeffbZrF50\n9u9//1vvvvuuNm3aJEkaNWqUPvnJTxpulRnjxo1TTk6Oenp6dO/ePfX09Gjy5Mmmm5UxixYt0iOP\nPNLnsePHj2vjxo2SpI0bN+rYsWMjvk9awvz69euaMmVK9OfCwkJdv349HZdynba2NjU3N+tzn/uc\n6aYY8Z3vfEc/+MEP9IlPZPceb1evXtWkSZNUVVWlz3zmM3ruuefU09NjullGTJgwQdu3b9djjz2m\nRx99VOPHj9dTTz1lullGhUKh6IQSv98f3aZ7OGn5f1S23z4PJRwOa82aNdq7d2/W7EcT69e//rXy\n8vJUXl6e1b1ySbp3757Onz+vb3/72zp//rzGjh0b1620F12+fFk/+tGP1NbWpg8//FDhcFi//OUv\nTTfLMXw+X1yZmpYwnzx5sjo6OqI/d3R0qLCwMB2Xco27d+9q9erV+sY3vqGVK1eabo4R77//vo4f\nP65p06Zp/fr1euedd7RhwwbTzTKisLBQhYWF+uxnPytJWrNmjc6fP2+4VWacO3dOTzzxhCZOnKhR\no0bpK1/5it5//33TzTLK7/ers7NT0v01PXl5eSO+Ji1hvnDhQv31r39VW1ub7ty5o8OHD2vFihXp\nuJQrWJalzZs3q6ioSC+88ILp5hiza9cudXR06OrVq3rttdf0pS99Sa+++qrpZhmRn5+vKVOm6NKl\nS5KkkydPqri42HCrzJgzZ47OnDmj//3vf7IsSydPnlRRUZHpZhm1YsUKHTp0SJJ06NCh+DqAVpq8\n+eab1uzZs60ZM2ZYu3btStdlXOHdd9+1fD6fNX/+fKusrMwqKyuzTpw4YbpZRgWDQWv58uWmm2FU\nS0uLtXDhQmvevHnWqlWrrO7ubtNNMqa+vt4qKiqySkpKrA0bNlh37twx3aSMWbdunVVQUGDl5ORY\nhYWF1s9+9jPrX//6l7VkyRJr1qxZVkVFhXXr1q0R34dFQwDgAdk9pQAAPIIwBwAPIMwBwAMIcwDw\nAMIcADyAMAcADyDMAcADCHMA8ID/BzfFSEY5MdRgAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 1 }, { "cell_type": "markdown", "metadata": {}, "source": [ "For our straight-line, the model is given by\n", "\n", "$$\n", "y_{model}(x) = mx + b\n", "$$\n", "\n", "Given this model, we can define some metric of \"goodness of fit\". One commonly used metric is the $\\chi^2$, defined as follows:\n", "\n", "$$\n", "\\chi^2 = \\sum_{i=1}^N \\left(\\frac{y_i - y_{model}(x)}{\\sigma_y}\\right)^2\n", "$$\n", "\n", "(Note that if you're used to thinking in terms of likelihood, the likelihood here is $\\mathcal{L}\\propto e^{-\\chi^2}$)\n", "Given this, our task is to minimize the $\\chi^2$ with respect to the model parameters $\\theta = [m, b]$ in order to find the best fit." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Method 1: using ``scipy.optimize.fmin``" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The ``scipy.optimize`` package has many optimization routines which are useful in a variety of situations:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from scipy import optimize\n", "optimize?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The simplest go-to method is ``optimize.fmin``, which minimizes any given function" ] }, { "cell_type": "code", "collapsed": false, "input": [ "optimize.fmin?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll start by defining a function for our $\\chi^2$:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def chi2(theta, x, y, dy):\n", " # theta = [b, m]\n", " return np.sum(((y - theta[0] - theta[1] * x) / dy) ** 2)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next we call ``fmin`` to optimize this function. We need to give an initial guess for $\\theta$:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "theta_guess = [0, 1]\n", "theta_best = optimize.fmin(chi2, theta_guess, args=(xdata, ydata, dy))\n", "print(theta_best)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Optimization terminated successfully.\n", " Current function value: 42.776378\n", " Iterations: 70\n", " Function evaluations: 129\n", "[-1.01441373 1.93854462]\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's plot our data and error:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "xfit = np.linspace(0, 10)\n", "yfit = theta_best[0] + theta_best[1] * xfit\n", "\n", "plt.errorbar(xdata, ydata, dy,\n", " fmt='.k', ecolor='lightgray');\n", "plt.plot(xfit, yfit, '-k');" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now you can see that we've found a best-fit line for our data!" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Method 2: Least Squares Fitting" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The function we used above, ``scipy.optimize.fmin``, is a general function which works for (nearly) any cost function.\n", "Above we've used it for a linear model; it turns out that there are much simpler ways to find results for a linear model. One of these is ``scipy.optimize.leastsq``:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "optimize.leastsq?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here rather than computing the $\\chi^2$, we compute an array of deviations from the model:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def deviations(theta, x, y, dy):\n", " return (y - theta[0] - theta[1] * x) / dy\n", "\n", "theta_best, ier = optimize.leastsq(deviations, theta_guess, args=(xdata, ydata, dy))\n", "print(theta_best)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[-1.01442016 1.93854659]\n" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, we can plot the result:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "yfit = theta_best[0] + theta_best[1] * xfit\n", "\n", "plt.errorbar(xdata, ydata, dy,\n", " fmt='.k', ecolor='lightgray');\n", "plt.plot(xfit, yfit, '-k');" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\ngg==\n", "text": [ "" ] } ], "prompt_number": 9 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The nice thing about least squares fitting is that it includes a means of estimating the error on the fit parameters, which we can find by setting the argument ``full_output=True``" ] }, { "cell_type": "code", "collapsed": false, "input": [ "results = optimize.leastsq(deviations, theta_guess,\n", " args=(xdata, ydata, dy),\n", " full_output=True)\n", "theta_best = results[0]\n", "covariance = results[1]\n", "\n", "print(covariance)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[[ 0.39232876 -0.05805744]\n", " [-0.05805744 0.01079204]]\n" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "This gives the uncertainty covariance of the parameters; here we see that they are nearly uncorrelated (the off-diagonal terms are close to zero) so we can approximate the fit as follows:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(\"y = ({0:.2f} +/- {1:.2f})x + ({2:.2f} +/- {3:.2f})\"\n", " \"\".format(theta_best[1], np.sqrt(covariance[1, 1]),\n", " theta_best[0], np.sqrt(covariance[0, 0])))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "y = (1.94 +/- 0.10)x + (-1.01 +/- 0.63)\n" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Apparently the slope is much less certain than the intercept." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Method 3: Linear Algebra" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Getting even more specialized, for a linear equation like the one above, it is possible to solve for the slope and intercept via a straightforward linear algebraic operation. For the case where all errors $dy$ are the same, we simply construct matrices\n", "\n", "$$\n", "X = \\left[\n", "\\begin{array}{lllll}\n", "1&1&1&\\cdots&1\\\\\n", "x_1&x_2&x_3&\\cdots&x_N\n", "\\end{array}\n", "\\right]^T\n", "$$\n", "\n", "$$\n", "y = [y_1, y_2, y_3, \\cdots y_N]^T\n", "$$\n", "\n", "We want to solve the linear equation\n", "\n", "$$\n", "y = X\\theta\n", "$$\n", "\n", "for the optimal $\\theta$. We can solve this equation using either ``np.linalg.solve`` (for well-determined, full-rank problems) or ``np.linalg.lstsq`` (for under-determined problems)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "np.linalg.solve?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "np.linalg.lstsq?" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 13 }, { "cell_type": "code", "collapsed": false, "input": [ "Xdata = np.vstack([np.ones_like(xdata), xdata]).T\n", "theta_best, resid, rank, singvals = np.linalg.lstsq(Xdata, ydata)\n", "print(theta_best)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[-1.01442017 1.93854659]\n" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "yfit = theta_best[0] + theta_best[1] * xfit\n", "\n", "plt.errorbar(xdata, ydata, dy,\n", " fmt='.k', ecolor='lightgray');\n", "plt.plot(xfit, yfit, '-k');" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 15 }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is also possible to construct appropriate $X$ and $y$ matrices for the case when the errors are not the same; that construction can be found in many introductory texts.\n", "\n", "As a side note, you should realize that ``np.linalg.lstsq`` is essentially just a wrapper around some simple matrix operations; we can do them ourselves as follows:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# compute the least-squares solution by-hand!\n", "theta_best = np.linalg.solve(np.dot(Xdata.T, Xdata),\n", " np.dot(Xdata.T, ydata))\n", "\n", "covariance = dy ** 2 * np.linalg.inv(np.dot(Xdata.T, Xdata))\n", "\n", "print(\"y = ({0:.2f} +/- {1:.2f})x + ({2:.2f} +/- {3:.2f})\"\n", " \"\".format(theta_best[1], np.sqrt(covariance[1, 1]),\n", " theta_best[0], np.sqrt(covariance[0, 0])))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "y = (1.94 +/- 0.10)x + (-1.01 +/- 0.63)\n" ] } ], "prompt_number": 16 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that this is the same result we got above.\n", "You can consult an intro statistics book to see where these expressions come from." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "Optimization in Python: Summary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- For *general* optimization problems, you can use ``scipy.optimize.fmin``.\n", "\n", "- For *least-squares* optimization problems, you can use ``scipy.optimize.leastsq``.\n", "\n", "- For *linear least-squares* optimization problems, you can use ``np.linalg.lstsq``, or you can go through the formalism and compute the result via standard linear algebraic operations." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "A Note on Model Complexity" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How do you know what model to fit to data? Note that as your model gets more and more complex, you can do a better and better job fitting the data.\n", "\n", "For example, rather than a linear model we could use\n", "\n", "$$\n", "y = \\theta_0 + \\theta_1 x + \\theta_2 x^2\n", "$$\n", "\n", "Let's use ``np.polyfit`` to fit this model to our data:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "def fit_polynomial(deg=2):\n", " p = np.polyfit(xdata, ydata, deg=deg)\n", " yfit = np.polyval(p, xfit)\n", " plt.errorbar(xdata, ydata, dy,\n", " fmt='.k', ecolor='lightgray');\n", " plt.plot(xfit, yfit);\n", " rms = np.sqrt(np.mean((ydata - np.polyval(p, xdata)) ** 2))\n", " print(\"rms error (deg={0}): {1:.2f}\".format(deg, rms)) " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "fit_polynomial(2)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "rms error (deg=2): 1.84\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAXMAAAEACAYAAABBDJb9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4VdW9//H3AWIpBES4kEQSZBYyABG0VUGjNlFo4aIg\niBM3oGn1Qh1osX1+XgntFYjeiIBDgaKANUwqg1ZQ0BsqKHIjAQlg0UAgIDlEIcohFpKwf39sEzLn\nzPuck8/refIYkpO9F+fBT9Ze67vWshmGYSAiIkGthdUNEBERzynMRURCgMJcRCQEKMxFREKAwlxE\nJAQozEVEQoBTYV5YWMhNN91EXFwc8fHxzJ8/H4D09HSio6NJTEwkMTGRTZs2+bSxIiJSP5szdeZF\nRUUUFRUxaNAgHA4HgwcPZt26daxevZp27drx+OOP+6OtIiLSgFbOvCgyMpLIyEgAwsPD6d+/P8eP\nHwdAa45ERKzn8ph5QUEBubm5/PznPwdgwYIFDBw4kMmTJ1NSUuL1BoqISNNcCnOHw8HYsWOZN28e\n4eHhPPTQQxw+fJjdu3cTFRXFtGnTfNVOERFpjOGk8+fPGykpKcbcuXPr/f7hw4eN+Pj4Ol/v1auX\nAehDH/rQhz5c+OjVq5ez8WwYhmE41TM3DIPJkycTGxvLo48+WvX1EydOVH2+du1aEhIS6vxsfn4+\nhmHowzCYMWOG5W0IlA+9F3ov9F40/pGfn+9MPFdxagJ0+/bt/O1vf2PAgAEkJiYCMGvWLFasWMHu\n3bux2Wz06NGDhQsXunRzERHxDqfCfOjQoVy4cKHO14cPH+71BomIiOu0AtSPkpKSrG5CwNB7cZHe\ni4v0XrjPqUVDHt3AZsPHtxARCTmuZqd65iIiIUBhLiISAhTmIiIhQGEuIhICFOYiIiFAYS4iEgIU\n5iIiIUBhLiISAhTmIiIhQGEuIhICFOYiIiFAYS4iEgIU5iIiIUBhLiISAhTmIiIhQGEuIhICFOYi\nIiFAYS4iEgIU5iIiIUBhLiISAhTmIiIhQGEuIhICFOYiIiFAYS4iEgIU5iIiIUBhLiISApwK88LC\nQm666Sbi4uKIj49n/vz5AJw6dYrk5GT69u1LSkoKJSUlPm2siIjUz2YYhtHUi4qKiigqKmLQoEE4\nHA4GDx7MunXrePXVV/m3f/s3pk+fTkZGBqdPn2bOnDk1b2Cz4cQtRESkGlez06kwr2306NFMmTKF\nKVOmsHXrViIiIigqKiIpKYkvvvjCowaJiAQih8PB2bNnATh79ixt27YFoG3btoSHh3v9fj4P84KC\nAm688Uby8vLo1q0bp0+fBsAwDDp27Fj1Z3cbJCIS6PLy8oiPj/fpPVzNTpcmQB0OB2PGjGHevHm0\na9euzo1tNpsrlxMRES9p5ewLy8rKGDNmDPfddx+jR48GqBpeiYyM5MSJE3Tp0qXen01PT6/6PCkp\niaSkJI8aLSISKLw1/JKdnU12drbb7XBqmMUwDCZOnEinTp2YO3du1denT59Op06deOKJJ5gzZw4l\nJSWaABWRkNfQMIs3h198Mma+bds2brjhBgYMGFA1lDJ79myuueYaxo0bx9GjR+nevTurV6+mQ4cO\nHjVIRCTQBWKYOzXMMnToUC5cuFDv97Zs2eL0zURExDe0AlREJAQozEVEQoDT1SwiEvr8vTBGvEdh\nLiJVwsPDq0I7Ly+Pnj17WtwicZbCXETEj3z19KMwFxHxI189/WgCVEQkBKhnLiLigrS0NHJzc+nc\nuTNZWVl1FkpW588JZYW5iDRb7oTtwYMHycnJAcxgX716dYPX9+eEssJcRJotd8K2TZs2AAwZMoRF\nixb5tH2u0Ji5iIgLsrKySElJYfPmzTWGWNLS0khNTWXEiBFuH6FZXg7vvgtjx7r+s+qZizRTWiDk\nng4dOpCZmVlnrNyV4ZfavvwSXn0Vli2DmBiYNAnefNO1dqlnLtJMhYeHExERQUREBKWlpVWfK8jd\n4+rwy9mzsH59B268EYYOhfPn4f33YccOSEtz/f7qmYtIyPLn00dWVhbjx49n1apVDVa4GAZ8+im8\n8gqsWQMDBrTn0Ufhl7+ESy7x7P4KcxEJWf6oJqn+CyMzM5Nz585ht9tr/MI4eRKWLevEu++aPfBJ\nk2DfPjh16qjX9j9XmIuIeKD6L4zi4mIiIiIAqKgwJzOXLIEPPoAbb2zNyy/DsGFQeVzyqVPea4fC\nXETqcGVhjNR06JA5jLJ0KXTtCpMnm5ObR48eJz7+Mp/dV2EuInV4UpnRHP3rX7B2Lcyb1538fLjn\nHti4ERIS/NcGhbmI1BGoC2MCzZ495jBKVhYMHgxjx55i6tRwfvKTpn/W208/CnMRqcOZygwrBEJt\n/HffwerVl5GaCna7OZn52WdwxRWQl/e9U0EO3n/6UZiLhBBvhV1DC2OsZtXhGYYB27fDX/8K69bB\nNdeE8+c/Q3IytGzp3jW9/fSjMBcJITopyLtOnoTly80QB3jwQXjmGTh5spD4+Eudvk59QyrefvpR\nmIuEuEAYmgh01cP2tdeyyMnpwOLFsGULjB5tjotfd93FksKTJ127fn1DKt5++lGYi4Q49dabZoZt\nETCCbt3K6N8fHnjADPFLf+yAV/+l2KZNG+x2O+DcL0V/TCgrzEWk2Sorg3fegf37nwV60bnzh7zx\nRmtuuKHua6v/UnSVPyaUFeYizVxzXCCUn2+Ogy9dCr16wcyZsbz55gTeeGM5HTq08/r9/DGhrDAX\naeaaywKh8+dtrFwJixfD3r1w333w4YfQvz9AW4YNm+VW2FYffgFcGn7xJoW5SDPnj/Hc2pOwYWFh\nlJWVVf3Xl5OyBw7AuHGb+eKLIVx6aS7PPNOXe+5p63Q9eFMa2pvF37SfuUgz19DJOd5Ue+/0mJgY\nevbsSUxMjE/2Ui8tNUsKhw6Fm2+G776zU14+hG+/vYpNm1K9FuTVeeOkIU84FeaTJk0iIiKChGob\nDaSnpxMdHU1iYiKJiYls2rTJZ40UkYscDgd2ux273c6hQ4eqPnc4HG5dL1AXCLlj716YOtU8rWfl\nSvjd7+DoUYiPzwIO+fTpo3K4auPGjaS5c7qEh5wK89TU1DphbbPZePzxx8nNzSU3N5fbbrvNJw0U\nkZp0QlBNZ8+auxReey2MGAGdOkFurrn97OjREBbmn6cPq/ezcWrMfNiwYRQUFNT5umEY3m6PiFjI\nk1pqZ65Z+d/ahze444svWvPSS2YPfOhQ+H//D267DVrVk2r+ePqwej8bjyZAFyxYwPLlyxkyZEjI\nPKaJNGee1FI7c828vDwAtycJHQ4zvBctgmPHuvGb38Dnn0N0tNea6zarh6vcDvOHHnqIp556CoD/\n+q//Ytq0aSxZsqTe16anp1d9npSURFJSkru3FZFmKDfXDPBVq+CGG6Bjx/lcuPA6O3Z04re/zQKC\npyPZ0NPPrl27+PTTT92+rtth3qVLl6rPH3jgAUaOHNnga6uHuYj4XigsBHI4YMUKM8RPnjSX1+/d\na57ek5T0Fp99thMIvtr4hp5+hg8fzvDhw6v+PHPmTJeu63aYnzhxgqioKADWrl1bo9JFRLyvoQ2z\nHA5HnXAI5oVAtXvhM2fCrbfW3GrW6snGQORUmE+YMIGtW7fyzTffEBMTw8yZM8nOzmb37t3YbDZ6\n9OjBwoULfd1WkWatvg2ziouL6+3l1Rd2gdxbP3vWHAtfuBCKisytZit74fWxerIxEDkV5itWrKjz\ntUmTJnm9MSLiHfWFXSD21j//HGbNiuL9982KlBkzzIqUpg588NZkoy+qd/x5/eq0nF8kBNUXdoEy\nNPHDDzaWLjV74YWFMGpUBXv2mAt9/M0X1Tv+vH51Ws4v0kz4Y+FMY/btg9mzo0hOvpI1a+CPf4SC\nAnj44ZOWBHmoUc9cJMRUf7Q/dOhQjU2s/F0H/c03DlavruC1135Kfn4LRo+uYNWqfK6/vmuzXbHq\nKwpzkRBT+WhfXFxMaWlpgycL+XI898svzYqUZcvCGTTI3COlZ888nn46nSefPFI1CTt9+vSAnZQN\nNgpzkWbK2+O5ZWWwfj385S/mxGZqKnz8MfTubX4/Lw+OHDlSYxL25MmTATcpG6wU5iJBKlBKDY8e\nNQ98WLIE+vSB3/wG7riDereZbd26NXBxEvbuu++u8Wdv82c1idUU5iJByspSw4oK2LTJ7IV//DHc\ne695kn1sbOM/l5GRwcyZM6tKJitLKBcsWMC5c+fqjPF7Grj+qCYJlF8YCnORANLQKs/6gsGKUsOi\nInO72UWLICLC7IWvWgU/NqVR6enpHDlypKp3DhdLKPv27QtcXAwVTPxZftgYlSaKBBBX9ir3V6mh\nYUB2Nowfb56XefgwvPkmfPqpOS7uTJDDxfHybdu2WXJ4Q6hTz1wkSPl6y9WSEli2zBxKadECHnrI\n7JFfeql716vskcfFxWk/FR9Qz1xEasjJgcmToUcP2LHDXKmZlwdTprgf5GCOl6ekpLBo0SK3fwFV\nPzKvcnzakyPzQol65iLVuDJmbZXqVSxPPvmkV65ZWmqOfb/0EhQXw69/DV98YY6Le0v79u3JzMz0\n6BqBMj4diBTmItXUtzNhoKlexVJRUcF7771X9b3alRWlpaWNHtH2z3+awyivvQY//zmkpzu30ZUE\nHoW5SABwZa/y6lUsM2bMqPG92j3XvLy8Oke0lZfDhg1mLzwvDyZNModWunf39t9K/ElhLhIAXNmr\nvPr2tseOHWvy2pW/KIqKWvDqq5ezalUF3btX8OtfX+Duu1tzySVe/+uIBRTmIl7ir/H26lUsTYW5\nYcDOneG8/HI4H3wAd90F778PCQkaRwk1CnMRL/HGeHtlVUblKkJ3VxOWlMCIESvJzf0ZrVoVMGNG\nF5YsaUP79i43ySsqJ21bt25NRkaGNY0IcSpNFLFI9TK7Q4cOYbfbq3r2lePcjS0aqs+ePWYlSo8e\n8NVXXfjXvybicPRg587/sCzI4eKk7bZt21w+qFicozAXsUhDqz1dde4cZGXB9dfDr35lnthz4AAM\nGfI/wEeWnywEFydt4+Li6kzaindomEUkSB09CvPnd2HDBkhIgN//3gzzVj/+Xx1Ihx4vWrSIyZMn\nM2PGDCIjIyksLKSsrIywsLAam1OJ+xTmIgGooe1tL1yADz6A2bO7sWcPjBjRgq1b4cor617D18v9\nXREdHV21YKihuYRA2dI3WCnMRQJQ7e1tFy1azdKl8PLLcMklFdxxxxn++tcfgLO0bVuB3R5Yq1Td\nYeWWvqFAYS4SgCrHmGNjJ9Cmzav06AHDh5vbz153XUv27TtNz57xFrfSu6zY0jeUKMxFAkxZmY0x\nY9bwySeHKSmJpXfvFhw4AJGRVrfMPc4e3hBIY/zBSGEuEiCOHzd3KHz55b4kJITx1FPtmTq1RdWE\nZrCqfsB0Y7X3gTTGH4yC/J+JNFe+Xm1Z32RcU/es/n1wbsGPYcA//gFPPx1DTg5MmACLFxcwenQf\n8vK+D/ogF//RPxUJSr7e3bC+ybim7ln9+8XFxY3WjDsc8Prr8MIL5qn2d9xxljfeuJT27SEv75xX\n/y7SPCjMxW3BsPe3u3w1Gffll+ZuhcuXww03wPPPw803w759p2jf/vJG9yoPlIODJTA5FeaTJk3i\n73//O126dGHv3r0AnDp1ivHjx3PkyBG6d+/O6tWrNdbVzFi993f1cPP2qe7enIy7cAE2bjR74Z99\nZp7is2sXXHFF3dc2tle5DmaQxji1nD81NZVNmzbV+NqcOXNITk7m4MGD3HLLLcyZM8cnDRRpSOVy\neKDJw49d5clkXFpaGqmpqSQnj+Ppp3+gTx+YMcPcsfDoUZg9u/4gh8b3KhdpjFM982HDhlFQUFDj\naxs2bGDr1q0ATJw4kaSkJAW6CLBrVxmfffYAcCcHD/4fq1ffwDXXgM3W9M9WPhFERkbyyCOPaDWk\nOM3tjbbsdnuNnd20t4I0Z+Xl8MYbkJQEeXnPAscYOHACe/YM4Gc/azzIK3vyI0aMACAzM5MjR46Q\nk5PDxo0bSUtL88vfQYKbVyZAbTYbtkb+taanp1d9npSURFJSkjduK2K5kydh8WLzHM3u3WHqVFiz\nphX33rvT6fH22pUzTz31lEcTsIE0URpIbQl02dnZZGdnu/3zbod5REQERUVFREZGcuLECbp06dLg\na6uHuUgo2LevNc8+a56leccd5n8TEyu/69p4e+3gPnbsmEcTsIE0URpIbQl0tTu6ru777vYwy6hR\no1i2bBkAy5YtY/To0e5eSiQonD9v7ht+7bXw2GPdiI2Fr76CJUuqB7nrsrKySElJYfPmzVXBrdWQ\n4iqneuYTJkxg69atfPPNN8TExPCnP/2JP/zhD4wbN44lS5ZUlSaKhKKiInOZ/cKF0K8fTJ8OPXoc\nZNAg72x0peAWb3AqzFesWFHv17ds2eLVxkhocGUxUSAvPNq796fMmQN//zuMGwfvvWceAgGQl+eb\ne3rrDNBgonF179AKUPE6VxYTWb3wqLbz52HNGliwAI4di+Gxx8zPL7vMP/evfC8iIiKa3BIgVGhc\n3TsU5iJcHEr5y18gLg4effQH+vfPJzKyM6dPn+X8+YtPDI8//rhOxJGAozAXlzU0NOJwOPzew6rc\ny6R169a8/fbbLgfr//0fzJ8P77wD48fD5s0QHw/wU/LyzB5y7SeGpk7E0fFnYgW3q1mk+arvVPnK\nr/tbZbBu27bN6cU158/DihVmVcqdd8LAgXDoUGWtuAO73Y7dbq8xfls5lg1Nb8JV2SYt+BF/Us9c\nPGZlT7QyWOPi4ppcXHPyJCxaZJ6jeeWV8MQTMHIktGx58TX1jd8WFxe7dCKOjj8TK6hnLh6zsiea\nlZVF165dCQsL4+6776akpKTOa3Jz4T/+wwzwggJzB8MPP4TRo2sGubOaKiWsr27cGU09EYg0Rj3z\nIBVIJX1W9kQ7dOhAVFQUOTk57N69u2oMu7wc1q2DefPMAP/P/4TMTOjUyfN7Vi8frO+9d7duvHbl\nSu0nApHGKMyDVCCV9Fl9EG/r1q0B85dJRsZinnkGXnwRYmLgkUfMHnhYmPfuV7180Or3XqSSwlw8\nZvUKxoyMDH7/+6X06bOAq676CSNHwltvweDB/m2HO2eAiniLwlyCVuUJPk8/PYCDB18kOTmMAwcg\nMtKa9rhyBmhDtBpS3KUwl6Bz5gwsXWquzGzXDsaMKeG2277jqqvirG6aSxTc4k0Kcwkahw+bAb5s\nmXkI8iuvwPXXw759dStYgoGWsYs3qTRRAkL103aqlxcaBvzjH+ae4VdfDa1amYchr1kDQ4c6dxSb\nSHOgnrn4jCuLiWovkX/ttdWsXGmWFpaWmlUpr70GP1YBikgtCnPxmab2MKmuslZ94MAUevVaRvfu\n5nazTz8Nt94KLfQMKdIohbn4jCuLif74x5Xs2fMJBQXJnDrVgi1bzN0LraZNsyRYqL8jbqs+zv39\n99/X+X5Ty9orKsyzM2++GSZMaM+ddw4kP78FCxcGRpCDNs2S4KGeubit+jBKRUUF7733Xo3vN7SY\nyOGAV181x8M7doTHHoOxY+Gf//yGTp0sKhJvQPWni+eee66qfLD2/imqShGrKczFbdWDbsaMGU2+\n/sgReOEFM8hvusksMbzuupoVKZUB6cpxc23atKG0tBS73e71Gu2mtiqovn+K6sbFSgpzcVv1oDt2\n7FiDr/vkE5g7Fz74wNy9MCcHunev/7WVqyZdOW6u8vW+OGLNla0KVDcuVlKYBzkrJ+hatWpFZmYm\n586dq9MTbd06nDffhFmzeuJwmKWFS5aYKzadFUg7Q9ZHk6MSSBTmQc6V8r/aPA3L6rsHViopMQ9/\nWLAAevSASZOKmTLlCrf2Da+utLS0qn31td+KYQ1P3nsRb1OYBzlP9hL35ja6X31lTmi+/jr88pew\ndq25a2Fe3hm3g7ypjausHtbQiUISSFSaGOTcPdXGGwwDcnLaMHq0eZ5mu3awd6+5UtPf289awcr3\nXqQ29cyDnBV7iZeVmXujPPccfPttV6ZPN3vkzW2pvdX7uItUFxRhHugTYc3F6dPmgcgLFkDfvpCe\nDt26fcmAAfFWN02k2QuKYZbw8HAiIiKIiIigtLS06nMFuX989RVMnQq9esG+ffD22+aByL/6lfZM\nEQkUQdEz9yX1+utnGLB9u3kI8rZtkJYGeXlw+eVWt0xE6uNxmHfv3p327dvTsmVLwsLC2Llzpzfa\n5TeBdDByICgrgzffNMfDS0rMpfZ/+5vvxsMbKi8UEdd4HOY2m43s7Gw6duzojfaIRc6caUFmJsyf\nb67OfPJJ94dRXKn/bqi8sLi42PUbizRjXhlmMQzDG5cRCxQUmAH+yit9+eUvvXOqvdX13yLNkcfT\nVzabjV/84hcMGTKExYsXe6NN4gc7d8L48WZwt2wJb7yRz+uvOxfkDocDu92O3W6v6nnb7XYcDofv\nG+4nzeHvKKHF45759u3biYqKori4mOTkZPr168ewYcNqvCY9Pb3q86SkJJKSkjy9rbihcv/wzEw4\ndgwefRQWL4b27SEvr8zp6/i65x0Ie57o6UL8LTs7m+zsbLd/3uMwj4qKAqBz587cfvvt7Ny5s9Ew\nF/8rLYWlS82dCzt2hGnTzAOSWwVoLZP2PJHmqHZHd+bMmS79vEfDLKWlpZw5cwYwy/ref/99EhIS\nPLmkeFFRkTmRecUVsHmzuY/4jh0wblzgBjnU3fOk+olGJSUlFrdOJDB59L+03W7n9ttvB6C8vJx7\n7rmHlJQUrzRM3Ldvn1la+NZbMGECfPwx9OnT8OsDYVijutoHQrz99tsUFRUBkJqaytq1ay1tn0gg\n8ijMe/Towe7du73VFnFB7fK/oiI727eHsWhRe/bsacWUKebKzU6dmr5WoA1r1N7z5Ny5c1XfC4TK\nKau33hWpTwA/bEtjKifoyspgyxb4n/+Bc+fM8fD166F1a+evFehbuQ4ePJgtW7YwaNAgli5danVz\nNDkqAUk7awSp7783q1J69TJP8Pnv/zaX20+e7FqQQ+Bv5bpmzRpSUlL43//934Bsn0ggCKqeeaCN\n7Vrh2DHzEIhXXoFbb714CIQnAn0r10Bvn0ggCKqeeeXY7saNG0lLS7O6OX61Zw/cfz8MGADl5bBr\nF2RlNY9DIESkaUEV5r4c2w3E8jfDMEsKU1JgxAiIi4P8fLNe/IorrG6diASSoBpmqV2y5k2BVNFR\nVgarVpmTmuXl8LvfmSWGP/mJZU0SkQAXVGHuy7HTQKjo+P57c3n9vHlmXfjs2XDbbWCzWdIcEQki\nQTXM4ktWVnR8/TU88QT07Ak5Oeak5gcfwPDhCnIRcU5Q9cwb4+mJQVZUTOzbZw6lrF9vTm7m5Jh7\niYuIuCpkwjxYTgwyDNi6FZ591qxIqVypqbM9RMQTIRPmga6iArKyfuC551px5oyNSZNO89JLF2jd\nGi65pC2gFYUi4j6FuY9Vbj+bmQmRkT9lxgwYNQr277dzxRXxVjcvoDS254mINE5h7iPffAMvvggv\nvQTXXgvLl8P111vdqsCmPU9E3Kcw97LDh83tZ19/HcaMMcfH+/WzulXBqXpPHdDuhCKNCMow97Ry\nxRd27TInNTdvhgcfNCtVfjyEKWAF01aulesARKR+QRnmgVK5Yhjm9rPPPANffAGPPQaLFkG7dpY0\nx2WBPqwR6O0TCSRBGeZWKy+HN94wQ/z8efj9783l9pdcYnXLRKS5UpjXo6FhHJutLatXh5OZCTEx\n8Oc/m6s0W2gdrYhYLCjC3N8la7WHcS69tCcvvGBWp1x/vbn17LXX+uTWIiJuCYowt2rs9MgRmD07\nio0b4Y474B//UGWKiASmoAhzX6qv179/fysWLmzP5s1h/Pu/XyAvDy6/3OKGiog0otmHeWWv3zDM\nnndGBuTmwiOPwF/+AseO2bn88s5WN1NEpFEhF+aunhN64YK5a2FGBnz7rVmZ8tZbFw9FPnbMD40W\nEfFQyIW5sycGnT9vrtJ85hkIDzf3E7/9dmjZ0p+tFRHxjpAL86ZODDpzxjzNZ+5ciI01K1Ruusm/\nh0C4+vQgItKUkKuQbujEoOJieOop8zSfnTvNoZX33oObb/b/aT6VTw8bN24kLS3NvzcXkZAUcmFe\n+8SgggKYOhWuvBJOnoRPPoGVK+Gqq6xrYyCcNyoioSWowzwtLY3U1FRGjBhBSUlJje/l5cF998Hg\nweaY+P79ZnVK794WNbYaK88bFZHQ5HGYb9q0iX79+tGnTx8yMjK80San1TdcsX07TJnSjeRkiIuD\nQ4fMU+4jI/3atEZZcd6oiIQ2jyZAKyoqmDJlClu2bKFr165cffXVjBo1iv79+3urfY2qHK4YPHgI\nY8a8wrBh5kn399xzho0b2/PTn/qlGSIilvOoZ75z50569+5N9+7dCQsL46677mL9+vXealuTli/P\nIiFhNj/8sINZs8J5+GH45z9h3LjTCnIRaVY8CvPjx48TExNT9efo6GiOHz/ucaOa8q9/wcsvwzXX\ndCAsbCrPPtuS3bvNbWhbebHYsrExeRGRQOJR9NncqOnz5JSg7783Q/z5582JzeXLoUOHw8THu3Yw\nsrNtcHYBkoiI1TwK865du1JYWFj158LCQqKjo+u8Lj09verzpKQkkpKSAOdPCTp5EubNg4UL4dZb\nzfrwAQP48Rqut9vZk4pUQigi/pKdnU12drb7FzA8UFZWZvTs2dM4fPiwce7cOWPgwIHG/v37a7ym\nsVvs3bu30esXFBjGlCmGcdllhvGb3xhGfr5z12jqus6+9vTp00ZKSopx+vRpp6/njfuKiLgazx71\nzFu1asULL7zArbfeSkVFBZMnT260kqX28AaYJ67XHt44cMDc+Ortt+GBB6w7HFklhCISLDyeLhw+\nfDjDhw936rW1hzcAIiIiqr6fk2PWhG/bBr/9LXz1FVx2mactFBEJfZZvtGUYkJ1thvgXX8Dvfgev\nvQY/Dlc7rbGj5XTCu4iEOsvC/MIF2Lq1HQ8+CKdOwR/+APfc4/4J91YdLSciEgj8Hubl5bB6NcyY\n0ZuwMIPJZ0MyAAAG4klEQVQ//Un7iIuIeMpvYX7unFkXnpFhnqc5bVoR11/vICHBtRrxYKahIBHx\nFb+E+dy5kJlp1oa/+ioMGwZ5eQ5/3DqgaChIRHzFL2H+ySdmmWFioj/uJiLS/PglzL29Cl7DFSIi\nNVlemugODVeIiNRkWZinp6dz5MgRHWosIuIFlh0bd+TIEcsPNdYWtyISKizrmbdu3RqwdkfChra4\n1Zi8iAQby8I8IyODmTNnsmrVKsuGWBra4lZj8iISbCwJ87S0NHJzc6t651bJyspi/Pjxlv5CERHx\nBtuP++b67gY2G7VvkZSUxNatWwG48847LT3BJy8vz+WTikREfK2+7GyMJROglcMbcXFxOsFHRMQL\nLAnzrKwsUlJSWLRokYY3RES8wJIx88oTfERExDssqzMXERHvUZiLiIQAhbmISAhQmIuIhACFuYhI\nCFCYi4iEAIW5iEgI8HuduXYkFBHxPr+HeeWOhMXFxfTs2dPftwf0C0VEQk9QHhvnKW1xKyKhRmPm\nIiIhwO0wT09PJzo6msTERBITE9m0aVOTP+NwOLDb7djt9qrhDbvdjsPhcLcZIiKCB2Fus9l4/PHH\nyc3NJTc3l9tuu63JnwkPDyciIoKIiAh69uxZ9XlzGfLIzs62ugkBQ+/FRXovLtJ74T6Phll8fK5F\nyNE/1Iv0Xlyk9+IivRfu8yjMFyxYwMCBA5k8ebJOtxcRsVCjYZ6cnExCQkKdjw0bNvDQQw9x+PBh\ndu/eTVRUFNOmTfNXm0VEpBavnAFaUFDAyJEj2bt3b53v9e7dm/z8fE9vISLSrPTq1YuvvvrK6de7\nXWd+4sQJoqKiAFi7di0JCQn1vs6VxoiIiHvc7pnff//97N69G5vNRo8ePVi4cCERERHebp+IiDjB\nK8MsIiJiLZ+tAN20aRP9+vWjT58+ZGRk+Oo2QaGwsJCbbrqJuLg44uPjmT9/vtVNslRFRQWJiYmM\nHDnS6qZYqqSkhLFjx9K/f39iY2PZsWOH1U2yzOzZs4mLiyMhIYG7776bc+fOWd0kv5k0aRIRERE1\nhqpPnTpFcnIyffv2JSUlxalqQZ+EeUVFBVOmTGHTpk3s37+fFStWcODAAV/cKiiEhYUxd+5c9u3b\nx44dO3jxxReb9fsxb948YmNjsdlsVjfFUo888ggjRozgwIEDfP755/Tv39/qJlmioKCAxYsXs2vX\nLvbu3UtFRQUrV660ull+k5qaWmcF/Zw5c0hOTubgwYPccsstzJkzp8nr+CTMd+7cSe/evenevTth\nYWHcddddrF+/3he3CgqRkZEMGjQIMFfB9u/fn6+//triVlnj2LFjvPvuuzzwwAPNetHZd999x0cf\nfcSkSZMAaNWqFZdeeqnFrbJG+/btCQsLo7S0lPLyckpLS+natavVzfKbYcOGcdlll9X42oYNG5g4\ncSIAEydOZN26dU1exydhfvz4cWJiYqr+HB0dzfHjx31xq6BTUFBAbm4uP/vZz6xuiiUee+wxnn32\nWVq0aN57vB0+fJjOnTuTmprKVVddxYMPPkhpaanVzbJEx44dmTZtGt26dePyyy+nQ4cO/OIXv7C6\nWZay2+1VBSURERFV23Q3xif/RzX3x+eGOBwOxo4dy7x585rNfjTVvfPOO3Tp0oXExMRm3SsHKC8v\nZ9euXTz88MPs2rWLtm3bOvUoHYry8/N5/vnnKSgo4Ouvv8bhcPD6669b3ayAYbPZnMpUn4R5165d\nKSwsrPpzYWEh0dHRvrhV0CgrK2PMmDHce++9jB492urmWOLjjz9mw4YN9OjRgwkTJvDhhx9y//33\nW90sS0RHRxMdHc3VV18NwNixY9m1a5fFrbJGTk4O1113HZ06daJVq1bccccdfPzxx1Y3y1IREREU\nFRUB5pqeLl26NPkzPgnzIUOG8OWXX1JQUMD58+dZtWoVo0aN8sWtgoJhGEyePJnY2FgeffRRq5tj\nmVmzZlFYWMjhw4dZuXIlN998M8uXL7e6WZaIjIwkJiaGgwcPArBlyxbi4uIsbpU1+vXrx44dO/jh\nhx8wDIMtW7YQGxtrdbMsNWrUKJYtWwbAsmXLnOsAGj7y7rvvGn379jV69eplzJo1y1e3CQofffSR\nYbPZjIEDBxqDBg0yBg0aZGzcuNHqZlkqOzvbGDlypNXNsNTu3buNIUOGGAMGDDBuv/12o6SkxOom\nWSYjI8OIjY014uPjjfvvv984f/681U3ym7vuusuIiooywsLCjOjoaOOVV14xvv32W+OWW24x+vTp\nYyQnJxunT59u8jpaNCQiEgKad0mBiEiIUJiLiIQAhbmISAhQmIuIhACFuYhICFCYi4iEAIW5iEgI\nUJiLiISA/w+VVbaVuYSCDQAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 18 }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a rule, when we increase the degree of the polynomial, we get a better fit!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fit_polynomial(10)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "rms error (deg=10): 1.49\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\na7nmmmsICQnh9ttvN7tZpiosLCQsLAyAsLAwCgsL63y+x/81NfTb8JpYrVbGjBnD/PnzCQ4ONrs5\npvjoo49o06YNsbGxDboXD3DhwgW2bdvGlClT2LZtG82aNbvsLbm/OnDgAH/5y1/Iycnh6NGjWK1W\n3nvvPbOb5TUsFstlY6rHg3z79u3Jzc0t/zk3N7dSGYSG5vz584wePZqHHnqIUaNGmd0c03z99des\nWbOGjh078sADD/DZZ5/x8MMPm90sU4SHhxMeHk6/fv0AGDNmTLVKrw3F1q1buemmm2jVqhWBgYHc\ne++9fP3112Y3y1RhYWHllQjy8/Np06ZNnc/3eJDv27cv+/btIycnh3PnzpGSksLIkSM93QyvYLPZ\nSEhIICoqimnTppndHFO9+OKL5ObmcvDgQd5//31uvfVW3nnnHbObZYq2bdsSERHB3r17AUhLSyM6\nOtrkVpkjMjKSTZs2cebMGWw2G2lpaURFRZndLFONHDmS5ORkAJKTky/fOXSgkoHT1q1bZ+vataut\nU6dOthdffNGMJniFL774wmaxWGw9e/a09erVy9arVy/b+vXrzW6W6dLT020jRowwuxmmyszMtPXt\n29d2/fXX2+655x5bcXGx2U0yzZw5c2xRUVG2mJgY28MPP2w7d+6c2U3ymPvvv9/Wrl07W1BQkC08\nPNz25ptv2v773//abrvtNluXLl1sQ4YMsZ04caLOc2gxlIiIH2vY0xhERPycgryIiB9TkBcR8WMK\n8iIifkxBXkTEjynIi4j4MQV5ERE/piAvIuLH/j9rodLblDSzyAAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 19 }, { "cell_type": "markdown", "metadata": {}, "source": [ "But is this actually a better fit? There are well-understood ways to determine this." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### How do you know when to stop?\n", "\n", "As you add more complexity to the model, the goodness of fit will **always** improve (unless your code has a bug, and until $\\chi^2=0$). The rule of thumb is that the number of terms you add should be far greater than the improvement in $\\chi^2$. \n", "\n", "For more statistical rigor (Numerical Recipes section 15.6), when adding N parameters to a model, $\\Delta \\chi^2_N$ it distrubted as a $\\chi^2$ distribution with N degrees of freedom. Below we outline $\\Delta \\chi^2_N$ as a function of confidence level and N:\n", "\n", "\n", "\n", "\n", "\n", "
p N=1 N=2 N=3
68.3% $\\Delta \\chi^2$ = 1.00 $\\Delta \\chi^2$ = 2.30 $\\Delta \\chi^2$ = 3.53
95.4% $\\Delta \\chi^2$ = 4.00 $\\Delta \\chi^2$ = 6.17 $\\Delta \\chi^2$ = 8.02
99.73% $\\Delta \\chi^2$ = 9.00 $\\Delta \\chi^2$ = 11.8 $\\Delta \\chi^2$ = 14.2
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### How do you know when you've gone too far?\n", "\n", "\"Overfitting\" is a common problem in model selection. You typically want a \"parsimonious\" model that captures the important information using a small number of parameters. This model is frequently selected by looking at the *bias* vs. *variance* trade-off.\n", "\n", "Bias = < data - model >\n", "\n", "Variance = < (data - model)$^2$ >\n", "\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
\n", " Low Variance\n", " \n", " High Variance\n", "
\n", " Low Bias\n", " \n", "
\n", "
\n", "
\n", "
\n", " High Bias\n", " \n", "
\n", "
\n", "
\n", "
\n", "
Graphical illustration of bias and variance (http://scott.fortmann-roe.com)
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When determining model complexity, there are other metrics to use than $\\Delta \\chi^2$, especially when comparing different clases of models. E.g. mean squared error: \n", "\n", "MSE = bias$^2$ + variance\n", "\n", "\n", "\n", "*http://scott.fortmann-roe.com*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There are principled methods that help you decide the order of your models by adding a **penalty** to the calculation of $\\chi^2$. These include the Bayesian Information Criterion (BIC) or Akaike Information Criterion (AIC):\n", "\n", "BIC = $\\chi^2$ + *Nterm* $\\cdot$ ln(*Ndata*)\n", "\n", "AIC = $\\chi^2$ + *Nterm* $\\cdot$ 2 " ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Real World Example: Fourier Series Fit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As an example, we will fit a Fourier series to a folded periodic variable star lightcurve from the LINEAR survey.\n", "\n", "The code below requires the [astroML](http://www.astroML.org) package, which you can easily install by running\n", "\n", "```\n", "$ pip install astroML\n", "```\n", "\n", "We will examine how $\\chi^2$, BIC, and AIC vary as we change the number of terms in the Fourier series. If we do not get through this whole exercise, your homework will be to finish the notebook, and then repeat the analysis for another variable star from the data. I would like to see as a function of the number of terms in your analysis: $\\chi^2$, $\\Delta \\chi^2$ compared to the previous model, the significance of $\\Delta \\chi^2$, AIC, and BIC. Indicate the order of the series you would choose based on each of the above numbers (they may be different for $\\Delta \\chi^2$, AIC, and BIC)." ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Uncomment and run this to install astroML\n", "# !pip install astroML\n", "# !pip install astroML_addons" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline\n", "import astroML.datasets\n", "import numpy as np\n", "import matplotlib.pyplot as plt" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "lcs = astroML.datasets.fetch_LINEAR_sample()" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "print lcs" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "time, flux, dflux = lcs[18525697].T" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 24 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the raw lightcurve" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.errorbar(time, flux, yerr=dflux, fmt=\"ro\")\n", "plt.gca().invert_yaxis()\n", "plt.xlabel(\"Mean Julian Day\")\n", "plt.ylabel(\"Mag\")\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 25 }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this case, we know its a periodic variable star. The whole issue of *if* an object is periodic is the subject of a whole other lecture. In this case, we take it as fact, and attempt to find the optimal period by using a Lomb Scargle analysis (itself the subject of another lecture entirely).\n", "\n", "The periodogram is essentially a normalized inverse $\\chi^2$, so that the maximum of the periodogram corresponds to the best-fit Fourier series." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from astroML.time_series import lomb_scargle\n", "periods = np.logspace(-1, 0, 10000, base=10)\n", "periodogram = lomb_scargle(time, flux, dflux, omega=2 * np.pi / periods, generalized=True)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(periods, periodogram)\n", "plt.semilogx()\n", "plt.xlabel(\"Period (days)\")\n", "plt.ylabel(\"Power\")\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nFflMt2XLFsTFxeG1116TX3KiAHiiSxSagKOYPvroI9x8882YNWuWooztdjsKCgpQWVkJo9GIrKws\n5OTkwGw2t0v397//HRMmTAjp4tpE3rg7EYUm4BnEyy+/jMGDB2P48OG4++67sW7dOhw5ciRgxlVV\nVUhKSkJiYiLi4+ORm5uL8vLydumeeeYZ3HDDDejVq1dw74AoBjG4USQIGCCWLVuGXbt24fXXX0dC\nQgLmzp0rqzJvbGxEQkKC677JZEJjY2O7NOXl5Zg9ezYATsAjIookAZuYli9fjk8++QQ1NTXo1asX\nCgoKMGrUqIAZy6ns77jjDixatAgGgwEOh8NvE1NhYaHrtsVigcViCZg/dWw83qBw03ufs1qtsFqt\nquUXMEDccccd6N+/P2bPng2LxYK+ffvKythoNMJms7nu22w2mEwmjzRbt25Fbm4uAKCpqQnvvvsu\n4uPjkZOT0y4/9wBBRETteR88z58/P6T8AgaIpqYmfP311/j4449x//33o66uDgMGDMCKFSv8vi4z\nMxO1tbWor69H7969UVZWhtLSUo803333nev2jBkzcM011wiDAxFRNIi1vqOAAeL48eNoaGjAnj17\nUF9fj6NHj6JTp8DXGYqLi0NxcTGys7Nht9uRl5cHs9mMkpISAHAt3UFE5I/ezTYdmcERYGxpeno6\nRo4cidGjR2PMmDHtmonCwdlHQaREdTUwdGj0HdUZDEBiIvD993qXRH8GA7BxIzB6tN4lCcxgAGpq\ngLQ0vUvSJtS6M+AZRE1NDQDpTIKjjIiIOo6AbUXbt29HRkYGLr30UgwcOBCXXXYZvvrqq3CUjYiI\ndBQwQMyaNQtPPPEEGhoa0NDQgMcff1zxrGoiCp9zzgEeeUTvUlAsCBggmpubMW7cONd9i8WCEydO\naFooUteRI8Dp03qXIvw6aovo2bPAtm16l6JjirV9LmCA6Nu3LxYsWID6+np8//33eOihh9CvX79w\nlI1U0r07MHOm3qUgJaKtY10Le/boXQIKGCCWLl2KgwcPYvLkybj++uvx448/YsmSJeEoG6moI/7Y\nWMlGt/379S4B+RzFdPLkSTz//POoq6tDeno6nnjiCcTHx4ezbEREURXoo6mscvg8g5g+fTq2bt2K\ntLQ0vPvuu7jrrrvCWS5SWaztuESkPZ9nEN988w22b98OALj11luRlZUVtkIRqSHWOgyJws3nGURc\n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\n", "text": [ "" ] } ], "prompt_number": 27 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Find the peak of this periodogram using ``argmax``" ] }, { "cell_type": "code", "collapsed": false, "input": [ "idx = np.argmax(periodogram)\n", "\n", "print periods[idx], periodogram[idx]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.580331798284 0.717932373858\n" ] } ], "prompt_number": 28 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now \"fold\" the lightcurve at this best period. By \"folding\" I mean find the phase at which the star is in its oscillation (phase is defined here as running from 0 to 1), for every data point. This is the MJD / period (e.g. 81761.7165) minus the integer portion of this value MJD // period (e.g. 81761) = 0.7165." ] }, { "cell_type": "code", "collapsed": false, "input": [ "period = periods[idx]\n", "phase = time / period - time // period \n", "print min(phase), max(phase)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.00166719715344 0.999931284314\n" ] } ], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.errorbar(phase, flux, yerr=dflux, fmt=\"ro\")\n", "plt.gca().invert_yaxis()\n", "plt.xlabel(\"Phase\")\n", "plt.ylabel(\"Mag\")\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 31 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we need to get serious. We want a function we can call to return $\\chi^2$ for a model fit. It makes a lot of sense to have this be a method on a class. Then the class can contain the data it is fitting as member variables (e.g. self.flux). We also want an evaluate() method that returns the lightcurve for a given set of phases, so that we can plot it. Design a very basic class to do this. The lightcurve model that this class will fit to the data is of the form:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "Model = A_0 + A_1 * \\cos(2 \\pi\\cdot phase + \\phi_1) + A_2 * \\cos(2 \\pi\\cdot phase + \\phi_2) + \\cdots + A_N * \\cos(2 \\pi N \\cdot phase + \\phi_N)\n", "$$\n", "\n", "with model parameters [ A$_0$ A$_1$ $\\phi_1$ A$_2$ $\\phi_2$ ... A$_N$ $\\phi_N$ ]\n", "\n", "Let's create a class that implements this model:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Fourier(object):\n", " def __init__(self, phase, flux, dflux, nterms):\n", " self.phase = phase\n", " self.flux = flux\n", " self.dflux = dflux\n", " self.nterms = nterms\n", " assert(self.nterms > 0)\n", " \n", " def evaluate(self, phase, terms):\n", " assert(len(terms) == 2 * self.nterms - 1)\n", " model = terms[0] * np.ones(len(phase))\n", " for i in range(self.nterms-1):\n", " model += terms[2*i + 1] * np.cos(2 * np.pi * (i+1) * phase + terms[2*i + 2])\n", " return model\n", " \n", " def chi2(self, args):\n", " model = self.evaluate(self.phase, args)\n", " chi = (model - self.flux) / self.dflux\n", " return np.sum(chi**2)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 32 }, { "cell_type": "raw", "metadata": {}, "source": [ "Create a (very basic) instance of this class, and plot it up over a range of phases using its evaluate() method." ] }, { "cell_type": "code", "collapsed": false, "input": [ "fourier = Fourier(phase, flux, dflux, 1)\n", "mphase = np.arange(0, 1, 0.01)\n", "model = fourier.evaluate(mphase, [10])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(mphase, model, \"k-\")\n", "plt.gca().invert_yaxis()\n", "plt.xlabel(\"Phase\")\n", "plt.ylabel(\"Model mag\")\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nPvvss0CU6nfe9MW9995rFRQUWJb1bT+cffbZVnNzcyDK9bu3337b2rp1a7ubjE7l63mz348sysvL\nNWHCBI0bN04hISG69tprtW7dunZtTl3sl5ycrIaGhk7XcAx03vTFpZde2ja/k5ycrNra2kCU6lfe\n9IMkPfLII8rKytKYMWMCUKU9vOmLlStXat68eYqIiJAkjR49OhCl+p03fXHOOeeosbFRktTY2KhR\no0YpONjW+3xs09nC6FP5et7s92Fx4MABRUZGtr2OiIjQgQMHjG1Ox5OkN31xqieffFKzZ8+2ozRb\neft3Yt26dbr11lslqdM1PacDb/pi3759qq+vV2pqqqZMmaJnnnnG7jJt4U1f5Ofna+fOnTr33HOV\nmJiooqIiu8vsN3w9b/b7SPX2H7n1nXn60/Hk4Mvv9Oabb+qpp57SO++848eKAsObfrj99ttVWFgo\nh8Mhy7I6/P04XXjTF83Nzdq6datef/11NTU16dJLL9Ull1yi6OhoGyq0jzd98eCDDyopKUkej0f7\n9+9Xenq6KioqNGzYMBsq7H98OW/2+7AYO3asampq2l7X1NS0Dae7alNbW6uxY8faVqNdvOkLSfrw\nww+Vn5+vsrKyboehA5U3/fD+++/r2muvlfTtpObLL7+skJAQzZ0719Za/c2bvoiMjNTo0aM1ZMgQ\nDRkyRNOnT1dFRcVpFxbe9MW7776ru+++W5IUFRWl888/X3v27NGUKVNsrbU/8Pm82aczKn7Q3Nxs\njR8/3qqsrLS++eYb4wT3pk2bTstJXcvyri8++eQTKyoqytq0aVOAqvQ/b/rhVDfccIO1evVqGyu0\njzd9sWvXListLc1qaWmxvvrqK8vlclk7d+4MUMX+401f3HHHHdaSJUssy7KsTz/91Bo7dqx19OjR\nQJRri+8+ReNUvp43+/3IIjg4WEuXLtXMmTPV2tqqG2+8URMnTtSyZcskSfPnz9fs2bP10ksvacKE\nCQoNDdXy5csDXLV/eNMX999/vz7//PO2a/UhISEqLy8PZNl9zpt++L7wpi9iY2M1a9YsJSQkKCgo\nSPn5+YqLiwtw5X3Pm75YvHixcnNzlZiYqBMnTuj3v/+9zj777ABX7h+nLoyOjIzUfffdp+bmZkk9\nO2+yKA8AYNTv74YCAAQeYQEAMCIsAABGhAUAwIiwAAAYERYAACPCAujGoEGD5Ha7FR8fr6uvvlpf\nf/21qqqqun3sM3A6IiyAbpx55pnatm2btm/frsGDB+uxxx47LZ87BpgQFoCXfvSjH7V97ntra6tu\nvvlmuVwuzZw5U8eOHZMkPf7447r44ouVlJSkrKwsff3115Kkf/3rX4qPj1dSUpJmzJjRdozf/OY3\nuvjii5WYmKi///3vgfnFAC8QFoAXWlpa9PLLLyshIUGWZWnfvn1auHChduzYoREjRmj16tWSpHnz\n5qm8vFwffPCBJk6cqCeffFKS9MADD+jVV1/VBx98oBdffFHSt4+QHzFihMrLy1VeXq7HH39cVVVV\ngfoVgW4RFkA3vv76a7ndbl100UUaN26cbrzxRknS+eefr4SEBEnShRde2HaS3759u6ZNm6aEhAQ9\n99xz+uijjyRJU6dOVU5Ojp544gm1tLRIkl599VWtWLFCbrdbl1xyierr69tGLkB/0+8fJAgE0pAh\nQzr9bOIf/OAHbd8PGjSo7TLUDTfcoJKSEsXHx6u4uFgej0eS9Le//U3l5eUqLS3VhRdeqPfff1+S\ntHTpUqWnp/v/FwF6iZEF0EvWKR+u9OWXXyo8PFzNzc169tln29rs379fF198se677z6NGTNGNTU1\nmjlzph599NG2kcbevXvV1NQUkN8BMGFkAXSjqzufTt3ucDjaXj/wwANKTk7WmDFjlJycrC+//FKS\ndOedd2rfvn2yLEs//vGPlZiYqISEBFVVVWny5MmyLEthYWF64YUX/P9LAT3AI8oBAEZchgIAGBEW\nAAAjwgIAYERYAACMCAsAgBFhAQAwIiwAAEaEBQDA6P8ANFp/dcw3HMMAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 34 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now for a more interesting model, with some actual values:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fourier = Fourier(phase, flux, dflux, 2)\n", "mphase = np.arange(0, 1, 0.01)\n", "model = fourier.evaluate(mphase, [10, 0.1, 0.0])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 35 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(mphase, model, \"k-\")\n", "plt.gca().invert_yaxis()\n", "plt.xlabel(\"Phase\")\n", "plt.ylabel(\"Model mag\")\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 36 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's check what this looks like if we change the phase:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fourier = Fourier(phase, flux, dflux, 2)\n", "mphase = np.arange(0, 1, 0.01)\n", "model = fourier.evaluate(mphase, [10, 0.1, np.pi])\n", "\n", "plt.plot(mphase, model, \"k-\")\n", "plt.gca().invert_yaxis()\n", "plt.xlabel(\"Phase\")\n", "plt.ylabel(\"Model mag\")\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nYII=\n", "text": [ "" ] } ], "prompt_number": 37 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Since we have a complicated model, let's use ``optimize.fmin``, as we did above.\n", "We'll fit a 2 term model to the data (1 constant term, and 1 term with an amplitude and phase offset)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fourier = Fourier(phase, flux, dflux, 2)\n", "guess = [] # this needs to be the number of paramters you want to fit for, here the mean brightness, the amplitude, and minimum\n", "guess.append(np.mean(fourier.flux))\n", "guess.append(np.std(fourier.flux))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 38 }, { "cell_type": "markdown", "metadata": {}, "source": [ "We'll initialize the phase with the phase of the minimum flux" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(np.argmax(fourier.flux))" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "6\n" ] } ], "prompt_number": 39 }, { "cell_type": "code", "collapsed": false, "input": [ "print(fourier.flux[np.argmax(fourier.flux)])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "15.509\n" ] } ], "prompt_number": 40 }, { "cell_type": "code", "collapsed": false, "input": [ "print(fourier.phase[np.argmax(fourier.flux)])" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "0.879930489682\n" ] } ], "prompt_number": 41 }, { "cell_type": "code", "collapsed": false, "input": [ "guess.append(2 * np.pi * (1 - fourier.phase[np.argmax(fourier.flux)]))" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 42 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we have our initial guess:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print(guess)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[15.101739336492891, 0.26149871243334849, 0.75441898307024013]\n" ] } ], "prompt_number": 43 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Make it so!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "optimize.fmin(fourier.chi2, x0=[guess], disp=0, full_output=1)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 44, "text": [ "(array([ 15.1035305 , -0.34102511, -0.49636256]),\n", " 13332.31542512862,\n", " 120,\n", " 209,\n", " 0)" ] } ], "prompt_number": 44 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Capture the output and look at the \"best fit\" parameters. I.e. those that minimized the return value of fourier.chi2." ] }, { "cell_type": "code", "collapsed": false, "input": [ "result = optimize.fmin(fourier.chi2, x0=[guess], disp=0, full_output=1)\n", "best_fit = result[0]\n", "print(best_fit)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 15.1035305 -0.34102511 -0.49636256]\n" ] } ], "prompt_number": 45 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Plot the model up, compared to the data and the initial guess" ] }, { "cell_type": "code", "collapsed": false, "input": [ "plt.errorbar(fourier.phase, fourier.flux, yerr=fourier.dflux, fmt=\"ro\")\n", "plt.plot(mphase, fourier.evaluate(mphase, guess), \"b--\", label=\"Initial guess\")\n", "plt.plot(mphase, fourier.evaluate(mphase, best_fit), \"g-\", label=\"Best fit\")\n", "plt.gca().invert_yaxis()\n", "plt.xlabel(\"Phase\")\n", "plt.ylabel(\"Mag\")\n", "plt.legend()\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\ntGvXjo8++gh/f39OnTpFfHw8SUlJAOzevZuJEydy48YN9Ho9n3zyiQS5BUEQ6pCbOt2HIAiCsA37\nZAAABt9JREFU4BxuCgX3hg0b6NSpEx06dOAvf/mL5jnPPvssHTp0IDw8nIyMDCdb6Dxs9cWKFSsI\nDw8nLCyMPn36sGfPnjqw0vHY8zcBsG3bNlxdXfnqq6+caJ1zsacvUlJSiIiIICQkhNhbOFmerb44\nd+4cgwYNolu3boSEhPDpp58630gnoSWMrkiVxs0qRzmcjMFgUHq9XmVmZqobN26o8PBwtX///nLn\nJCUlqfvvv18ppdTWrVtVdHR0XZjqcOzpi82bN6vc3FyllFLr16+/JfvCnn4oPe+ee+5RQ4YMUV9+\n+WUdWOp47OmLixcvqi5duqisrCyllFJnz56tC1Mdjj19MWvWLPXyyy8rpYz90Lx5c1VYWFgX5jqc\ntLQ0tXPnTqubjKo6btb7mUV6ejp33nknwcHBuLm5MXLkSNasWVPunLVr1zJmzBgAoqOjyc3N5fTp\n03VhrkOxpy969+5tiu9ER0dz4sSJujDVodjTD2DU9IwYMQI/P786sNI52NMX//znP3n44YcJCgoC\noEWLFnVhqsOxpy8CAwO5fPkyAJcvX8bX1xdXV6fu83Ea1oTRpVR13Kz3zuLkyZO0adPG9HNQUBAn\nT560ec6tOEja0xfmLFmyhMGDBzvDNKdi79/EmjVrmDx5MmBMNXMrYk9fHD58mAsXLnDPPffQo0cP\nPvvsM2eb6RTs6Yv4+Hh+/vlnWrVqRXh4OPPmzXO2mfWGqo6b9d6l2vtPrirE6W/FwaEq97Rp0yb+\n8Y9/8OOPPzrQorrBnn54/vnnefPNN015+yv+fdwq2NMXhYWF7Ny5k//85z9cu3aN3r1706tXLzp0\n6OAEC52HPX2RmJhIt27dSElJ4ciRIwwYMIDdu3fj7e3tBAvrH1UZN+u9s2jdujVZWVmmn7OyskzT\naWvnnDhxgtatWzvNRmdhT18A7Nmzh/j4eDZs2FDpNPRmxZ5+2LFjByNHjgSMQc3169fj5ubGgw8+\n6FRbHY09fdGmTRtatGiBh4cHHh4exMTEsHv37lvOWdjTF5s3b2b69OkA6PV62rVrx6FDh+jRo4dT\nba0PVHncrNWIigMoLCxU7du3V5mZmer69es2A9xbtmy5JYO6StnXF8ePH1d6vV5t2bKljqx0PPb0\ngzljx45Vq1atcqKFzsOevjhw4IC69957lcFgUHl5eSokJET9/PPPdWSx47CnL1544QWVkJCglFIq\nJydHtW7dWp0/f74uzHUKlWXRqOq4We9nFq6urrz//vvExcVRVFTEhAkT6Ny5Mx999BEATz75JIMH\nD+bbb7/lzjvvxNPTk08++aSOrXYM9vTFa6+9xsWLF01r9W5ubqSnp9el2bWOPf1wu2BPX3Tq1IlB\ngwYRFhZGgwYNiI+Pp0uXLnVsee1jT1+8+uqrjBs3jvDwcIqLi3nrrbdo3rx5HVvuGMyF0W3atGH2\n7NkUFhYC1Rs3RZQnCIIg2KTe74YSBEEQ6h5xFoIgCIJNxFkIgiAINhFnIQiCINhEnIUgCIJgE3EW\ngiAIgk3EWQhCJbi4uBAREUFoaCiPPvoo+fn5HDt2rNK0z4JwKyLOQhAqoXHjxmRkZLB3717c3d1Z\nuHDhLZl3TBBsIc5CEOzk7rvvNtV9LyoqYtKkSYSEhBAXF0dBQQEAixYtomfPnnTr1o0RI0aQn58P\nwMqVKwkNDaVbt27069fP1MaLL75Iz549CQ8P5+OPP66bGxMEOxBnIQh2YDAYWL9+PWFhYSilOHz4\nMM888wz79u3Dx8eHVatWAfDwww+Tnp7Orl276Ny5M0uWLAFgzpw5JCcns2vXLtatWwcYU8j7+PiQ\nnp5Oeno6ixYt4tixY3V1i4JQKeIsBKES8vPziYiIICoqiuDgYCZMmABAu3btCAsLA6B79+6mQX7v\n3r307duXsLAwVqxYwf79+wHo06cPY8aMYfHixRgMBgCSk5NZtmwZERER9OrViwsXLphmLoJQ36j3\niQQFoS7x8PDQrE3csGFD03sXFxfTMtTYsWNZu3YtoaGhLF26lJSUFAA+/PBD0tPTSUpKonv37uzY\nsQOA999/nwEDBjj+RgShhsjMQhBqiDIrrnT16lUCAgIoLCxk+fLlpnOOHDlCz549mT17Nn5+fmRl\nZREXF8eCBQtMM41ffvmFa9eu1ck9CIItZGYhCJVgbeeT+XGdTmf6ec6cOURHR+Pn50d0dDRXr14F\n4KWXXuLw4cMopbjvvvsIDw8nLCyMY8eOERkZiVKKli1bsnr1asfflCBUA0lRLgiCINhElqEEQRAE\nm4izEARBEGwizkIQBEGwiTgLQRAEwSbiLARBEASbiLMQBEEQbCLOQhAEQbCJOAtBEATBJv8Psrx/\nakBcsSIAAAAASUVORK5CYII=\n", "text": [ "" ] } ], "prompt_number": 46 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Looks \"eh\". What is the goodness of fit of the model? The reduced chi2 (i.e. chi2 per degree of freedom) gives an absolute \"goodness of fit\" to your model: you expect this to be a value near 1.0:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$\n", "\\chi^2_\\nu = \\frac{\\chi2}{Npts - Nterms - 1}\n", "$$" ] }, { "cell_type": "code", "collapsed": false, "input": [ "chi2_1 = result[1]\n", "chi2_2 = fourier.chi2(best_fit)\n", "print chi2_1, chi2_2, chi2_1 / (len(flux) - len(best_fit) - 1)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "13332.3154251 13332.3154251 64.4073208943\n" ] } ], "prompt_number": 47 }, { "cell_type": "raw", "metadata": {}, "source": [ "This is where we start to go down the rabbit hole. Start to add more terms..." ] }, { "cell_type": "code", "collapsed": false, "input": [ "fourier2 = Fourier(phase, flux, dflux, 3)\n", "guess2 = [] # this needs to be the number of paramters you want to fit for, now 2*3-1 = 5\n", "guess2.append(np.mean(fourier2.flux))\n", "guess2.append(np.std(fourier2.flux))\n", "guess2.append(2 * np.pi * (1 - fourier2.phase[np.argsort(fourier2.flux)[-1]]))\n", "guess2.append(0.0)\n", "guess2.append(2 * np.pi * (1 - fourier2.phase[np.argsort(fourier2.flux)[-1]]))\n", "result2 = optimize.fmin_bfgs(fourier2.chi2, x0=[guess2], disp=0, full_output=1)\n", "best_fit2 = result2[0]\n", "print best_fit2" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 15.13830456 -0.32363282 -0.72001082 -0.15249286 -0.48308296]\n" ] } ], "prompt_number": 48 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.errorbar(fourier2.phase, fourier2.flux, yerr=fourier2.dflux, fmt=\"ro\")\n", "plt.plot(mphase, fourier2.evaluate(mphase, guess2), \"b--\", label=\"Initial guess\")\n", "plt.plot(mphase, fourier2.evaluate(mphase, best_fit2), \"g-\", label=\"Best fit\")\n", "plt.gca().invert_yaxis()\n", "plt.xlabel(\"Phase\")\n", "plt.ylabel(\"Mag\")\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nlsho5nfStQAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 49 }, { "cell_type": "markdown", "metadata": {}, "source": [ "More cowbell!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fourier5 = Fourier(phase, flux, dflux, 5)\n", "guess5 = [] # this needs to be the number of paramters you want to fit for, now 9\n", "guess5.append(np.mean(fourier5.flux))\n", "guess5.append(np.std(fourier5.flux))\n", "guess5.append(2 * np.pi * (1 - fourier5.phase[np.argsort(fourier5.flux)[-1]]))\n", "for i in range(2, 5):\n", " guess5.append(0.0)\n", " guess5.append(2 * np.pi * (1 - fourier5.phase[np.argsort(fourier5.flux)[-1]]))\n", "result5 = optimize.fmin_bfgs(fourier5.chi2, x0=[guess5], disp=0, full_output=1)\n", "best_fit5 = result5[0]\n", "print best_fit5" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 15.15967221 -0.29384084 -0.8412157 -0.15320473 -0.90782949\n", " -0.11099549 -0.44864424 -0.08383252 0.04671944]\n" ] } ], "prompt_number": 50 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.errorbar(fourier5.phase, fourier5.flux, yerr=fourier5.dflux, fmt=\"ro\")\n", "plt.plot(mphase, fourier5.evaluate(mphase, guess5), \"b--\", label=\"Initial guess\")\n", "plt.plot(mphase, fourier5.evaluate(mphase, best_fit5), \"g-\", label=\"Best fit\")\n", "plt.gca().invert_yaxis()\n", "plt.xlabel(\"Phase\")\n", "plt.ylabel(\"Mag\")\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 51 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Am getting tired of initializing \"guess\" all the time. We can make a method on the class that does this for us! Lets inherit from the main Fourier class, so that we only have to implement that method. Part of the point of this is to demonstrate class inheritance." ] }, { "cell_type": "code", "collapsed": false, "input": [ "class Fourier2(Fourier):\n", " def __init__(self, phase, flux, dflux, nterms):\n", " Fourier.__init__(self, phase, flux, dflux, nterms)\n", " \n", " def makeGuess(self):\n", " guess = []\n", " guess.append(np.mean(self.flux))\n", " if self.nterms > 1:\n", " guess.append(np.std(self.flux))\n", " guess.append(2 * np.pi * (1 - self.phase[np.argsort(self.flux)[-1]]))\n", " for i in range(2, self.nterms):\n", " guess.append(0.0)\n", " guess.append(2 * np.pi * (1 - self.phase[np.argsort(self.flux)[-1]]))\n", " return guess" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 52 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that everything is pipelined, lets run this for a range of models, and plot how chi2 improves as you increase the model parameters. Note that it will *always* decrease as you add terms!!!! Up to a limit: the end point of this process is when you have 1 parameter for every data point, in which case your chi2 should be 0.0." ] }, { "cell_type": "code", "collapsed": false, "input": [ "nterms = np.arange(1, 10)\n", "chi2 = []\n", "for nterm in nterms:\n", " fourier = Fourier2(phase, flux, dflux, nterm)\n", " guess = fourier.makeGuess()\n", " print(guess)\n", " chi2.append(optimize.fmin_bfgs(fourier.chi2, x0=[guess], disp=0, full_output=1)[1])\n", "chi2 = np.array(chi2)\n", "plt.plot(nterms, chi2)\n", "plt.xlabel(\"N Terms\")\n", "plt.ylabel(\"Chi2\")\n", "plt.show()\n", " " ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[15.101739336492891]\n", "[15.101739336492891, 0.26149871243334849, 0.75441898307024013]\n", "[15.101739336492891, 0.26149871243334849, 0.75441898307024013, 0.0, 0.75441898307024013]\n", "[15.101739336492891, 0.26149871243334849, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013]" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "[15.101739336492891, 0.26149871243334849, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013]\n", "[15.101739336492891, 0.26149871243334849, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013]" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "[15.101739336492891, 0.26149871243334849, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013]" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "[15.101739336492891, 0.26149871243334849, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013]" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n", "[15.101739336492891, 0.26149871243334849, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013, 0.0, 0.75441898307024013]" ] }, { "output_type": "stream", "stream": "stdout", "text": [ "\n" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\nbV4T38+sWLGCxMREEhISWLFixZVf3Kmz3H7mgw8+MHbt2mUkJCRYXUq7KioqjOLiYsMwDOPMmTNG\nTEyMUVJg+klrAAAHLElEQVRSYnFVbTt37pxhGIZx8eJFY+LEicbWrVstrqh9L774ojFv3jxj+vTp\nVpfSrujoaOPkyZNWl3FVCxYsMHJzcw3DMP+/r66utriiK2toaDAiIyONI0eOWF3KZUpLS42hQ4ca\nFy5cMAzDMDIyMoz//d//tbiq1j7//HMjISHBqKmpMerr642pU6ca+/fvb/f13XokMnnyZAYMGGB1\nGVcUGRnJ2LFjAbj55psZNWoUR48etbiqtt10000A1NXV0dDQQFhYmMUVta28vJy3336bxx9/3O9v\nAeDv9Z0+fZqtW7fy2GOPAeYcZGhoqMVVXdmmTZsYPnz4ZdeP+YN+/foREhLC+fPnqa+v5/z580RF\nRVldVitfffUVEydO5IYbbqBXr17cdddd/OlPf2r39d06RALNoUOHKC4uZuLEiVaX0qbGxkbGjh2L\n3W5nypQpxMXFWV1Sm5YuXcoLL7xAUJB//+dts9mYOnUqEyZM4LXXXrO6nDaVlpYycOBAHn30UcaN\nG8ePf/xjzp8/b3VZV5SXl8e8efOsLqOVsLAwnnrqKW699VYGDx5M//79mTp1qtVltZKQkMDWrVup\nqqri/Pnz/OUvf6G8vLzd1/v3v7Ie5OzZszzwwAOsWLGCm2++2epy2hQUFMTu3bspLy/ngw8+8Mul\nG9566y0iIiJISkry+9/yP/roI4qLi3nnnXd49dVX2bp1q9UltVJfX8+uXbtYvHgxu3btom/fvuTk\n5FhdVrvq6up48803efDBB60upZUDBw7wq1/9ikOHDnH06FHOnj3LH//4R6vLaiU2NpasrCzS09O5\n9957SUpKuuIvZAoRP3Dx4kVmz57Nj370I2bOnGl1OVcVGhrK97//fT755BOrS2ll27ZtbNy4kaFD\nhzJ37lzee+89FixYYHVZbRo0aBAAAwcOZNasWezcudPiilpzOBw4HA5uv/12AB544AF27dplcVXt\ne+eddxg/fjwDBw60upRWPvnkE7773e8SHh5OcHAwP/zhD9m2bZvVZbXpscce45NPPuH999+nf//+\njBw5st3XKkQsZhgGCxcuJC4ujieffNLqctr19ddfU11dDUBNTQ3vvvsuSUlJFlfV2vLlyykrK6O0\ntJS8vDzuvvtufv/731tdVivnz5/nzJkzAJw7d46CggK/PIswMjKSIUOGsG/fPsCcb4iPj7e4qvat\nWbOGuXPnWl1Gm2JjY9m+fTs1NTUYhsGmTZv8tiV8/PhxAI4cOcKf//znK7YHA/5iwyuZO3cu77//\nPidPnmTIkCH8+7//O48++qjVZV3mo48+4g9/+IPnVE8wTwO85557LK7schUVFWRmZtLY2EhjYyPz\n588nNTXV6rKuyl/XVqusrGTWrFmA2TJ6+OGHSU9Pt7iqtr3yyis8/PDD1NXVMXz4cH73u99ZXVKb\nzp07x6ZNm/x2fmnMmDEsWLCACRMmEBQUxLhx43jiiSesLqtNDzzwACdPniQkJISVK1fSr1+/dl+r\niw1FRMRrameJiIjXFCIiIuI1hYiIiHhNISIiIl5TiIiIiNcUIiIi4jWFiIgXgoKC+PnPf+758y9/\n+Uuee+65y17zu9/9zrM0ee/evT3XAj3zzDNdXa6Iz+g6EREv3HDDDURFRbFz507Cw8N58cUXOXv2\nLM8++2ybrx86dChFRUUdWvm4+Z+kv14oKdKSRiIiXggJCeGJJ57gpZdeuuZ9X3jhBZKTkxkzZgzL\nli0DzBWcR44cSWZmJomJiWzdupXY2FgeffRRRo4cycMPP0xBQQF33nknMTExfPzxxwC8//77ntHO\nuHHjOHv2bGcepshVKUREvLR48WL++Mc/8s0333R4n4KCAvbv38/OnTspLi6mqKjIs3rv/v37+elP\nf8oXX3zBrbfeyoEDB/j5z3/OV199xd69e1m7di0fffQRv/zlL1m+fDkAL774IitXrqS4uJgPP/yQ\nG2+80SfHKtIehYiIl2655RYWLFjQ4duwGoZBQUEBBQUFJCUlMX78ePbu3cv+/fsBuO222y67Te7Q\noUOJj4/HZrMRHx/vufdEQkIChw4dAuDOO+9k6dKlvPLKK5w6dYpevXp17kGKXIVCROQ6PPnkk+Tm\n5nLu3LkO7/P0009TXFxMcXEx+/bt8ywK2rdv38te16dPH8/zoKAgevfu7XleX18PQFZWFrm5udTU\n1HDnnXeyd+/e6z0kkWuiEBG5DgMGDCAjI4Pc3NyrToTbbDamTZvGqlWrPKHjdrs5ceKE159/4MAB\n4uPj+ed//mduv/12hYh0OYWIiBdaBsZTTz3F119/3aHXp6WlMW/ePO644w5Gjx5NRkaGZzL82yF0\npT83P1+xYgWJiYmMGTOG3r17c++993p/UCJe0Cm+IiLiNY1ERETEawoRERHxmkJERES8phARERGv\nKURERMRrChEREfGaQkRERLymEBEREa/9P0cIRoLjgPEqAAAAAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 53 }, { "cell_type": "markdown", "metadata": {}, "source": [ "And what is delta chi2? Note it converges to zero, i.e. you are getting less and less improvement with the addition of every new term. Now we have to start being careful." ] }, { "cell_type": "code", "collapsed": false, "input": [ "delta_chi2 = chi2[:-1] - chi2[1:]\n", "plt.plot(nterms[1:], delta_chi2)\n", "plt.xlabel(\"N terms\")\n", "plt.ylabel(\"Delta chi2\")\n", "plt.show()\n", "# You will need to figure out the significance of all these delta_chi2 as part of your homework!" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nbXZJLXL58mXefvttr+qLqjN27FiSkpK4/fbb6dGjB+PGjePJJ580u6wWmTt3Ll999RW+vr6sX78e\nPz+/JrfVzYYiItJqXbY5S0REPE8hIiIiraYQERGRVlOIiIhIqylERESk1RQiIiLSagoRkRbq0aMH\nP/7xj10//+pXv2LVqlUNtnv33Xf54IMPOrI0kQ6nEBFpoZtuuont27fz1VdfAU3fSLl///4WT3dR\nXV3d5vpEOlKXvWNdxFN8fX158skneeGFF/j5z3/e6DanT59mw4YN9OzZky1btvDyyy8zfPhwUlNT\nKSgoAODFF1/kzjvvJC0tjVOnTpGfn8+tt97KiBEj+Pzzz8nPz6egoIDf/OY3vP/+++zZs4fg4GDe\neOMNfHx8+OlPf+p6PWXKFH75y1925F+DCKAQEWmVpUuXMmbMGH7yk580+n5oaChPPfUU/fr145ln\nngHg0UcfZfny5fzgBz+goKCAadOmkZeXBzif4XDgwAF69epFWloa+fn57N+/n08++YSJEyeyfft2\nfvWrX/HQQw/x5ptvctddd7Fjxw7+8Y9/APD11193zImL3EAhItIK/fr1IykpiXXr1nHzzTc3uV39\nWYXefvttPv30U9fP5eXlXL58GYvFQmJiIr169QKczWPTp0+nZ8+ejB49mtraWqZOnQpAVFQUp0+f\n5oEHHqB3796kpKTwwAMP8MADD3joTEW+m0JEpJWefvppxo0bx5IlS9za3jAMcnJyuOmmmxq8V/cU\nyzp12/To0QNfX1/X+h49elBdXU3Pnj05fPgw+/btY9u2bbz88svs27evDWcj0jrqWBdppQEDBjBv\n3jwyMjIa7Vzv16+fazp5gClTprBu3TrXz3/7299a/dmXL1+mrKyM6dOn85vf/KZNxxJpC4WISAvV\nD4wVK1Zw/vz5RrebOXMm27dvJyYmhoMHD7Ju3TqOHDnC2LFjGTVqFBs2bGj0mDf+3Nh75eXlzJw5\nk7Fjx3L33XfzwgsvtMepibSYpoIXEZFW05WIiIi0mkJERERaTSEiIiKtphAREZFWU4iIiEirKURE\nRKTVFCIiItJqChEREWm1/w9sNmz355EVZwAAAABJRU5ErkJggg==\n", "text": [ "" ] } ], "prompt_number": 54 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets start to look at the penalties imposed by BIC/AIC." ] }, { "cell_type": "code", "collapsed": false, "input": [ "nterms = np.arange(1, 10)\n", "chi2 = []\n", "BICpenalty = []\n", "AICpenalty = []\n", "for nterm in nterms:\n", " fourier = Fourier2(phase, flux, dflux, nterm)\n", " guess = fourier.makeGuess()\n", " BICpenalty.append(len(guess) * np.log(len(fourier.phase)))\n", " AICpenalty.append(len(guess) * 2.0)\n", " chi2.append(optimize.fmin_bfgs(fourier.chi2, x0=[guess], disp=0, full_output=1)[1])\n", "chi2 = np.array(chi2)\n", "BICpenalty = np.array(BICpenalty)\n", "AICpenalty = np.array(AICpenalty)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 55 }, { "cell_type": "code", "collapsed": false, "input": [ "print chi2\n", "print BICpenalty\n", "print AICpenalty" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "[ 47266.37929305 13332.31540318 7618.56565643 4809.05302958\n", " 3083.87142319 2410.26885471 2203.09437531 2144.97764373\n", " 2121.13490158]\n", "[ 5.35185813 16.0555744 26.75929067 37.46300693 48.1667232\n", " 58.87043947 69.57415574 80.277872 90.98158827]\n", "[ 2. 6. 10. 14. 18. 22. 26. 30. 34.]\n" ] } ], "prompt_number": 56 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(nterms, chi2, label=\"chi2\")\n", "plt.plot(nterms, chi2 + BICpenalty, label=\"BIC\")\n", "plt.plot(nterms, chi2 + AICpenalty, label=\"AIC\")\n", "plt.xlabel(\"N Terms\")\n", "plt.ylabel(\"Chi2\")\n", "plt.semilogy()\n", "plt.legend()\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nAElFTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 57 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Can kinda see that BIC/AIC are telling you to stop. Lets make it more apparent." ] }, { "cell_type": "code", "collapsed": false, "input": [ "nterms = np.arange(1, 30, 2)\n", "chi2 = []\n", "BICpenalty = []\n", "AICpenalty = []\n", "for nterm in nterms:\n", " fourier = Fourier2(phase, flux, dflux, nterm)\n", " guess = fourier.makeGuess()\n", " BICpenalty.append(len(guess) * np.log(len(fourier.phase)))\n", " AICpenalty.append(len(guess) * 2.0)\n", " chi2.append(optimize.fmin_bfgs(fourier.chi2, x0=[guess], disp=0, full_output=1)[1])\n", "chi2 = np.array(chi2)\n", "BICpenalty = np.array(BICpenalty)\n", "AICpenalty = np.array(AICpenalty)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 58 }, { "cell_type": "code", "collapsed": false, "input": [ "plt.plot(nterms, chi2, label=\"chi2\")\n", "plt.plot(nterms, chi2 + BICpenalty, label=\"BIC\")\n", "plt.plot(nterms, chi2 + AICpenalty, label=\"AIC\")\n", "plt.xlabel(\"N Terms\")\n", "plt.ylabel(\"Chi2\")\n", "plt.semilogy()\n", "plt.legend()\n", "plt.show()" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nTkSuQmCC\n", "text": [ "" ] } ], "prompt_number": 59 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Which of the fits have the minimum BIC/AIC?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print np.argmin(chi2+BICpenalty), np.argmin(chi2+AICpenalty)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "4 6\n" ] } ], "prompt_number": 60 }, { "cell_type": "markdown", "metadata": {}, "source": [ "And what order model do they suggest?" ] }, { "cell_type": "code", "collapsed": false, "input": [ "print nterms[4], nterms[6]" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "9 13\n" ] } ], "prompt_number": 61 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that these will typically be different. And this is when you say to the referee \"We examined the order of model selection using both the BIC and the AIC, and find that our conclusions are insensitive to which model is preferred. Accordingly, we chose the most parsimonious model for our final analysis\". Because if you do find your results depend significantly on the model order at this level, you should rethink how you're doing things (e.g. is your model's functional form correct)." ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "Homework" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Homework: repeat the exercise with a different star of your choosing. Find the order of the model that delta chi2, AIC, and BIC would suggest.\n", "Turn in the homework again via github, using the filename ``HW3.ipynb``." ] } ], "metadata": {} } ] }