From f7ec867faea8bdfec3bd50fb731aed128cdb3697 Mon Sep 17 00:00:00 2001 From: bhmueller Date: Mon, 14 Jun 2021 15:58:18 +0200 Subject: [PATCH 1/9] Add theory Morris method. --- .../sensitivity-analysis-qualitative.ipynb | 247 +++++++++++++++++- 1 file changed, 235 insertions(+), 12 deletions(-) diff --git a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb index 0755d3b1..8b3b5e66 100644 --- a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb +++ b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb @@ -16,29 +16,249 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# from temfpy.uncertainty_quantification import simple_linear_function,\n", - "from econsa.morris import elementary_effects # noqa: F401\n", + "from morris import elementary_effects # noqa: F401\n", "import numpy as np\n", + "import pandas as pd" + ] + }, + { + "source": [ + "The module `morris` implements the extended Morris method as proposed by Ge & Menendez (2017). They extend the Morris method in the sense, that their algorithm takes dependency among inputs into account.\n", + "\n", + "For illustration purposes consider the Morris method for independent inputs only.\n", + "\n", + "Let $x = \\{x_1, \\dots, x_k\\}$ denote a sample of values assigned to the $X_i$'s. $f(x)$ is then the model output obtained for the values in $x$. Now consider a second sample $x_{\\Delta_i} = \\{x_1, \\dots, x_{i-1}, x_i + \\Delta, x_{i+1}, \\dots, x_k\\}$ that is identical to $x$ up to input $x_i$ which is varied by $\\Delta$. Then, one elementary effect for input $i$ is derived by\n", + "\n", + "$$EE_i = \\frac{f(x_{\\Delta_i}) - f(x)}{\\Delta}.$$\n", + "\n", + "\n", + "The above elementary effect is computed $N$ times, each for a varying $\\Delta$. The actual sensitivity measures resulting from the Morris method are the mean, denoted by $\\mu^\\ast_i$, and the standard deviation, denoted by $\\sigma_i$, taken from the $N$ elementary effects per input $i$.\n", + "\n", + "$$\\mu_i^\\ast = \\frac{1}{N} \\sum_{r=1}^N \\vert EE_{i, r} \\vert$$\n", + "\n", + "$$\\sigma_i = \\sqrt{\\frac{1}{N-1} \\sum_{r=1}^N (EE_{i, r} - \\mu_i)^2}$$\n", + "\n", + "The derivation of the extended Morris indices is more complicated and we get *four* sensitivity indices indstead of only two: *independent* and *full* Morris indices, $(\\mu_i^{\\ast,\\ ind}, \\mu_i^{\\ast,\\ full}, \\sigma_i^{ind}, \\sigma_i^{full})$, which are computed analogously to the Morris indices under input independence, but are based on different elementary effects:\n", + "\n", + "- $EE_i^{ind}$ denotes *independent* elementary effects for input $i$, effects that exclude the contributions attributable to the dependence between input $X_i$ and $X_j$ for $i \\neq j$, and\n", + "\n", + "- $EE_i^{full}$ denotes *full* elementary effects for input $i$, that include the effects due to correlation with other inputs." + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "source": [ + "For applying the Morris method, we need to specify the following arguments:\n", + "\n", + "- `func`: The model for which we want to calculate the Morris indices. Note how the data needs to be accessed within the function. See below example.\n", + "\n", + "- `params`: The mean values of the inputs.\n", + "\n", + "- `cov`: The variance-covariance matrix of the inputs.\n", + "\n", + "- `n_draws`: Number of draws. The total computational cost of the extended Morris method amounts to $3kN$, where $k$ denotes the number of inputs and $N$ the number of draws (`n_draws`).\n", + "\n", + "Note that the current implementation of the Morris method in `econsa` does allow for Gaussian (i.e. normally distributed) inputs only." + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "source": [ + "Specify the input names in the data frames `params` and `cov` to display the input names in the output of `elementary_effects`." + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [ + "params = pd.DataFrame(data=np.array([5.345, 0.0135, 2.15]), columns=['value'], index=['m', 'c', 's'])\n", + "cov = pd.DataFrame(data=np.diag([1, 0.000001, 0.01]), index=['m', 'c', 's'])" + ] + }, + { + "source": [ + "The model implemented by `func` needs to access the inputs in the following way, if the input names are specified in `params` and `cov`:\n", + "\n", + "`m = x[\"value\"]['m']`\n", + "\n", + "`c = x[\"value\"]['c']`\n", "\n", - "# This is an example where we extracted the sampling from the\n", - "# function to compute the elementary effects.\n", - "input_parameters = np.random.normal(size=(100, 4))\n", - "n_draws, cov = 100, np.identity(3)\n", + "`s = x[\"value\"]['s']`.\n", "\n", - "# TODO: This requires some more work to set up.\n", - "# rslt = elementary_effects(simple_linear_function, input_parameters, cov, n_draws)" + "Alternatively we can access them via the index as well:\n", + "\n", + "`m = x[\"value\"][0]`\n", + "\n", + "`c = x[\"value\"][1]`\n", + "\n", + "`s = x[\"value\"][2]`." + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "def eoq_model_morris(x, r=0.1):\n", + " \"\"\"EOQ Model that accesses data as expected by elementary_effects.\"\"\"\n", + " m = x[\"value\"]['m']\n", + " c = x[\"value\"]['c']\n", + " s = x[\"value\"]['s']\n", + "\n", + " # Need to ensure that there exists a solution (i.e. no NaNs).\n", + " if m < 0:\n", + " m = 0\n", + " elif c < 0:\n", + " raise ValueError\n", + " elif s < 0:\n", + " s = 0\n", + " else:\n", + " pass\n", + "\n", + " return np.sqrt((24 * m * s) / (r * c))" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [], + "source": [ + "n_draws = 100\n", + "results = elementary_effects(eoq_model_morris, params, cov, n_draws)" ] + }, + { + "source": [ + "The output of `elementary_effects` is a dictionary containing the four sensitivity indices derived from the `n_draws` elementary effects: $(\\mu_i^{\\ast,\\ ind}, \\mu_i^{\\ast,\\ full}, \\sigma_i^{ind}, \\sigma_i^{full})$." + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "{'mu_ind': m 152.932694\n", + " c 57.953365\n", + " s 33.104776\n", + " dtype: float64,\n", + " 'mu_corr': m 2369.122666\n", + " c 3270.066313\n", + " s 2888.326540\n", + " dtype: float64,\n", + " 'sigma_ind': m 54.844400\n", + " c 17.314969\n", + " s 7.963128\n", + " dtype: float64,\n", + " 'sigma_corr': m 2523.492389\n", + " c 8210.375153\n", + " s 3814.720109\n", + " dtype: float64,\n", + " 'mu_ind_cum': m c s\n", + " 1 NaN NaN NaN\n", + " 2 124.901013 51.672836 26.198816\n", + " 3 125.806619 48.973670 29.796229\n", + " 4 123.068657 49.028250 31.225234\n", + " 5 119.660578 52.598716 30.243689\n", + " .. ... ... ...\n", + " 96 153.797320 57.495222 32.879575\n", + " 97 153.343157 57.987376 32.921207\n", + " 98 153.497392 57.815867 32.967114\n", + " 99 153.240693 58.075774 32.950881\n", + " 100 152.932694 57.953365 33.104776\n", + " \n", + " [100 rows x 3 columns],\n", + " 'mu_corr_cum': m c s\n", + " 1 NaN NaN NaN\n", + " 2 1975.552648 2563.129032 1133.631188\n", + " 3 1533.898849 6452.939758 945.285452\n", + " 4 1440.612603 5294.116835 848.783171\n", + " 5 1389.763807 4921.975398 1365.637198\n", + " .. ... ... ...\n", + " 96 2227.956626 3318.405842 2804.693741\n", + " 97 2359.806387 3301.289306 2929.628106\n", + " 98 2371.842430 3285.660530 2923.811075\n", + " 99 2379.478173 3284.065787 2904.808879\n", + " 100 2369.122666 3270.066313 2888.326540\n", + " \n", + " [100 rows x 3 columns],\n", + " 'sigma_ind_cum': m c s\n", + " 1 NaN NaN NaN\n", + " 2 27.984098 7.350190 1.532628\n", + " 3 19.849817 6.990647 6.324445\n", + " 4 17.107383 5.708883 5.902031\n", + " 5 16.660491 9.390668 5.562610\n", + " .. ... ... ...\n", + " 96 55.919632 16.746390 7.992065\n", + " 97 55.807167 17.349791 7.960897\n", + " 98 55.539747 17.343435 7.932783\n", + " 99 55.314654 17.447436 7.893858\n", + " 100 55.120696 17.402199 8.003244\n", + " \n", + " [100 rows x 3 columns],\n", + " 'sigma_corr_cum': m c s\n", + " 1 NaN NaN NaN\n", + " 2 2117.809738 1254.953623 23.291124\n", + " 3 1681.586535 6795.538003 326.639844\n", + " 4 1385.627949 6013.127869 329.210904\n", + " 5 1205.363684 5273.587614 1190.367712\n", + " .. ... ... ...\n", + " 96 2228.792016 8419.282988 3703.976961\n", + " 97 2569.445814 8377.014163 3884.658056\n", + " 98 2558.942418 8335.157861 3865.011184\n", + " 99 2546.986499 8292.537684 3849.886618\n", + " 100 2536.205277 8251.737506 3833.937964\n", + " \n", + " [100 rows x 3 columns]}" + ] + }, + "metadata": {}, + "execution_count": 9 + } + ], + "source": [ + "results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" + "name": "python3", + "display_name": "Python 3.7.10 64-bit ('econsa': conda)" }, "language_info": { "codemirror_mode": { @@ -50,7 +270,10 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.7.7" + "version": "3.7.10" + }, + "interpreter": { + "hash": "27f73fc847b24c08ac9b7a18ebc71c0304d052de3761b7e57e982a062414d1b0" } }, "nbformat": 4, From 75abd2ee297c9b9cec53d674c00a365ee741301c Mon Sep 17 00:00:00 2001 From: bhmueller Date: Mon, 14 Jun 2021 16:46:17 +0200 Subject: [PATCH 2/9] Add sections for each fct. arg. --- .../sensitivity-analysis-qualitative.ipynb | 123 ++++++++++++++---- 1 file changed, 96 insertions(+), 27 deletions(-) diff --git a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb index 8b3b5e66..ed980343 100644 --- a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb +++ b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -52,6 +52,13 @@ "cell_type": "markdown", "metadata": {} }, + { + "source": [ + "The implementation of the algorithm used in `econsa` uses the *radial design* and the *inverse Nataf transformation* as described in Ge & Menendez (2017)." + ], + "cell_type": "markdown", + "metadata": {} + }, { "source": [ "For applying the Morris method, we need to specify the following arguments:\n", @@ -62,7 +69,7 @@ "\n", "- `cov`: The variance-covariance matrix of the inputs.\n", "\n", - "- `n_draws`: Number of draws. The total computational cost of the extended Morris method amounts to $3kN$, where $k$ denotes the number of inputs and $N$ the number of draws (`n_draws`).\n", + "- `n_draws`: Number of draws, which corresponds to $N$ above.\n", "\n", "Note that the current implementation of the Morris method in `econsa` does allow for Gaussian (i.e. normally distributed) inputs only." ], @@ -71,30 +78,16 @@ }, { "source": [ - "Specify the input names in the data frames `params` and `cov` to display the input names in the output of `elementary_effects`." - ], - "cell_type": "markdown", - "metadata": {} - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "params = pd.DataFrame(data=np.array([5.345, 0.0135, 2.15]), columns=['value'], index=['m', 'c', 's'])\n", - "cov = pd.DataFrame(data=np.diag([1, 0.000001, 0.01]), index=['m', 'c', 's'])" - ] - }, - { - "source": [ + "## The `func` argument\n", + "`func` is the implementation of the model we want to conduct sensitivity analysis for. The Morris method can be applied to all models that return a unique value for a given set of realisations of the model inputs.\n", + "\n", "The model implemented by `func` needs to access the inputs in the following way, if the input names are specified in `params` and `cov`:\n", "\n", - "`m = x[\"value\"]['m']`\n", + "`m = x[\"value\"][\"m\"]`\n", "\n", - "`c = x[\"value\"]['c']`\n", + "`c = x[\"value\"][\"c\"]`\n", "\n", - "`s = x[\"value\"]['s']`.\n", + "`s = x[\"value\"][\"s\"]`.\n", "\n", "Alternatively we can access them via the index as well:\n", "\n", @@ -109,15 +102,15 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "def eoq_model_morris(x, r=0.1):\n", " \"\"\"EOQ Model that accesses data as expected by elementary_effects.\"\"\"\n", - " m = x[\"value\"]['m']\n", - " c = x[\"value\"]['c']\n", - " s = x[\"value\"]['s']\n", + " m = x[\"value\"][\"m\"]\n", + " c = x[\"value\"][\"c\"]\n", + " s = x[\"value\"][\"s\"]\n", "\n", " # Need to ensure that there exists a solution (i.e. no NaNs).\n", " if m < 0:\n", @@ -132,23 +125,99 @@ " return np.sqrt((24 * m * s) / (r * c))" ] }, + { + "source": [ + "## The `params` and `cov` arguments\n", + "Specify the input names in the data frames `params` and `cov` to display the input names in the output of `elementary_effects`. `params` is a vector of means of the normally distributed model inputs. `params` needs to be a `pandas.DataFrame` with a colum called `\"value\"`, which contains the means of the inputs.\n", + "\n", + "`cov` is the corresponding variance-covariance matrix. The variance-covariance matrix describes the dependence structure of the inputs. As `params`, `cov` needs to be a `pandas.DataFrame`. Indices need to be the same as in `params`." + ], + "cell_type": "markdown", + "metadata": {} + }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ - "n_draws = 100\n", + "names = ['m', 'c', 's']\n", + "params = pd.DataFrame(data=np.array([5.345, 0.0135, 2.15]), columns=['value'], index=names)\n", + "cov = pd.DataFrame(data=np.diag([1, 0.000001, 0.01]), columns=names, index=names)" + ] + }, + { + "source": [ + "## The `n_draws` argument\n", + "`n_draws` is the number of elementary effects we want to use for the computation of the Morris indices. The total computational cost of the extended Morris method amounts to $3kN$, where $k$ denotes the number of inputs and $N$ the number of draws (`n_draws`)." + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "n_draws = 100" + ] + }, + { + "source": [ + "## The `parallel` and `n_jobs` argument\n", + "Parallelising code can be done by `joblib` or the Python built-in `multiprocessing` modules, where `n_jobs` is the number of cores employed. The default is that `joblib` is used and that `n_jobs` is set to $1$, thus, the default is that no code is parallelised at all. See the documentation of `joblib` for further details." + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [], + "source": [ "results = elementary_effects(eoq_model_morris, params, cov, n_draws)" ] }, { "source": [ + "## The output\n", "The output of `elementary_effects` is a dictionary containing the four sensitivity indices derived from the `n_draws` elementary effects: $(\\mu_i^{\\ast,\\ ind}, \\mu_i^{\\ast,\\ full}, \\sigma_i^{ind}, \\sigma_i^{full})$." ], "cell_type": "markdown", "metadata": {} }, + { + "source": [ + "## Independent Morris indices" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "m 152.932694\n", + "c 57.953365\n", + "s 33.104776\n", + "dtype: float64" + ] + }, + "metadata": {}, + "execution_count": 13 + } + ], + "source": [ + "results['mu_ind']" + ] + }, { "cell_type": "code", "execution_count": null, From 857ba963e1df359e9e8925bbef7b77af5256036c Mon Sep 17 00:00:00 2001 From: bhmueller Date: Wed, 16 Jun 2021 23:10:58 +0200 Subject: [PATCH 3/9] Revise text. --- .../sensitivity-analysis-qualitative.ipynb | 104 +++++++++++++++--- 1 file changed, 86 insertions(+), 18 deletions(-) diff --git a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb index ed980343..bbce1e5c 100644 --- a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb +++ b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb @@ -16,14 +16,16 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ "# from temfpy.uncertainty_quantification import simple_linear_function,\n", "from morris import elementary_effects # noqa: F401\n", "import numpy as np\n", - "import pandas as pd" + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns " ] }, { @@ -102,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -137,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -148,7 +150,7 @@ }, { "source": [ - "## The `n_draws` argument\n", + "### The `n_draws` argument\n", "`n_draws` is the number of elementary effects we want to use for the computation of the Morris indices. The total computational cost of the extended Morris method amounts to $3kN$, where $k$ denotes the number of inputs and $N$ the number of draws (`n_draws`)." ], "cell_type": "markdown", @@ -156,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -165,7 +167,7 @@ }, { "source": [ - "## The `parallel` and `n_jobs` argument\n", + "### The `parallel` and `n_jobs` argument\n", "Parallelising code can be done by `joblib` or the Python built-in `multiprocessing` modules, where `n_jobs` is the number of cores employed. The default is that `joblib` is used and that `n_jobs` is set to $1$, thus, the default is that no code is parallelised at all. See the documentation of `joblib` for further details." ], "cell_type": "markdown", @@ -173,7 +175,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -182,7 +184,7 @@ }, { "source": [ - "## The output\n", + "### The output\n", "The output of `elementary_effects` is a dictionary containing the four sensitivity indices derived from the `n_draws` elementary effects: $(\\mu_i^{\\ast,\\ ind}, \\mu_i^{\\ast,\\ full}, \\sigma_i^{ind}, \\sigma_i^{full})$." ], "cell_type": "markdown", @@ -190,32 +192,98 @@ }, { "source": [ - "## Independent Morris indices" + "### Independent Morris indices $(\\mu_i^{\\ast,\\ ind}, \\sigma_i^{ind})$" ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 15, "metadata": {}, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ - "m 152.932694\n", - "c 57.953365\n", - "s 33.104776\n", - "dtype: float64" - ] + " mu sigma\n", + "m 152.932694 54.844400\n", + "c 57.953365 17.314969\n", + "s 33.104776 7.963128" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
musigma
m152.93269454.844400
c57.95336517.314969
s33.1047767.963128
\n
" }, "metadata": {}, - "execution_count": 13 + "execution_count": 15 + } + ], + "source": [ + "morris_ind = pd.DataFrame(pd.concat((results['mu_ind'], results['sigma_ind']), axis=1))\n", + "morris_ind.columns = ['mu', 'sigma']\n", + "morris_ind" + ] + }, + { + "source": [ + "### Full Morris indices $(\\mu_i^{\\ast,\\ full}, \\sigma_i^{full})$" + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + " mu sigma\n", + "m 2369.122666 2523.492389\n", + "c 3270.066313 8210.375153\n", + "s 2888.326540 3814.720109" + ], + "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
musigma
m2369.1226662523.492389
c3270.0663138210.375153
s2888.3265403814.720109
\n
" + }, + "metadata": {}, + "execution_count": 16 + } + ], + "source": [ + "morris_full = pd.DataFrame(pd.concat((results['mu_corr'], results['sigma_corr']), axis=1))\n", + "morris_full.columns = ['mu', 'sigma']\n", + "morris_full" + ] + }, + { + "source": [ + "### Plotting the results\n", + "The input ranking is conducted based on $(\\mu_i^{\\ast,\\ ind}, \\mu_i^{\\ast,\\ full})$." + ], + "cell_type": "markdown", + "metadata": {} + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [ + { + "output_type": "display_data", + "data": { + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-06-16T15:49:10.526858\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" + }, + "metadata": { + "needs_background": "light" + } } ], "source": [ - "results['mu_ind']" + "fig, ax = plt.subplots(2,1)\n", + "\n" ] }, { From 54d29a5d33edf2728641e42e45d0103d6b9ce284 Mon Sep 17 00:00:00 2001 From: bhmueller Date: Thu, 17 Jun 2021 19:11:45 +0200 Subject: [PATCH 4/9] Add visualisation of Morris indices. --- .../sensitivity-analysis-qualitative.ipynb | 59 ++++++++++++------- 1 file changed, 39 insertions(+), 20 deletions(-) diff --git a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb index bbce1e5c..9a770701 100644 --- a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb +++ b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -104,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -139,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -158,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -175,7 +175,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -192,14 +192,14 @@ }, { "source": [ - "### Independent Morris indices $(\\mu_i^{\\ast,\\ ind}, \\sigma_i^{ind})$" + "#### Independent Morris indices $(\\mu_i^{\\ast,\\ ind}, \\sigma_i^{ind})$" ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -214,7 +214,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
musigma
m152.93269454.844400
c57.95336517.314969
s33.1047767.963128
\n
" }, "metadata": {}, - "execution_count": 15 + "execution_count": 6 } ], "source": [ @@ -225,14 +225,14 @@ }, { "source": [ - "### Full Morris indices $(\\mu_i^{\\ast,\\ full}, \\sigma_i^{full})$" + "#### Full Morris indices $(\\mu_i^{\\ast,\\ full}, \\sigma_i^{full})$" ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -247,7 +247,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
musigma
m2369.1226662523.492389
c3270.0663138210.375153
s2888.3265403814.720109
\n
" }, "metadata": {}, - "execution_count": 16 + "execution_count": 7 } ], "source": [ @@ -266,24 +266,43 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 41, "metadata": {}, "outputs": [ + { + "output_type": "execute_result", + "data": { + "text/plain": [ + "Text(33.10477572948848, 9.963127643615998, 's')" + ] + }, + "metadata": {}, + "execution_count": 41 + }, { "output_type": "display_data", "data": { - "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-06-16T15:49:10.526858\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", - "image/png": "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\n" + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-06-17T19:04:34.501834\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" }, - "metadata": { - "needs_background": "light" - } + "metadata": {} } ], "source": [ - "fig, ax = plt.subplots(2,1)\n", - "\n" + "fig, ax = plt.subplots(2, 1)\n", + "# sns.set(rc={'figure.figsize':(10,5)})\n", + "\n", + "sns.scatterplot(x=morris_full['mu'], y=morris_full['sigma'], data=morris_full, ax=ax[0])\n", + "sns.scatterplot(x=morris_ind['mu'], y=morris_ind['sigma'], data=morris_full, ax=ax[1])\n", + "\n", + "ax[0].text(x=morris_full['mu'].iloc[0], y=morris_full['sigma'].iloc[0] + 200, s='m')\n", + "ax[0].text(x=morris_full['mu'].iloc[1], y=morris_full['sigma'].iloc[1] + 200, s='c')\n", + "ax[0].text(x=morris_full['mu'].iloc[2], y=morris_full['sigma'].iloc[2] + 200, s='s')\n", + "\n", + "ax[1].text(x=morris_ind['mu'].iloc[0], y=morris_ind['sigma'].iloc[0] + 2, s='m')\n", + "ax[1].text(x=morris_ind['mu'].iloc[1], y=morris_ind['sigma'].iloc[1] + 2, s='c')\n", + "ax[1].text(x=morris_ind['mu'].iloc[2], y=morris_ind['sigma'].iloc[2] + 2, s='s')" ] }, { From 647855498cc7a2d873b780659fec1d00967cbea3 Mon Sep 17 00:00:00 2001 From: bhmueller Date: Fri, 18 Jun 2021 13:09:58 +0200 Subject: [PATCH 5/9] Exec. notebook with new morris.py. --- .../sensitivity-analysis-qualitative.ipynb | 74 ++++++++++++++----- 1 file changed, 57 insertions(+), 17 deletions(-) diff --git a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb index 9a770701..7a4a55b3 100644 --- a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb +++ b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb @@ -16,9 +16,27 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 7, "metadata": {}, - "outputs": [], + "outputs": [ + { + "output_type": "error", + "ename": "OSError", + "evalue": "Could not load shared object file: llvmlite.dll", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mOSError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# from temfpy.uncertainty_quantification import simple_linear_function,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mmorris\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0melementary_effects\u001b[0m \u001b[1;31m# noqa: F401\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32mc:\\Users\\admin\\Desktop\\Contribution_to_econsa\\econsa\\docs\\source\\tutorials\\morris.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 12\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mchaospy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mcp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 14\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mnumba\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnb\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 15\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 16\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\anaconda3\\envs\\econsa\\lib\\site-packages\\numba\\__init__.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 17\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 18\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 19\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcore\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mconfig\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 20\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtesting\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0m_runtests\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mruntests\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 21\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcore\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mtypes\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merrors\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\anaconda3\\envs\\econsa\\lib\\site-packages\\numba\\core\\config.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 14\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 15\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 16\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mllvmlite\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbinding\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mll\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 17\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 18\u001b[0m \u001b[0mIS_WIN32\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msys\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplatform\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstartswith\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'win32'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\anaconda3\\envs\\econsa\\lib\\site-packages\\llvmlite\\binding\\__init__.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mThings\u001b[0m \u001b[0mthat\u001b[0m \u001b[0mrely\u001b[0m \u001b[0mon\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mLLVM\u001b[0m \u001b[0mlibrary\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \"\"\"\n\u001b[1;32m----> 4\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mdylib\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[1;33m*\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 5\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mexecutionengine\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[1;33m*\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0minitfini\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[1;33m*\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\anaconda3\\envs\\econsa\\lib\\site-packages\\llvmlite\\binding\\dylib.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mctypes\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mc_void_p\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mc_char_p\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mc_bool\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mPOINTER\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mllvmlite\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbinding\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mffi\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mllvmlite\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbinding\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcommon\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0m_encode_string\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;32m~\\anaconda3\\envs\\econsa\\lib\\site-packages\\llvmlite\\binding\\ffi.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 189\u001b[0m \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 190\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 191\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mOSError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Could not load shared object file: {}\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_lib_name\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 192\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 193\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", + "\u001b[1;31mOSError\u001b[0m: Could not load shared object file: llvmlite.dll" + ] + } + ], "source": [ "# from temfpy.uncertainty_quantification import simple_linear_function,\n", "from morris import elementary_effects # noqa: F401\n", @@ -104,7 +122,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -139,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": null, "metadata": {}, "outputs": [], "source": [ @@ -158,7 +176,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -175,9 +193,21 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "metadata": {}, - "outputs": [], + "outputs": [ + { + "output_type": "error", + "ename": "NameError", + "evalue": "name 'elementary_effects' is not defined", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", + "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mresults\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0melementary_effects\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0meoq_model_morris\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcov\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mn_draws\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", + "\u001b[1;31mNameError\u001b[0m: name 'elementary_effects' is not defined" + ] + } + ], "source": [ "results = elementary_effects(eoq_model_morris, params, cov, n_draws)" ] @@ -256,6 +286,14 @@ "morris_full" ] }, + { + "source": [ + "#### Values of the elementary effects `mu_ind_cum` & `mu_corr_cum`\n", + "The values of the elementary effects for the inputs can be used to get the direction of the variance contribution due to input $i$." + ], + "cell_type": "markdown", + "metadata": {} + }, { "source": [ "### Plotting the results\n", @@ -290,19 +328,21 @@ } ], "source": [ - "fig, ax = plt.subplots(2, 1)\n", - "# sns.set(rc={'figure.figsize':(10,5)})\n", + "def plot_morris_indices(morris_full, morris_ind)\n", + " fig, ax = plt.subplots(2, 1)\n", + " # sns.set(rc={'figure.figsize':(10,5)})\n", "\n", - "sns.scatterplot(x=morris_full['mu'], y=morris_full['sigma'], data=morris_full, ax=ax[0])\n", - "sns.scatterplot(x=morris_ind['mu'], y=morris_ind['sigma'], data=morris_full, ax=ax[1])\n", + " sns.scatterplot(x=morris_full['mu'], y=morris_full['sigma'], data=morris_full, ax=ax[0])\n", + " sns.scatterplot(x=morris_ind['mu'], y=morris_ind['sigma'], data=morris_full, ax=ax[1])\n", "\n", - "ax[0].text(x=morris_full['mu'].iloc[0], y=morris_full['sigma'].iloc[0] + 200, s='m')\n", - "ax[0].text(x=morris_full['mu'].iloc[1], y=morris_full['sigma'].iloc[1] + 200, s='c')\n", - "ax[0].text(x=morris_full['mu'].iloc[2], y=morris_full['sigma'].iloc[2] + 200, s='s')\n", + " ax[0].text(x=morris_full['mu'].iloc[0], y=morris_full['sigma'].iloc[0] + 200, s='m')\n", + " ax[0].text(x=morris_full['mu'].iloc[1], y=morris_full['sigma'].iloc[1] + 200, s='c')\n", + " ax[0].text(x=morris_full['mu'].iloc[2], y=morris_full['sigma'].iloc[2] + 200, s='s')\n", "\n", - "ax[1].text(x=morris_ind['mu'].iloc[0], y=morris_ind['sigma'].iloc[0] + 2, s='m')\n", - "ax[1].text(x=morris_ind['mu'].iloc[1], y=morris_ind['sigma'].iloc[1] + 2, s='c')\n", - "ax[1].text(x=morris_ind['mu'].iloc[2], y=morris_ind['sigma'].iloc[2] + 2, s='s')" + " ax[1].text(x=morris_ind['mu'].iloc[0], y=morris_ind['sigma'].iloc[0] + 2, s='m')\n", + " ax[1].text(x=morris_ind['mu'].iloc[1], y=morris_ind['sigma'].iloc[1] + 2, s='c')\n", + " ax[1].text(x=morris_ind['mu'].iloc[2], y=morris_ind['sigma'].iloc[2] + 2, s='s')\n", + " plt.show()" ] }, { From fd340d29d5cb750e35c93c74c7bb3db342363d19 Mon Sep 17 00:00:00 2001 From: bhmueller Date: Fri, 18 Jun 2021 13:43:08 +0200 Subject: [PATCH 6/9] Solve import error. --- .../sensitivity-analysis-qualitative.ipynb | 48 ++++--------------- 1 file changed, 10 insertions(+), 38 deletions(-) diff --git a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb index 7a4a55b3..e51f871a 100644 --- a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb +++ b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb @@ -16,27 +16,9 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 1, "metadata": {}, - "outputs": [ - { - "output_type": "error", - "ename": "OSError", - "evalue": "Could not load shared object file: llvmlite.dll", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mOSError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;31m# from temfpy.uncertainty_quantification import simple_linear_function,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mmorris\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0melementary_effects\u001b[0m \u001b[1;31m# noqa: F401\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 3\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32mc:\\Users\\admin\\Desktop\\Contribution_to_econsa\\econsa\\docs\\source\\tutorials\\morris.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 12\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 13\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mchaospy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mcp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 14\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mnumba\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnb\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 15\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 16\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m~\\anaconda3\\envs\\econsa\\lib\\site-packages\\numba\\__init__.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 17\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 18\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 19\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcore\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mconfig\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 20\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mtesting\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0m_runtests\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mruntests\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 21\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mnumba\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcore\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mtypes\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0merrors\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m~\\anaconda3\\envs\\econsa\\lib\\site-packages\\numba\\core\\config.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 14\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 15\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 16\u001b[1;33m \u001b[1;32mimport\u001b[0m \u001b[0mllvmlite\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbinding\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mll\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 17\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 18\u001b[0m \u001b[0mIS_WIN32\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msys\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplatform\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstartswith\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m'win32'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m~\\anaconda3\\envs\\econsa\\lib\\site-packages\\llvmlite\\binding\\__init__.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0mThings\u001b[0m \u001b[0mthat\u001b[0m \u001b[0mrely\u001b[0m \u001b[0mon\u001b[0m \u001b[0mthe\u001b[0m \u001b[0mLLVM\u001b[0m \u001b[0mlibrary\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \"\"\"\n\u001b[1;32m----> 4\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mdylib\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[1;33m*\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 5\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0mexecutionengine\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[1;33m*\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[1;33m.\u001b[0m\u001b[0minitfini\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[1;33m*\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m~\\anaconda3\\envs\\econsa\\lib\\site-packages\\llvmlite\\binding\\dylib.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mctypes\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mc_void_p\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mc_char_p\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mc_bool\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mPOINTER\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[1;32mfrom\u001b[0m \u001b[0mllvmlite\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbinding\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mffi\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 4\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0mllvmlite\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mbinding\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcommon\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0m_encode_string\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;32m~\\anaconda3\\envs\\econsa\\lib\\site-packages\\llvmlite\\binding\\ffi.py\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[0;32m 189\u001b[0m \u001b[1;32mbreak\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 190\u001b[0m \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 191\u001b[1;33m \u001b[1;32mraise\u001b[0m \u001b[0mOSError\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"Could not load shared object file: {}\"\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0m_lib_name\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 192\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 193\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n", - "\u001b[1;31mOSError\u001b[0m: Could not load shared object file: llvmlite.dll" - ] - } - ], + "outputs": [], "source": [ "# from temfpy.uncertainty_quantification import simple_linear_function,\n", "from morris import elementary_effects # noqa: F401\n", @@ -122,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -157,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -176,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -193,21 +175,9 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 5, "metadata": {}, - "outputs": [ - { - "output_type": "error", - "ename": "NameError", - "evalue": "name 'elementary_effects' is not defined", - "traceback": [ - "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[1;31mNameError\u001b[0m Traceback (most recent call last)", - "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mresults\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0melementary_effects\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0meoq_model_morris\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mparams\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcov\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mn_draws\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", - "\u001b[1;31mNameError\u001b[0m: name 'elementary_effects' is not defined" - ] - } - ], + "outputs": [], "source": [ "results = elementary_effects(eoq_model_morris, params, cov, n_draws)" ] @@ -350,7 +320,9 @@ "execution_count": null, "metadata": {}, "outputs": [], - "source": [] + "source": [ + "plot_morris_indices(morris_full, morris_ind)" + ] }, { "cell_type": "code", From 3f0c0546914432a9936e567a330bf8ed4ce68fc3 Mon Sep 17 00:00:00 2001 From: bhmueller Date: Fri, 18 Jun 2021 17:12:22 +0200 Subject: [PATCH 7/9] Improve visualisation. --- .../sensitivity-analysis-qualitative.ipynb | 188 +++++------------- 1 file changed, 45 insertions(+), 143 deletions(-) diff --git a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb index e51f871a..8c635da7 100644 --- a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb +++ b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb @@ -16,7 +16,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -104,7 +104,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -139,7 +139,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -158,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [], "source": [ @@ -167,15 +167,15 @@ }, { "source": [ - "### The `parallel` and `n_jobs` argument\n", - "Parallelising code can be done by `joblib` or the Python built-in `multiprocessing` modules, where `n_jobs` is the number of cores employed. The default is that `joblib` is used and that `n_jobs` is set to $1$, thus, the default is that no code is parallelised at all. See the documentation of `joblib` for further details." + "### The `n_cores` argument\n", + "Parallelising code is done by the Python built-in `multiprocessing` module, where `n_cores` is the number of cores employed. The default is that that `n_cores` is set to $1$." ], "cell_type": "markdown", "metadata": {} }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, "outputs": [], "source": [ @@ -185,7 +185,7 @@ { "source": [ "### The output\n", - "The output of `elementary_effects` is a dictionary containing the four sensitivity indices derived from the `n_draws` elementary effects: $(\\mu_i^{\\ast,\\ ind}, \\mu_i^{\\ast,\\ full}, \\sigma_i^{ind}, \\sigma_i^{full})$." + "The output of `elementary_effects` is a dictionary containing the four sensitivity indices derived from the `n_draws` elementary effects: $(\\mu_i^{\\ast,\\ ind}, \\mu_i^{\\ast,\\ full}, \\sigma_i^{ind}, \\sigma_i^{full})$. The Morris indices are accessed as shown below." ], "cell_type": "markdown", "metadata": {} @@ -199,7 +199,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -214,7 +214,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
musigma
m152.93269454.844400
c57.95336517.314969
s33.1047767.963128
\n
" }, "metadata": {}, - "execution_count": 6 + "execution_count": 8 } ], "source": [ @@ -232,7 +232,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -247,7 +247,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
musigma
m2369.1226662523.492389
c3270.0663138210.375153
s2888.3265403814.720109
\n
" }, "metadata": {}, - "execution_count": 7 + "execution_count": 9 } ], "source": [ @@ -256,14 +256,6 @@ "morris_full" ] }, - { - "source": [ - "#### Values of the elementary effects `mu_ind_cum` & `mu_corr_cum`\n", - "The values of the elementary effects for the inputs can be used to get the direction of the variance contribution due to input $i$." - ], - "cell_type": "markdown", - "metadata": {} - }, { "source": [ "### Plotting the results\n", @@ -274,153 +266,63 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 16, "metadata": {}, - "outputs": [ - { - "output_type": "execute_result", - "data": { - "text/plain": [ - "Text(33.10477572948848, 9.963127643615998, 's')" - ] - }, - "metadata": {}, - "execution_count": 41 - }, - { - "output_type": "display_data", - "data": { - "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-06-17T19:04:34.501834\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", - "image/png": "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\n" - }, - "metadata": {} - } - ], + "outputs": [], "source": [ - "def plot_morris_indices(morris_full, morris_ind)\n", + "def plot_morris_indices(morris_full, morris_ind):\n", " fig, ax = plt.subplots(2, 1)\n", - " # sns.set(rc={'figure.figsize':(10,5)})\n", + " sns.set_style(\"whitegrid\")\n", "\n", " sns.scatterplot(x=morris_full['mu'], y=morris_full['sigma'], data=morris_full, ax=ax[0])\n", " sns.scatterplot(x=morris_ind['mu'], y=morris_ind['sigma'], data=morris_full, ax=ax[1])\n", "\n", - " ax[0].text(x=morris_full['mu'].iloc[0], y=morris_full['sigma'].iloc[0] + 200, s='m')\n", - " ax[0].text(x=morris_full['mu'].iloc[1], y=morris_full['sigma'].iloc[1] + 200, s='c')\n", - " ax[0].text(x=morris_full['mu'].iloc[2], y=morris_full['sigma'].iloc[2] + 200, s='s')\n", + " ax[0].set_title('Full Morris indices')\n", + "\n", + " ax[0].text(x=morris_full['mu'].iloc[0] + 20, y=morris_full['sigma'].iloc[0], s='m')\n", + " ax[0].text(x=morris_full['mu'].iloc[1] + 20, y=morris_full['sigma'].iloc[1], s='c')\n", + " ax[0].text(x=morris_full['mu'].iloc[2] + 20, y=morris_full['sigma'].iloc[2], s='s')\n", + "\n", + " ax[1].set_title('Independent Morris indices')\n", "\n", - " ax[1].text(x=morris_ind['mu'].iloc[0], y=morris_ind['sigma'].iloc[0] + 2, s='m')\n", - " ax[1].text(x=morris_ind['mu'].iloc[1], y=morris_ind['sigma'].iloc[1] + 2, s='c')\n", - " ax[1].text(x=morris_ind['mu'].iloc[2], y=morris_ind['sigma'].iloc[2] + 2, s='s')\n", + " ax[1].text(x=morris_ind['mu'].iloc[0] + 2, y=morris_ind['sigma'].iloc[0], s='m')\n", + " ax[1].text(x=morris_ind['mu'].iloc[1] + 2, y=morris_ind['sigma'].iloc[1], s='c')\n", + " ax[1].text(x=morris_ind['mu'].iloc[2] + 2, y=morris_ind['sigma'].iloc[2], s='s')\n", + "\n", + " plt.tight_layout()\n", " plt.show()" ] }, { "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "plot_morris_indices(morris_full, morris_ind)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, + "execution_count": 17, "metadata": {}, "outputs": [ { - "output_type": "execute_result", + "output_type": "display_data", "data": { - "text/plain": [ - "{'mu_ind': m 152.932694\n", - " c 57.953365\n", - " s 33.104776\n", - " dtype: float64,\n", - " 'mu_corr': m 2369.122666\n", - " c 3270.066313\n", - " s 2888.326540\n", - " dtype: float64,\n", - " 'sigma_ind': m 54.844400\n", - " c 17.314969\n", - " s 7.963128\n", - " dtype: float64,\n", - " 'sigma_corr': m 2523.492389\n", - " c 8210.375153\n", - " s 3814.720109\n", - " dtype: float64,\n", - " 'mu_ind_cum': m c s\n", - " 1 NaN NaN NaN\n", - " 2 124.901013 51.672836 26.198816\n", - " 3 125.806619 48.973670 29.796229\n", - " 4 123.068657 49.028250 31.225234\n", - " 5 119.660578 52.598716 30.243689\n", - " .. ... ... ...\n", - " 96 153.797320 57.495222 32.879575\n", - " 97 153.343157 57.987376 32.921207\n", - " 98 153.497392 57.815867 32.967114\n", - " 99 153.240693 58.075774 32.950881\n", - " 100 152.932694 57.953365 33.104776\n", - " \n", - " [100 rows x 3 columns],\n", - " 'mu_corr_cum': m c s\n", - " 1 NaN NaN NaN\n", - " 2 1975.552648 2563.129032 1133.631188\n", - " 3 1533.898849 6452.939758 945.285452\n", - " 4 1440.612603 5294.116835 848.783171\n", - " 5 1389.763807 4921.975398 1365.637198\n", - " .. ... ... ...\n", - " 96 2227.956626 3318.405842 2804.693741\n", - " 97 2359.806387 3301.289306 2929.628106\n", - " 98 2371.842430 3285.660530 2923.811075\n", - " 99 2379.478173 3284.065787 2904.808879\n", - " 100 2369.122666 3270.066313 2888.326540\n", - " \n", - " [100 rows x 3 columns],\n", - " 'sigma_ind_cum': m c s\n", - " 1 NaN NaN NaN\n", - " 2 27.984098 7.350190 1.532628\n", - " 3 19.849817 6.990647 6.324445\n", - " 4 17.107383 5.708883 5.902031\n", - " 5 16.660491 9.390668 5.562610\n", - " .. ... ... ...\n", - " 96 55.919632 16.746390 7.992065\n", - " 97 55.807167 17.349791 7.960897\n", - " 98 55.539747 17.343435 7.932783\n", - " 99 55.314654 17.447436 7.893858\n", - " 100 55.120696 17.402199 8.003244\n", - " \n", - " [100 rows x 3 columns],\n", - " 'sigma_corr_cum': m c s\n", - " 1 NaN NaN NaN\n", - " 2 2117.809738 1254.953623 23.291124\n", - " 3 1681.586535 6795.538003 326.639844\n", - " 4 1385.627949 6013.127869 329.210904\n", - " 5 1205.363684 5273.587614 1190.367712\n", - " .. ... ... ...\n", - " 96 2228.792016 8419.282988 3703.976961\n", - " 97 2569.445814 8377.014163 3884.658056\n", - " 98 2558.942418 8335.157861 3865.011184\n", - " 99 2546.986499 8292.537684 3849.886618\n", - " 100 2536.205277 8251.737506 3833.937964\n", - " \n", - " [100 rows x 3 columns]}" - ] + "text/plain": "
", + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-06-18T16:59:05.722205\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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u3btQps2bfC3v/3tT/uuc+rUKURFRSEwMBAzZszA1KlTm3xV5Y31/NH3VOfvf/87zp49i++++w4AUFhYiAULFiAsLAznzp3DkSNHAAClpaUYMWIELl26hFWrVmH9+vUYNmwYFi1ahC5dulg+T86He1DUosTExOCnn35CVFRUg7+AFy1ahOXLl2P06NEwGAx44IEHMG3aNMv6Y8eOIS8vD2azGa+++ip8fHwwcOBAJCQk4PHHH4dMJoOXlxfWrVtX71/2N/P19cWqVavwzDPPwM3NDX369LGsu53tAdcvsc/MzITBYMCjjz7aaJuOHTsiMDAQarUabdq0qbduwIABmDp1KqZMmQKz2QxfX1+88cYbkMut/zdocHAwRo0ahX/+859o3bo1PD09sXjxYqs/f6NbfU912rdvj1WrViE5ORkmkwleXl549dVX4evrizVr1mDlypXQ6/UQQmDlypXo1KkTpkyZgpSUFMvhw65du+Lhhx++rRpJ+mSiKccYiFqorl274tChQ5ZzNEQkfTzER0REksQ9KCIikiTuQRERkSQxoIiISJKc5iq+48ePW36PIQV6vV5S9diSM48N4PhaOo5PGgoLC3HkyBHU1taioqICUVFR+L//+z/89NNPmDp1Kvr162dpq9frERYW1mAbThNQHh4eCAkJcXQZFqWlpZKqx5aceWwAx9fScXzNw2wW+LFci0uVOnT09oR/OxXk8v/9nKK0tBQKhQK5ubkoKCjAli1bkJeXh+LiYmzbtg1Tp06t17YxThNQRETUPMxmgQ9KLiIp7zh0BjM83eTIjA7DyO531wupuiBVq9UIDAyETCaDj48P9Hq9Vf3wHBQRETXJj+VaSzgBgM5gRlLecfxYrq3X7s9+oP5nGFBERNQklyp1lnCqozOYUVal+4NP3B4e4iMioibp6O0JTzd5vZDydJOjg/p/N0MeN26c5XXd3fGB64f9srKyrOqHe1BERNQk/u1UyIwOg6fb9QipOwfl305l0364B0VERE0il8swsvvdCJ4TgbIqHTqoG17FZwsMKCIiajK5XIaAu7wQcJeX/fqw25aJiIjuAAOKiIgkiQFFRESSxIAiIiJJYkAREZEkMaCIiEiSGFBERCRJDCgiIpIkBhQREUkSA4qIiCSJAUVERJLEgCIiIkliQBERkSQxoIiISJIYUEREJEkMKCIikiQGFBERSZJkAqq8vByDBg3C2bNnce7cOcTGxiIuLg7p6ekwm82OLo+IiJqZJALKYDBgyZIl8PT0BACsWLECiYmJ2LFjB4QQKCwsdHCFRETU3JSOLgAAMjIyEBMTg40bNwIASkpK0LdvXwBAZGQkvvjiCzz44IO33IZer0dpaanda7WWTqeTVD225MxjAzi+lo7jcx4OD6j8/Hz4+voiIiLCElBCCMhkMgCASqVCVVXVn27Hw8MDISEhdq21KUpLSyVVjy0589gAjq+l4/hanj8KXIcH1K5duyCTyXDo0CGUlpYiOTkZV65csazXarXw9vZ2YIVEROQIDg+o7du3W17Hx8fjueeew8svv4zi4mL069cPBw8exP333+/AComIyBFsHlBGoxEnT56E0WiEEAJlZWWIiopq0jaSk5ORlpaGzMxMBAQEYMSIEbYuk4iIJM7mAfX000/DYDCgrKwMJpMJHTp0sDqgsrOzLa9zcnJsXRoREbUgNr/MvLq6GllZWQgNDUV+fj70er2tuyAiIhdg84BSKq/vlNXU1MDT0xMGg8HWXRARkQuweUA9+OCDWLduHYKDgxEdHQ2VSmXrLoiIyAXY/BzUxIkTLa8HDRoEf39/W3dBREQuwOYB9fHHHzc497Rp0yZbd0NERE7O5gGVkZGBF154AT4+PrbeNBERuRCbB1RQUBD69etn680SEZGLsXlADR06FBMmTEBAQIBl2YoVK2zdDREROTmbB1R2djamTZsGtVpt600TEZELsXlAtW/fHg899JCtN0tERC7G5gHl6emJJ554At26dbM8MiMpKcnW3RARkZOzeUANHjzY1pskIiIXZPM7Schksnr/ubm54csvv7R1N0RE5ORsvgdVUFAAnU6HsLAwnDhxAnq9HkqlEt26dUNqaqqtuyMiIidll+dBbd26FXK5HGazGQkJCcjKykJMTIytuyIiIidm80N8V69ehdFoBHA9rH7//XcAQG1tra27IiIiJ2bzPai4uDiMHj0aQUFB+P777zFt2jRs2LABERERtu6KiIicmM0Davz48Rg2bBh++ukn+Pn5oW3btjCZTFAoFLbuioiInJjNAmr9+vV46qmnkJSUZPn9U51XXnnFVt0QEZGLsNk5qCFDhgC4/juoXr16oU+fPjh+/Djuu+8+W3VBREQuxGYBFRwcDADIz89HYGAgioqKkJSU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\n" }, - "metadata": {}, - "execution_count": 9 + "metadata": {} } ], "source": [ - "results" + "plot_morris_indices(morris_full, morris_ind)" ] }, { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "source": [ + "### Interpretation\n", + "The input ranking based on $(\\mu_i^{\\ast,\\ ind}, \\mu_i^{\\ast,\\ full})$ differs when independent or full indices are considered.\n", + "\n", + "The ranking in ascending order according to *full* indices is $c - s - m$, whereas the ranking based on *independent* inidces is $m - c - s$. For input $m$ this means that the variance contribution due to the isolated effect of $m$ is much larger than the contribution due to dependence with other inputs. Inputs $c$ and $s$, though, exhibit large effects due to dependence.\n", + "\n", + "Since none of the inputs is close to zero, we can conclude that all three inputs are important in terms of their output variance contribution." + ], + "cell_type": "markdown", + "metadata": {} } ], "metadata": { From 56904843b6ebcbdcb4dc1212a28ea8e8f76d0a5b Mon Sep 17 00:00:00 2001 From: bhmueller Date: Sun, 20 Jun 2021 12:24:09 +0200 Subject: [PATCH 8/9] Clean-up, adapt import statement. --- .../sensitivity-analysis-qualitative.ipynb | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb index 8c635da7..ddcb4ac4 100644 --- a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb +++ b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb @@ -16,16 +16,15 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ - "# from temfpy.uncertainty_quantification import simple_linear_function,\n", - "from morris import elementary_effects # noqa: F401\n", + "from econsa.morris import elementary_effects\n", "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", - "import seaborn as sns " + "import seaborn as sns" ] }, { @@ -104,7 +103,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 2, "metadata": {}, "outputs": [], "source": [ @@ -139,7 +138,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 3, "metadata": {}, "outputs": [], "source": [ @@ -158,7 +157,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 4, "metadata": {}, "outputs": [], "source": [ @@ -175,7 +174,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 5, "metadata": {}, "outputs": [], "source": [ @@ -199,7 +198,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 6, "metadata": {}, "outputs": [ { @@ -214,7 +213,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
musigma
m152.93269454.844400
c57.95336517.314969
s33.1047767.963128
\n
" }, "metadata": {}, - "execution_count": 8 + "execution_count": 6 } ], "source": [ @@ -232,7 +231,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 7, "metadata": {}, "outputs": [ { @@ -247,7 +246,7 @@ "text/html": "
\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
musigma
m2369.1226662523.492389
c3270.0663138210.375153
s2888.3265403814.720109
\n
" }, "metadata": {}, - "execution_count": 9 + "execution_count": 7 } ], "source": [ @@ -266,7 +265,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 8, "metadata": {}, "outputs": [], "source": [ @@ -295,17 +294,19 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 9, "metadata": {}, "outputs": [ { "output_type": "display_data", "data": { "text/plain": "
", - "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-06-18T16:59:05.722205\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", - "image/png": "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u3btQps2bfC3v/3tT/uuc+rUKURFRSEwMBAzZszA1KlTm3xV5Y31/NH3VOfvf/87zp49i++++w4AUFhYiAULFiAsLAznzp3DkSNHAAClpaUYMWIELl26hFWrVmH9+vUYNmwYFi1ahC5dulg+T86He1DUosTExOCnn35CVFRUg7+AFy1ahOXLl2P06NEwGAx44IEHMG3aNMv6Y8eOIS8vD2azGa+++ip8fHwwcOBAJCQk4PHHH4dMJoOXlxfWrVtX71/2N/P19cWqVavwzDPPwM3NDX369LGsu53tAdcvsc/MzITBYMCjjz7aaJuOHTsiMDAQarUabdq0qbduwIABmDp1KqZMmQKz2QxfX1+88cYbkMut/zdocHAwRo0ahX/+859o3bo1PD09sXjxYqs/f6NbfU912rdvj1WrViE5ORkmkwleXl549dVX4evrizVr1mDlypXQ6/UQQmDlypXo1KkTpkyZgpSUFMvhw65du+Lhhx++rRpJ+mSiKccYiFqorl274tChQ5ZzNEQkfTzER0REksQ9KCIikiTuQRERkSQxoIiISJKc5iq+48ePW36PIQV6vV5S9diSM48N4PhaOo5PGgoLC3HkyBHU1taioqICUVFR+L//+z/89NNPmDp1Kvr162dpq9frERYW1mAbThNQHh4eCAkJcXQZFqWlpZKqx5aceWwAx9fScXzNw2wW+LFci0uVOnT09oR/OxXk8v/9nKK0tBQKhQK5ubkoKCjAli1bkJeXh+LiYmzbtg1Tp06t17YxThNQRETUPMxmgQ9KLiIp7zh0BjM83eTIjA7DyO531wupuiBVq9UIDAyETCaDj48P9Hq9Vf3wHBQRETXJj+VaSzgBgM5gRlLecfxYrq3X7s9+oP5nGFBERNQklyp1lnCqozOYUVal+4NP3B4e4iMioibp6O0JTzd5vZDydJOjg/p/N0MeN26c5XXd3fGB64f9srKyrOqHe1BERNQk/u1UyIwOg6fb9QipOwfl305l0364B0VERE0il8swsvvdCJ4TgbIqHTqoG17FZwsMKCIiajK5XIaAu7wQcJeX/fqw25aJiIjuAAOKiIgkiQFFRESSxIAiIiJJYkAREZEkMaCIiEiSGFBERCRJDCgiIpIkBhQREUkSA4qIiCSJAUVERJLEgCIiIkliQBERkSQxoIiISJIYUEREJEkMKCIikiQGFBERSZJkAqq8vByDBg3C2bNnce7cOcTGxiIuLg7p6ekwm82OLo+IiJqZJALKYDBgyZIl8PT0BACsWLECiYmJ2LFjB4QQKCwsdHCFRETU3JSOLgAAMjIyEBMTg40bNwIASkpK0LdvXwBAZGQkvvjiCzz44IO33IZer0dpaanda7WWTqeTVD225MxjAzi+lo7jcx4OD6j8/Hz4+voiIiLCElBCCMhkMgCASqVCVVXVn27Hw8MDISEhdq21KUpLSyVVjy0589gAjq+l4/hanj8KXIcH1K5duyCTyXDo0CGUlpYiOTkZV65csazXarXw9vZ2YIVEROQIDg+o7du3W17Hx8fjueeew8svv4zi4mL069cPBw8exP333+/AComIyBFsHlBGoxEnT56E0WiEEAJlZWWIiopq0jaSk5ORlpaGzMxMBAQEYMSIEbYuk4iIJM7mAfX000/DYDCgrKwMJpMJHTp0sDqgsrOzLa9zcnJsXRoREbUgNr/MvLq6GllZWQgNDUV+fj70er2tuyAiIhdg84BSKq/vlNXU1MDT0xMGg8HWXRARkQuweUA9+OCDWLduHYKDgxEdHQ2VSmXrLoiIyAXY/BzUxIkTLa8HDRoEf39/W3dBREQuwOYB9fHHHzc497Rp0yZbd0NERE7O5gGVkZGBF154AT4+PrbeNBERuRCbB1RQUBD69etn680SEZGLsXlADR06FBMmTEBAQIBl2YoVK2zdDREROTmbB1R2djamTZsGtVpt600TEZELsXlAtW/fHg899JCtN0tERC7G5gHl6emJJ554At26dbM8MiMpKcnW3RARkZOzeUANHjzY1pskIiIXZPM7Schksnr/ubm54csvv7R1N0RE5ORsvgdVUFAAnU6HsLAwnDhxAnq9HkqlEt26dUNqaqqtuyMiIidll+dBbd26FXK5HGazGQkJCcjKykJMTIytuyIiIidm80N8V69ehdFoBHA9rH7//XcAQG1tra27IiIiJ2bzPai4uDiMHj0aQUFB+P777zFt2jRs2LABERERtu6KiIicmM0Davz48Rg2bBh++ukn+Pn5oW3btjCZTFAoFLbuioiInJjNAmr9+vV46qmnkJSUZPn9U51XXnnFVt0QEZGLsNk5qCFDhgC4/juoXr16oU+fPjh+/Djuu+8+W3VBREQuxGYBFRwcDADIz89HYGAgioqKkJSU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\n" + "image/svg+xml": "\r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n 2021-06-20T12:08:30.951267\r\n image/svg+xml\r\n \r\n \r\n Matplotlib v3.3.4, https://matplotlib.org/\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n", + "image/png": "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\n" }, - "metadata": {} + "metadata": { + "needs_background": "light" + } } ], "source": [ From cd36705c5ed9c078fc352d1fe246ccdce79d1bdc Mon Sep 17 00:00:00 2001 From: bhmueller Date: Sun, 20 Jun 2021 17:22:36 +0200 Subject: [PATCH 9/9] Add subsection sampling scheme and seed. --- .../sensitivity-analysis-qualitative.ipynb | 28 +++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb index ddcb4ac4..683a6a38 100644 --- a/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb +++ b/docs/source/tutorials/sensitivity-analysis-qualitative.ipynb @@ -7,6 +7,13 @@ "# Qualitative sensitivity analysis" ] }, + { + "source": [ + "## Morris Method" + ], + "cell_type": "markdown", + "metadata": {} + }, { "cell_type": "markdown", "metadata": {}, @@ -72,6 +79,8 @@ "\n", "- `n_draws`: Number of draws, which corresponds to $N$ above.\n", "\n", + "Additional arguments are optional.\n", + "\n", "Note that the current implementation of the Morris method in `econsa` does allow for Gaussian (i.e. normally distributed) inputs only." ], "cell_type": "markdown", @@ -79,7 +88,7 @@ }, { "source": [ - "## The `func` argument\n", + "### The `func` argument\n", "`func` is the implementation of the model we want to conduct sensitivity analysis for. The Morris method can be applied to all models that return a unique value for a given set of realisations of the model inputs.\n", "\n", "The model implemented by `func` needs to access the inputs in the following way, if the input names are specified in `params` and `cov`:\n", @@ -128,7 +137,7 @@ }, { "source": [ - "## The `params` and `cov` arguments\n", + "### The `params` and `cov` arguments\n", "Specify the input names in the data frames `params` and `cov` to display the input names in the output of `elementary_effects`. `params` is a vector of means of the normally distributed model inputs. `params` needs to be a `pandas.DataFrame` with a colum called `\"value\"`, which contains the means of the inputs.\n", "\n", "`cov` is the corresponding variance-covariance matrix. The variance-covariance matrix describes the dependence structure of the inputs. As `params`, `cov` needs to be a `pandas.DataFrame`. Indices need to be the same as in `params`." @@ -164,6 +173,14 @@ "n_draws = 100" ] }, + { + "source": [ + "### The `sampling_scheme` and `seed` arguments\n", + "By specifying `sampling_scheme` we can choose how uniformly distributed samples are drawn. The uniformly distributed samples are then transfomed to dependently and normally distributed samples. \"sobol\" is used to sample from a low-discrepancy seuqence which generates more evenly distributed samples. When using \"random\", we get pseudo-random samples. `seed` denotes the corresponding seed when generating random numbers. The default is that `sampling_scheme` $=$ \"sobol\" and `seed` $=1$." + ], + "cell_type": "markdown", + "metadata": {} + }, { "source": [ "### The `n_cores` argument\n", @@ -324,6 +341,13 @@ ], "cell_type": "markdown", "metadata": {} + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": {