From 0222bbfa1e85ab0153764c06b16c080a9628d625 Mon Sep 17 00:00:00 2001 From: phumtutum Date: Fri, 11 Feb 2022 13:42:20 +0000 Subject: [PATCH 1/4] fixed scalability bug + redone ipynb to assure proper functionality --- examples/sampling/rejection-abc.ipynb | 81 ++++++++++++++++++++------- pints/_abc/_abc_rejection.py | 2 +- 2 files changed, 62 insertions(+), 21 deletions(-) diff --git a/examples/sampling/rejection-abc.ipynb b/examples/sampling/rejection-abc.ipynb index 9be5af1c3..c09a1bb11 100644 --- a/examples/sampling/rejection-abc.ipynb +++ b/examples/sampling/rejection-abc.ipynb @@ -42,7 +42,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -94,7 +94,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -105,32 +105,73 @@ "Using Rejection ABC\n", "Running in sequential mode.\n", "Iter. Eval. Acceptance rate Time m:s\n", - "1 14 0.0714285714 0:00.0\n", - "2 24 0.0833333333 0:00.0\n", - "3 41 0.0731707317 0:00.0\n", - "20 521 0.0383877159 0:00.2\n", - "40 1418 0.0282087447 0:00.5\n", - "60 2418 0.0248138958 0:00.8\n", - "80 3185 0.0251177394 0:01.0\n", - "100 4057 0.0246487552 0:01.3\n", - "120 4979 0.0241012251 0:01.6\n", - "140 5725 0.0244541485 0:01.8\n", - "160 6767 0.0236441555 0:02.1\n", - "180 7834 0.0229767679 0:02.4\n", - "200 8539 0.0234219464 0:02.6\n", - "Halting: target number of samples (200) reached.\n", + "1 20 0.05 0:00.0\n", + "2 48 0.0416666667 0:00.0\n", + "3 112 0.0267857143 0:00.1\n", + "20 1532 0.0130548303 0:00.6\n", + "40 2793 0.0143215181 0:01.4\n", + "60 5000 0.012 0:02.1\n", + "80 6676 0.0119832235 0:02.7\n", + "100 8483 0.0117882824 0:03.4\n", + "120 10580 0.011342155 0:04.1\n", + "140 12064 0.0116047745 0:05.7\n", + "160 13780 0.0116110305 0:07.2\n", + "180 16423 0.0109602387 0:08.9\n", + "200 18401 0.0108689745 0:09.5\n", + "220 20199 0.0108916283 0:10.2\n", + "240 22335 0.0107454668 0:11.6\n", + "260 23739 0.0109524411 0:12.7\n", + "280 25843 0.0108346554 0:14.4\n", + "300 27459 0.0109253797 0:15.2\n", + "320 30001 0.0106663111 0:16.1\n", + "340 31943 0.0106439596 0:16.8\n", + "360 33393 0.0107807025 0:17.3\n", + "380 34996 0.0108583838 0:17.8\n", + "400 36185 0.0110543043 0:18.2\n", + "420 37793 0.0111131691 0:18.7\n", + "440 40180 0.0109507218 0:19.5\n", + "460 41978 0.0109581209 0:20.1\n", + "480 44722 0.0107329726 0:21.0\n", + "500 46717 0.010702742 0:21.7\n", + "520 48936 0.0106261239 0:22.4\n", + "540 50440 0.0107057891 0:23.0\n", + "560 52399 0.0106872269 0:24.0\n", + "580 53966 0.0107475077 0:24.8\n", + "600 55526 0.0108057487 0:26.7\n", + "620 58085 0.0106740122 0:28.9\n", + "640 60188 0.0106333488 0:30.8\n", + "660 62136 0.0106218617 0:31.8\n", + "680 63865 0.0106474595 0:32.5\n", + "700 65445 0.0106960043 0:33.3\n", + "720 67627 0.0106466352 0:34.2\n", + "740 69277 0.0106817558 0:34.8\n", + "760 71200 0.0106741573 0:35.5\n", + "780 73646 0.0105912066 0:36.3\n", + "800 75364 0.0106151478 0:36.9\n", + "820 78143 0.0104935823 0:38.0\n", + "840 80013 0.010498294 0:38.7\n", + "860 82156 0.0104678904 0:39.5\n", + "880 84219 0.0104489486 0:40.3\n", + "900 85084 0.010577782 0:40.5\n", + "920 87389 0.0105276408 0:41.4\n", + "940 90449 0.0103925969 0:42.6\n", + "960 93391 0.0102793631 0:43.7\n", + "980 94664 0.0103524043 0:44.2\n", + "1000 96511 0.0103615132 0:44.9\n", + "Halting: target number of samples (1000) reached.\n", "Done\n" ] } ], "source": [ + "np.random.seed(1)\n", "abc = pints.ABCController(error_measure, log_prior)\n", "\n", "# set threshold\n", "abc.sampler().set_threshold(1)\n", "\n", "# set target number of samples\n", - "abc.set_n_samples(200)\n", + "abc.set_n_samples(1000)\n", "\n", "# log to screen\n", "abc.set_log_to_screen(True)\n", @@ -149,12 +190,12 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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S3jTpyduIlmyb98+3nnnHZ599llmzZp1pP3QoUPcd9999OjRg169evHLX/6Sp556ir/+9a8MGjSIQYMGAYkLj1WbM2cO48aNA+C1117jkksuoU+fPlxxxRXs2LGjzgyHDx+msLCQTz/99Ehbly5d2LFjR0bLGTdu3FGXSEjO9Pjjj9OvXz969erFww8/HHr71EZny0h4wTU95ARV/Q3lZKNGwcSJsH8/DB167Phx4xK33bth5Mijx2XwTedXX32VIUOG0LVrV9q2bcvKlSvp27cvM2bMYPPmzaxevZrmzZuzZ88e2rRpw5QpU1iyZAl5eXkplztgwACWLVuGmfGb3/yGn//85zzxxBO1TtusWTNGjBjB3LlzueWWW3jvvfc455xzaNeuXajl1LRgwQI2bdrE8uXLcXeGDx/O22+/zbe//e2M5q+LiruE99priftrrok2h5wwysvLueuuuwAYPXo05eXl9O3bl4ULF3LbbbfRvHmilLVp0ybUcisrKykpKWH79u18+eWXdO7cOeX0JSUlPPLII9xyyy3MmjWLkpKSei0n2YIFC1iwYAF9+vQBEv+lbNq0ScVdIlC9R6LifmJKtad96qmpx+flhb4m0Z49e1i8eDEffvghZsahQ4cwMx5//PGMl5F8Kd/kywLfeeed3HPPPQwfPpw333yTSZMmpVxO//79qaioYNeuXbzyyitHfqQjk+U0b96cw4cPA4kunuqfCXR3HnjgAW699daMn08m1OcuIjltzpw5jBkzhi1btrB582a2bt1K586d+cMf/sCVV17J9OnTj1yffc+ePQC0bt2azz777Mgy2rVrx4YNGzh8+DBz58490r537146dEj8/PPMmTPTZjEzrrvuOu655x66detG27ZtM15OYWEhK1euBGDevHl89dVXAFx11VU899xzR36+b9u2bezcuTPzDVQHFXcRyWnl5eVcd911R7Vdf/31lJeX88Mf/pBOnTrRq1cvevfuzYsvvghAaWkpQ4YMOXJA9bHHHmPYsGFcdtlltG/f/shyJk2axA033EDfvn3T9s9XKykp4YUXXjjSJZPpcn70ox/x1ltv0bt3b5YuXcppp50GJH5C8Pvf/z79+/enZ8+ejBw58qgPpvrSJX8lPF3y94QS10v+Hm90yd8TQI1fAsuqHNgXEJEMqLhLeM8/H3UCEUlDxV3C69gx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", "text/plain": [ "
" ] @@ -167,7 +208,7 @@ ], "source": [ "plt.hist(samples[:,0], color=\"blue\", label=\"Samples\")\n", - "plt.vlines(x=model.suggested_parameters(), linestyles='dashed', ymin=0, ymax=50, label=\"Actual value\", color=\"red\")\n", + "plt.vlines(x=model.suggested_parameters(), linestyles='dashed', ymin=0, ymax=300, label=\"Actual value\", color=\"red\")\n", "plt.legend()\n", "plt.show()" ] diff --git a/pints/_abc/_abc_rejection.py b/pints/_abc/_abc_rejection.py index 48060887f..ed97a0876 100644 --- a/pints/_abc/_abc_rejection.py +++ b/pints/_abc/_abc_rejection.py @@ -71,7 +71,7 @@ def tell(self, fx): return None else: return [self._xs.tolist() for c, x in - enumerate(accepted) if x] + enumerate(accepted) if x.all()] def threshold(self): """ From e9926731d14448656597f473fa17193700831241 Mon Sep 17 00:00:00 2001 From: ben18785 Date: Tue, 15 Mar 2022 17:49:25 +0000 Subject: [PATCH 2/4] small changes to rejection abc notebook --- examples/sampling/rejection-abc.ipynb | 144 ++++++++++++-------------- 1 file changed, 67 insertions(+), 77 deletions(-) diff --git a/examples/sampling/rejection-abc.ipynb b/examples/sampling/rejection-abc.ipynb index c09a1bb11..6cc700f81 100644 --- a/examples/sampling/rejection-abc.ipynb +++ b/examples/sampling/rejection-abc.ipynb @@ -11,20 +11,22 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This example shows you how to perform Rejection ABC on a time series from the [stochastic degradation model](../toy/model-stochastic-degradation.ipynb). This model describes the describes the stochastic process of a single chemical reaction, in which the concentration of a substance degrades over time as particles react. It differs from most other models in PINTS through the fact that a likelihood ( $D | \\theta$ ) cannot be derived and we are only able to produce stochastic simulations using Gillespie's algorithm. ABC samplers are the solution to such a problem since they do not evaluate the likelihood to sample from the posterior distribution ( $\\theta | D$ )." + "PINTS can be used to perform inference for stochastic forward models. Here, we perform inference on the [stochastic degradation model](../toy/model-stochastic-degradation.ipynb) using Approximate Bayesian Computation (ABC). This model has only a single unknown parameter -- the rate at which chemicals degrade. We use the \"rejection ABC\" method to estimate this unknown and provide a measure of uncertainty in it." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "First, we will load the stochastic degradation model. In order to emphasise the variety provided by the stochastic simulations we will plot multiple runs of the model with the same parameters." + "First, we load the stochastic degradation model and perform 10 simulations from it. The variation inbetween runs is due to the inherent stochasticity of this type of model." ] }, { "cell_type": "code", "execution_count": 1, - "metadata": {}, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "import pints\n", @@ -42,7 +44,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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\n", "text/plain": [ "
" ] @@ -89,12 +91,12 @@ "source": [ "## Fit using Rejection ABC\n", "\n", - "The Rejection ABC algorithm can be applied to sample parameter values. An error measure will be used to compare the difference between the stochastic simulation obtained with the true set of parameters and the stochastic simulation obtained with a candidate value. Our error measure of choice is the root mean squared error. Root mean squared error has been chosen in order to amplify smaller differences between two stochastic simulations in order to increase the quality of our samples." + "The rejection ABC method can be used to perform parameter inference for stochastic models, where the likelihood is intractable. In ABC methods, typically, a distance metric comparing the observed data and the simulated is used. Here, we use the root mean square error (RMSE), and we accept a parameter value if the $RMSE<1$." ] }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -105,59 +107,59 @@ "Using Rejection ABC\n", "Running in sequential mode.\n", "Iter. Eval. Acceptance rate Time m:s\n", - "1 20 0.05 0:00.0\n", - "2 48 0.0416666667 0:00.0\n", - "3 112 0.0267857143 0:00.1\n", - "20 1532 0.0130548303 0:00.6\n", - "40 2793 0.0143215181 0:01.4\n", - "60 5000 0.012 0:02.1\n", - "80 6676 0.0119832235 0:02.7\n", - "100 8483 0.0117882824 0:03.4\n", - "120 10580 0.011342155 0:04.1\n", - "140 12064 0.0116047745 0:05.7\n", - "160 13780 0.0116110305 0:07.2\n", - "180 16423 0.0109602387 0:08.9\n", - "200 18401 0.0108689745 0:09.5\n", - "220 20199 0.0108916283 0:10.2\n", - "240 22335 0.0107454668 0:11.6\n", - "260 23739 0.0109524411 0:12.7\n", - "280 25843 0.0108346554 0:14.4\n", - "300 27459 0.0109253797 0:15.2\n", - "320 30001 0.0106663111 0:16.1\n", - "340 31943 0.0106439596 0:16.8\n", - "360 33393 0.0107807025 0:17.3\n", - "380 34996 0.0108583838 0:17.8\n", - "400 36185 0.0110543043 0:18.2\n", - "420 37793 0.0111131691 0:18.7\n", - "440 40180 0.0109507218 0:19.5\n", - "460 41978 0.0109581209 0:20.1\n", - "480 44722 0.0107329726 0:21.0\n", - "500 46717 0.010702742 0:21.7\n", - "520 48936 0.0106261239 0:22.4\n", - "540 50440 0.0107057891 0:23.0\n", - "560 52399 0.0106872269 0:24.0\n", - "580 53966 0.0107475077 0:24.8\n", - "600 55526 0.0108057487 0:26.7\n", - "620 58085 0.0106740122 0:28.9\n", - "640 60188 0.0106333488 0:30.8\n", - "660 62136 0.0106218617 0:31.8\n", - "680 63865 0.0106474595 0:32.5\n", - "700 65445 0.0106960043 0:33.3\n", - "720 67627 0.0106466352 0:34.2\n", - "740 69277 0.0106817558 0:34.8\n", - "760 71200 0.0106741573 0:35.5\n", - "780 73646 0.0105912066 0:36.3\n", - "800 75364 0.0106151478 0:36.9\n", - "820 78143 0.0104935823 0:38.0\n", - "840 80013 0.010498294 0:38.7\n", - "860 82156 0.0104678904 0:39.5\n", - "880 84219 0.0104489486 0:40.3\n", - "900 85084 0.010577782 0:40.5\n", - "920 87389 0.0105276408 0:41.4\n", - "940 90449 0.0103925969 0:42.6\n", - "960 93391 0.0102793631 0:43.7\n", - "980 94664 0.0103524043 0:44.2\n", - "1000 96511 0.0103615132 0:44.9\n", + "1 198 0.00505050505 0:00.2\n", + "2 213 0.00938967136 0:00.2\n", + "3 271 0.0110701107 0:00.2\n", + "20 1081 0.0185013876 0:00.8\n", + "40 2389 0.0167434073 0:01.8\n", + "60 3734 0.0160685592 0:02.8\n", + "80 4774 0.0167574361 0:03.5\n", + "100 6078 0.0164527805 0:04.5\n", + "120 7352 0.0163220892 0:05.4\n", + "140 8780 0.0159453303 0:06.5\n", + "160 10169 0.0157340938 0:07.5\n", + "180 11237 0.0160185103 0:08.3\n", + "200 12453 0.0160603871 0:09.2\n", + "220 14073 0.015632772 0:10.4\n", + "240 15457 0.0155269457 0:11.4\n", + "260 16782 0.0154927899 0:12.4\n", + "280 18094 0.015474743 0:13.4\n", + "300 19290 0.0155520995 0:14.3\n", + "320 20742 0.0154276348 0:15.4\n", + "340 21715 0.0156573797 0:16.1\n", + "360 23213 0.0155085512 0:17.2\n", + "380 24642 0.0154208262 0:18.2\n", + "400 25951 0.0154136642 0:19.2\n", + "420 27092 0.0155027314 0:20.0\n", + "440 28605 0.0153819262 0:21.1\n", + "460 29761 0.0154564699 0:22.0\n", + "480 30963 0.0155023738 0:22.9\n", + "500 32579 0.0153473096 0:24.1\n", + "520 33669 0.0154444741 0:24.9\n", + "540 34618 0.0155988214 0:25.6\n", + "560 35662 0.0157029892 0:26.3\n", + "580 37048 0.015655366 0:27.3\n", + "600 38963 0.0153992249 0:28.7\n", + "620 40448 0.0153283228 0:29.8\n", + "640 42540 0.0150446638 0:31.4\n", + "660 43768 0.0150795101 0:32.3\n", + "680 45169 0.0150545728 0:33.3\n", + "700 46368 0.0150966184 0:34.2\n", + "720 47499 0.0151582139 0:35.0\n", + "740 48691 0.0151978805 0:35.9\n", + "760 49616 0.0153176395 0:36.6\n", + "780 50795 0.0153558421 0:37.4\n", + "800 51940 0.0154023874 0:38.3\n", + "820 52849 0.0155159038 0:39.0\n", + "840 53995 0.015556996 0:39.8\n", + "860 54990 0.0156392071 0:40.5\n", + "880 55919 0.0157370482 0:41.2\n", + "900 57460 0.01566307 0:42.4\n", + "920 58346 0.0157680047 0:43.0\n", + "940 60000 0.0156666667 0:44.2\n", + "960 60898 0.0157640645 0:44.9\n", + "980 62112 0.0157779495 0:45.8\n", + "1000 63098 0.0158483629 0:46.5\n", "Halting: target number of samples (1000) reached.\n", "Done\n" ] @@ -185,17 +187,17 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "In order to find the efficiency of the rejection ABC, we plot the approximate posterior compared to the actual parameter value. In the graph, we can see that there is a high concentration of samples around the value with which the data was generated. This suggests that the rejection ABC algorithm performs well and that the root mean squared error was a good choice as an error measure, since high quality samples were produced." + "We now plot the ABC posterior samples versus the actual value that was used to generate the data. This shows that, in this case, the parameter could be identified given the data." ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 4, "metadata": {}, "outputs": [ { "data": { - "image/png": "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S3jTpyduIlmyb98+3nnnHZ599llmzZp1pP3QoUPcd9999OjRg169evHLX/6Sp556ir/+9a8MGjSIQYMGAYkLj1WbM2cO48aNA+C1117jkksuoU+fPlxxxRXs2LGjzgyHDx+msLCQTz/99Ehbly5d2LFjR0bLGTdu3FGXSEjO9Pjjj9OvXz969erFww8/HHr71EZny0h4wTU95ARV/Q3lZKNGwcSJsH8/DB167Phx4xK33bth5Mijx2XwTedXX32VIUOG0LVrV9q2bcvKlSvp27cvM2bMYPPmzaxevZrmzZuzZ88e2rRpw5QpU1iyZAl5eXkplztgwACWLVuGmfGb3/yGn//85zzxxBO1TtusWTNGjBjB3LlzueWWW3jvvfc455xzaNeuXajl1LRgwQI2bdrE8uXLcXeGDx/O22+/zbe//e2M5q+LiruE99priftrrok2h5wwysvLueuuuwAYPXo05eXl9O3bl4ULF3LbbbfRvHmilLVp0ybUcisrKykpKWH79u18+eWXdO7cOeX0JSUlPPLII9xyyy3MmjWLkpKSei0n2YIFC1iwYAF9+vQBEv+lbNq0ScVdIlC9R6LifmJKtad96qmpx+flhb4m0Z49e1i8eDEffvghZsahQ4cwMx5//PGMl5F8Kd/kywLfeeed3HPPPQwfPpw333yTSZMmpVxO//79qaioYNeuXbzyyitHfqQjk+U0b96cw4cPA4kunuqfCXR3HnjgAW699daMn08m1OcuIjltzpw5jBkzhi1btrB582a2bt1K586d+cMf/sCVV17J9OnTj1yffc+ePQC0bt2azz777Mgy2rVrx4YNGzh8+DBz58490r537146dEj8/PPMmTPTZjEzrrvuOu655x66detG27ZtM15OYWEhK1euBGDevHl89dVXAFx11VU899xzR36+b9u2bezcuTPzDVQHFXcRyWnl5eVcd911R7Vdf/31lJeX88Mf/pBOnTrRq1cvevfuzYsvvghAaWkpQ4YMOXJA9bHHHmPYsGFcdtlltG/f/shyJk2axA033EDfvn3T9s9XKykp4YUXXjjSJZPpcn70ox/x1ltv0bt3b5YuXcppp50GJH5C8Pvf/z79+/enZ8+ejBw58qgPpvrSJX8lPF3y94QS10v+Hm90yd8TQI1fAsuqHNgXEJEMqLhLeM8/H3UCEUlDxV3C69gx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", + "image/png": "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\n", "text/plain": [ "
" ] @@ -212,17 +214,6 @@ "plt.legend()\n", "plt.show()" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Note on Rejection ABC\n", - "\n", - "The Rejection ABC algorithm is a highly simplistic method for Bayesian inference. As a consequence, it is inefficient when used with high variance priors.\n", - "\n", - "Please make sure that you are monitoring the acceptance rate to see if this algorithm is working for your problem." - ] } ], "metadata": { @@ -230,7 +221,7 @@ "hash": "62b8c3045b77e73a8aab814fbf01ae024ab075fc3f7014742f3a4c5a8ac43e7b" }, "kernelspec": { - "display_name": "Python 3.8.0 32-bit", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -244,9 +235,8 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.8.0" - }, - "orig_nbformat": 4 + "version": "3.7.7" + } }, "nbformat": 4, "nbformat_minor": 2 From a5e026cca45258c9a340a953fb8c42a86986530b Mon Sep 17 00:00:00 2001 From: Michael Clerx Date: Thu, 17 Mar 2022 20:22:35 +0000 Subject: [PATCH 3/4] Merge leftovers --- CHANGELOG.md | 1 + docs/source/index.rst | 7 ++++--- examples/README.md | 3 +++ pints/__init__.py | 9 +++++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4add4b5ca..a46e6d250 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ All notable changes to this project will be documented in this file. - [#1432](https://github.com/pints-team/pints/pull/1432) Added 2 new stochastic models: production and degradation model, Schlogl's system of chemical reactions. Moved the stochastic logistic model into `pints.stochastic` to take advantage of the `MarkovJumpModel`. - [#1420](https://github.com/pints-team/pints/pull/1420) The `Optimiser` class now distinguishes between a best-visited point (`x_best`, with score `f_best`) and a best-guessed point (`x_guessed`, with approximate score `f_guessed`). For most optimisers, the two values are equivalent. The `OptimisationController` still tracks `x_best` and `f_best` by default, but this can be modified using the methods `set_f_guessed_tracking` and `f_guessed_tracking`. - [#1417](https://github.com/pints-team/pints/pull/1417) Added a module `toy.stochastic` for stochastic models. In particular, `toy.stochastic.MarkovJumpModel` implements Gillespie's algorithm for easier future implementation of stochastic models. +- [#1413](https://github.com/pints-team/pints/pull/1413) Added classes `pints.ABCController` and `pints.ABCSampler` for Approximate Bayesian computation (ABC) samplers. Added `pints.RejectionABC` which implements a simple rejection ABC sampling algorithm. ### Changed - [#1439](https://github.com/pints-team/pints/pull/1439), [#1433](https://github.com/pints-team/pints/pull/1433) PINTS is no longer tested on Python 3.5. Testing for Python 3.10 has been added. diff --git a/docs/source/index.rst b/docs/source/index.rst index 543eb98ba..fc85f8631 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -23,6 +23,7 @@ Contents .. toctree:: + abc_samplers/index boundaries core_classes_and_methods diagnostics @@ -78,10 +79,10 @@ Sampling - SMC -#. Likelihood free sampling (Need distance between data and states, e.g. least squares?) +#. :class:`ABC sampling` - - ABC-MCMC - - ABC-SMC + - :class:`RejectionABC`, requires a :class:`LogPrior` that can be sampled + from and an error measure. #. 1st order sensitivity MCMC samplers (Need derivatives of :class:`LogPDF`) diff --git a/examples/README.md b/examples/README.md index c795ee6d1..923b08969 100644 --- a/examples/README.md +++ b/examples/README.md @@ -77,6 +77,9 @@ relevant code. - [Ellipsoidal nested sampling](./sampling/nested-ellipsoidal-sampling.ipynb) - [Rejection nested sampling](./sampling/nested-rejection-sampling.ipynb) +### ABC +- [Rejection ABC sampling](./sampling/rejection-abc.ipynb) + ### Analysing sampling results - [Autocorrelation](./plotting/mcmc-autocorrelation.ipynb) - [Customise analysis plots](./plotting/customise-pints-plots.ipynb) diff --git a/pints/__init__.py b/pints/__init__.py index ec03b8229..51b3e3506 100644 --- a/pints/__init__.py +++ b/pints/__init__.py @@ -236,11 +236,20 @@ def version(formatted=False): from ._nested._ellipsoid import NestedEllipsoidSampler +# +# ABC +# +from ._abc import ABCSampler +from ._abc import ABCController +from ._abc._abc_rejection import RejectionABC + + # # Sampling initialising # from ._sample_initial_points import sample_initial_points + # # Transformations # From 95c910e16aa795c2ef6a2cd5d191d7a9a6e900cd Mon Sep 17 00:00:00 2001 From: Michael Clerx Date: Thu, 17 Mar 2022 20:25:12 +0000 Subject: [PATCH 4/4] Test tweak --- pints/tests/test_abc_controller.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/pints/tests/test_abc_controller.py b/pints/tests/test_abc_controller.py index f3def023d..487895c52 100644 --- a/pints/tests/test_abc_controller.py +++ b/pints/tests/test_abc_controller.py @@ -43,8 +43,8 @@ def setUpClass(cls): cls.error_measure = pints.RootMeanSquaredError(cls.problem) def test_nparameters_error(self): - """ Test that error is thrown when parameters from log prior and error - measure do not match""" + # Test that error is thrown when parameters from log prior and error + # measure do not match. log_prior = pints.UniformLogPrior( [0.0, 0, 0], [0.2, 100, 1]) @@ -53,8 +53,8 @@ def test_nparameters_error(self): log_prior) def test_error_measure_instance(self): - """ Test that error is thrown when we use an error measure which is not - an instance of ``pints.ErrorMeasure``""" + # Test that error is thrown when we use an error measure which is not + # an instance of ``pints.ErrorMeasure``. # Set a log prior as the error measure to trigger the warning wrong_error_measure = pints.UniformLogPrior( [0.0, 0, 0], @@ -67,7 +67,7 @@ def test_error_measure_instance(self): self.log_prior) def test_stopping(self): - """ Test different stopping criteria. """ + #" Test different stopping criteria. abc = pints.ABCController(self.error_measure, self.log_prior) @@ -90,7 +90,7 @@ def test_stopping(self): abc.run) def test_parallel(self): - """ Test running ABC with parallisation. """ + # Test running ABC with parallisation. abc = pints.ABCController( self.error_measure, self.log_prior, method=pints.RejectionABC) @@ -106,7 +106,8 @@ def test_parallel(self): self.assertEqual(abc.parallel(), 2) def test_logging(self): - # tests logging to screen + # Tests logging to screen + # No output with StreamCapture() as capture: abc = pints.ABCController( @@ -161,7 +162,8 @@ def test_logging(self): self.assertEqual(capture.text(), '') def test_controller_extra(self): - # tests various controller aspects + # Tests various controller aspects + self.assertRaises(ValueError, pints.ABCController, self.error_measure, self.error_measure) self.assertRaisesRegex(