diff --git a/run-replicates.ipynb b/run-replicates.ipynb new file mode 100644 index 0000000..7a9d9b3 --- /dev/null +++ b/run-replicates.ipynb @@ -0,0 +1,287 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Can all run_replicates_x() be a single function?" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import matplotlib.pyplot as plt\n", + "from plotnine import *\n", + "import pandas as pd\n", + "from utils import (run_replicates, \n", + " ecdf_norm_plotter, \n", + " run_replicates_annulus)\n", + "\n", + "import pints\n", + "import pints.toy\n", + "import pints.plot\n", + "from pints.functionaltests.differential_evolution \\\n", + " import (test_differential_evolution_on_two_dim_gaussian,\n", + " test_differential_evolution_on_banana,\n", + " test_differential_evolution_on_correlated_gaussian,\n", + " test_differential_evolution_on_annulus)" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "import multiprocessing\n", + "multiprocessing.set_start_method('spawn')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "iterations = np.geomspace(1100, 2000, 3) # Same as 10*np.linspace(np.log10(lower), np.log10(upper), 2)\n", + "replicates = 10" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "28.71966647699992\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.9/site-packages/plotnine/facets/facet.py:390: PlotnineWarning: If you need more space for the x-axis tick text use ... + theme(subplots_adjust={'wspace': 0.25}). Choose an appropriate value for 'wspace'.\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.seed(1)\n", + "t = pints.Timer()\n", + "test = run_replicates(iterations, replicates, test_differential_evolution_on_two_dim_gaussian)\n", + "print(t.time())\n", + "\n", + "df = pd.melt(test, id_vars=['iterations', 'replicate'])\n", + "(ggplot(df,\n", + " aes(x='iterations', y='value')) +\n", + " geom_jitter(width=100) +\n", + " geom_smooth(stat='smooth', se=False) +\n", + " facet_wrap('variable', scales='free'))" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "28.770648633000746\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.9/site-packages/plotnine/facets/facet.py:390: PlotnineWarning: If you need more space for the x-axis tick text use ... + theme(subplots_adjust={'wspace': 0.25}). Choose an appropriate value for 'wspace'.\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def run_replicates2(iterations, n_replicates, test, parallel=False):\n", + " \"\"\"\n", + " Runs ``test(i)`` for all entries ``i`` in ``iterations``, repeating each\n", + " test ``n_replicates`` times.\n", + "\n", + " The argument ``test`` is expected to return a dictionary of (scalar valued)\n", + " results.\n", + "\n", + " The returned value is a pandas DataFrame with\n", + " ``len(iterations) * n_replicates`` rows. Each column contains an index, the\n", + " number of iterations performed as ``iterations``, the index of the repeat\n", + " as ``replicate``, followed by the entries of the corresponding test\n", + " result.\n", + "\n", + " Parallel evaluation can be enabled by setting ``parallel`` to ``True`` or\n", + " to the number of worker processes to use. However, this can cause issues in\n", + " Jupyter notebooks.\n", + " \"\"\"\n", + " df = pd.DataFrame(index=np.arange(len(iterations) * n_replicates))\n", + " df['iterations'] = np.repeat(iterations, n_replicates)\n", + " df['replicate'] = np.tile(np.arange(n_replicates), len(iterations))\n", + "\n", + " results = pints.evaluate(test, list(df['iterations']), parallel=parallel)\n", + " assert len(results) > 0, 'Empty result set generated'\n", + " for key in results[0].keys():\n", + " df[key] = np.array([r[key] for r in results], copy=False)\n", + "\n", + " return df\n", + "\n", + "\n", + "np.random.seed(1)\n", + "t = pints.Timer()\n", + "test = run_replicates2(iterations, replicates, test_differential_evolution_on_two_dim_gaussian)\n", + "print(t.time())\n", + "\n", + "# Rename 'mean-ess' to 'ess' so that it is plotted first.\n", + "# If plotted second, it gets different \"jitter\" values making the plots show differences\n", + "# even though the data is the same.\n", + "test['ess'] = test['mean-ess']\n", + "del(test['mean-ess'])\n", + "\n", + "df = pd.melt(test, id_vars=['iterations', 'replicate'])\n", + "(ggplot(df,\n", + " aes(x='iterations', y='value')) +\n", + " geom_jitter(width=100) +\n", + " geom_smooth(stat='smooth', se=False) +\n", + " facet_wrap('variable', scales='free'))" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "16\n", + "5.365114201998949\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.9/site-packages/plotnine/facets/facet.py:390: PlotnineWarning: If you need more space for the x-axis tick text use ... + theme(subplots_adjust={'wspace': 0.25}). Choose an appropriate value for 'wspace'.\n" + ] + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.random.seed(1)\n", + "t = pints.Timer()\n", + "test = run_replicates2(iterations, replicates, test_differential_evolution_on_two_dim_gaussian, parallel=True)\n", + "print(t.time())\n", + "\n", + "test['ess'] = test['mean-ess']\n", + "del(test['mean-ess'])\n", + "\n", + "df = pd.melt(test, id_vars=['iterations', 'replicate'])\n", + "(ggplot(df,\n", + " aes(x='iterations', y='value')) +\n", + " geom_jitter(width=100) +\n", + " geom_smooth(stat='smooth', se=False) +\n", + " facet_wrap('variable', scales='free'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Please note the speed-up above is somewhat exaggerated as I convinced Gary to buy me a ridiculous computer." + ] + } + ], + "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.9.6" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/utils.py b/utils.py index dbe7211..2c7a7c5 100644 --- a/utils.py +++ b/utils.py @@ -3,9 +3,8 @@ """ import numpy as np import pandas as pd -import matplotlib.pyplot as plt -from scipy.stats import norm -from statsmodels.distributions.empirical_distribution import ECDF + +import pints def run_replicates(iterations, n_replicates, test): @@ -24,7 +23,41 @@ def run_replicates(iterations, n_replicates, test): return df +def run_replicates2(iterations, n_replicates, test, parallel=False): + """ + Runs ``test(i)`` for all entries ``i`` in ``iterations``, repeating each + test ``n_replicates`` times. + + The argument ``test`` is expected to return a dictionary of (scalar valued) + results. + + The returned value is a pandas DataFrame with + ``len(iterations) * n_replicates`` rows. Each column contains an index, the + number of iterations performed as ``iterations``, the index of the repeat + as ``replicate``, followed by the entries of the corresponding test + result. + + Parallel evaluation can be enabled by setting ``parallel`` to ``True`` or + to the number of worker processes to use. However, this can cause issues in + Jupyter notebooks. + """ + df = pd.DataFrame(index=np.arange(len(iterations) * n_replicates)) + df['iterations'] = np.repeat(iterations, n_replicates) + df['replicate'] = np.tile(np.arange(n_replicates), len(iterations)) + + results = pints.evaluate(test, list(df['iterations']), parallel=parallel) + assert len(results) > 0, 'Empty result set generated' + for key in results[0].keys(): + df[key] = np.array([r[key] for r in results], copy=False) + + return df + + def ecdf_norm_plotter(draws, normal_sd, x=np.linspace(-5, 5, 100)): + import matplotlib.pyplot as plt + from scipy.stats import norm + from statsmodels.distributions.empirical_distribution import ECDF + ecdf_fun = ECDF(draws) ecdf = [ecdf_fun(y) for y in x] cdf = [norm.cdf(y, 0, normal_sd) for y in x]