{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "import numpy as np\n", "import scipy.stats as stats\n", "import matplotlib.pyplot as plt\n", "import seaborn as sns" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Resampling and Monte Carlo Simulations\n", "====\n", "\n", "Broadly, any simulation that relies on random sampling to obtain results falls into the category of Monte Carlo methods. Another common type of statistical experiment is the use of repeated sampling from a data set, including the bootstrap, jackknife and permutation resampling. Often, they are combined, as when we use a random set of permutations rather than the full set of permutations, which grows as $O(n!))$ and is typically infeasible. What Monte Carlo simulations have in common is that they are typically more flexible but also more computationally demanding than methods based on asymptotic results. Because of their flexibility and the inexorable growth of computing power, I expect these computational simulation methods to only become more popular over time." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Setting the random seed\n", "\n", "In any probabilistic simulation, it is prudent to set the random number seed so that results can be replicated" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.random.seed(123)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Sampling with and without replacement" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([2, 1, 2, 2, 0, 2, 2, 1, 3, 2, 3, 1])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Sampling is done with replacement by default\n", "np.random.choice(4, 12)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([3, 3, 1, 0, 0, 3, 1, 0, 0, 3, 0, 0])" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Probability weights can be given\n", "np.random.choice(4, 12, p=[.4, .1, .1, .4])" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[7, 2, 4, 8, 0, 7, 9, 3, 4, 6, 1, 5],\n", " [6, 2, 1, 8, 3, 5, 0, 2, 6, 2, 4, 4],\n", " [6, 3, 0, 6, 4, 7, 6, 7, 1, 5, 7, 9],\n", " [2, 4, 8, 1, 2, 1, 1, 3, 5, 9, 0, 8],\n", " [1, 6, 3, 3, 5, 9, 7, 9, 2, 3, 3, 3],\n", " [8, 6, 9, 7, 6, 3, 9, 6, 6, 6, 1, 3],\n", " [4, 3, 1, 0, 5, 8, 6, 8, 9, 1, 0, 3],\n", " [1, 3, 4, 7, 6, 1, 4, 3, 3, 7, 6, 8]])" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.random.randint(0, 10, (8, 12))\n", "x" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 4, 7, 1, 2, 2, 6, 7, 3, 8, 4])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# sampling individual elements\n", "np.random.choice(x.ravel(), 12)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[4, 3, 1, 0, 5, 8, 6, 8, 9, 1, 0, 3],\n", " [4, 3, 1, 0, 5, 8, 6, 8, 9, 1, 0, 3],\n", " [6, 2, 1, 8, 3, 5, 0, 2, 6, 2, 4, 4],\n", " [4, 3, 1, 0, 5, 8, 6, 8, 9, 1, 0, 3]])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# sampling rows\n", "idx = np.random.choice(x.shape[0], 4)\n", "x[idx, :]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[9, 4, 3, 1],\n", " [0, 6, 2, 4],\n", " [6, 1, 7, 7],\n", " [1, 5, 3, 0],\n", " [7, 2, 9, 3],\n", " [9, 6, 6, 1],\n", " [6, 9, 8, 0],\n", " [4, 3, 3, 6]])" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# sampling columns\n", "idx = np.random.choice(x.shape[1], 4)\n", "x[:, idx]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Sampling without replacement" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Cannot take a larger sample than population when 'replace=False'\n" ] } ], "source": [ "# Give the argument replace=False\n", "try:\n", " np.random.choice(4, 12, replace=False)\n", "except ValueError as e:\n", " print(e)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Random shuffling" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[7, 2, 4, 8, 0, 7, 9, 3, 4, 6, 1, 5],\n", " [6, 2, 1, 8, 3, 5, 0, 2, 6, 2, 4, 4],\n", " [6, 3, 0, 6, 4, 7, 6, 7, 1, 5, 7, 9],\n", " [2, 4, 8, 1, 2, 1, 1, 3, 5, 9, 0, 8],\n", " [1, 6, 3, 3, 5, 9, 7, 9, 2, 3, 3, 3],\n", " [8, 6, 9, 7, 6, 3, 9, 6, 6, 6, 1, 3],\n", " [4, 3, 1, 0, 5, 8, 6, 8, 9, 1, 0, 3],\n", " [1, 3, 4, 7, 6, 1, 4, 3, 3, 7, 6, 8]])" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[7, 2, 4, 8, 0, 7, 9, 3, 4, 6, 1, 5],\n", " [4, 3, 1, 0, 5, 8, 6, 8, 9, 1, 0, 3],\n", " [8, 6, 9, 7, 6, 3, 9, 6, 6, 6, 1, 3],\n", " [2, 4, 8, 1, 2, 1, 1, 3, 5, 9, 0, 8],\n", " [6, 3, 0, 6, 4, 7, 6, 7, 1, 5, 7, 9],\n", " [6, 2, 1, 8, 3, 5, 0, 2, 6, 2, 4, 4],\n", " [1, 3, 4, 7, 6, 1, 4, 3, 3, 7, 6, 8],\n", " [1, 6, 3, 3, 5, 9, 7, 9, 2, 3, 3, 3]])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Shuffling occurs \"in place\" for efficiency\n", "np.random.shuffle(x)\n", "x" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[7, 0, 4, 7, 9, 8, 1, 6, 4, 3, 2, 5],\n", " [8, 5, 1, 4, 6, 0, 0, 1, 9, 8, 3, 3],\n", " [3, 6, 9, 8, 9, 7, 1, 6, 6, 6, 6, 3],\n", " [1, 2, 8, 2, 1, 1, 0, 9, 5, 3, 4, 8],\n", " [7, 4, 0, 6, 6, 6, 7, 5, 1, 7, 3, 9],\n", " [5, 3, 1, 6, 0, 8, 4, 2, 6, 2, 2, 4],\n", " [1, 6, 4, 1, 4, 7, 6, 7, 3, 3, 3, 8],\n", " [9, 5, 3, 1, 7, 3, 3, 3, 2, 9, 6, 3]])" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# To shuffle columns instead, transpose before shuffling\n", "np.random.shuffle(x.T)\n", "x" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[7, 0, 4, 7, 9, 8, 1, 6, 4, 3, 2, 5],\n", " [1, 6, 4, 1, 4, 7, 6, 7, 3, 3, 3, 8],\n", " [1, 2, 8, 2, 1, 1, 0, 9, 5, 3, 4, 8],\n", " [7, 4, 0, 6, 6, 6, 7, 5, 1, 7, 3, 9],\n", " [9, 5, 3, 1, 7, 3, 3, 3, 2, 9, 6, 3],\n", " [3, 6, 9, 8, 9, 7, 1, 6, 6, 6, 6, 3],\n", " [8, 5, 1, 4, 6, 0, 0, 1, 9, 8, 3, 3],\n", " [5, 3, 1, 6, 0, 8, 4, 2, 6, 2, 2, 4]])" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# numpy.random.permutation does the same thing but returns a copy\n", "np.random.permutation(x)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([4, 0, 6, 7, 5, 1, 8, 2, 3, 9])" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# When given an integre n, permutation treats is as the array arange(n)\n", "np.random.permutation(10)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(array([ 9, 10, 11]), array([19, 20, 21])),\n", " (array([3, 4, 5]), array([13, 14, 15])),\n", " (array([6, 7, 8]), array([16, 17, 18])),\n", " (array([0, 1, 2]), array([10, 11, 12]))]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Use indices if you needed to shuffle collections of arrays in synchrony\n", "x = np.arange(12).reshape(4,3)\n", "y = x + 10\n", "idx = np.random.permutation(x.shape[0])\n", "list(zip(x[idx, :], y[idx, :]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Bootstrap\n", "\n", "The bootstrap is commonly used to estimate statistics when a closed form solution may not exist. " ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# For example, what is the 95% confidence interval for \n", "# the 10th percentile of this data set if you didn't know how it was generated?\n", "\n", "x = np.concatenate([np.random.exponential(size=200), np.random.normal(size=100)])\n", "plt.hist(x, 25, histtype='step', linewidth=1)\n", "pass\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "n = len(x)\n", "reps = 10000\n", "xb = np.random.choice(x, (n, reps))\n", "mb = np.percentile(xb, 10, axis=0)\n", "mb.sort()\n", "\n", "lower, upper = np.percentile(mb, [2.5, 97.5])\n", "sns.kdeplot(mb)\n", "for v in (lower, upper):\n", " plt.axvline(v, color='red')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Permutation resampling" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### For flexible hypothesis testing\n", "\n", "Suppose you have two data sets from unknown distributions and you want to test if some arbitrary statistic (e.g the 7th percentile) is the same in the two data sets - what can you do?\n", "\n", "An appropriate test statistic is the difference between the 7th percentile, and if we knew the null distribution of this statistic, we could test for the null hypothesis that the statistic = 0. Permuting the labels of the 2 data sets allows us to create the empirical null distribution." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Create two data sets for comparison" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "x = np.r_[np.random.exponential(size=200), \n", " np.random.normal(0, 1, size=100)]\n", "y = np.r_[np.random.exponential(size=250), \n", " np.random.normal(0, 1, size=50)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Generate permutations of labels for 10,000 comparisons" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "n1, n2 = map(len, (x, y))\n", "reps = 10000\n", "\n", "data = np.r_[x, y]\n", "ps = np.array([np.random.permutation(n1+n2) for i in range(reps)])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Estimate empirical null distribution for differences between samples" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "xp = data[ps[:, :n1]]\n", "yp = data[ps[:, n1:]]\n", "samples = np.percentile(xp, 7, axis=1) - np.percentile(yp, 7, axis=1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Plot the results" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "p-value = 0.0242\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.hist(samples, 25, histtype='step', color='red')\n", "test_stat = np.percentile(x, 7) - np.percentile(y, 7)\n", "plt.axvline(test_stat)\n", "plt.axvline(np.percentile(samples, 2.5), linestyle='--')\n", "plt.axvline(np.percentile(samples, 97.5), linestyle='--')\n", "print(\"p-value =\", 2*np.sum(samples >= np.abs(test_stat))/reps)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Adjusting p-values for multiple testing\n", "\n", "We will make up some data - a typical example is trying to identify genes that are differentially expressed in two groups of people, perhaps those who are healthy and those who are sick. For each gene, we can perform a t-test to see if the gene is differentially expressed across the two groups at some nominal significance level, typically 0.05. When we have many genes, this is unsatisfactory since 5% of the genes will be found to be differentially expressed just by chance.\n", "\n", "One possible solution is to use the family-wise error rate (FWER) instead - most simply using the Bonferroni adjusted p-value. An alternative is to use the non-parametric method originally proposed by Young and Westfall that uses permutation resampling to estimate the adjusted p-value without the assumptions of independence that the Bonferroni method makes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Making up data for 100 genes across 1000 subjects and \"spike\" with 5 genes that are differentially expressed" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": true }, "outputs": [], "source": [ "x = np.array([1,2,3]).reshape((-1,1))" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[1, 2, 3],\n", " [2, 4, 6],\n", " [3, 6, 9]])" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x @ x.T" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [], "source": [ "ngenes = 100\n", "ncases = 500\n", "nctrls = 500\n", "nsamples = ncases + nctrls\n", "x = np.random.normal(0, 1, (ngenes, nsamples))\n", "\n", "target_genes = [5,15,25,35,45]\n", "x[target_genes, ncases:] += np.random.normal(1, 1, (len(target_genes), ncases))" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import scipy.stats as stats" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Unadjusted p-values" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'%.3f'" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%precision 3" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(5, 0.000),\n", " (13, 0.004),\n", " (15, 0.000),\n", " (25, 0.000),\n", " (35, 0.000),\n", " (45, 0.000),\n", " (50, 0.001),\n", " (55, 0.046),\n", " (56, 0.040),\n", " (66, 0.003),\n", " (89, 0.007),\n", " (94, 0.021)]" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t, p0 = stats.ttest_ind(x[:, :ncases], x[:, ncases:], axis=1)\n", "idx = p0 < 0.05\n", "list(zip(np.nonzero(idx)[0], p0[idx]))" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVMAAAD+CAYAAACHvubwAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzsvXFUZXl15/ulEgxOcMpBUSYhoYcnHPHhwkcMSh4uOsSH\n4sLBDA4tCVm0Q4c0DmboR4c0PioPhx5sTGNuQgUrWBgcarCChcFQCSUWPnqoGQgW8SbeBC4Bh3Ju\np8qyMODDgDzk8/7Y5/woHYum091TXfbZa51VxeVyzrnn7nN+3733d393EqDQQgsttNCem5242ycQ\nWmihhfbDYOHDNLTQQgvtebDwYRpaaKGF9jxY+DANLbTQQnseLHyYhhZaaKE9DxY+TEMLLbTQngf7\n0bt9Ap7nvUJSo6RaSTmyc/prSWclnY3H4wcv4LFfI+nb8Xj828/T/mYk3RePx+97PvYX2r1rd9Ov\nQ7s7dleRqed5nqSrkj4i6SuSPiTplKRdSX8g6T96npf0Ah27QlJcUvoLsf/QXrp2N/06tLtndw2Z\nep6XIulzkl4t6c3xePyvbvv1xzzP+31JH5C0IOn3XoBTeIukV74A+w3tJWwvAr8O7S7Z3USmH5Dk\nSXrk+xwusEcl/b2kh/+nnlVooT03C/36JWp3M2f6Pknbkj79g34Zj8d3PM97i6RrwWue571N0v8t\n6a3+SwuSOuPx+H++7T3rki5JuiKpXdL/Ium/S4rE4/Hf998zJKne/5P/5nneU/F4/H4/57krC9Fa\nJP2DpF+Ix+Nf8TzvjZK6JN0v6cck/aWkJ+Lx+PidPqDneT8mqUfSv5T0k5JuSvoTSR3xePzvn+kC\nhXZP2rPyaz/c/zVJ/0ZSnqRkSeuS/lDSR+PxOP77/pmk35FUJum1khKSRiV9OB6P7wb79zzvDZL+\ng6Sfl/QySV+W9O/j8fjnb3tP6JcvgN0VZOo70P8maTEej/9/d3pfPB7/23g8vuf/zb+UNCPpp2UP\ntS7//9P+7263ClkIdUHSI5K+Lem053nv8n//B5L+2P//IzLnC6xE0gOSfkPSkKS/8TzvZyXNy1ID\nvbIc2Msk/bHnef/2iI96WtKvSjovQywXZEWJPzrib0K7R+0f49cyP/64pL+R9H/KfGtX0hOSmm77\ns1FJlZI+Ienfyu6Fx3RbqsBf8OckvUFSt6T/S/Zw/jPP8x64bV+hX74AdreQ6av9Y18/zps9z/tR\nSb8v6WlZHupb/ut/ICkmqd/zvMnbHPinJL0pCLM8z/tjSX8n6Zcl/Vk8Hp/zPO+vJP2ipPF4PL5+\n2+F+XFJdPB7/89uO3yfpQNLPxuPxhP/axyX9F0m/7XneH8Xj8Vs/4NR/WdIn4/H4h27b17akd3qe\nlxqPx7eP8/lDu2fs2fp1sqQPSjofj8cfvO31szK0+E6Zb79G0tsl/UY8Hn/Sf9tZ/+Gdfdsu+yR9\nQ1JhwFDxffeLkn7X87w/9h/ioV++AHa3cqbf9f/9kWO+v1BSpqTTwYNUkuLx+KZslf1JSW++7f3x\n2/NV8Xj8hqSvS8o4xrF2JH0p+MHzvNfKEOlw8CD197kr6bclvVzS/3GHfSUkPeB53oOe573S/7tT\n8Xj8Z0OH/aG0Z+XX/uL/WhkqvN1eLelbklL9n7dkqYMPeJ5X7Xnej/t//2/i8fjbJcnzvFdJKpX0\nZ5Je7nneqz3Pe7WsyPrH/nF+1t9f6JcvgN2th+nfS9qT9Jpjvv9f+P/Gf8Dvlvx/s2577Rs/4H3f\n0fGcfOP7OID3Pctj325Nsmv8h5K+4Xnef/Y87xHP804e4zxCu/fs2fq1/PeXe573Hz3P+3PP874p\naU1G2TshSfF4/DuyvOprZSH5hud5n/c8r9FnD0hWG5AM6X7j+7aP+b/7af/f0C9fALsrD1M/qT4n\n6Wf8EP4Hmud5j3ue92lJR3Hygs+wd9trz4UQ/d3v+/nZHttZPB6fljlwrSwf9XqZY3/F87yQ3/pD\nZs/Wrz3P++eSxmUPyH8h6b/Kqv05sqLp7fsekaWvGiT9qawI+weS5v2CUgAUfl8WKf2gbcbfV+iX\nL4DdzWr+Z2Vhyfsknfv+X3qe93JJD8mcpN9/+fUyDt/3vNX/97/rhbH12479/XbHY/sO/iZJiXg8\nfl7Sec/zTsiKDL8t+9x9z/vZhna37dn4da6kd0vqisfjv3Xbe35U0qskfdX/OVXmS38dj8c/KemT\nnue9TNJHJf07SeUyBook7cfj8cvfd8w3yB7W/xD65Qtnd5NnOiCjhzzpeV7+7b/wPO9HZBXO18oo\nHPOypP4HPM/7p7e975/KqpHXJS0+y+MHCPTIa+DnW69KqvM8L/O2Y79M5oDfkfSFH/Cnr5KhlPbb\n9nWgw3zs9yPg0H447Nn4dZr/q7/5vn38qqR/okOwky9pVoZKJUl+IenL/o/fjcfj12V++qDneT9x\n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\nAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "vmin = x.min()\n", "vmax = x.max()\n", "\n", "plt.subplot(121)\n", "plt.imshow(x[:, :ncases], extent=[0, 1, 0, 2], interpolation='nearest', \n", " vmin=vmin, vmax=vmax, cmap='jet')\n", "plt.xticks([])\n", "plt.yticks([])\n", "plt.title('Controls')\n", "plt.subplot(122)\n", "plt.imshow(x[:, ncases:], extent=[0, 1, 0, 2], interpolation='nearest', \n", " vmin=vmin, vmax=vmax, cmap='jet')\n", "plt.xticks([])\n", "plt.yticks([])\n", "plt.title('Cases')\n", "plt.colorbar()\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Bonferroni correction" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(5, 0.000), (15, 0.000), (25, 0.000), (35, 0.000), (45, 0.000)]" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "p1 = np.clip(len(p0) * p0, 0, 1)\n", "idx = p1 < 0.05\n", "list(zip(np.nonzero(idx)[0], p1[idx]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Westfall and Young (Permutation-resampling based family-wise error rate)\n", "\n", "Is similar to Bonferroni when features are uncorrelated, but is more powerful when features are correlated." ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[(45, 0.000), (25, 0.000), (5, 0.000), (35, 0.000), (15, 0.000)]" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nperms = 10000\n", "k = ngenes\n", "\n", "t, p0 = stats.ttest_ind(x[:, :ncases], x[:, ncases:], axis=1)\n", "ranks = np.argsort(np.abs(t))[::-1]\n", "counts = np.zeros((nperms, k))\n", "for i in range(nperms):\n", " u = np.zeros(k)\n", " sidx = np.random.permutation(nsamples)\n", " y = x[:, sidx]\n", " tb, pb = stats.ttest_ind(y[:, :ncases], y[:, ncases:], axis=1)\n", " u[k-1] = np.abs(tb[ranks[k-1]])\n", " for j in range(k-2, -1, -1):\n", " u[j] = max(u[j+1], np.abs(tb[ranks[j]]))\n", " counts[i] = (u >= np.abs(t[ranks]))\n", "\n", "p2 = np.sum(counts, axis=0)/nperms\n", "for i in range(1, k):\n", " p2[i] = max(p2[i],p2[i-1])\n", "idx = p2 < 0.05\n", "list(zip(ranks, p2[idx]))" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nRK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(sorted(p0), label='No correction')\n", "plt.plot(sorted(p1), label='Bonferroni')\n", "plt.plot(sorted(p2), label='Westfall-Young')\n", "plt.ylim([0,1])\n", "plt.legend(loc='best')\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### What if genes are correlated?\n", "\n", "The Bonferrroni assumes that tests are independent. However, often test results are strongly correlated (e.g. genes in the same pathway behave similarly) and the Bonferroni will be too conservative. However the permutation-resampling method still works in the presence of correlations." ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ngenes = 100\n", "ncases = 500\n", "nctrls = 500\n", "nsamples = ncases + nctrls\n", "\n", "# use random number seed knwon to give a differnece\n", "np.random.seed(52)\n", "x = np.repeat(np.random.normal(0, 1, (1, nsamples)), ngenes, axis=0)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[ 0.519, -1.269, 0.24 , -0.804, 0.017],\n", " [ 0.519, -1.269, 0.24 , -0.804, 0.017],\n", " [ 0.519, -1.269, 0.24 , -0.804, 0.017],\n", " [ 0.519, -1.269, 0.24 , -0.804, 0.017],\n", " [ 0.519, -1.269, 0.24 , -0.804, 0.017]])" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# In this extreme case, we measure the same gene 100 times\n", "x[:5, :5]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Unadjusted p-values" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minimum p-value 0.0119317780363 # significant 100\n" ] } ], "source": [ "t, p0 = stats.ttest_ind(x[:, :ncases], x[:, ncases:], axis=1)\n", "idx = p0 < 0.05\n", "print('Minimum p-value', p0.min(), '# significant', idx.sum())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Bonferroni\n", "\n", "Bonferroni tells us none of the adjusted p-values are significant, which we know is the wrong answer." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minimum p-value 1.0 # significant 0\n" ] } ], "source": [ "p1 = np.clip(len(p0) * p0, 0, 1)\n", "idx = p1 < 0.05\n", "print('Minimum p-value', p1.min(), '# significant', idx.sum())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Westfall and Young (Permutation-resampling based family-wise error rate)\n", "\n", "This tells us that every gene is significant, which is the correct answer." ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Minimum p-value 0.0118 # significant 100\n" ] } ], "source": [ "nperms = 10000\n", "\n", "counts = np.zeros((nperms, k))\n", "t, p0 = stats.ttest_ind(x[:, :ncases], x[:, ncases:], axis=1)\n", "ranks = np.argsort(np.abs(t))[::-1]\n", "for i in range(nperms):\n", " u = np.zeros(k)\n", " sidx = np.random.permutation(nsamples)\n", " y = x[:, sidx]\n", " tb, pb = stats.ttest_ind(y[:, :ncases], y[:, ncases:], axis=1)\n", " u[k-1] = np.abs(tb[ranks[k-1]])\n", " for j in range(k-2, -1, -1):\n", " u[j] = max(u[j+1], np.abs(tb[ranks[j]]))\n", " counts[i] = (u >= np.abs(t[ranks]))\n", "\n", "p2 = np.sum(counts, axis=0)/nperms\n", "for i in range(1, k):\n", " p2[i] = max(p2[i],p2[i-1])\n", "idx = p2 < 0.05\n", " \n", "print ('Minimum p-value', p2.min(), '# significant', idx.sum())" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nSUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.plot(sorted(p1), label='Bonferroni')\n", "plt.plot(sorted(p2), label='Westfall-Young')\n", "plt.ylim([-0.05,1.05])\n", "plt.legend(loc='best')\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## \"Leave one out\" resampling methods" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Jackknife estimate of parameters\n", "\n", "This shows the leave-one-out calculation idiom for Python. Unlike R, a -k index to an array does not delete the kth entry, but returns the kth entry from the end, so we need another way to efficiently drop one scalar or vector. This can be done using Boolean indexing as shown in the examples below, and is efficient since the operations are on *views* of the original array rather than *copies*. Note also that " ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def jackknife(x, func):\n", " \"\"\"Jackknife estimate of the estimator func\"\"\"\n", " n = len(x)\n", " idx = np.arange(n)\n", " return np.sum(func(x[idx!=i]) for i in range(n))/float(n)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "2.029" ] }, "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Jackknife estimate of standard deviation\n", "x = np.random.normal(0, 2, 100)\n", "jackknife(x, np.std)" ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def jackknife_var(x, func):\n", " \"\"\"Jackknife estiamte of the variance of the estimator func.\"\"\"\n", " n = len(x)\n", " idx = np.arange(n)\n", " j_est = jackknife(x, func)\n", " return (n-1)/(n + 0.0) * np.sum((func(x[idx!=i]) - j_est)**2.0 for i in range(n))" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.022" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# estimate of the variance of an estimator \n", "jackknife_var(x, np.std)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Leave one out cross validation (LOOCV)\n", "\n", "LOOCV also uses the same idiom, and a simple example of LOOCV for model selection is illustrated." ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": true }, "outputs": [], "source": [ "a, b, c = 2, 3, 4\n", "x = np.linspace(0, 5, 6)\n", "y = a*x**2 + b*x + c + np.random.normal(0, 3, len(x))" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ngg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize=(15,3))\n", "for deg in range(1, 6):\n", " plt.subplot(1, 6, deg)\n", " beta = np.polyfit(x, y, deg)\n", " plt.plot(x, y, 'r:o')\n", " plt.plot(x, np.polyval(beta, x), 'b-')\n", " plt.title('Degree = %d' % deg)\n", " plt.margins(0.04)" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def loocv(x, y, fit, pred, deg):\n", " \"\"\"LOOCV RSS for fitting a polynomial model.\"\"\"\n", " n = len(x)\n", " idx = np.arange(n)\n", " rss = np.sum([(y - pred(fit(x[idx!=i], y[idx!=i], deg), x))**2.0 for i in range(n)])\n", " return rss" ] }, { "cell_type": "code", "execution_count": 45, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Degree = 1, RSS=148.25\n", "Degree = 2, RSS=3.83\n", "Degree = 3, RSS=2.03\n", "Degree = 4, RSS=1.07\n", "Degree = 5, RSS=0.00\n" ] } ], "source": [ "# RSS does not detect overfitting and selects the most complex model\n", "for deg in range(1, 6):\n", " print('Degree = %d, RSS=%.2f' % (deg, np.sum((y - np.polyval(np.polyfit(x, y, deg), x))**2.0)))" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Degree = 1, RSS=1097.45\n", "Degree = 2, RSS=43.30\n", "Degree = 3, RSS=63.70\n", "Degree = 4, RSS=563.94\n", "Degree = 5, RSS=564.83\n" ] } ], "source": [ "# LOOCV selects a more conservative model\n", "import warnings\n", "\n", "with warnings.catch_warnings():\n", " warnings.simplefilter('ignore')\n", " for deg in range(1, 6):\n", " print('Degree = %d, RSS=%.2f' % (deg, loocv(x, y, np.polyfit, np.polyval, deg)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Simulations to estimate power\n", "----\n", "\n", "What sample size is needed for the t-test to have a power of 0.8 with an effect size of 0.5?\n", "\n", "This is a toy example, since you can calculate it exactly, but the simulation approach works for *everything*, including arbitrarily complex experimental designs, correcting for multiple comparisons and so on (assuming infinite computational resources)." ] }, { "cell_type": "code", "execution_count": 47, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "50 0.6997\n", "51 0.7063\n", "52 0.7123\n", "53 0.7184\n", "54 0.7346\n", "55 0.7351\n", "56 0.7406\n", "57 0.7584\n", "58 0.7612\n", "59 0.7645\n", "60 0.7749\n", "61 0.7877\n", "62 0.7862\n", "63 0.7911\n", "64 0.8007\n" ] } ], "source": [ "# Run nresps simulations\n", "# The power is simply the fraction of reps where \n", "# the p-value is less than 0.05\n", "\n", "nreps = 10000\n", "d = 0.5\n", "\n", "n = 50\n", "power = 0\n", "while power < 0.8:\n", " n1 = n2 = n\n", " x = np.random.normal(0, 1, (n1, nreps))\n", " y = np.random.normal(d, 1, (n2, nreps))\n", " t, p = stats.ttest_ind(x, y)\n", " power = (p < 0.05).sum()/nreps\n", " print(n, power)\n", " n += 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Check with R" ] }, { "cell_type": "code", "execution_count": 48, "metadata": {}, "outputs": [], "source": [ "%load_ext rpy2.ipython" ] }, { "cell_type": "code", "execution_count": 49, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\n", " Two-sample t test power calculation \n", "\n", " n = 63.76576\n", " delta = 0.5\n", " sd = 1\n", " sig.level = 0.05\n", " power = 0.8\n", " alternative = two.sided\n", "\n", "NOTE: n is number in *each* group\n", "\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%%R\n", "library(pwr)\n", "\n", "power.t.test(sig.level=0.05, power=0.8, delta = 0.5)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Estimating CDF and PDF from Monte Carlo samples\n", "\n", "Given a bunch of random numbers from a simulation experiment, one of the first steps is to visualize the CDF and PDF. The ECDF is quite useful for, say, visualizing how similar or different two sets of data are." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Estimating the CDF" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Make up some random data\n", "x = np.r_[np.random.normal(0, 1, 10000), \n", " np.random.normal(4, 1, 10000)]" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# Roll our own ECDF function\n", "\n", "def ecdf(x):\n", " \"\"\"Return empirical CDF of x.\"\"\"\n", " \n", " sx = np.sort(x)\n", " cdf = (1.0 + np.arange(len(sx)))/len(sx)\n", " return sx, cdf" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n3y5/yLJVAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sx, y = ecdf(x)\n", "plt.plot(sx, y)\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Using library routines" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n3y5/yLJVAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from statsmodels.distributions.empirical_distribution import ECDF\n", "\n", "ecdf = ECDF(x)\n", "plt.plot(ecdf.x, ecdf.y)\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Estimating the PDF\n", "\n", "The simplest is to plot a normalized histogram as shown above, but we will also look at how to estimate density functions using kernel density estimation (KDE). KDE works by placing a kernel unit on each data point, and summing the kernels to present a smoother estimate than you would get with a (n-d) histogram." ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def epanechnikov(u):\n", " \"\"\"Epanechnikov kernel.\"\"\"\n", " return np.where(np.abs(u) <= np.sqrt(5), 3/(4*np.sqrt(5)) * (1 - u*u/5.0), 0)\n", "\n", "def silverman(y):\n", " \"\"\"Find bandwidth using heuristic suggested by Silverman\n", " .9 min(standard deviation, interquartile range/1.34)n−1/5\n", " \"\"\"\n", " n = len(y)\n", " iqr = np.subtract(*np.percentile(y, [75, 25]))\n", " h = 0.9*np.min([y.std(ddof=1), iqr/1.34])*n**-0.2\n", " return h\n", "\n", "def kde(x, y, bandwidth=silverman, kernel=epanechnikov):\n", " \"\"\"Returns kernel density estimate.\n", " x are the points for evaluation\n", " y is the data to be fitted\n", " bandwidth is a function that returens the smoothing parameter h\n", " kernel is a function that gives weights to neighboring data\n", " \"\"\"\n", " h = bandwidth(y)\n", " return np.sum(kernel((x-y[:, None])/h)/h, axis=0)/len(y)" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "xs = np.linspace(-5,8,100)\n", "density = kde(xs, x)\n", "plt.plot(xs, density)\n", "xlim = plt.xlim()\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Or just use `seaborn`" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "sns.kdeplot(x, kernel='epa', bw='silverman', shade=True)\n", "plt.xlim(xlim)\n", "pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Other library routines\n", "\n", "There are several kernel density estimation routines available in `scipy`, `statsmodels` and `scikit-leran`. Here we will use the `scikits-learn` and `statsmodels` routine as examples." ] }, { "cell_type": "code", "execution_count": 57, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nECKN/f9JGlNAGwexUwAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import statsmodels.api as sm\n", "\n", "dens = sm.nonparametric.KDEUnivariate(x)\n", "dens.fit(kernel='gau')\n", "plt.plot(xs, dens.evaluate(xs))\n", "pass" ] }, { "cell_type": "code", "execution_count": 58, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from sklearn.neighbors import KernelDensity \n", "\n", "# expects n x p matrix with p features\n", "x.shape = (len(x), 1)\n", "xs.shape = (len(xs), 1)\n", "\n", "kde = KernelDensity(kernel='epanechnikov').fit(x)\n", "dens = np.exp(kde.score_samples(xs))\n", "plt.plot(xs, dens)\n", "pass" ] } ], "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.6.5" }, "latex_envs": { "bibliofile": "biblio.bib", "cite_by": "apalike", "current_citInitial": 1, "eqLabelWithNumbers": true, "eqNumInitial": 0 } }, "nbformat": 4, "nbformat_minor": 1 }