{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Using `mvmlib` to define univariate and multivariate probability density functions\n", "\n", "This tutorial explains how to define different probability density functions using both standard built-in distributions and user-defined custom probability density functions" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Simple 1-dimensional uniform distribution\n", "\n", "We define a uniform distribution function given by:\n", "\n", "$$\n", "X \\sim \\mathcal{U}(c,r),\n", "$$\n", "\n", "where $c$ is the center of the distribution, and $r$ is the range. The distribution's density function $f(x)$ is given by\n", "\n", "$$\n", "f(x)={\n", " \\begin{cases}\n", " 0 &{\\text{for }}x < c-\\frac{r}{2} \\\\\n", " {\\frac{1}{r}} &{\\text{for }}c-\\frac{r}{2} \\leq x \\leq c+\\frac{r}{2} \\\\\n", " 1 &{\\text{for }}x > c+\\frac{r}{2}\n", " \\end{cases}\n", " }\n", "$$" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([12.06919296, 13.10179147, 13.79772695, ..., 5.36410736,\n", " 14.69095015, 9.09991231])" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Simple 1-dimensional uniform distribution\n", "import numpy as np\n", "from mvm import UniformFunc\n", "\n", "center = 10.0\n", "range = 5.0\n", "\n", "dist = UniformFunc(center=np.array([center]), interval=np.array([[range, ]]))\n", "dist.random(10000) # draw 10000 samples from the distribution (they are stores inside)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can check the approximate mean and standard deviations of the distribution and compare them with the exact values" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Approximate mean: 9.993473, \n", "Exact mean: 10.000000\n", "Approximate standard deviation: 2.773436, \n", "Exact standard deviation: 2.886751\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mean = dist.samples.mean() # should be close to 10.0\n", "std = dist.samples.std()\n", "\n", "# true standard deviation\n", "exact_std = np.sqrt(((range*2)**2)/ 12)\n", "\n", "print('Approximate mean: %f, \\nExact mean: %f' %(mean,center))\n", "print('Approximate standard deviation: %f, \\nExact standard deviation: %f' %(std,exact_std))\n", "\n", "dist.view()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1-dimensional Gaussian distribution\n", "\n", "We repeat the same exercise for the Gaussian distribution given by:\n", "\n", "$$\n", "X \\sim \\mathcal{N}(\\mu,\\sigma),\n", "$$\n", "\n", "where $\\mu$ is the mean of the distribution, and $\\sigma$ is the standard deviation." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([12.33780984, 7.29394816, 8.45848063, ..., 6.60838067,\n", " -1.183258 , 8.64297244])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Simple 1-dimensional Gaussian distribution\n", "from mvm import GaussianFunc\n", "\n", "mu = 10.0\n", "sigma = 5.0\n", "\n", "dist = GaussianFunc(mu=np.array([center]), sigma=np.array([[sigma**2, ]]))\n", "dist.random(10000) # draw 10000 samples from the distribution (they are stores inside)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can check the approximate mean and standard deviations of the distribution and compare them with the exact values" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Approximate mean: 10.013612, \n", "Exact mean: 10.000000\n", "Approximate standard deviation: 4.806228, \n", "Exact standard deviation: 5.000000\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "mean = dist.samples.mean() # should be close to 10.0\n", "std = dist.samples.std()\n", "\n", "print('Approximate mean: %f, \\nExact mean: %f' %(mean,mu))\n", "print('Approximate standard deviation: %f, \\nExact standard deviation: %f' %(std,sigma))\n", "\n", "dist.view()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1-dimensional arbitrary distribution\n", "\n", "We define a random distribution using a custom piecewise linear probability density function given by:\n", "\n", "$$\n", "f(x)={\n", " \\begin{cases}\n", " -0.1x &{\\text{for }}x < 0 \\\\\n", " 0.5x &{\\text{for }}0 \\leq x \\leq 50 \\\\\n", " 1 &{\\text{for }}x > 50\n", " \\end{cases}\n", " }\n", "$$\n", "\n", "The density function can be defined by the user as follows. \n", "*The density function is divided by the total area to ensure that total probability of the density function does not exceed 1*" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from mvm import Distribution\n", "import matplotlib.pyplot as plt\n", "\n", "x = np.linspace(-100, 100, 100) # 2D grid\n", "\n", "# define a piecewise linear function\n", "def density(x):\n", " density = np.empty(0)\n", " for value in x:\n", " if value <= 0:\n", " p = -0.1 * value\n", " elif value > 0 and value <= 50:\n", " p = 0.5 * value\n", " else:\n", " p = 50\n", " \n", " density = np.append(density,p)\n", "\n", " area = np.trapz(density, x)\n", " density /= area # normalize by the area\n", " \n", " return density\n", "\n", "p = density(x)\n", "plt.plot(x,p)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The values of the density function can be fed to the ``Distribution`` class and used for further sampling" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# define the arbitrary distribution by providing the density values\n", "dist = Distribution(p,lb=-100,ub=100)\n", "dist.random(10000)\n", "dist.view()\n", "\n", "# Compare with exact density function\n", "fig, ax = plt.subplots(figsize=(7, 6))\n", "ax.set_xlabel('values')\n", "ax.set_ylabel('density')\n", "\n", "ax.hist(dist.random(10000).squeeze(), bins=100, density=True)\n", "ax.plot(np.linspace(-100,100,100),p)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2-dimensional Gaussian distribution\n", "\n", "We define a 2-dimensional joint probability density function using the same built-in ``Guassian`` class. The joint PDF is given as follows\n", "\n", "$$\n", "X \\sim \\mathcal{N}(\\boldsymbol{\\mu},\\boldsymbol{\\Sigma}),\n", "$$\n", "\n", "where $\\boldsymbol{\\mu}$ is the vector of means, and $\\boldsymbol{\\Sigma}$ is the covariance matrix.\n", "\n", "The density function can be defined by the user as follows. " ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "approximate means:\n", "[9.97413398 4.97442997]\n", "exact means:\n", "[10. 5.]\n", "approximate standard deviations (diagonal of cov matrix):\n", "[0.9920326 1.88438444]\n", "Exact standard deviations (diagonal of cov matrix):\n", "[1. 2.]\n" ] }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# 2D example\n", "mean_1 = 10.0\n", "mean_2 = 5.0\n", "sd_1 = 1.0\n", "sd_2 = 2.0\n", "cov = 0.0\n", "\n", "mean_vector = np.array([mean_1, mean_2])\n", "cov_matrix = np.array([[sd_1 ** 2, cov], [0, sd_2 ** 2]])\n", "\n", "dist = GaussianFunc(mu=mean_vector, sigma=cov_matrix)\n", "\n", "dist.random(1000)\n", "mean = dist.samples.mean(axis=1)\n", "std = dist.samples.std(axis=1)\n", "\n", "print('approximate means:')\n", "print(mean)\n", "print('exact means:')\n", "print(mean_vector)\n", "\n", "print('approximate standard deviations (diagonal of cov matrix):')\n", "print(std)\n", "print('Exact standard deviations (diagonal of cov matrix):')\n", "print(np.sqrt(cov_matrix.diagonal()))\n", "\n", "# View distribution\n", "dist.view()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also introduce some covariance" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "mean_1 = 10.0\n", "mean_2 = 5.0\n", "sd_1 = 1.0\n", "sd_2 = 2.0\n", "cov = 2.0\n", "\n", "mean_vector = np.array([mean_1, mean_2])\n", "cov_matrix = np.array([[sd_1 ** 2, cov], [0, sd_2 ** 2]])\n", "\n", "dist = GaussianFunc(mu=mean_vector, sigma=cov_matrix)\n", "\n", "dist.random(1000)\n", "\n", "# View distribution\n", "dist.view()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define a two dimensional arbitrary joint PDF\n", "\n", "This requires more effort from the user to define the two-dimensional joint probability density function. We show this can be done to reproduce the 2D Gaussian function above. The ``Gaussian`` class provides the ``compute_density`` method for getting the density values.\n", "\n", "We use the design of experiments library in ``mvmlib`` to calculate a full-factorial 2D grid of density values first." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from mvm import Design\n", "\n", "x = Design(np.array([-100, -100]), np.array([100, 100]), 512, \"fullfact\").unscale() # 2D grid\n", "p = dist.compute_density(x) # get density values\n", "dist_arb = Distribution(p.reshape((512, 512)))\n", "dist_arb.random(1000)\n", "\n", "dist_arb.view()" ] } ], "metadata": { "interpreter": { "hash": "6a1ca82f884e303eade0b084eed1fa8d4270d239e28159ebfca44dba65cf577e" }, "kernelspec": { "display_name": "Python 3.7.9 ('.env': venv)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.9" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }