{ "cells": [ { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.core.display import HTML\n", "def css_styling():\n", " styles = open(\"../styles/custom.css\", \"r\").read()\n", " return HTML(styles)\n", "css_styling()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "
\n", "\n", "# [Physics 411](http://jklymak.github.io/Phy411/) Time Series Analysis\n", "*Jody Klymak*\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Week 2: Statistics of Bivariate Variables" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
\n", "\"The\n", "
\n", "\n", "We often collect data sets, rather than just single variables. Often we do so because we think they are related. For instance, we might look at economic indicators and think that Gross Domestic Product and Unemployment are related, and indeed they are, as shown on the right. \n", "\n", "\n", "
\n", "\"The\n", "
\n", "\n", "Of course, terrible lies can be told by fitting ill-conditioned data; don't worry, the plot on the right (DOI:10.1021/ci700332k) was making the same point. So, as scientists we alsways have to be careful to treat the data fairly. There are some more fun examples at [Spurious Correlations](http://www.tylervigen.com).\n", "\n", "(The error made in those correlations, not shared by the economic plot above, is that they correlated data sets with long term trends that had nothing to do with each other. The economic plot removes the large-scale trends by considering the derivative of the data, often a good idea to test true correlation between two time series.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Correlation" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are often interested in whether two variables are \"correlated\" or not, and there are formal methods of measuring the degree of correlation. First, we define the joint probability density." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Joint probability density" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider two random variables, $\\{x(k)\\}$ and $\\{y(k)\\}$. These of course have their individual *probability density functions*, $p(x)$, and $p(y)$. However we can also consider their **joint probability density** $p(x,y)$ defined in the same way as the univariate probability:\n", "\n", "\\begin{equation}\n", " p(x,y) = \\displaystyle\\lim_{\\Delta y\\to 0} \\displaystyle\\lim_{\\Delta x\\to 0} \\frac{1}{ \\Delta x \\Delta y}\\mathrm{prob}\\left[ x\\lt x(k)\\lt x+\\Delta x; \\ y\\lt y(k)\\lt y+\\Delta y\\right] \n", "\\end{equation}\n", "\n", "Note that $0\\leq p(x,y) \\leq 1$. \n", "\n", "From this definition, the probability that $a\\leq x\\leq b$ *and* $c\\leq y\\leq d$ is given by the double integral:\n", "\n", "\\begin{equation}\n", " \\mathrm{prob}[a\\leq x\\leq b; c\\leq y\\leq d]=\\int_c^d\\int_a^b p(x,y) \\mathrm{d}x\\mathrm{d}y\n", "\\end{equation}\n", "\n", "If we integrate one of the dimensions from $-\\infty$ to $\\infty$, then we recover the one-dimensional probability density of the other variable. i.e.:\n", "\n", "\\begin{equation}\n", " p(x)=\\int_{-\\infty}^{\\infty} p(x,y)\\,\\mathrm{d}y\n", "\\end{equation}\n", "\n", "and of course the integral of the total domain is unity:\n", "\n", "\\begin{equation}\n", " \\int_{-\\infty}^{\\infty}\\int_{-\\infty}^{\\infty} p(x,y)\\,\\mathrm{d}x\\mathrm{d}y=1\n", "\\end{equation}\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Example: Two Dice" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For example, lets consider two dice rolled at the same time. These would have a joint probability density of \n", "\n", "\\begin{equation}\n", " p(x,y) = \\frac{1}{36} \\sum_{x_i=1}^6\\sum_{y_i=1}^6 \\delta(x_i,y_i)\n", "\\end{equation}\n", "\n", "We can represent this graphically as" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "x = np.arange(1,7.,1.)\n", "y = np.arange(1,7.,1.)\n", "fig,ax=plt.subplots(1,1)\n", "for i in range(6):\n", " ax.plot(i+1.+0.*y,y,'k.',markersize=12)\n", "ax.set_xlim([0,7]);ax.set_ylim([0,7])\n", "ax.set_xlabel('Dice x');ax.set_ylabel('Dice y');ax.set_title('Joint Prob Fcn, dice rolls')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "where each dot represents a $\\delta(x)$ function with amplitude $1/36$. This is a somewhat clunky representation, and if we had discrete variables like this we might just make a table.\n", "\n", "As, expected, integrating gives us the original probability of each roll on a single dice:\n", "\n", "\\begin{equation}\n", " \\int_{-\\infty}^{\\infty} p(x,y)\\ \\mathrm{d}y = \\frac{1}{6} \\sum_{x_i=1}^6 \\delta(x_i)\n", "\\end{equation}\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Independent variables" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The example above is an example of two independent variables. The probability of a certain value of $x$ being rolled, $p(x)$, does not depend on a certain value of $y$ being rolled. Formally, we say two variables are independent if their joint PDF can be written as the product of their individual PDFs:\n", "\n", "\\begin{equation}\n", " p(x,y)=p(x)p(y)\n", "\\end{equation}\n", "\n", "We see that graphically above in that the probability densities do not depend on each other. We can also see it from the form of the joint PDF:\n", "\n", "\\begin{align}\n", " p(x,y) & = \\frac{1}{36} \\sum_{x_i=1}^6\\sum_{y_i=1}^6 \\delta(x_i)\\delta(y_i)\\\\\n", " &= \\frac{1}{6} \\sum_{x_i=1}^6 \\delta(x_i)\\ \\ \\frac{1}{6}\\sum_{y_i=1}^6\\delta(y_i)\\\\\n", " &= p(x)p(y)\n", "\\end{align}\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Example: Not independent variables" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets construct a pair of random variables that are not independent. Suppose we roll the dice, and call the result $x_k$, and we flip a coin and define $y_x=x_k+1$ if we get heads, and $y_k=x_k-1$ if we get tails. Hopefully it is obvious that $y_k$ and $x_k$ are not independent. \n", "\n", "We can write out the math for this:\n", "\n", "\\begin{equation}\n", " p(x,y) = \\frac{1}{6}\\frac{1}{2}\\sum_{x_i=1}^6 \\left[\\delta(x-x_i,x-x_i+1)+\\delta(x-x_i,x-x_i-1)\\right]\n", "\\end{equation}\n", "\n", "and plot it:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nSQJOBjZGxCe3dj/W2cTEBMVicUFZsVikXC5nFNHwcl3aKOnmxm6TwJuA3wFfBL4dEQ9L2ga4ISKK\nHXfQfr+HAT8GfgbMBfH+iFjfsI5v7NYD1WqVSqVCvV6nUChQLpc9QLmVXJc2DLq5sVs3yX8dcEpE\n/LrFsv0iYuPywux4bCd/M7Ml6knyz5KTv5nZ0vXkls5mZjZ6nPzNzHLIyd/MLIec/M3McsjJ38ws\nh5z8zcxyyMnfzCyHnPzNzHLIyd/MLIec/M3McsjJ38wsh5z8zcxyyMnfzCyHnPzNzHLIyd/MLIec\n/M3McsjJ38wshzJN/pJOkXSXpGuyjMPMLG+ybvmfChyZcQw2AKrVKuPj45RKJcbHx6lWq1mHZDbS\nVmd58Ii4QNLeWcZg2atWq0xOTjIzMzNfNje9du3arMIyG2lZt/zNmJ6eXpD4IUn+lUolo4jMRl+m\nLf9uTE1NzU+XSiVKpVJmsVh/zM7Otiyv1+srHInZcKrVatRqtSVto4joTzTdBpB0+3w/Ip7VYllk\nHZ/13/j4OBs2bGhZvn79+gwiMhtukogIdVrH3T6WuYmJCYrF4oKyYrFIuVzOKCKz0Zdpt4+krwEv\nBB4j6VbgxIg4NcuYbOXNDepWKhXq9TqFQoFyuezBXrM+yrzbpxN3+5iZLZ27fczMrCUnfzOzHHLy\nNzPLISd/M7MccvI3M8shJ38zsxxy8jczyyEnfzOzHHLyNzPLISd/M7MccvI3M8shJ38zsxxy8jcz\nyyEnfzOzHHLyNzPLISd/M7MccvI3M8shJ38zsxzKNPlLOlLS9ZJukPTeLGMxM8uTzJK/pFXAp4Ej\ngf2AYyQ9M6t4Rlm1WmV8fJxSqcT4+DjVajXrkMwsY6szPPbBwI0RcTOApK8DrwSuyzCmkVOtVpmc\nnGRmZma+bG567dq1WYVlZhnLstvnicCtDfOb0jLroenp6QWJH5LkX6lUMorIzAZBli3/6Galqamp\n+elSqUSpVOpTOKNpdna2ZXm9Xl/hSMysX2q1GrVabUnbZJn8bwPWNMyvIWn9L9CY/G3pxsbGWpYX\nCoUVjsTM+qW5Ybxu3bpFt8my2+dy4GmS9pa0LfA64HsZxjOSJiYmKBaLC8qKxSLlcjmjiMxsEGTW\n8o+IP0p6F3AOsAo4OSI82Ntjc4O6lUqFer1OoVCgXC57sNcs5xTRVdd7JiTFIMdnZjaIJBER6rSO\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "x = np.arange(1,7.,1.)\n", "y = np.array([-1.,1.])\n", "fig,ax=plt.subplots(1,1)\n", "for i in range(6):\n", " ax.plot(i+1.+0.*y,y+i+1,'k.',markersize=12)\n", "ax.set_xlim([-1,7]);ax.set_ylim([-1,7.3])\n", "ax.set_xlabel('Dice x');ax.set_ylabel( 'y=x+coin flip');ax.set_title('Joint Prob Fcn, dice and dice + coin flip')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This example is not independent, as should be clear graphically, and there is no way to remove $x_i$ from the expression for the $y$-dependence of the probability function, so $p(x,y)\\neq p(x)p(y)$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Properties of independent variables:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If variables are independent then the mean of their products is the product of their means:\n", "\n", "\\begin{align}\n", "E(x,y) &= \\int\\int p(x,y) \\ \\mathrm{d}x\\mathrm{d}y\\\\\n", " &= \\int\\int p(x)p(y) \\ \\mathrm{d}x\\mathrm{d}y\\\\\n", " &= \\int p(x)\\ \\mathrm{d}x\\, \\int p(y)\\ \\mathrm{d}y\\\\\n", " &= E(x)E(y)\n", "\\end{align}\n", "\n", "and the variance of their sum squared is the sum of their variances. If $x_1$ and $x_2$ have zero mean:\n", "\n", "\\begin{align}\n", " E((x_1+x_2)^2) &= E(x_1^2+x_2^2+2x_1x_2)\\\\\n", " &= E(x_1^2)+E(x_2^2)+2E(x_1)E(x_2)\\\\\n", " &= E(x_1^2)+E(x_2^2)\n", "\\end{align}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Correlation co-efficient" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The **Linear Correlation Co-efficient** is defined as\n", "\n", "\\begin{equation}\n", " C_{xy} \\equiv \\frac{1}{\\sigma_x\\sigma_y}\\int_{-\\infty}^{\\infty}\\int_{-\\infty}^{\\infty} p(x,y) (x-\\mu_x)(y-\\mu_y)\\ \\mathrm{d}x\\,\\mathrm{d}y\n", "\\end{equation}\n", "\n", "where $\\mu_x$ is the *mean* of $x$, and $\\sigma_x^2$ is the *variance*. Note that $-1\\leq C_{xy}\\leq+1$. \n", "\n", "We say that two variables are **linearly uncorrelated** when $C_{xy}=0$. \n", "\n", "Note my use of the qualifier \"linear\" in both definitions. That is beacause this only tests if the variables are linearly uncorrelated to each other, and does not tell us if they are independent. It is trivial to come up with an example of two dependent variables that are *linearly uncorrelated*, $C_{xy}=0$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ex: Linearly uncorrelated, but not independent" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose $x_k$ is a variable governed by a normal distribution, mean zero, standard deviation 1, $N(0,1)$. If $y_k=x_k^2$, clearly these are not independent ($p(x,y)\\neq p(x)p(y)$). However, the linear correlation co-efficient is zero!\n", "\n", "\\begin{align}\n", " C_{xy} = \\frac{E(xy)}{\\sigma_x\\sigma_y}= \\frac{E(x^3)}{\\sigma_x\\sigma_y}=0\n", "\\end{align}\n", "\n", "because the cube of the Normal distribution is still a symmetric distribution about $x=0$. \n", "\n", "So, $C_{xy}$ tells us the fraction of the variance that is linearly correlated between two variables. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ex: Dice roll plus coin flip" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "These are clearly correlated, so lets see what the correlation co-efficient is. We could muck around with summations, but lets just do it in python." ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[ 0.08333333 0. 0. 0. 0. 0. ]\n", " [ 0. 0.08333333 0. 0. 0. 0. ]\n", " [ 0.08333333 0. 0.08333333 0. 0. 0. ]\n", " [ 0. 0.08333333 0. 0.08333333 0. 0. ]\n", " [ 0. 0. 0.08333333 0. 0.08333333 0. ]\n", " [ 0. 0. 0. 0.08333333 0. 0.08333333]\n", " [ 0. 0. 0. 0. 0.08333333 0. ]\n", " [ 0. 0. 0. 0. 0. 0.08333333]]\n", "var x = 2.92\n", "var x = 3.92\n", "Cxy= 0.86\n", "slow Cxy= 0.86\n" ] } ], "source": [ "x=np.arange(1,7)-3.5\n", "y=np.arange(0,8)-3.5 # subtract the mean\n", "\n", "p = np.zeros((8,6))\n", "for i in range(6):\n", " \n", " p[i,i]+=1./12.\n", " p[i+2,i]+=1./12.\n", "\n", "print p\n", "# get the 1-d pdfs:\n", "px = np.sum(p,axis=0)\n", "py = np.sum(p,axis=1)\n", "# get the variances\n", "sx2=np.sum(px*x**2)\n", "print 'var x = %1.2f'%sx2\n", "sy2=np.sum(py*y**2)\n", "print 'var x = %1.2f'%sy2\n", "\n", "# calculate the correlation co-efficient\n", "X,Y=np.meshgrid(x,y) # make a grid of x and y. Fast way.\n", "C=np.sum(X*Y*p)/np.sqrt(sx2)/np.sqrt(sy2)\n", "print 'Cxy= %1.2f'%C\n", "\n", "# slow:\n", "C=0\n", "for xi,xx in enumerate(x):\n", " for yi,yy in enumerate(y):\n", " C+=xx*yy*p[yi,xi]\n", "C=C/np.sqrt(sx2)/np.sqrt(sy2)\n", "print 'slow Cxy= %1.2f'%C" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Approximations with real data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Approximate joint PDFs" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course with real data we do not know the joint pdf and we have to estimate the correlation co-efficients (just like we have to estimate the mean and the variance). Often we get a feel for the joint pdf just by plotting the two variables as dots versus one another.\n", "\n", "Lets say $x$ is a variable, and $y=x+n$, where $n$ is some noise on top of $x$. We would probably intuit that these are correlated if we looked at a scatter plot." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "N=200\n", "ntosig=0.3\n", "x = np.random.randn(N)\n", "y = x + np.random.randn(N)*ntosig\n", "fig,ax=plt.subplots(1,1)\n", "ax.plot(x,y,'.')\n", "ax.set_xlabel('x [V]');ax.set_ylabel('y [V]')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Of course if there are too many data points this can get quite messy:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAX8AAAEPCAYAAACqZsSmAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnX90XOV557+PRiPZkiyNZMnIwj+T8MP8MJKRDRQnHkKc\nGIfETvdoE2gboGejc7rbhva09jbJnsbdJdttOWfbdHvK2ZwEe5tYpOAGEoe4iQ0eAwac2BgM2EHY\nBAcwtjBY/gm2Jb/7xzMv953RndFImpl7Z+b7OUdHM3fuzLxWwvc+93mf5/uIMQaEEEIqi6qgF0AI\nIaT4UPwJIaQCofgTQkgFQvEnhJAKhOJPCCEVCMWfEEIqkMDFX0QiIrJbRDYGvRZCCKkUAhd/AHcD\n2AuADQeEEFIkAhV/EZkBYDmA7wKQINdCCCGVRNCR/98DWAXgQsDrIISQiiIw8ReRWwEMGGN2g1E/\nIYQUFQnK20dE/ieAPwAwBGASgEYA/2aM+bJzDvcBCCFkHBhjsgbVgUX+xpivG2NmGmPmAvgSgMdd\n4XfOC/3PN7/5zcDXwHVynaW6xnJY55IlBlqzYtDTM/L1r3zFoLlZX+/qMjh2rLDrzIWgc/4ujPIJ\nISVJXZ3+7u4GvvOdka/39wPHjunjWbOAWKx4a8tEKMTfGLPNGPP5oNdBCCHjoa8P6OkBNm8GVq8G\n4nFg+XJgcFBfdy8O69bp497ekecVk+rif2X5EY/Hg15CTnCd+aUU1lkKawRKf52xGPDgg/q4vx/Y\ntk0f9/bq8bY2oLUVOHQIuPVWoLEROHEC2L499bzx0Nur31lXpxehXO8qAtvwzQURMWFeHyGEpLN8\nObBpk0b5mzerGMfj3gXBMm0aMDCQet54cD+7p0cvIiICE9YNX0IIKUfcFJAVdJv2iUS887q7R543\nHkbbb8gEI39CCCkwg4OanhkY0Ci9qwt4/PH8bPzaz/7Od7zPyyXyp/gTQkiR8BPqQkDxJ4SQIjHe\njddCwJw/IYQUCVvls2mTXgjCDsWfEELywHg3XoOCaR9CCMkDbj5/9epgU0DM+RNCSJGxDVvHj+tz\nW3tfTJjzJ4SQItPf7wl/c3N4U0AUf0IISZIPvx2b+29uBnbvDoeJmx8Uf0IISZKPih3b4fvaa8Ds\n2fldXz6hsRshpOLIVJOfj4od1+QtzDDyJ4RUHJkifD9fnlzo7QWmTwdaWoClS4OxaB4rFH9CSMky\n3hx9pgjfRu2xmPfZM2cCixdn/47+fuDwYR3YsmWLd0FJX99YPrPQsNSTEFKy+NkZ54IV4smTgYMH\n/evx/WyYM32HtXEGgClTgBdf1Hx/+vqssVsunzkRWOpJCClrxpujtxH+wYNe+mfevNQo3H52Y2P2\n7+jt1cEs0ag+P3kSWLVq5PomTwb27NHnU6aMb935hJE/IaRkGc0lM9PGrj3+8svA0aPe+XPn6ozd\nujrgvvtUxO+9V39n+o7p0zXlY3GHs7jrW7nSi/qXLwfq6wvn7hnqDl8RmQRgG4BaADUAfmyM+Vra\nORR/Qsi4yZQWco/X1gJnz6po19Z6oxXT0zGXX64iH40CO3d6ZZwtLd5w9o4OvaD4CbrfhK9CkYv4\nB1bqaYz5QERuMsacEZFqAE+JyGJjzFNBrYkQUl5kSgvZ4w0N+nPsGLB/vzdpyy8dc/iw17m7eDFw\nyy1691CVTJ6PNqClr684Xv65Eoq0j4jUQe8C7jDG7HWOM/InhIybTGmhwUHgkktSUz6W9Oi9txfY\nuNFL7dTVAXv3Anfc4d09zJihm7xhEHUg5JE/AIhIFYDnAHwUwH2u8BNCiGWsg1Lc89vaNN/uvjcW\nAxYu1DRMY6Nu2FoWLkx15TxxIjWnH49ryse9qyh0GqcQhCXybwLwcwB/aYxJOMcZ+RNCcirpdAX/\nxAkvd9/a6kX4bW0q1n193nvuvRdYtEjLMDs7gfnzgQceAM6f13OmTdPXAM3vV1fra/Pnq3/P2rXh\nE/7QR/4WY8xxEXkUQDeAhPvamjVrPnwcj8cRj8eLuTRCSAjIpaTTdu0CQHu7/m5oAGz82NAAvPOO\n19X74IPeReSVV1KrcqzwA7oJPHWq7gfMnQvs2KHHt23TC8vtt+vFJEgP/0QigUQiMab3BFnt0wpg\nyBgzKCKToZH/XxtjHnPOYeRPCMla0plettnaCnz0o8Bzz3kiPmOGVuts2eKlafzE+vLLdeN3eFjf\nN3++1uTbu4j2di8FVF8PnD6tj9MbuILw8HcJe+Q/HcD/S+b9qwB83xV+QgixZDNLcyP+GTOAd9/1\nonNAUzlbt+pj9wLivu/SS/Wi8PbbnvCLaMrH0t0NbNgA/Omf6t3E6dPexeQ739E7AHteWD38XUKR\n888EI39CyGik18+3tnoCDqiAv/LKyEj/9tv1fQ0NwKlTem5NDXDunJZvXrjgvf+GG4B160ZWDLkX\nk9EazopJqJu8coHiT0hlMlpnrnt8cFCN0s6e1Yh8eNjL81va2oChIa8Zq70dePZZ7dy1Zmzd3drd\n+8gjeo4Vf0CtGRYs0MqgtraRfkBjrUYqNLmIP4wxof3R5RFCKo0lS4xRCTemp8f/eE2NMa+/rseb\nmrzj6T8i/sfb2ow5dkx/enr0t/v5mX5aW0euLdN6gyKpnVn1lcZuhJBAyGbH7HbgHjvmvW6PA5qe\nufRSfX91ht3LSGTkXYDlnXeAO+9MtXF2P9/FNXfr7PQe29x+PobAFBumfQghgZCtdj+9A7e9Hdi3\nT+vxX31Vj4l4wl5bqxcDVy6i0dSSTUAvBu5+QG2tCve11wIPPaTHPvYx3TR2cY3YgJG5/TDl+wFa\nOhNCQky2aNl24FoOH1Zxtc1WQKrQ23y/pakJWLJEH1c5KvfJT6rgAyrmZ8+mDmCJxfQC49LVBaxf\n790duHcK7nrTj4Udij8hpOj09gK7dml0Xl8P3H23XgyiUW2ouu027dK1wh2NAr/9LXDmTG6fv2iR\nevS0temFAFARnz5dLzbt7frb0tnpXYD6+rTRa/ly/Z3NrK2UYdqHEFI0bFXMnj1e5Q0wMkVjSy79\nmDRJUzfu+dXVWs1jWbkS+PnPgfff9z6vvz/VjG3FCi91lF7Gaclk4xx2mPYhhIQK21jlCj+QKuST\nJ2tdvYvd0G1oUDtlNyacNk1z9i5PPOEJP6AXkuuv96ZtWb+fs2f9hf/yy/XYK6+ojfPRo/q9uTDe\nucLFhpE/IaRo2IaslhZtrLLRfUODpmH6+4Gnn9ZUTUeHCnh1NbBsGfDv/+5F926kP2mS/uQitNXV\n+hON6rhFwNtMTs/hW+9+wLNxziXyH+9c4XzCyJ8QUhDGG9329akgzpuXmtY5dUrz82+9BXzrW5q2\nsRuzQ0PAo4+mpnXcBqwPPsi+hpoa7/HQkJ5vhR/QtM5dd6W+x94hRCL6eOFCb+9gNEql7JPiTwgZ\nMzZ9Yx0y/XAvEHfcoZutH/mIpnwmT049d8oUFdp4HPje9/SzXUFPTwC44m+prtYcfvrn3nqrJ+ZA\navVPps/fuVN9grq7NSW1bVvmf2c69gIXdo9/pn0IIWMm3U9n9WqddvXeeyrsCxdqysbPUx9QYX3/\nfRV4W3ff1qaNV+Ploov0O9w6/vTPdXsD7Jqs8Zufy2cx5+7mE6Z9CCEFIT267e/X9Mm5c5or37IF\nOHBAz+3uTk29ACr8777rCXVtrV44JsKRIyOFPxLRLmCLFf7ubo3ue3pU+F2XT/duplSi+PFA8SeE\njJn0pqZ0W4RIRDtmrXC6+fqqKq+DtqpKf86eHSncQGbbhlwZHlaRt9bMLS3aRxCLaQ7f79/g5upL\nsXkrV5j2IYRMmMFB3TTduNET8RkzgDfe0Cj6/vv9xT0bVVXA7t3ANddMfH0rVujdx6FDXirKz1Ii\nTBYNE4GWzoSQvJCrZXFbm+bRRbR8s7ZWp2q5w1WKQV2d1w1cU6N7EI2NunnrTvMqdZHPRNgneRFC\nSgR36pWdf2sfb9yoaZtrrwUeewz47Gc1/3/ypP64G7254G7Kjhcr/CLA1Vd70b6dx2tFv1Q7ePMB\nI39CyAjcSL+tTQX+2DH1x3n8ca8y5plnRtowuHNuw4CfuyegaZ9f/MJr5rJpqnKAaR9CiC9+aRz3\n2IkT/mWaLS3Addelvl4K1Nbq3Uljo67dpn2sbfRYOnhLgdCXeorITBHZKiIvi8hLIvLVINdDSKXg\nV9boHnPLNO3wEkDLMTdt0og/bLiNXJFI6ms336yR/p49qaWbtpmrnIQ/V4LO+Z8H8GfGmOdFpAHA\nLhHZbIzZF/C6CClr/Moa7bHWVk8IN2wA/uqvRr7fr8M2aNzUzvCwF+13dqofv83zuxU+s2eXT6pn\nrAQa+RtjDhtjnk8+PgVgH4COINdESCXg17xkj112mVbnHD4M3HQT8P3vB7tWl3T7BkBLQm+8MfXY\n1VerI+fcuTov4Pbbw+2wGQShafISkTkAugAUuSiMkMoj2zQqd15tR8fEK28KTVeXWkq4XcQzZ2pU\nP2uW7k1k8yCqVIJO+wAAkimfDQDuTt4BfMiaNWs+fByPxxGPx4u6NkIqjb4+r9np6qtHPz8fpZm5\n4vc9u3aNPLZzp0b6birr0CH16snWp1CqJBIJJBKJMb0n8GofEYkC+CmATcaYf0h7jdU+hOSZ0Sp9\n+vo8o7Z33hl7Z26hiUS06uidd9Si4fhxbSg7dSr1vLlz9c7lwAG9C7CNZnPn6h3BaA1rpUzom7xE\nRAB8D8DedOEnhBSG9IYtm+6x9e4zZ44U0jCRSABXXQUsWKBNZNGoV+ljh7x0d+uGb3o5qj3u17BW\naQSd878RwO8DuElEdid/lgW8JkLKDtdb3wpld7fmyl3hB1LHH4YFd6P3U5/S37NmaY3++fPagDZj\nBrB/v7eR7e5dPPus//EwD1spNIGnfbLBtA8hE8dGt1bgV64EXnhBUyJ7946cp1sK1NZqOsq6hU6Z\norYSb7/tpXMAf6O2cjJwywQ7fAkpI3I1V7PnWs+dCxdSI/slS3Rm7cBA4ddcCCIR/30Id2hLULNz\nwwLFn5ASJ5PlQrq4pV8Y5s0bn79OMSt3xruGG2/0/g5Tpmjev7tbL4bpjp1juWCWE6Hf8CWEZMfd\nnG1v199+uer0TdyzZ73XIhGN/nMR9aCFP5c1NDVp6soY4NvfBlat8v4e6emcTG6kJPgNX0JIFlwb\nBnfTMj2CTbdrcAekDw+HQ9THS1vbyGMPPww88oiWcNpmNb/GNT8bC6Iw7UNIiMl1c3JwUEsfOzq0\nmuW994o/QCWf2JLN9MeAVvnMnZtbKqcSNnf9YM6fkDLHzWnv2uVt4k6bVrobutno7FSvHpvzb2vT\nyp/Zs/WiV0l5/Www509ImePmtF3sgPRyoa5O+xTWr1eTNkAN3Wx1z5tv6m/m9XOH4k9ICWEjfWtZ\nsHOn/3lhs2SYKGfOaMQfi2l0b4ewAKldvczr5w7TPoSEnN5e4Ac/0HGJIqn573KjsRGYNEmrldze\nBDs+0qZ0li9Xp87mZrV7uOeeysvrZyP0k7wIIaPT36+WC25Hq7UocKdXlQOLFwNHjgC/8zv6PBLR\nvP7DD6cKu5098NprwPz5I6t8yOgw8ick5NgoFxhbzX4pMm2aDmEBUlM7bW2a1uGGbm6w2oeQABlv\nd2n6+wDg935P0xvnzpV32gfwLJdfflnF37VrrnTbhlxh2oeQAPEbkj6e98ViwKOPAgsXlqfwT5uW\n2r3c0aH//qNH1anz+uu917ihmz8o/oQUiFy7S63d8syZmvN++WU93tCgjpt29qz9vHLA3gXV1QG/\n/KUazflZLr/4IvDQQ5k7m8n4YdqHkAKR3l2aKQ0Uj4+s1XfNzaqqNM9fLjQ26njI3/wG+MQnUm2Y\nY7HK7crNJ8z5ExIiXJF3c9d2Q9fPqjiTfXE50NMDPPmk5z66YoX69ZCJw5w/ISHCTQNNngxMn67W\nBJs363E/kS8H4a+v17sXl64ujexd99Hnn/emjdlUFykcjPwJKRDuQJVrrwW++13gppt0Q/OZZ8or\nlePHpEkq/LW16rl/8qQeF9HUz8KFwEsvaeRfXa0XRHsOq3omBtM+hARIei6/tVUj+VIcmzhWIhEd\ntJIewafvX0ydOtKHqLlZm7eY7x8/oU/7iMj9InJERF4Mch2E5AO3aqe93XOeBDQCPnq0MoQf0Iuc\nFf5IxDs+dar3uKtLfwCvwqe5Gdi9m8JfDILO+a8FsCzgNRCSF2x9/ptvqkWBrcmPRjUFAqSKX7nT\n2akTtxYv1uddXcCvfqUbuytXqlePLePcs8eza5g9O9h1VwqBp31EZA6AjcaYq31eY9qHhBq3fPP8\neZ0h61bouI9rarR88/z54NZbLNrbtXafpZvBEPq0DyGljtuNW1+v0auNdCOR1JTHuXOVIfzz53vC\nD3gjFleuZCVPmAi9n/+aNWs+fByPxxGPxwNbCyHpuOWb69Z5ka41JSuHUs1spI9YtNYMboRvB6xY\ni2YOXMk/iUQCiURiTO9h2oeQCZA+O7etDTh40DMlK3fcTmQAuPFG4Kc/TRV/t+qJlTzFgWMcCckT\nbm7fCry1JJg1yxO3aLQyUjuACnl69dL27cCdd6Z26tq7I1byhItAI38ReQDAEgBTAQwA+CtjzFrn\ndUb+JBS40Wtbmzc7tqdH7Yat336lIAJ88YvAD3848rXZs4E5c1ItqbnhW1zY5EVInmhoAE6fVtGr\nqtJcfjSqKZ833tCLQaVE/JEI8NxzwFe/OtKQrqFB9wHspi47dYOB1T6E5AnrQWOMt4l7/jywYwdw\n6FBlCP+ll6rw19UBN9/sHY9G1aCtrU3vgqzw038/3FD8CfHBduuyNFFpb9cLXUOD+u8cPQq8+qpG\n9gMDWt7a3a3n2uYu+u+HG6Z9CEnibuqeOOHZM1iBsyWMp06V50StbFi75bY2Ff66OmDv3tRuXDZz\nhQfm/AkZA+6mbnu7uk12d3uWy729+vrAQGBLDARX6A8e1Cj/qadowxBmmPMnZAzYksTWVhW29nZg\nwwavQ/XBB1Nz++ke9eXKmTPAqlX6ePZs3eCm8Jc+jPxJxWPTPdGo5rGPHdO0D+CZjh0+rK9fdlmq\nW2clEIkABw6MFPxMYylJ8LDJi5BRuPxyYP9+r4KntdUT/khELwRvv+0dq4Su3XSGhzXyTy/ZtL5G\nAC0bSpEKuXElZCS9vanCH41qpQqgterDw+rSaadLVRqSjBszlWy6vkYs6Sw9KP6kYunvTzVea2oC\ndu5U7323mqecM4+SlhhobdXfzc06U7enJ3PJZl9f9tdJuGHOn1QsM2fq4BURFa9KmbKViSlTtIrn\nnntYrlnqsNSTkCxcdFHllW2OhjuEhZQuLPUkFYNfR647U3fx4pHduuzcVZqavMeHD+vfjZQ/FH9S\nFrgTtax4uTN1t29PfQ3wNiwrmUmTgBde0Igf4OZtJZFR/EXkZA4/rxZzsYRkwq/yxB6zoxQ7O4HJ\nk4Hp04GWFm1eqjSqq71Iv6oKuO46fb5vHzdvK42MOX8Red4Y05n1zTmcMxGY8ye54ucrMzioTpTW\nez996lSlUF2tf5NFi4D164E/+qNUH37aLpcfE835/24O35HLOYQUHGu/4Eatq1dXTslmNoaG9C7n\n9Gng9tvVnsFSU6OW1HQvrTyydfj+hYj0GWOeynSCMea1AqyJkLzQ31+55ZtTpgDvv+9d/GpqUk3r\nAK3lv/RSz66CXbqVRbbIvx/AvSJyUET+TkS6irUoQvzIVtFTX6+567Y24Lbb9Nizzwa42IC5/nod\npg4AV13lee13d+vfpadHB6m3tHjHudFbWYxa5y8icwB8CcAXAdQB6APwgDGmv+CLY86fOLiWyw0N\nupF7+nTleevnQiymgl5fD6xbp8f8vPbpwV+e5L3JKxn9rwVwtTEmMsH1QUSWAfgHABEA3zXG/G3a\n6xR/8iHLl2u5Zne3pnSs2RrJDJu2KpO8NHmJSLWIfF5E+gD8O4BfIw8bvSISAfBPAJYBuALAbSIy\nb6KfS0qPXEcmWi+ZK67wyjQnT9b3NTYWZaklgevXw6Ytkolsdf6fFpH7AbwF4CsAfgrgo8aYLxlj\nfpyH714EYL8x5nVjzHkAPwSwIg+fS0oMvwYtQO2WYzHN4x886FX0HDzopXqmTtXUjx2wXmlU+5Rs\nNDSoQynAXD7JTLbI/2sAngEwzxjzOWNMnzHmVB6/+2IATtEZ3kweIxVGJmvgw4eB48fVQ3/x4pHn\nW+/9bdsqV/xFgNpa3dy1gn/ypE4cmzGDTVskMxlLPY0xNxX4u3NK5q9Zs+bDx/F4HPF4vEDLIUHR\n1+e/6WjFrK5OxT8e18f33afDRQ4dqrypWi5VVd5Yyf5+rXayw2Y6O4GtWyn8lUIikUAikRjTe7J1\n+D5njFmQ9c05nJPlvdcDWGOMWZZ8/jUAF9xNX274Vja33Qb86EfADTcAv/41cOSIHp82DVi2DNi4\nsXLr+AGtdhoe1oqe06f1WEcHsHChVvhQ+CuXCVX7iMj7APaP8h1NxphZ41xcNYBXANwM4BCAXwK4\nzRizzzmH4l+h2Iaj48f1eTQ6cnj6hQvBrC1sTJum1tTd3UzzEGWiM3xzqbwZd4W1MWZIRP4YwM+h\npZ7fc4WfVCZ2KPiePZ7w19RoVY993tAAnMrn7lMJ09kJPPKIpsFYq0/GAoe5kECxYl9Xp7n/lSu9\nRi5ALQgikcocnJ6NxkbdB1m/noJPRjLRyJ+QgmPLPAHgkku841OnatXK4GDlGrJZbG4fAK68EvjY\nx5jTJxOHw1xIUcjUyGXLNhsaNLo/elSPHT8OnDtH4W9qAp57Dpg9W314pk+n8JP8kEuH71dFpLkY\niyHlS6ZGrrY2rVO31SqRiHbv0q9HL5Svvw7Mnw/MmQO89x6wZQs7dkl+yCXyvwjAr0TkQRFZJiJZ\n80iE+OFG+MeOeYZiDzygDVo2wrfpDaIlnDbCz9QIR8h4yWnDV0SqAHwawJ0AugE8CK3OOVDQxXHD\nt2y44w7d0LURfU+Plie6m7uVjjtprLlZLZfdqWR03yS5khdjNwAwxlwAcBjAEQDDAJoBbBCReye8\nSlLy5GLM5vrxNDdr6eaePUVbYuhwPXkiEa3V/8Qn9HlzM7B7d6rI+00qI2QijFrtIyJ3A/gygHcB\nfBfAXxhjzifvBl4FsKqwSyRhx63YyTQNyqYtmpuBz3wG+PGPvbr9SmTKFN3bqK8HFizQztwDB9SC\n+dlndYOXkEKSS6lnC4DfNcYcdA8aYy6IyOcKsyxSSmTLR9s6/mhUa/jXrtXflSz8kYhnS3H2rG7i\ntrZ6vQyrVnGcIik8o6Z9jDHfTBd+57W9+V8SKTWsz76ftcDGjXpXsGWL5rNjMe9iUVOT6j1fCUSj\nnkNpU5P+7u7WTl37mBu6pBiww5cUlJYWL8qdNg145RV93NurF4WBgeDWVizsRm4sBjz/vIr+ggX6\n9zh4UNM8TU3c0CX5I+9jHIsNxb80cS0bzpxJreipr9fNzmhUm7jKeRRjW5vXrAbohvijj+pjdx5x\nTw/TPCS/5K3ah5Cx4DZ0xWKeLz+gzVx2QEs5C38koqmu+nrvWE2N95h1+yRoKP4k7xxIdn80NWlJ\npyuAlcLwMPDZzwLXXqvPu7p0s9uSbZ+EkGLAtA/JO4sXexO2qqsr16rhuuu0pLO+nn48pLgw7UOK\nQvqg9d27vdcqVfivugrYsUNTPzU1FH4SPmjpTDKS7rWfScDsoHVAo/5q/r/qw5p918uIFwASJhj5\nk4xkcuJMx27oRiLAxRcD779fnPWFhfRehe5uLd9sa9OJY3TiJGGE4k8ykmtFyqc+pamN4WFNdbiz\ndsuZpiat1bcXv6oqYOlS3cSdPVv/bgArekg44Q06yUhfnzYj1dYCV1+tgtbYCOzfrz7zQ0P6XMSr\nZa8kbKrLprkuXNDUjk3v9PWxcYuEl0CqfUSkB8AaAJcDWGiMeS7Deaz2CRi3GclSyRU82WhqAl54\ngaZsJHjCXO3zIoAvAHgioO8nOWJTP5bmZs+TptKxEX9Dg/4+flxN2dLJxfKakGITSNrHGPNrQK9O\nJNz09QHz5mlFj/WZB4C5cyt7vm5NDXDDDfo3sZu6mSp7crG8JqTYcMOXAFBRmj5d8/u2Ln3pUn1t\n3z7tRv3c53Qi1+LF2rxUqTQ06B7Htm262fvQQ2rJnKmyh1YOJIwULPIXkc0A2n1e+roxZmOun7Nm\nzZoPH8fjccTj8QmvjYykv1+je8vx4ypkl1wCLFyodwArV5b/2EV3lKJLJAIkEsA//qNG91u2eGIe\ni+nfaNMmf4Hnxi8pNIlEAolEYkzvCdTeQUS2AvhzbvgGz/LlKl4u9fVqxAZo5P/MM8CbbxZ/bcUk\nGtVS1SlTgJMngSuu0DTO0097G7l+83Q5Y5eEidBbOifF/y+MMbsyvE7xLxKDg8Cdd3o1+tGoCr+N\ncK+4Anjggcqo4Z8xA3jqKd28pZiTUiS04i8iXwDwjwBaARwHsNsYc4vPeRT/ItHbC/zgB9qdW12t\nOezBQeCDDzTl0dBQvqMXr7wSeOcdHSzT3U2nTVL6hLbU0xjzsDFmpjFmsjGm3U/4SXHp7/dsGYaG\nNP//wQf6fHi4fIUfUOH/5Cf1gpdN9FmyScoJVvuUObkKVno9fzpVZfz/lIEBTW8dPaq/583z/1vl\n6nVESClQxv9JEyC7YNkLw8yZwM6d2YepX7hQ0GUGijtAHdC7Hj9xZ8kmKSfo7VPmZBIs22xUzumc\nXJgxQ3P8gNfMlkncWbJJyglO8ipxRvPctyWIkyfroBV7XrnX7C9frnczAwM6WGVgQH9c0jd3Wa5J\nyoXQVvvkCsV/dFzjtZ6ezNYB6eedOjWyrr+cmDYN+OUvvXJNwIvsu7qAWbM4WpGUL7mIP9M+JU6u\neWj3vMmTgUOHdBO3nHL5tkEL0Ch/0SLglVc8gd+3j5E9IRZG/iVOrqkK97xyTfk0NmpXrvt/meXL\ngUcfDW5NhAQBI/8KIBbL7hLptydg7wLcSLkcOHFi5LHnny/+OggpBSj+ZcjllwOvvaYRcH29V9Fz\n6aXq2nmid5m1AAATcUlEQVTxxUB7uzpTvvdesGvNN5GIlqwODWl66+mng14RIeGEaZ8yJBYbWcLp\nN32rXCdyLV2q+f2nnuJULVKZMO1TgfT2ek6co1Euwh+JqAWFpb4eeOON4NZDSCnAyL9MsLn9Z54Z\nOUw9GgWmTk316y8HqquBa64BdjmesF1dwOOPs5qHVDahNXYj+cfaOKQLfySiE7jOnAlmXfmguloH\noy9Zknp8aAh46SV93NmpKZ66OuD222m8RshoUPxLENeTZ/FiLWeMRlPPqa7WY4sXA0eO+FfClApD\nQ1qeOjSkG9XNzXq8rk4buXp6gK1bgTlzgO3babxGSC4w7VOCuN26FhFt2hoeBpqatOJnxw59rb29\ntFM+1dVauXPypD5vbdU5w+50LcCbRkZPflLpMO1Tprh1+hZjvE3PG28E3nrLO+fii4u7vnwzNOQJ\nP6DWy7W1Okzetaru69O7AAo/IaPDyL8Esd26iYQOIkln9mwdMl6qqZ70Ieq2JNX+7u5W8d++XV/P\n5mlESCXCyL9MicX05+hR71gkor9bWkpP+O3aAU3vPPGEijug+f1du1Tg9+/3IvvGRn2d3vqEjA9G\n/iWKX96/rk5HMZbSn6yhQR1GLUuWAI88oo+zeRbRfpmQzITa0llE7gVwK4BzAA4AuMsYczztnIoW\nf1u7f+CApnIaGz1/Hru5aalOtuuVWuNWTY2Wp7oOo0zjEDIxwp72+QWAK40x1wDoB/C1ANcSCtLn\n7dra/TffHFnC2NbmCT6goh924U8fE9ndDfzqVzpN6+Mf944xjUNI4QnM3sEYs9l5ugPAfwhqLWHB\nij2gIm+repqa1KvHFcaDB8Mv9ulEo14Tmh2fGIsBt9wC7N2rJakbNjCNQ0gxCMuG7x8C+FnQiwia\n9MEstnTxhRe8jc7rr1dxtG6VsZi3ORpm6uqAG27Qxw0N2ocAeLOEt2/XXoRVq4JbIyGVREEjfxHZ\nDKDd56WvG2M2Js/5BoBzxpg+v89Ys2bNh4/j8Tji8Xj+F1pgRpuza/EbEL5nj/rXRKPAtdeqVbPL\nZZfptKqzZwv7bxgPsRiwcSNw223qsNnUpLbS77wDbNmi/9aBAc+BtLmZKR9CxkMikUAikRjTewKt\n9hGROwF8BcDNxpgPfF4viw3fXOfs+uFnzxx2qqq0sWzWrNRNamBkF+7tt+vz5mZg925aMBOSD0K9\n4SsiywCsArDCT/jLiVzn7PrhdrZWhSVJNwq7dwMf+Yi3ST1vXuYuXPv8tdco/IQUkyBLPV8FUAPA\nzpJ6xhjzn9POKYvIP9eadL/0kJ1LWyq88AIwf/7IUlSWbxJSPEI9zMUYc0lQ311sbEfuypXZ8/7p\n1T4PPqibua74F2P6Vk0NMGlS9i7hefOAadNSG81+9jMVfkBLUe2M4K4u7dyNx0ff9yCEFIcSSSSU\nPlbYN20CFixIree3+KWHPvUprz4+EvG6d6NRz+Ig31y44C/8NTXe49/8BvjgA7WTqK3ViP+WW7zX\nDx70hsPPmqXP7b/ftVtO720ghBQHin+RcIW9o8MTwvZ2FdClS4H77tP0yPHj6k3f1qYiawV/eNhz\n7jx/vnD+PX53FvX1XgcuoMK/Y4cOgP/8572I33LggP5ubAS+/e3M+x7uRZEe/IQUD4p/kXA3Om3E\n3tCgJZrHjmnp46pVmup5/XW9ABw9qsNKgOA3e0+fTr0oNDTo70yb2Hbz9sQJ/XdlslueyGY4IWT8\n0NgtAAYHdQrXmTNeNN3Sonn0xkYVyLB378bjemeSaRM718EqNGgjJP+E2tgtF0pZ/Edr7HLr96uq\nNJK2aZxIRNM79fUacedCugf+RHBN1jJRW6sduRR1QsJHqOv8y53Rctl2ClckomLr5u9tXj9X4QfG\nJ/wdHf7ppGXLtJInG2fPZs/Rx2KawqLwExJOKP4FYrRc9s6dam7W3Z3/FE91tVpBTJuWeYSjiKae\n3EEqgFowrF+vlhGzZmX+DloxEFLaUPwLRPoGZ3pJ4+zZwBtvaK7f5aqrUq2aM1FTowKfbpMM6MVk\n1y71zbGzfNMxRqt1zp/3PqOpSUs2bV/C3Ln+721uBj7zGe1bYIkmIaUJxb9ApKc9MtX5NzUBU6dq\nDl0E2LfPS/tk49w5FfixpntspN/UpL+7u7WctKdHq4xciwV79+LS0aFWDG+/zRJNQkqZwDp8S5lc\nXTpd3DTQb3/rdcZOnQq8+653Xi7CPxbs5m1VFXDzzfp9jz0GXHGFrnvdOu9ClU5fH3DXXerIefQo\n0NkJbN2q57NEk5DShpH/OMi2mZupY7WtTX9iMW+gCaBNUplIz8enIzL6OY2Nelcxc6b2DGzYoJbK\n27Zp6ijbhSsWAx5+GHj1Vb0zsMIPZK7bJ4SUBiz1HAfZatjT7ZtjMb1Y7NmjzVyAbsQODOT2XbW1\n/l79sZh6+e/Ykfm9rg+QLR+1jFZ/TwgpXVjqWSCyRb3p6ZCNG/ViYIW/uxv45CdHbupWV+uFo6Mj\n9fj3v+9tyIroObNnA1de6VkoZMIVe/sZkyfrxYvCT0hlw8g/z9jmpsmT1cxs+3Yv+u7oAF5+Watk\nXDdMW2VjN1vdCp6qKvXHv+46Fe2nn9a0jRX2jg5g0SLgmWeAI0e890WjeiGyjWRLl+parr5aK4zo\nrElI+cIO3wKTbePXTf8AGqlfe63nbmlZvFgHnxw86H1OS4tXxfPkk8C//MvI1BGgJZevvabfu3ix\nirvlySeBv/5r9QyyG7XuRYf++oSULxT/AuMKfHs78OlPeyJ+/rwKr0tT08iRjJMmaVTvfs7992uU\nf801GtmfOJEq7IBG9gsWaB3/7NnalHX0qPd6T4+mnRYs0E5hW8//3nvM9xNS7lD8C0hvr1bOuJG4\nuzm7fLmKv1vZ48fSpVrb/+ab3rGeHt0QtheEmhr9HLtPUF2t4p8+4ct+vyvu6XcgM2YAL75I4Sek\nnOGGbwHp708V/tbWVJuGaFTPqa31jl11laZerrtOnzc2qrOnK+LNzbpfsGePd+zcOc39Dw3pzwcf\neO+xF4Tubo3+0zei3Uatzk4KPyFECSTyF5H/AeDzAAyAdwHcaYx5w+e80Eb+ttyzvl5/5s71yi6b\nmrRbNhYDLrlEH4uon8/8+d6m8KFDqemcpiadhrVpU2p6qLtbN4TtZCxLNKqfec89md0zBwe1UcsY\nr6GLEFLehDbtIyJTjDEnk4//BMA1xpj/5HNeKMW/txfYu1ebpqwgt7erxXFNjc6sbWnRpq71673K\nHBG1UrBVPelDzqur1drZNoeJ6AWhrk4redzSzeZmrQJy7RgIIQQI8QB3K/xJGgAczXRuMcnFtsEO\nVk+PzDds0IlVbjRfW5sq2MYAl16qNgt9falDzgFN6bhdwcboc/dYU5Pm8detA1avHrvNBCGEAAF6\n+4jItwD8AYAzAK4Pah2W3l4VVCvEd92l1gbp9Pd7wh+LAUuWeOmUWAz48Y/1NTuq0e3OrarS/L21\nhfjpT0emcvxobNSKn/Ro39pM2PWzdJMQkisF2/AVkc0i8qLPz+cAwBjzDWPMLADrAPx9odaRK/39\nqUKcKdtku2qrq7VTd3BQG6cuukhLNG11z4kTWsYJaI1/Rwfw8Y/r89ZW4IkngPffz76meFz3EubN\n07TSZz4D3HGH5xtEczVCyHgpWORvjFma46l9AH6W6cU1a9Z8+DgejyMej09oXZlwq2KuukqjeT9m\nz9ayzKEhFfCjGRJWnZ3AI49oKshuxmba6AU8d8+GBuDUKb2gPPxwamPWli3e9/X2aqqHoxIJIYlE\nAolEYkzvCWrD9xJjzKvJx38CYJEx5g98zivahm+uVTGuqVssNrKRa8oUjfDXr0/9DHc/wa8BbPly\nrRq6917vgrF6tddL0NmpdwxbtrBJixCSnTBX+2wAcBmAYQAHAPyRMWaEz2UYq33cweSAOnS66aIV\nKzTit1jRd60ZVqzQ348+6vUGrFw5co/BbdBauRJYu5aRPiFkdEIr/rlSTPEfy4AW99wzZzyBdoed\nWNI7bN2ofelSjeS7uoDHHx/5ndmsowkhJBMU/zGQ7sPvVznT26sWza6r5ooVWo/vpov8UjxdXToQ\n3U0puXcR6e/r6/O+k5E+IWQsUPzHQC5RdnoU77pqWtL7AKZNA264Ibe6/FwuQIQQMhqhbfIKI7lU\nzrgVQbGYll6uXJkq5hs3pjaADQxo1+/q1akXhXnz1NDN/S6WbhJCikVZRv7jGbCeC4ODwJ13appn\n7Vp/f/yWllTDN3snkT7AxX2PXW80qqWea9dmrhRiJy8hZDQqNvIvVOdrLJZayWMbvpqatEQT0IEt\nW7Zonf5HP+oJuY3q7VxdN7p312vn/hbj30MIqVzK0tK5WOkTa7Nw/LjW5gPAQw+pgD/xhJZuWiG3\nc3/3789su5xpvUwHEULyTVmmfdKraApFvkoxR1tvsf49hJDygNU+BYaiTAgJIxR/QgipQDjGcQL0\n9mrdvXXQJISQcqKixH8sgm4rbKz3PiGElBNlWeppSa+Pz7VksrfXG6De2ckKG0JI+VHW4p8u9rmW\nTPb3e41ac+ZwM5cQUn6Utfj7iX0u1Tnu+9auLewaCSEkCMq62me8pZgs4SSElDIs9SSEkAqEpZ6E\nEEJ8ofhngHX+hJByhuKfAdb5E0LKmUDFX0T+XEQuiEhLkOvwg06ahJByJjDxF5GZAJYCOJjvz85H\nysZaMOfi1plIJMb3JUWG68wvpbDOUlgjwHUGQZCR//8GsLoQH5yPlE0sph3AuZR6lsr/IbjO/FIK\n6yyFNQJcZxAEIv4isgLAm8aYPYX4fKZsCCEkOwXr8BWRzQDafV76BoCvAfi0e3o+vzuXYeyEEFLJ\nFL3JS0SuAvAYgDPJQzMAvAVgkTFmIO1cdngRQsg4CH2Hr4j8BsC1xpj3Al0IIYRUEGGo82d0Twgh\nRSbwyJ8QQkjxCUPknxNhbggDABH5HyLygog8LyKPJfsYQoeI3Csi+5Jr/ZGINAW9pnREpEdEXhaR\nYRFZEPR60hGRZSLyaxF5VUT+a9Dr8UNE7heRIyLyYtBryYaIzBSRrcn/vV8Ska8GvSY/RGSSiOxI\n/ve9V0T+Jug1ZUJEIiKyW0Q2ZjuvJMS/kA1heeTvjDHXGGM6ATwC4JtBLygDvwBwpTHmGgD90Mqr\nsPEigC8AeCLohaQjIhEA/wRgGYArANwmIvOCXZUva6FrDDvnAfyZMeZKANcD+C9h/HsaYz4AcFPy\nv+/5AG4SkcUBLysTdwPYi1FS6iUh/ihgQ1i+MMacdJ42ADga1FqyYYzZbIy5kHy6A1ptFSqMMb82\nxvQHvY4MLAKw3xjzujHmPIAfAlgR8JpGYIx5EsCxoNcxGsaYw8aY55OPTwHYB6Aj2FX5Y4yxFYo1\nACIAQlekIiIzACwH8F2MUkIfevEvdENYPhGRb4nIbwHcAeB/Bb2eHPhDAD8LehElxsUA3nCev5k8\nRiaIiMwB0AUNSkKHiFSJyPMAjgDYaozZG/SafPh7AKsAXBjtxFCMcQyyIWwsZFnn140xG40x3wDw\nDRH5S+j/CHcVdYFJRltn8pxvADhnjOkr6uKS5LLGkMIKiQIgIg0ANgC4O3kHEDqSd8ydyX2yn4tI\n3BiTCHhZHyIitwIYMMbsFpH4aOeHQvyNMUv9jicbwuYCeEFEAE1R7BKREQ1hxSDTOn3oQ4AR9Wjr\nFJE7obeGNxdlQT6M4W8ZNt4C4G7mz4RG/2SciEgUwL8B+IEx5pGg1zMaxpjjIvIogG4AiYCX4/I7\nAD4vIssBTALQKCL/Yoz5st/JoU77GGNeMsZcZIyZa4yZC/2PbEEQwj8aInKJ83QFgN1BrSUbIrIM\nelu4IrmJFXYCu9PLwE4Al4jIHBGpAfBFAD8JeE0li2hU9z0Ae40x/xD0ejIhIq0iEks+ngwtQAnV\nf+PGmK8bY2YmtfJLAB7PJPxAyMXfhzDfcv+NiLyYzAnGAfx5wOvJxP+BbkhvTpaD/XPQC0pHRL4g\nIm9Aqz8eFZFNQa/JYowZAvDHAH4Oraj4V2PMvmBXNRIReQDA0wAuFZE3RCSQFGQO3Ajg96HVM7uT\nP2GsUpoO4PHkf987AGw0xjwW8JpGI6tessmLEEIqkFKL/AkhhOQBij8hhFQgFH9CCKlAKP6EEFKB\nUPwJIaQCofgTQkgFQvEnhJAKhOJPyBhIdva+LyLPJZ9vFZFPp53zpyLyzyLykaT/+0n/TyMkOCj+\nhIyd/cYYO2SmD9pK7/JFAH3GmNeS/u+EhA6KPyFJRGRhcsJZrYjUJydLXTHK2/4NwGdFpDr5GXMA\ndBhjnirwcgmZEKFw9SQkDBhjfiUiPwFwD4DJAL4/mme7MeY9Efkl1CX1J9C7gH8t+GIJmSCM/AlJ\n5b9D50d0A/i7HN/zALzUzxeTzwkJNRR/QlJpBVAPdT6dnON7fgLgZhHpAlBnjAmV1S8hflD8CUnl\n/wL4b9CN3L/N5Q3JyVNboUPTA5mMRshYYc6fkCQi8mUAZ40xPxSRKgBPj2FU3wMAfgTgPxZyjYTk\nC/r5EzIGktU8G40xV4/hPSeNMVMKtihCxgHTPoSMjSEATbbJKxu2yQvA4cIvi5CxwcifEEIqEEb+\nhBBSgVD8CSGkAqH4E0JIBULxJ4SQCoTiTwghFcj/B03imLRHmiBSAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "N=20000\n", "ntosig=0.3\n", "x = np.random.randn(N)\n", "y = x + np.random.randn(N)*ntosig\n", "fig,ax=plt.subplots(1,1)\n", "ax.plot(x,y,'.')\n", "ax.set_xlabel('x [V]');ax.set_ylabel('y [V]')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "An alternative is to contour or pseudo contour the data density in bins, just like we did histgrams for univariate data. `matplotlib` provides a simple function for this." ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.cm as cm # import the colormaps.\n", "\n", "fig,ax=plt.subplots(1,1)\n", "(n,xx,yy,im)=ax.hist2d(x,y,bins=100,cmap=cm.Reds,cmin=0.,normed=True)\n", "plt.colorbar(im,shrink=0.5)\n", "ax.set_xlabel('x [V]');ax.set_ylabel('y [V]');ax.set_title('Joint PDF of x and y')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is a little more helpful when there is so much data to look at. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Approximate correlation co-efficient" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This is calculated as you might expect:\n", "\n", "\\begin{equation}\n", " r_{xy} = \\frac{s_{xy}}{s_xs_y} =\\frac{1}{N-1}\\frac{\\sum_{i=1}^N (x_i-\\overline{x})(y_i-\\overline{y})}{s_xs_y}\n", "\\end{equation}\n", "\n", "Note, of course, that $r_{xy}$ is a random variable, and therefore has a probability distribution function, means, and variances. It therefore is subject to confidence intervals.\n", "\n", "A clever person named Fisher figured out that if we consider the function of $r_{xy}=r$\n", "\n", "\\begin{equation}\n", " F(r)=\\mathrm{arctanh}(r)\n", "\\end{equation}\n", "then $F(r)$ approaches a Normal distribution as $N\\to\\infty$, with a standard devaition of $\\sigma_F=\\frac{1}{\\sqrt{N-3}}$.\n", "\n", "So, if we calculate $r$, then the 95% confidence interval for $F(r)$ is $\\pm 1.96/\\sqrt{N-3}$, and we can calculate the confidence intervals on $r$ by taking $\\tanh\\left(F(r)\\pm1.96/\\sqrt{N-3}\\right)$. (Remember the 95% confidence intervals for a Gaussian with standard deviation of 1 is $\\pm1.96$)\n", "\n", "Consider the following example with the data from above:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.981199620479\n", "r= 0.981 (0.980,0.982)\n" ] } ], "source": [ "N=7000\n", "ntosig=.2\n", "x = np.random.randn(N);x=x-np.mean(x)\n", "y = x + np.random.randn(N)*ntosig;y=y-np.mean(y)\n", "\n", "r = np.sum(x*y)/np.std(x,ddof=1)/np.std(y,ddof=1)/(N-1)\n", "print r\n", "F = np.arctanh(r)\n", "Fp95 = F+1.96/np.sqrt(N-3)\n", "Fm95 = F-1.96/np.sqrt(N-3)\n", "rp=np.tanh(Fp95)\n", "rm=np.tanh(Fm95)\n", "print \"r= %1.3f (%1.3f,%1.3f)\"%(r,rm,rp)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, for the correlation co-efficient between $x$ and $y$ is estimated to be between 0.980 and 0.982, 95% of the time. If we had less data the spread in the 95% confidence interval would be wider:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.987581013533\n", "r= 0.988 (0.946,0.997)\n" ] } ], "source": [ "N=10\n", "ntosig=0.2\n", "x = np.random.randn(N);x=x-np.mean(x)\n", "y = x + np.random.randn(N)*ntosig;y=y-np.mean(y)\n", "\n", "r = np.sum(x*y)/np.std(x,ddof=1)/np.std(y,ddof=1)/(N-1)\n", "print r\n", "F = np.arctanh(r)\n", "Fp95 = F+1.96/np.sqrt(N-3)\n", "Fm95 = F-1.96/np.sqrt(N-3)\n", "rp=np.tanh(Fp95)\n", "rm=np.tanh(Fm95)\n", "print \"r= %1.3f (%1.3f,%1.3f)\"%(r,rm,rp)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Linear Regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Suppose we have a linear process $y$ that depends on variable $x$. Then $\\tilde{y}=A+Bx$. However, of course we have noise on any real measurements so we collect $y_k = \\tilde{y}_k + \\epsilon_k$ where $\\epsilon_k$ is a noise process. \n", "\n", "So, suppose we measure $y_k$ $N$ times, and that we know $x_k$. **Linear regression** fits $y_k$ to a linear model as a function of $x$ that minimizes the magnitude of the noise. To do this, we define the mean error as:\n", "\n", "\\begin{align}\n", " Q & \\equiv \\sum_{i=1}^N \\epsilon_i^2\\\\\n", " &= \\sum_{i=1}^N (y_i-a-bx_i)^2\\\\\n", "\\end{align}\n", "\n", "
\n", "\n", "
\n", "\n", "So our fit for $A$ and $B$ will be $a$ and $b$. We want to minimize $Q$, so we want\n", "\\begin{equation}\n", " \\frac{\\partial Q}{\\partial a} = \\frac{\\partial Q}{\\partial b} = 0\n", "\\end{equation}\n", "The first is easy:\n", "\\begin{align}\n", " 0 & = \\frac{\\partial Q}{\\partial a} \\\\\n", " &= -\\sum_{i=1}^N 2 (y_i-a-bx_i)\\\\\n", " &= \\overline{y}-a-b\\overline{x}\\\\\n", "\\end{align}\n", "or $a=\\overline{y}-b\\overline{x}$\n", "\n", "The second is:\n", "\n", "\\begin{align}\n", " 0 & = \\frac{\\partial Q}{\\partial b} \\\\\n", " &= -\\sum_{i=1}^N 2 (y_i-a-bx_i)x_i\\\\\n", " &= \\sum_{i=1}^N (y_i-\\overline{y}+b\\overline{x}-bx_i)x_i\\\\\n", "\\end{align}\n", "\n", "So\n", "\n", "\\begin{align}\n", " b &= \\frac{\\sum_{i=1}^N \\left(y_i-\\overline{y}\\right)x_i} {\\sum_{i=1}^N \\left(x_i-\\overline{x}\\right)x_i}\\\\\n", " &= \\frac{\\sum_{i=1}^N x_iy_i-N\\overline{x}\\overline{y}} {\\sum_{i=1}^N x_i^2-N\\overline{x}^2}\n", "\\end{align}\n", "\n", "It is worth noting that the fit line passes through the point $(\\overline{x},\\overline{y})$, so it is often helpful to simply remove the mean of x and y and minimize the error in the overdetermined equation:\n", "\n", "\\begin{equation}\n", " \\mathbf{y} = b \\mathbf{x}\n", "\\end{equation}\n", "\n", "The same result ensues. \n", "\n", "The slope fit $b$ is a random variables, and as such has an uncertainty associated with it. If $y$ given $x$ is Normally distributed, then the variable \n", "\n", "\n", "\\begin{equation}\n", " \\left(b-E(b)\\right) \\left( \\sum_{i=1}^N \\left(x_i-\\overline{x}\\right)^2\\right)^{1/2}\n", " = s_{y|x} t_{N-2}\n", "\\end{equation}\n", "\n", "follows a student-t distribution with $N-2$ degrees of freedom, and standard devaition given by $s_{y|x}$, the sample standard deviation of the observed values about the prediction:\n", "\n", "\\begin{equation}\n", " s_{y|x} = \\left[\\frac{\\sum_{i=1}^N \\left( y_i-\\tilde{y}_i \\right)^2 }{N-2} \\right]^{1/2}\n", "\\end{equation}\n", "\n", "Note that it is really only $b$ that is truly random, because no matter what the fit it passes through $\\overline{x},\\overline{y}$, so $a$ changes to make that happen. \n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Example from above" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just using the data from above, we can perform a linear regression. What do we expect the values of $b$ and $a$ to be?" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10\n", "Slope b is between 0.907184 and 1.177583 with 95% probability\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYQAAAEPCAYAAABCyrPIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xd8VfX9+PHXJ3vvCQES9p6BKDMBQZYMWVoVrYNq7dC2\njmrr+LW2Wr+t1jqqrR3WBU6EgIAkYQgkzLD3DknI3rlJ7v38/rjhQiDjZt7c5P18PPLwnns+53Pe\n9xjuO+d8Pud9lNYaIYQQwsHWAQghhGgfJCEIIYQAJCEIIYSoJglBCCEEIAlBCCFENUkIQgghABsm\nBKVUN6VUolLqkFLqoFLqZ7aKRQghBChb3YeglAoDwrTW+5RSXsBuYJ7W+ohNAhJCiE7OZmcIWusM\nrfW+6tfFwBGgi63iEUKIzq5djCEopSKBEUCybSMRQojOy+YJofpy0efAz6vPFIQQQtiAky13rpRy\nBr4APtRaf13Leim0JIQQTaC1Vo3dxpazjBTwPnBYa/16Xe201u3q5/nnn7d5DPYQU3uNS2KSmDpD\nXE1ly0tG44C7gTil1N7qn+k2jEcIITo1m10y0lpvpR2MYQghhDCTL+RGio2NtXUIN2iPMUH7jEti\nso7EZL32GldT2OzGNGsopXR7jk8IIa5XVFTE6tWbGDmyD/369bNJDEopdBMGlW06y6ipzOPRQnQO\n8keR/Th+/AQrVmwnPd2DAQPKbB1Oo9llQgD5RyI6B/njxz4YDAY2bNjK99/nERw8Cz+/U7YOqUns\nNiEIIUR7cOnSJZYvTyInJ4oePWJxcHAkJ0cSghBCdBpGo5Ht23exdu1JfHwm0b17hK1DajZJCEII\n0Uh5eXl8+WUiJ096ERGxAGdnN1uH1CIkIbQRb29vDhw4QGRkpK1DEUI0w4EDh/jii904OIwhKqq/\nrcNpUXIfQguLjIzEw8MDb29vvL298fHxISMjg6KiIksyuO+++/jtb39r20Crvfbaa4SHh+Pr68sD\nDzxARUVFnW337dvHqFGj8PT0JDo6mtTUVKv7ys3NZf78+Xh5eREZGcknn3xSY9uNGzfSv39/PD09\nmTx5MufPn2/0Z0lMTCQuLg4/Pz+ioqIabG/NPisqKhgwYADdunWzvJeVlcWdd95J165d8fPzY/z4\n8aSkpNS6j/vvvx8HBwdOnz7d6M8j2peysjK++OJbPvroBP7+cwkL61jJACQhtDilFKtXr6aoqIii\noiIKCwsJCwuzdVi1WrduHa+88goJCQmcO3eO06dP8/zzz9fatqKigrlz57J06VLy8/O59957mTt3\nLpWVlVb19eijj+Lm5sbly5f56KOPeOSRRzh8+DAA2dnZLFiwgJdeeom8vDyio6NZsmRJrXEkJSUR\nFxdX6zovLy8efPBBXn311QY/u7X7fPXVVwkJCakx26e4uJiYmBj27NlDXl4e9957L7NmzaKkpKTG\ntlu3buX06dMyU6gDOHfuHG+88QWpqUFERs7B3d3X1iG1DlsXYWqgQJOuTV3vtweRkZF648aNN7yv\nlNInT57U7777rnZ2dtYuLi7ay8tLz5kzp8E+f/zjH+tf/vKXNd677bbb9GuvvdasWO+880797LPP\nWpYTEhJ0WFhYrW3XrVunu3btWuO97t2763Xr1jXYV3FxsXZxcdEnTpywrF+6dKl++umntdZav/vu\nu3rcuHGWdSUlJdrd3V0fO3bshjgSExN1bGxsvZ9rw4YNOjIyst421uzz9OnTesCAAXrt2rU6IiKi\n3v58fHz0nj17LMuVlZV6xIgRev/+/VoppU+dOqW11jonJ0dHREToVatWaa21Lioq0r169dL/+9//\nau23Pf+udwaVlZX6u++26Kef/lj/6U/p+t13tVU/837ze73m+zU2i7v696bR37lyhtAKdB33SCil\nWLZsGXfddRdPPfUURUVFrFy5EjD/Bf3oo4/Wut19993HJ598Yuk3OzubjRs3ctdddwEwe/Zs/P39\na/2ZM2dOnXEePnyYYcOGWZaHDh1KZmYmeXl5N7Q9dOgQQ4cOrfHesGHDOHToUIN9HT9+HCcnJ3r3\n7l3rtocOHaqxrYeHB7179+bgwYO1HsOWYM0+f/rTn/LHP/4RN7f6Bwz37dtHRUVFjc/32muvMWnS\nJIYMGVKjbUBAAP/617946KGHyMrK4vHHH2fkyJHcfffdLfK5RMvJysrivfe+JCGhim7dFuDr2/CZ\nflbVaX6Urvja6TecL2n8ZU9b65CDyurFlvnS0M83/uY3rTXz5s3Dycl8aOPi4vjyyy9rbXett956\nq84+R48eja+vLxs3buSWW27h008/JS4ujuDgYABWr17d6DjBfOnD1/fqqa+Pjw9gvvXe39+/3rZX\n2hcVFTXYV3FxsWX5Cm9v7xrbhoSE3NB3cfGNz0uqK9k2VklJieX41bbPr776Cq01c+fOJSkpqc5+\n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\nhBCi2v8H8iGn182lU18AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print N\n", "b = np.sum(x*y)-N*np.mean(x)*np.mean(y)\n", "b = b/(np.sum(x**2)-N*np.mean(x)**2)\n", "a = np.mean(y)-b*np.mean(x)\n", "yhat=b*x+a\n", "\n", "fig,ax=plt.subplots(1,1)\n", "ax.plot(x,y,'.')\n", "ax.plot(x,yhat,'-',label='Fit: y=%1.4f+%1.4fx'%(a,b))\n", "plt.legend(loc=0)\n", "ax.set_xlabel('X [V]');ax.set_ylabel('Y [V]');\n", "\n", "# get the error bounds...\n", "syx=np.sqrt(np.sum((y-yhat)**2)/(N-2))\n", "import scipy.stats as stats\n", "\n", "bdn,bup=stats.t.interval(0.95,df=N-2,scale=syx)\n", "bb=np.array([bdn,bup])\n", "bb=bb/np.sqrt(np.sum((x-np.mean(x))**2))\n", "print 'Slope b is between %f and %f with 95%% probability'%(b+bb[0],b+bb[1])\n", "xx=np.sort(x)\n", "yhathigh=(b+bb[1])*(xx-np.mean(x))+np.mean(y)\n", "yhatlow=(b+bb[0])*(xx-np.mean(x))+np.mean(y)\n", "ax.fill_between(xx,yhathigh,yhatlow,alpha=0.4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This conforms to our expectation based on how y was made. Of course if we had more data, the confidence in the slope would be better." ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "7000\n", "Slope b is between 0.994549 and 1.003727 with 95% probability\n" ] }, { "data": { "text/plain": [ "((-4.0, 4.0), (-4.0, 4.0))" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "N=7000\n", "ntosig=.2\n", "np.random.seed(456)\n", "x = np.random.randn(N);x=x-np.mean(x)\n", "np.random.seed(986)\n", "y = x + np.random.randn(N)*ntosig;y=y-np.mean(y)\n", "np.random.seed()\n", "\n", "print N\n", "b = np.sum(x*y)-N*np.mean(x)*np.mean(y)\n", "b = b/(np.sum(x**2)-N*np.mean(x)**2)\n", "a = np.mean(y)-b*np.mean(x)\n", "yhat=b*x+a\n", "\n", "fig,ax=plt.subplots(1,1)\n", "ax.plot(x,y,'.')\n", "ax.plot(x,yhat,'-',label='Fit: y=%1.4f+%1.4fx'%(a,b))\n", "plt.legend(loc=0)\n", "ax.set_xlabel('X [V]');ax.set_ylabel('Y [V]');\n", "\n", "# get the error bounds...\n", "syx=np.sqrt(np.sum((y-yhat)**2)/(N-2))\n", "import scipy.stats as stats\n", "bdn,bup=stats.t.interval(0.95,df=N-2,scale=syx)\n", "bb=np.array([bdn,bup])\n", "bb=bb/np.sqrt(np.sum((x-np.mean(x))**2))\n", "print 'Slope b is between %f and %f with 95%% probability'%(b+bb[0],b+bb[1])\n", "xx=np.sort(x)\n", "yhathigh=(b+bb[1])*(xx-np.mean(x))+np.mean(y)\n", "yhatlow=(b+bb[0])*(xx-np.mean(x))+np.mean(y)\n", "ax.fill_between(xx,yhathigh,yhatlow,alpha=0.4)\n", "ax.set_xlim([-4.,4.]),ax.set_ylim([-4.,4.])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Quantifying the goodness of fit" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Determining if any model is a \"good fit\" is somewhat subjective, and depends on your data and your model. Obviously, if we fit a straight line to two data points the fit is perfect, but the result is meaningless unless we are sure there is no error in those two data points. \n", "\n", "The **Linear Correlation Co-efficient** is often denoted $R^2$, and for $x$ and $y$ *with zero mean* is given by:\n", "\n", "\\begin{equation}\n", " R^2 = \\frac{\\left(\\sum xy \\right)^2}{\\sum x^2 \\sum y^2}\n", "\\end{equation}\n", "\n", "and is the same as the correlation co-efficient given above. Note that this can be calculated without recourse to the fitting of the linear model, and as we discussed gives the fraction of the data that is linearly correlated between the two data populations.\n", "\n", "The **Standard Error** is simply the error in the slope described above.\n", "\n", "However, there is a problem. What happens if we have a big outlier?" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "20\n", "Slope b is between 7.917030 and 8.603723 with 95% probability\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAY8AAAEPCAYAAAC6Kkg/AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl8VNUd9/HPyUqWSSCQjR1EVtl3BA0ICKiAS2XRqlWr\nVp9afSoKViutVSlara11aauWygNqRYWEfYtsYQ9r2PclCUtCMtmTmd/zxwwhy7AEkkwm+b1fr7yc\nuffcO+dAmK/3nnvvz4gISimlVEV4ubsDSimlPI+Gh1JKqQrT8FBKKVVhGh5KKaUqTMNDKaVUhWl4\nKKWUqjC3hocx5qgxZocxJtEYs9G5LMwYs9QYs98Ys8QYU79E+ynGmAPGmL3GmOHu67lSStVt7j7y\nECBGRLqLSB/nssnAUhFpCyx3vscY0xEYB3QERgAfG2Pc3X+llKqTasKXrynzfjQww/l6BjDW+XoM\nMFtECkXkKHAQ6INSSqlq5+7wEGCZMWazMeaXzmWRIpLqfJ0KRDpfNwZOltj2JNCkerqplFKqJB83\nf/6tIpJsjAkHlhpj9pZcKSJijLnS81P02SpKKeUGbg0PEUl2/vesMeYHHKehUo0xUSKSYoyJBs44\nm58CmpXYvKlzWSlXCRullFKXISJlpxEuy22nrYwxgcYYi/N1EDAc2AnMAx51NnsU+NH5eh4w3hjj\nZ4xpBdwMbHS1bxGptT9vvPGG2/ugY9Px6fhq309FufPIIxL4wRhzsR//T0SWGGM2A98aY54AjgIP\nAohIkjHmWyAJKAKelesZsVJKqRvmtvAQkSNANxfL04Chl9nmbeDtKu6aUkqpq3D31VaqgmJiYtzd\nhSpTm8cGOj5PV9vHV1Gmtp35Mcbo2SyllKogYwxSgQlzd1+qq1SN5JyLU6pWqoz/wdbwUOoy9AhW\n1UaV9T9GOuehlFKqwjQ8lFJKVZiGh1JKqQrT8FCqlrBYLBw9etTd3VB1hIaHUh6mZcuWBAYGYrFY\nsFgshISEkJKSgtVqpWXLlgA89thjvP7669Xet7S0NO69916Cg4Np2bIls2fPvmL7Dz74gOjoaEJD\nQ3niiScoKCi45n0tX76c9u3bExQUxJAhQzh+/Hip9a+88gqNGjWiUaNGTJ48+brGs3v3bmJiYqhf\nvz7NmjXjT3/602Xbvvvuu3Tu3JmQkBBat27Ne++9V67Nhx9+SOvWrQkODqZjx44cOHCgeN2sWbNo\n0aIFwcHB3HvvvaSnp5fbPi0tjfDwcAYNGnRd46lU7n6eShU8n0WUulE1+feoZcuWsnz58iu2efTR\nR+W1116rph5dMn78eBk/frxkZ2fLmjVrJDQ0VHbv3u2y7aJFiyQyMlKSkpIkPT1dYmJiZPLkyde0\nr7Nnz0poaKh89913kp+fL5MmTZJ+/foVb/vpp59Ku3bt5NSpU3Lq1Cnp2LGjfPrppy778eijj8p/\n/vMfl+u6d+8ur732mtjtdjl06JBER0fLvHnzXLadPn26JCYmis1mk3379kmLFi3k66+/Ll7/r3/9\nS7p06SJ79uwREZHDhw9LWlqaiIjs2rVLLBaLrF69WrKysmTixIkyfvz4cp/x5JNPym233SaDBg1y\n2Ydrcbnfbefya/+urUhjT/ipyf/oleeoyb9HlwsPY4wcPHhQPvvsM/H19RU/Pz8JDg6W0aNHX3Wf\nzz77rPz2t78tteyee+6RDz744Jr7lZWVJX5+fnLgwIHiZY888kipQChpwoQJ8rvf/a74/YoVKyQq\nKuqa9vXZZ5/JrbfeWrwuOztbAgICZN++fSIi0r9/f/nXv/5VvP6LL74oFS4lPfbYY5cND39//+Iv\nexGRn/3sZzJt2jTXfwBlPP/88/LrX/9aRERsNps0bdpUVqxY4bLtlClT5KGHHip+f+jQIfHz85Os\nrKziZWvXrpX+/fvLl19+KQMHDixe/vXXX0urVq0kMzNTREQWLFggUVFRcu7cOZefVVnhoaetlPJA\njn/r5RljeOqpp3jooYd45ZVXsFqtzJ07F4DnnnuO5557zuV2jz32GLNnzy7e77lz51i+fDkPPfQQ\nAHfffTcNGjRw+TN69GgA9u/fj4+PD23atCneb9euXdm9e7fLz0xKSqJr167F77t06UJqairp6elX\n3dfu3btLbRsYGEibNm2K17va9+X6cfHPzZXhw4czY8YMioqK2Lt3LwkJCQwd6vLRe6WICKtWreKW\nW24B4OTJk5w6dYqdO3fSvHlzWrduzdSpU4v/vMv2t3Xr1vj7+7N//34AbDYbv/71r/nHP/5R7rPG\njRvHgAEDeP755zl//jxPPvkkn3/+OQ0bNrxqP2+E3iSo1HUwf6icG63kjYrfiCgijB07Fh8fxz/f\nwYMH8/3337tsV5KrL56LevfuTWhoKMuXL2fo0KF8/fXXDB48mPDwcADi4uKu2q+srCxCQkJKLbNY\n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\nIOkyAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "N=20\n", "ntosig=.4\n", "np.random.seed(456)\n", "\n", "x = np.random.randn(N);\n", "x[0]=50.\n", "x=x-np.mean(x)\n", "np.random.seed(986)\n", "yy= np.random.randn(N)*ntosig;\n", "yy[0]=yy[0]*1000.\n", "y = x +yy\n", "y=y-np.mean(y)\n", "np.random.seed()\n", "\n", "print N\n", "b = np.sum(x*y)-N*np.mean(x)*np.mean(y)\n", "b = b/(np.sum(x**2)-N*np.mean(x)**2)\n", "a = np.mean(y)-b*np.mean(x)\n", "yhat=b*x+a\n", "\n", "fig,ax=plt.subplots(1,1)\n", "ax.plot(x,y,'.')\n", "ax.plot(x,yhat,'-',label='Fit: y=%1.4f+%1.4fx'%(a,b))\n", "plt.legend(loc=0)\n", "ax.set_xlabel('X [V]');ax.set_ylabel('Y [V]');\n", "\n", "# get the error bounds...\n", "syx=np.sqrt(np.sum((y-yhat)**2)/(N-2))\n", "import scipy.stats as stats\n", "bdn,bup=stats.t.interval(0.95,df=N-2,scale=syx)\n", "bb=np.array([bdn,bup])\n", "bb=bb/np.sqrt(np.sum((x-np.mean(x))**2))\n", "print 'Slope b is between %f and %f with 95%% probability'%(b+bb[0],b+bb[1])\n", "xx=np.sort(x)\n", "yhathigh=(b+bb[1])*(xx-np.mean(x))+np.mean(y)\n", "yhatlow=(b+bb[0])*(xx-np.mean(x))+np.mean(y)\n", "ax.fill_between(xx,yhathigh,yhatlow,alpha=0.4)\n", "#ax.set_xlim([-4.,4.]),ax.set_ylim([-4.,4.])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hopefully a good data analyst would look at this plot and decide that the fit, while good to the outlier and the center of the true data cloud, is dominating the linear fit. There is no standard \"goodness of fit\" that will magically tell you if this point is useful or not, or if it deserves to skew all your data.\n", "\n", "This point of course violates the asumption that $y_i-\\tilde{y}_i$ is normally distributed. One way to check this would be to **Bootstrap** the data." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Bootstrapped slope estimates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Bootstrapping is a very useful statistical technique that allows us to tease out statistical relationships that make no assumptions about the underlying statistics. \n", "\n", "In the case above we don't know that the outlier violates our underlying assumptions. However, we can plot it and see it is an outlier pretty easily. We can also think about what would happen if we fit only 1/3 of the data a bunch of random times, and see what the resulting distribution of the slope $b$ is. We might expect $b$ to have a binomial distribution in that case, $b\\approx 1$ where the outlier is not in the data, and $b\\approx 10$ when the outlier is there. \n", "\n", "To perform the bootstrap we take a random subsample of our data of length $N/3$ for instance, and we recalculate the slope a few hundred times:" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "20\n" ] } ], "source": [ "# do the bootstrap:\n", "Nboot=1000\n", "print N\n", "Nsub=np.floor(N/3)\n", "bs=np.zeros(Nboot)\n", "\n", "for i in range(Nboot):\n", " inds=np.random.rand(Nsub)\n", " inds = np.floor(inds*N).astype(int)\n", " b = np.sum(x[inds]*y[inds])-Nsub*np.mean(x[inds])*np.mean(y[inds])\n", " b = b/(np.sum(x[inds]**2)-Nsub*np.mean(x[inds])**2)\n", " bs[i]=b" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nsCQ4bX4AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig,ax=plt.subplots(1,1)\n", "ax.hist(bs,100,normed=True);\n", "ax.set_xlabel('b')\n", "ax.set_ylabel('PDF')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "So, we see two things. First is that the distribution of $b$ is indeed binomial, with a mode near 8.5, an a second near 1. We can also see that the distribution of $b$ around those two modes does look Normal, or close to it. The bootstrapping proceedure has allowed us to see that there are two underlying trends in the data. However, if there were more points along the $b=8.5$ line and they were randomly interspersed with data on the $b=1.0$ even this procedure will have difficulty determining the change in slope. In that case we would need to rely on some other clever model or a way to screen separate the two processes from one another." ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }