Skip to content

Instantly share code, notes, and snippets.

@mikecharles
Last active August 29, 2015 14:26
Show Gist options
  • Save mikecharles/0ea03b5634da95a3d296 to your computer and use it in GitHub Desktop.
Save mikecharles/0ea03b5634da95a3d296 to your computer and use it in GitHub Desktop.
CDF correction
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"CDF Correction\n",
"==========\n",
"\n",
"The purpose of this notebook is to document a method for correcting the CDF of one sample so that it matches the CDF of another sample. In the examples below, Sample B is our trusted sample, so we want Sample A to have the same CDF as Sample B."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Setup\n",
"-----"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Import packages"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"%matplotlib inline\n",
"\n",
"import numpy.random\n",
"import numpy as np\n",
"from scipy import stats\n",
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Set some options"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"quantiles = [0, 1, 2, 3, 4, 5, 7, 10, 15, 20, 30, 40, 50, 60, 75, 100]\n",
"sample_size = 1000"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Generate the samples"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"A = numpy.random.gamma(0.7, scale=50, size=sample_size)\n",
"B = numpy.random.gamma(0.4, scale=100, size=sample_size)\n",
"C = (70 - 20) * numpy.random.random_sample(size=21) + 20"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Establish relationship between Sample A and Sample B\n",
"---------------------------------------------"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculate PDFs and CDFs from the samples"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"A_pdf, edges = np.histogram(A, bins=quantiles)\n",
"A_cdf = np.cumsum(A_pdf) / sample_size\n",
"B_pdf, edges = np.histogram(B, bins=quantiles)\n",
"B_cdf = np.cumsum(B_pdf) / sample_size"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Fit a gamma distribution to each sample"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"A_dist = stats.gamma(*stats.gamma.fit(A, floc=0))\n",
"B_dist = stats.gamma(*stats.gamma.fit(B, floc=0))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Calculate corrected quantiles"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"corrected_quantiles = B_dist.ppf(A_dist.cdf(quantiles[1:]))\n",
"quantile_correction = corrected_quantiles - quantiles[1:]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create figure showing the correction from A to B"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x109d04cf8>"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nebPr+sMPPywjR44UESsOvXv3dl3bs2eP+Pv7y/Hjx13nxo4dK7feeqvrePDgwdKhQwfp3LmzpKen\ne2XzhAkT5LrrrnMdZ2dnS8OGDV3iGhMTI++8806B+Xfv3i1+fn6u+7jyyitlzJgxBab3hThUmjGH\nl156iTFjxriOExISaHzuudT76y8OASbN4Ymvdm0dgFbKntKUh2JSp04dDh8+nCtOwrJly0hKSqJO\nnTrOFyxWrFhBnz59iIqKIiwsjLfeeosjR47kKquwcKE1atTIFUgr7zWAyMjIXOec4UW9qdtJamoq\n//rXv2jWrBmhoaH07t2b5ORk131A/jClGRkZHD58uMDr+/fvdx03apTjoWf//v3Url3belVwS+8e\nkOj2229nw4YNjB49mkAv484fOHCAJv/f3plHWVVdefj7gTKFgoIwFFigtghLEI2aMIkNCnGIBDUR\njDRliKHbQrFFEztiusHEoBEbkjiG4IQguBwQpTEOLWJUUFQEZFKMoqAdRAuVEmWwdv9xzqt69erV\nANbI299aterde889d5993zv73rPP2btr1+JtSXTp0qVUvRUFMJw9ezZHH3003bt3B2DEiBHMnTuX\nvXv3Vun61UGDMQ5XXHEF55xzTvF2v379eP3113l28WLaxi8mAI0b14F0jlN39O/fn6ZNm7JgwYIK\ny40aNYqzzz6bLVu28Omnn5Kfn19putDqYl+uPW3aNN566y2WL1/OZ599xnPPPZc8igCUTVN68MEH\n065du3KPJ6cxTe6UO3fuTEFBQakc2e+//36xASksLGTChAmMHTuWyZMns3379iq1t3Pnzrz33nvF\n22bG5s2b06ZTTce9997Lxo0b6dSpE506dWLChAl8/PHHPP54hdGFqpUGYxwaNWrE/Pnz2b17N+ef\nfz4vvfQSpx53HNlnn03jL78MhVq18vhJTsaRnZ3N5MmTufjii3n44YfZsWMHRUVFrFy5stSTfmFh\nIW3atKFJkyYsX76cuXPn7nP4bduPN5t9vXZhYSHNmzendevWFBQU8Jvf/KaMDHPmzGH9+vXs3LmT\nSZMmMWLEiFL1VSWNKYQ3jAEDBjBx4kR27drF6tWrueuuuxg9ejQAl112GX369OEvf/kLZ555Jvn5\n+VVq78iRI1m0aBGLFy9mz549TJs2jWbNmjFgwIBS7UjHsmXLeOedd3jllVdYtWoVq1atYs2aNYwa\n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\nkAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x109cdbc50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure()\n",
"# Figure settings\n",
"linewidth = 2\n",
"markeredgewidth = 2\n",
"# Plot sample CDFs\n",
"plt.plot(quantiles[1:], A_cdf, 'x', c='r', markersize=8,\n",
" markeredgewidth=markeredgewidth, label='Sample A')\n",
"plt.plot(quantiles[1:], B_cdf, '+', c='g', markersize=8,\n",
" markeredgewidth=markeredgewidth, label='Sample B')\n",
"# Plot fitted CDFs\n",
"plt.plot(quantiles[1:], A_dist.cdf(quantiles[1:]), '-', color='r',\n",
" linewidth=linewidth, label='Gamma approx. of A')\n",
"plt.plot(quantiles[1:], B_dist.cdf(quantiles[1:]), '-', color='g',\n",
" linewidth=linewidth, label='Gamma approx. of B')\n",
"# Plot arrows indicating CDF correction\n",
"for q in range(len(quantiles[1:])):\n",
" plt.arrow(quantiles[q+1], A_dist.cdf(quantiles[q+1]),\n",
" quantile_correction[q], 0, length_includes_head=True,\n",
" head_width=0.03, head_length=2, edgecolor='k', facecolor='k',\n",
" overhang=1)\n",
"# Add legend, title, and labels\n",
"plt.legend(loc='lower right')\n",
"plt.title('CDF Matching - Making A Look Like B')\n",
"plt.xlabel('Quantile Values (units of sample)')\n",
"plt.ylabel('Probability Density')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Correct Sample C using the relationship between Sample A and Sample B\n",
"------------------------------------------------------------"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Apply the correction from above"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"C_corrected = B_dist.ppf(A_dist.cdf(C))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Create a figure showing the correction done to Sample C"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x109f171d0>"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x109cdb8d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.figure()\n",
"# Figure settings\n",
"linewidth = 2\n",
"markeredgewidth = 2\n",
"# Plot C and C_corrected\n",
"plt.plot(sorted(C), range(len(C)), 'r', linewidth=linewidth,\n",
" label='Sample C')\n",
"plt.plot(sorted(C_corrected), range(len(C)), 'g', linewidth=linewidth,\n",
" label='Sample C (corrected)')\n",
"# Add legend, title, and labels\n",
"plt.legend(loc='lower right')\n",
"plt.title('Sample C Before and After Correction')\n",
"plt.xlabel('Sample value')\n",
"plt.ylabel('Sample index')"
]
}
],
"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.4.3"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment