{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", " \n", "
\n", "\n", "# Exploratory Computing with Python\n", "*Developed by Mark Bakker*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Notebook 13: Regression analysis I" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In this Notebook, we learn how to fit a model to a set of data. In the first half of this Notebook, we fit several different models to the same data set, also called regression analysis. In the second half of this Notebook, we look under the hood of these regression analyses, we discuss how the best parameters are computed, how the goodness of fit can be quantified, and what these other parameters are that some of the regression functions return. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Root mean square error\n", "One way to quantify the fit between data and a model is to compute the root mean square error. The error is defined as the difference between the observed value and the modeled value. Another term for the error is the residual. If the error of data point $i$ is written as $\\varepsilon_i$, and the total number of observations is $N$, then the sum of squared errors $S$ is\n", "\n", "$$E = \\sum{\\varepsilon_i^2}$$\n", "\n", "When the total number of observations is $N$, the root mean square error $E$ is computed as\n", "\n", "$$E_s=\\sqrt{\\frac{1}{N}S}=\\sqrt{\\frac{1}{N}\\sum{\\varepsilon_i^2}}$$\n", "\n", "The root mean square error is an estimate of the goodness of fit and can be computed for any model and any dataset." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 1. Fit a straight line\n", "Load the $x,y$ values of 20 data points from the file `xydatafit.dat`. Fit a straight line through the data using the `linregress` function of `scipy.stats`. Note that the `linregress` function returns 3 other values beyond the slope and intercept (use `linregress?` to find out); more on these 3 additional values later on in this Notebook. Plot the data and the fitted straight line. Add a legend. Add the root mean square error as a title to the graph. Print the optimal values for the slope and intercept of the straight line to the screen." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 2. Fit a polynomial\n", "Use the $x,y$ values of 20 data points from the file `xydatafit.dat`. Fit a second degree polynomial (a parabola) through the data using the `np.polyfit` function. Plot the data and the fitted parabola. Add a legend. Report the root mean squared error in the title. Did the root mean squared error improve?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Fitting an arbitrary function\n", "Python functions to fit a straight line or polynomial are readily available. There are many other functions that you may want to use to fit to your data. The function `curve_fit` can be used to fit an arbitrary function that you define; `curve_fit` is part of the `scipy.optimize` package. The `curve_fit` function requires you to write a function that takes as its first argument the independent variable (in our case above that are the $x$-values) followed by the parameter(s) that you want to fit and returns the value of the function at all the $x$ values for the supplied parameters. For example, to fit a straight line, you need to write a function" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "def func(x, a, b):\n", " return a * x + b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The `curve_fit` function needs to be called with three arguments: the function that you want to fit, the values of the independent variable (in our case $x$), and the values of the depenedent variable (in our case $y$). The `curve_fit` funtion than returns an array with the optimal parameters (in a least squares sense) and a second array containing the covariance of the optimal parameters (more on that later). For example, for the case of Exercise 1:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "optimal parameters: [ 6.07744372 42.58245717]\n" ] } ], "source": [ "from scipy.optimize import curve_fit\n", "x, y = np.loadtxt('xydatafit.dat') # in case these were modified in one of the exercises\n", "popt, pcov = curve_fit(func, x, y)\n", "print('optimal parameters:', popt)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that these optimal parameters are identical to the values you computed in Exercise 1. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 3. Fit an exponential function with `curve_fit`\n", "Use the $x,y$ values of 20 data points from the file `xydatafit.dat`. Fit the function $f(x) = A\\exp(ax) + b$ through the data using the `curve_fit` function of `scipy.optimize`. Plot the data and the fitted function. Report the root mean squared error in the title. Did the root means squared error improve?" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Least squares\n", "In the exercises above, the *optimal* or *best* parameters were obtained with either the `linregress`, `polyfit` or `curve_fit` methods. But how do these methods do that? Or maybe a more fundamental question: 'What is *optimal*?' or 'What is *best*?' In this Notebook, we define *best* as the parameter set that minimizes the sum of the squared errors (so it also minimizes the root mean square error). Such an optimization approach is also referred to as a *least squares* approach. \n", "\n", "For example, consider the following three data points: " ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAVrklEQVR4nO3df5AcZZ3H8feHJF7YCOKFVbkkZPUuIrl1CGGSwKEYRVGRCqcEjLUpIEptwYneXZXlQVGgRxVXiCcgpIq44mmEPQJGApwFFL/Kglj8cAJJBMLd5TAJa1TGgCGbJUrM9/6YTtxMZrM92dmd7MPnVTXV3U8/2/3tJXy299meeRQRmJnZ6HdIswswM7PGcKCbmSXCgW5mlggHuplZIhzoZmaJGNusEx955JHR1tbWrNObmY1Kq1at+l1EtNba17RAb2tro1QqNev0ZmajkqSNA+3zkIuZWSIc6GZmiXCgm5klomlj6LW88cYb9PT0sGPHjmaXMmqNHz+eyZMnM27cuGaXYmYj7KAK9J6eHg477DDa2tqQ1OxyRp2IYMuWLfT09PDud7+72eWY2QgbdMhF0jGSVvd7vSbpn6r6SNINktZLWitp5oEUs2PHDiZOnOgwP0CSmDhxon/DMTtIdXdDWxscckhl2d3d2OMPeoceEf8NzACQNAb4FbCiqtsngWnZaw5wU7asm8N8aPz9Mzs4dXdDZyf09VW2N26sbAN0dDTmHPX+UfRU4P8iovo5yDOBH0bFE8ARko5qSIVmZgm47LI/h/lufX2V9kapN9AXALfVaJ8EvNRvuydr24ukTkklSaVyuVznqZtnw4YNtLe3N7uMfcydO9dvzjIbJTZtqq/9QOQOdElvAeYBP6q1u0bbPjNnRERXRBQjotjaWvOdq3UZ7vGo4bRz585ml2BmI+joo+trPxD13KF/Eng6In5bY18PMKXf9mRg81AKG8zu8aiNGyHiz+NRjQj1a6+9lvb2dtrb27n++uuBSgCfd955FAoF5s+fT1/2u9Mll1zC9OnTKRQKfOUrXwGgXC5z1llnMWvWLGbNmsXPfvYzAL7+9a/T2dnJaaedxrnnnsucOXN47rnn9px37ty5rFq1iu3bt/P5z3+eWbNmcfzxx3P33XcD8Prrr7NgwQIKhQKf/exnef3114d+sWY2Iq66Clpa9m5raam0N0xE5HoBy4BFA+z7FHAflTv1E4GnBjveCSecENWef/75fdoGMnVqRCXK935NnZr7EDWVSqVob2+P3t7e2LZtW0yfPj2efvrpAGLlypUREbFo0aL45je/GVu2bIn3vve9sWvXroiIePXVVyMi4nOf+1w89thjERGxcePGeN/73hcREV/72tdi5syZ0dfXFxER1157bVxxxRUREbF58+aYNm1aRERceumlccstt+w55rRp06K3tze+9a1vxaJFiyIiYs2aNTFmzJj4+c9/vs811PN9NLORc+utlYySKstbb63/GEApBsjVXHfoklqAjwF39mu7UNKF2ea9wIvAeuC7wD804ofN/gzXeNTKlSv59Kc/zYQJE3jrW9/KZz7zGR577DGmTJnCySefDMDChQtZuXIlhx9+OOPHj+eCCy7gzjvvpCX78fvQQw9x8cUXM2PGDObNm8drr73Gtm3bAJg3bx6HHnooAOeccw4/+lFlBOuOO+7g7LPPBuCBBx7g6quvZsaMGcydO5cdO3awadMmHn30URYuXAhAoVCgUCgM7WLNbER1dMCGDbBrV2XZqKdbdsv1xqKI6AMmVrUt6bcewBcbW9r+HX10ZZilVvtQxACTZlc/DiiJsWPH8tRTT/Hwww+zbNkyFi9ezCOPPMKuXbt4/PHH9wR3fxMmTNizPmnSJCZOnMjatWu5/fbb+c53vrOnhh//+Mccc8wxg9ZhZrbbqP0sl+EajzrllFO466676OvrY/v27axYsYIPfvCDbNq0iccffxyA2267jQ984AP09vaydetWTj/9dK6//npWr14NwGmnncbixYv3HHN3ey0LFizgmmuuYevWrbz//e8H4OMf/zg33njjnh8uzzzzzJ7aurM/Ejz77LOsXbt2aBdrZkkZtYHe0QFdXTB1KkiVZVfX0H+FmTlzJueffz6zZ89mzpw5XHDBBbz97W/n2GOPZenSpRQKBV555RUuuugitm3bxhlnnEGhUOBDH/oQ1113HQA33HADpVKJQqHA9OnTWbJkyYDnmz9/PsuWLeOcc87Z03b55ZfzxhtvUCgUaG9v5/LLLwfgoosuore3l0KhwDXXXMPs2bOHdrFmlhQNNMQw3IrFYlQ/Q71u3TqOPfbYptSTEn8fzdIlaVVEFGvtG7V36GZmtjcHuplZIg66QG/WEFAq/P0ze/M6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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "xdata = np.array([5.0, 10.0, 15.0])\n", "ydata = np.array([3.0, 6.0, 7.0])\n", "plt.plot(xdata, ydata, 'bo', label='observed')\n", "plt.legend();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can try to fit a straight line through these three points, but you can already see that the three points don't lie on a line, so there is no straight line that goes exactly through the three points. The straight line is written as $y=ax+b$, where $a$ is the slope of the line and $b$ is called the intercept (it is the value of $y$ for $x=0$). We write a function that takes as input arguments an array of observed $x$ values and an array of corresponding $y$ values, and values for the slope $a$ and intercept $b$. The function returns the sum of squared errors, where the error is defined as the difference betweeen the observed value of $y$ and the value of the straight line at that same $x$ value. The equation for the error at point $i$ is $\\varepsilon_i$ and may be written as\n", "\n", "$\\varepsilon_i = y_i - (ax_i + b)$" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "def sse(a, b, x=xdata, y=ydata):\n", " error = y - (a * x + b)\n", " return np.sum(error ** 2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see, different values of $a$ and $b$ give different values for the sum of squared errors `sse`. The `sse` for $a=1$, $b=2$ is larger than for $a=1$, $b=1$. " ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "sse of a=1, b=2: 152.0\n", "sse of a=1, b=1: 115.0\n" ] } ], "source": [ "print('sse of a=1, b=2:', sse(a=1, b=2))\n", "print('sse of a=1, b=1:', sse(a=1, b=1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "What we can do is compute the `sse` function for a larger number of $a$ and $b$ values. If we do that on a regular grid, we can create contours of the `sse` function. The `sse` function is constant along any contour. A contour map of the `sse` function is similar to an elevation map. The goal is now to find the combination of $a$ and $b$ that gives the smallest value of the sum of squared errors. In the graph below, you can see that the smallest value of `sse` is obtained at $a\\approx 0.4$, $b\\approx 1.3$ (you have to look closely for the darkest blue in the figure; the area beyond the yellow is $E>10$)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "a, b = np.meshgrid(np.linspace(0.2, 0.6, 50), np.linspace(0, 2, 50))\n", "ssevec = np.vectorize(sse)\n", "z = ssevec(a, b)\n", "plt.figure()\n", "plt.contourf(a, b, z, np.linspace(0, 10, 100))\n", "plt.colorbar()\n", "plt.xlabel('a')\n", "plt.ylabel('b');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "How do we minimize the sum of squared errors? As usual, we find the minimum of a function by taking the derivative and setting it to zero. This is a little involved, but not too difficult. The sum of squared errors is written as $E$\n", "\n", "$$\n", "E=\\sum_{i=1}^N\\varepsilon_i^2=\n", "\\sum_{i=1}^N[y_i-(ax_i+b)]^2\n", "$$\n", "\n", "where $N$ is the number of observations. The slope $a$ and intercept $b$ are determined such that $E$ is minimized, which means that the following derivatives are zero\n", "\n", "$$\\frac{\\partial E}{\\partial a}=0 \\qquad \\frac{\\partial E}{\\partial b}=0$$\n", "\n", "Differentiation gives (using the chain rule)\n", "\n", "$$\n", "\\frac{\\partial E}{\\partial a}=\\sum_{i=1}^N[2(y_i-ax_i-b)(-x_i)]=\n", "2a\\sum_{i=1}^Nx_i^2+2b\\sum_{i=1}^Nx_i-2\\sum_{i=1}^Nx_iy_i\n", "$$\n", "\n", "$$\n", "\\frac{\\partial E}{\\partial b}=\\sum_{i=1}^N[2(y_i-ax_i-b)(-1)]=\n", "2a\\sum_{i=1}^Nx_i+2bN-2\\sum_{i=1}^Ny_i\n", "$$\n", "\n", "Setting the derivatives equal to zero and division by 2 gives\n", "\n", "$$\n", "a\\sum_{i=1}^Nx_i^2+b\\sum_{i=1}^Nx_i-\\sum_{i=1}^Nx_iy_i=0\n", "$$\n", "\n", "$$\n", "a\\sum_{i=1}^Nx_i+bN-\\sum_{i=1}^Ny_i=0\n", "$$\n", "\n", "This system of two linear equations with two unknowns ($a$ and $b$) may be solved to give\n", "\n", "$$ a=\\frac{N\\sum_{i=1}^Nx_iy_i-\\sum_{i=1}^Nx_i\\sum_{i=1}^Ny_i}\n", "{N\\sum_{i=1}^Nx_i^2-\\sum_{i=1}^Nx_i\\sum_{i=1}^Nx_i}\n", "$$\n", "\n", "$$\n", "b=\\bar{y}-a\\bar{x}\n", "$$\n", "where $\\bar{x}$ and $\\bar{y}$ are the mean values of $x$ and $y$, respectively. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 4. Fitting a straight line revisited\n", "Compute the optimal values (in the least squares sense) of $a$ and $b$ using the two equations derived above and the corresponding sum of squared errors (using the `xdata` and `ydata` arrays for the three points given above). Next, use the `linregress` function of the `scipy.stats` package to compute the optimal values and verify that the `linregress` function gives the same answers. Create a graph that shows the three data points and the fitted straight line." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The correlation coefficient, $p$-value and standard error. \n", "The `linregress` function returns 5 values. Besides the slope and intercept, these are somewhat cryptically defined as the correlation coefficient, the $p$-value, and the standard error. Each of these three values are a quantification of the goodness of fit. According to statisticians, these terms in the `scipy.stats` documentation are somewhat imprecisely defined (they will likely be updated in the future). This is what they mean:\n", "\n", "The square of the correlation coefficient $r$ is the *r-squared value* and is defined as\n", "\n", "$$r^2 = 1 - \\sum{(y_i - \\hat{y}_i)^2} \\left/ \\sum{(y_i - \\bar{y})^2} \\right. $$\n", "\n", "where $y_i$ is the $y$ value of data point $i$, while $\\hat{y}_i$ is the fitted values at data point $i$. It can also be written as \n", "\n", "$$r^2 = \\frac{\\text{var}(y) - \\text{var}(y-\\hat{y})}{\\text{var}(y)}$$\n", "\n", "So the $r^2$ value is the variance of $y$ minues the variance of the remaining residuals (the data values minus the fitted values), divided by the variance of $y$, and is also referred to as the 'percentage of variance explained'. If the model goes exactly through the data (a perfect fit), then the variance of the residuals is zero, and $r^2=1$. If the model doesn't do much better than simply the mean of $y$, then the $r^2$ is very close zero. A value of $r^2$ close to 1 is generally a good thing, but it is not possible to say anything definitive about the goodness of fit by just reporting the $r^2$ value (although many people do)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The standard error returned by the `linregress` model is the estimated standard deviation of the fitted slope. The equation is" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$s = \\sqrt{\\frac{\\sum(y_i-\\hat{y}_i)^2}{N-2}} \\left/ \\sqrt{\\sum{(x_i-\\bar{x})^2}} \\right.$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The standard deviation of the slope should be interpreted similar to the standard deviation of the mean. The computed slope is a statistical value so it has an estimated standard deviation. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The $p$-value is related to the question whether the estimated slope is significantly different from zero. When the slope is significantly different from zero, you can state that there is a linear relationship between the two variables. The $p$-value is related to the question whether the estimated slope is significantly different from zero when you perform a $t$-test. When the $p$-value is less than 0.05, this means that when you perform a two-sided $t$-test you can reject the null hypothesis that the slope is zero in favor of the alternative hypothesis that the slope is not zero. In layman terms: it means that there is less than 5% chance that the slope is zero and more than 95% chance that the slope is not zero. Or even simpler: the slope is significantly different from zero. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 5. Verification of goodness of fit parameters\n", "Implement the equations for $r^2$ and $s$ given above to verify that the values returned by the `linregress` function are correct. Perform a two-sided hypothesis test with significance level 5% where the null hypothesis is that the slope of the fitted line is zero and the alternative hypothesis is that the slope is not zero. Draw the probability density function of a $t$-distribution with mean 0 and standard deviation equal to the computed value of $s$. Use $N-2$ as the number of degrees of freedom (You subtract the number of parameters from $N$ as you used up these two degrees of freedom). Draw red vertical lines indicating the 2.5% and 97.5% percentiles according to the $t$-distribution. Draw a heavy black vertical line at the position of the computed value of the slope. Decide whether you can reject the null hypothesis that the slope is zero in favor of the alternative hypothesis that the slope is not 0 and add that as a title to the figure." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Meaning of the $p$-value\n", "If you did the previous exercise correctly, you found out that the slope was not significantly different from zero (you could not reject the null hypothesis that the slope is zero with significance level 5%). The $p$ value returned by the `linregress` function means that if you would have performed the hypothesis with significance level $p$, then you would not have rejected the hypothesis. Let's try it. First we recompute the $p$ and $s$ value of the fitted line" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "p value: 0.1789123750220667 s value: 0.11547005383792511\n" ] } ], "source": [ "from scipy.stats import linregress\n", "slope, intercept, r, p, s = linregress(xdata, ydata)\n", "print('p value:', p, 's value:', s)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "upper and lower bound for significance level 0.1789123750220667 is: -0.4000000000044717 0.4000000000044717\n" ] } ], "source": [ "from scipy.stats import t\n", "p1, p2 = t.ppf([p / 2, 1 - p / 2], 1, loc=0, scale=s)\n", "print('upper and lower bound for significance level', p, 'is:', p1, p2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Just to be complete, we can compute the $p$ value from the $t$ distribution as" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "p-value from t-distribution: [[0.33333333 0.322417 0.31213621 ... 0.12433906 0.12266646 0.12103772]\n", " [0.33333333 0.322417 0.31213621 ... 0.12433906 0.12266646 0.12103772]\n", " [0.33333333 0.322417 0.31213621 ... 0.12433906 0.12266646 0.12103772]\n", " ...\n", " [0.33333333 0.322417 0.31213621 ... 0.12433906 0.12266646 0.12103772]\n", " [0.33333333 0.322417 0.31213621 ... 0.12433906 0.12266646 0.12103772]\n", " [0.33333333 0.322417 0.31213621 ... 0.12433906 0.12266646 0.12103772]]\n" ] } ], "source": [ "print('p-value from t-distribution:', 2 * (1 - t.cdf(a, 1, loc=0, scale=s)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Recall that the $p$-value only makes sense if the residuals are independent and Normally distributed. For the problem we are looking at with 3 data points that is, of course, impossible to say. But when you have more data, you really need to check or, alternatively, use a method that doesn't require the Normality assumption. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One last thing about the significance level. We state that the slope is signficantly different from zero when $p<0.05$. But that means that there is still a 5% chance that the slope is different from zero by chance. Let's try that in the following exercise" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### Exercise 6. Getting a value of $p<0.05$ by chance\n", "Perform the following experiment: Generate 100 $x$ values randomly from a uniform distribution between 0 and 10 using the `np.random.rand` function. Generate 100 $y$ values randomly from a uniform distribution between 0 and 10. Fit a straight line using `linregress`. Perform the experiment 1000 time and count the number of times that the $p$-value is smaller than 0.05. As you will see, you will get approximately 50 out of the 1000 experiments where a line is fitted with a $p$-value smaller than 0.05 just by chance (as there really is no correlation between the random $x$ and $y$ values). " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 6" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Answers to the exercises" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Answers to Exercise 1" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "slope, intercept: 6.077443700312609 42.58245735877516\n" ] }, { "data": { "image/png": "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xZvzm1u8+y1eeTZuZpZ8tXDzcCaFtWvX0rRp01iHcYjWrVvbhWDGJIj164tXXhKFJnev98soYKmqDvZZNBU34wre/RSf8k7erC1nATvym28iKdLtV5G0b19Jpts0xiSq2rWLV14SRam5t8RNkXWhiCzwbm2AAbhp3Fbgpmwb4K3/IW5mnJW4qbruCF+4gUWy/Wrw4ME0bdqUpk2bMmTIEMAl486dO5Oamkr79u3J9X5f9erViyZNmpCamsr9998PQE5ODtdeey1nnHEGZ5xxBl9//TUAjz76KBkZGVx66aV06tSJM888k8WLFx/Yb+vWrZk7dy6///473bp144wzzuC0005jyhT3HfrHH3/QsWNHUlNTuf766/njj4PmuTbGxLH+/aFixYPLKlZ05WET66mgVJXTTz9d/S1ZsuSQsmDq1FF1af3gW506Rd5EQFlZWdq0aVPdvXu37tq1S5s0aaLz5s1TQGfNmqWqql27dtVBgwbp1q1btWHDhpqXl6eqqtu3b1dV1RtuuEG/+uorVVVdt26dnnTSSaqq2q9fP23evLnm5uaqqurgwYO1b9++qqq6ceNGbdCggaqq9u7dW8eNG3dgmw0aNNDdu3frc889p127dlVV1R9++EFLly6t33///SHvoTjH0RgTPW+84XKUiLt/443ibwPI0iB5NSmuUI1U+9WsWbP45z//SaVKlTjyyCO55ppr+OqrrzjhhBNo2bIlADfddBOzZs3iqKOOonz58txyyy289957VPS+lj/77DN69uxJs2bNaNeuHTt37mTXrl0AtGvXjgoVKgDQoUMH3n7bzXk8ceJErrvuOgA++eQTBgwYQLNmzWjdujV79uxh/fr1zJw5k5tuugmA1NRUUlNTQ3uzxpioSk+HtWshL8/dp6eHd/txMSpkqGrXdk0xgcpDoUHml/XvYigilClThu+++47PP/+cCRMmMHz4cGbMmEFeXh6zZ88+kMR9VapU6cDjmjVrUq1aNRYuXMhbb73Fyy+/fCCGd999l0aNGhUahzHG5EuKmnuk2q/OO+88Jk+eTG5uLr///juTJk2iVatWrF+/ntmzZwMwfvx4zj33XHbv3s2OHTto06YNQ4YMYcGCBQBceumlDB8+/MA288sD6dixIwMHDmTHjh2ccsopAFx22WW88MILB75o5s+ffyC2TO+kwqJFi1i4cGFo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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from scipy.stats import linregress\n", "x, y = np.loadtxt('xydatafit.dat')\n", "slope, intercept, r_value, p_value, std_err = linregress(x, y)\n", "yfit = slope * x + intercept\n", "plt.figure()\n", "plt.plot(x, y, 'bo', label='observed')\n", "plt.plot(x, yfit, 'r', label='fit')\n", "rmse = np.sqrt(np.sum((yfit - y) ** 2) / len(y))\n", "plt.title('RMSE: '+str(rmse))\n", "plt.legend(loc='best')\n", "print('slope, intercept:', slope, intercept)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 1\n", "\n", "Answers to Exercise 2" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "image/png": "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hZJ7NKjtCKDQo9Hpga9Lyi3R/bJoejFhLMcSzQljcOaEhQsX0qFDh3SHsZMuXbroQjCRLLF4ceWmV0W5yT1q/fJPYI673xczawxhhB6i+9Ex0/tb0BlYXVK+SaVU169SafPmzekOQURqUMuWlZteFRU5cj+BMCxWVzObHt16AHcBp5vZXOD06DnAq4QR6OcBjwBXJC/cxFJZv7rvvvvo0KEDHTp04P777wdCMh4wYAD5+fn06dOH9dHvqxtuuIH27duTn5/PddddB8Dy5cv5yU9+wtFHH83RRx/N+++/D8Btt93GoEGDOOOMM+jfvz/HHnssH3/88bbtdunShalTp7Ju3Touvvhijj76aI488khGjw7foRs2bKBv377k5+fz05/+lA0bNlT/jxWRGjF4MNSvv+O0+vXD9KRJ91BQ7s5RRx3l8WbPnr3TtNK0auUe0vqOt1atKryKhIqKirxDhw6+du1aX7Nmjbdv396nTZvmgE+cONHd3S+66CK/5557fMWKFX7wwQf71q1b3d191apV7u5+wQUX+Hvvvefu7osWLfIf/vCH7u5+6623eqdOnXz9+vXu7n7ffff5Lbfc4u7uS5Ys8Xbt2rm7+4033uhPPfXUtnW2a9fO165d6/fee69fdNFF7u4+Y8YMr1Wrlv/3v//d6W+ozH4UkZrz9NMhR5mF+6efrvw6gCIvJa/mxBWqqapfTZw4kXPOOYc999yTvfbai3PPPZf33nuPFi1acMIJJwBw4YUXMnHiRPbee2/q1q3LpZdeysiRI6kffS2/+eabXHXVVXTs2JFevXrx3XffsWbNGgB69epFvXr1ADj//PN54YUXAHj++ec577zzAHjjjTe466676NixI126dGHjxo0sXryYCRMmcOGFFwKQn59Pfn5+9f5YEalR/frBwoWwdWu479cvuevPiF4hq6tly1CKSTS9OryU8WXjmxiaGbVr1+aDDz5g/PjxPPvsszz00EO89dZbbN26lUmTJm1L4rH23HPPbY+bNWtG48aNmTlzJs899xx///vft8UwYsQIDjnkkHLjEBEpkRNH7qmqX5188smMGjWK9evXs27dOl588UVOOukkFi9ezKRJkwB45plnOPHEE1m7di2rV6+mR48e3H///UyfPh2AM844g4ceemjbOkumJ9K3b1/uvvtuVq9ezeGHHw7AmWeeyV//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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "x, y = np.loadtxt('xydatafit.dat')\n", "a, b, c = np.polyfit(x, y, 2)\n", "yfit = a * x ** 2 + b * x + c\n", "plt.figure()\n", "plt.plot(x, y, 'bo', label='observed')\n", "plt.plot(x, yfit, 'r', label='fit')\n", "rmse = np.sqrt(np.sum((yfit - y) ** 2) / len(y))\n", "plt.legend(loc='best')\n", "plt.title('RMSE: '+str(rmse));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 2\n", "\n", "Answers to Exercise 3" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from scipy.optimize import curve_fit\n", "\n", "def func(x, A, a, b):\n", " y = A * np.exp(a * x) + b\n", " return y\n", "\n", "popt, pcov = curve_fit(func, x, y)\n", "yfit = func(x, *popt)\n", "plt.figure()\n", "plt.plot(x, y, 'bo', label='observed')\n", "plt.plot(x, yfit, 'r', label='fit')\n", "plt.legend(loc='best')\n", "rmse2 = np.sqrt(np.sum((yfit - y) ** 2) / len(y))\n", "plt.title('RMSE: '+str(rmse2));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 3\n", "\n", "Answers to Exercise 4" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def sse(a, b, x=xdata, y=ydata):\n", " error = y - (a * x + b)\n", " return np.sum(error ** 2)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "optimal values of a and b: 0.4 1.333333333333333\n", "sse: 0.6666666666666667\n" ] } ], "source": [ "xdata = np.array([5.0, 10.0, 15.0])\n", "ydata = np.array([3.0, 6.0, 7.0])\n", "N = len(xdata)\n", "a = (N * np.sum(xdata * ydata) - np.sum(xdata) * np.sum(ydata) ) / \\\n", " (N * np.sum(xdata ** 2) - np.sum(xdata) * np.sum(xdata))\n", "b = np.mean(ydata) - a * np.mean(xdata)\n", "print('optimal values of a and b:', a, b)\n", "print('sse:', sse(a, b))" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "slope and intercept according to linregress: 0.4 1.333333333333333\n" ] } ], "source": [ "from scipy.stats import linregress\n", "slope, intercept, r, p, s = linregress(xdata, ydata)\n", "print('slope and intercept according to linregress:', slope, intercept)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXsAAAD8CAYAAACW/ATfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3deZzNdf//8cc7dFmTXOqqJELimiZkKUraFPlOC0mppGVKl1+rrrQgbbYslUrT8k01oRTaS7QpyRDKli2aCCGMLcz7+8fr8NOYYcxZPufMed5vN7eZc+bMOS8fx3Pe8/m836+3894jIiLF2yFBFyAiItGnsBcRSQIKexGRJKCwFxFJAgp7EZEkoLAXEUkCBwx759zLzrnVzrmf9rrvCOfcBOfcwtDHStEtU0REwlGYkf0rwIV57usBTPTe1wYmhm6LiEiccoVZVOWcqw68771PCd1eALT03q90zh0NfOG9rxPNQkVEpOhKFvH7jvLerwQIBf6RBT3QOZcOpAOUK1fu1JNOOqmILykikpymT5/+h/e+SjjPUdSwLzTvfQaQAdCoUSOflZUV7ZcUESlWnHPLwn2Oos7GWRU6fUPo4+pwCxERkegpati/C3QOfd4ZGB+ZckREJBoKM/VyJDAFqOOcy3bO3QD0A853zi0Ezg/dFhGROHXAc/be+ysL+NK5kShgx44dZGdns23btkg8XVIqXbo0VatWpVSpUkGXIiJxKuoXaA8kOzubChUqUL16dZxzQZeTcLz3rF27luzsbGrUqBF0OSISpwJvl7Bt2zYqV66soC8i5xyVK1fWb0Yisl+Bhz2goA+Tjp+IHEhchL2IiESXwj4fv/zyCykpKUGXsY+WLVuiRWkiUhQJF/aZmVC9OhxyiH3MzAy6osLZuXNn0CWISBJLqLDPzIT0dFi2DLy3j+np4Qf+4MGDSUlJISUlhaFDhwIWzp07dyY1NZX27duzZcsWAHr06EG9evVITU2le/fuAKxZs4Z27drRuHFjGjduzDfffAPAQw89RHp6Oq1ateLaa6+ladOmzJkzZ8/rtmzZkunTp7N582auv/56GjduTIMGDRg/3taobd26lY4dO5KamsoVV1zB1q1bw/uLikjy8t7H7M+pp57q85o7d+4+9xXk+OO9t5j/+5/jjy/0U+wjKyvLp6Sk+JycHL9p0yZfr149P2PGDA/4yZMne++979Klix84cKBfu3atP/HEE31ubq733vv169d7772/8sor/ddff+29937ZsmX+pJNO8t5737t3b9+wYUO/ZcsW7733gwcP9r169fLee79ixQpfu3Zt77339913n3/ttdf2PGft2rV9Tk6OHzRokO/SpYv33vtZs2b5EiVK+GnTpuX79ziY4ygiCWTrVg9k+TDzN6FG9suXH9z9hTF58mQuvfRSypUrR/ny5bnsssv4+uuvOe6442jevDkAV199NZMnT+awww6jdOnS3HjjjbzzzjuULVsWgM8++4xu3bpRv3590tLS2LhxI5s2bQIgLS2NMmXKANChQwfeeustAN58800uv/xyAD799FP69etH/fr1admyJdu2bWP58uV89dVXXH311QCkpqaSmppa9L+oiCSWv/6C556DmjUj8nSBL6o6GNWq2amb/O4vKl9AP/+80xmdc5QsWZLvv/+eiRMnMmrUKIYNG8akSZPIzc1lypQpe0J9b+XKldvz+bHHHkvlypWZPXs2o0eP5vnnn99Tw9tvv02dOvtuCaBplSJJZtcueP116NMHli6FZs1gxYqwnzahRvaPPQahwfQeZcva/UXVokULxo0bx5YtW9i8eTNjx47lzDPPZPny5UyZMgWAkSNHcsYZZ5CTk8OGDRto06YNQ4cOZebMmQC0atWKYcOG7XnO3ffnp2PHjgwYMIANGzZw8sknA3DBBRfw9NNP7/nB88MPP+ypLTN0QeKnn35i9uzZRf+Likh8y82Ft96ClBS47jqoVAk+/BAmT47I0ydU2HfqBBkZcPzx4Jx9zMiw+4uqYcOGXHfddTRp0oSmTZty4403UqlSJerWrcuIESNITU1l3bp1dO3alU2bNtG2bVtSU1M566yzGDJkCABPPfUUWVlZpKamUq9ePYYPH17g67Vv355Ro0bRoUOHPff17NmTHTt2kJqaSkpKCj179gSga9eu5OTkkJqayoABA2jSpEnR/6IiEp+8hw8+gFNPhQ4dLNzGjIGsLGjd2m5HQKG2JYyU/DYvmTdvHnXr1o1ZDcWVjqNIAvr8c3jwQfj2WzjhBHjoIbjqKihR4m8Pc85N9943CuelEmpkLyJSLEydCuedB+ecYxcihw+H+fPhmmv2CfpIUdiLiMTK7NmQlgannWafDx4MCxfCzTdD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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(xdata, ydata, 'bo', label='observed')\n", "plt.xlim(0, 20)\n", "plt.ylim(0, 10)\n", "x = np.linspace(0, 20, 2)\n", "yfit = a * x + b\n", "plt.plot(x, yfit, 'r', label='fit')\n", "plt.legend(loc='best');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 4\n", "\n", "Answers to Exercise 5" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "r squared according to formula: 0.923076923076923\n", "r squared according to linregress: 0.9230769230769231\n" ] } ], "source": [ "yfit = a * xdata + b\n", "print('r squared according to formula:', end=' ')\n", "print(1 - sum((ydata - yfit) ** 2) / sum((ydata - np.mean(ydata)) ** 2))\n", "print('r squared according to linregress:', r**2)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "std of slope according to formula: 0.11547005383792515\n", "std of slope according to linregress: 0.11547005383792511\n" ] } ], "source": [ "print('std of slope according to formula:', end=' ')\n", "print(np.sqrt(np.sum((ydata - yfit)**2) / (N - 2)) / np.sqrt(np.sum((xdata - np.mean(xdata)) ** 2)))\n", "print('std of slope according to linregress:', s)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from scipy.stats import t\n", "x = np.linspace(-1.5, 1.5, 100)\n", "y = t.pdf(x, 1, loc=0, scale=s)\n", "plt.figure()\n", "plt.plot(x, y)\n", "p025, p975 = t.ppf([0.025, 0.975], 1, loc=0, scale=s)\n", "plt.axvline(p025, color='r')\n", "plt.axvline(p975, color='r')\n", "plt.axvline(a, color='k', lw=5)\n", "plt.title('H0 cannot be rejected: slope is not significantly different from zero');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 5\n", "\n", "Answers to Exercise 6" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "number of 1000 experiments where p < 0.05: 52\n" ] } ], "source": [ "count = 0\n", "for i in range(1000):\n", " x = np.random.rand(100)\n", " y = np.random.rand(100)\n", " slope, intercept, r, p, s = linregress(x, y)\n", " if p < 0.05:\n", " count += 1\n", "print('number of 1000 experiments where p < 0.05:', count)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Back to Exercise 6" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.4" } }, "nbformat": 4, "nbformat_minor": 1 }