{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "In this post we discuss modeling covariances beyond the Gaussian approximation.\n", "\n", "" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "text/html": [ "\n", "\n", "

This cell contains some definitions for equations and some CSS for styling\n", " the notebook. If things look a bit strange, please try the following:\n", "

    \n", "
  • Choose \"Trust Notebook\" from the \"File\" menu.
  • \n", "
  • Re-execute this cell.
  • \n", "
  • Reload the notebook.
  • \n", "
\n", "

\n", "
\n" ], "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import mmf_setup;mmf_setup.nbinit(hgroot=False)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Populating the interactive namespace from numpy and matplotlib\n" ] }, { "ename": "TypeError", "evalue": "_parse_args() missing 1 required positional argument: 's'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mscipy\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mstats\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 4\u001b[0;31m \u001b[0mf\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mstats\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlognorm\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m/data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages/scipy/stats/_distn_infrastructure.py\u001b[0m in \u001b[0;36m__call__\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 770\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 771\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 772\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfreeze\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 773\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__doc__\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfreeze\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__doc__\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 774\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages/scipy/stats/_distn_infrastructure.py\u001b[0m in \u001b[0;36mfreeze\u001b[0;34m(self, *args, **kwds)\u001b[0m\n\u001b[1;32m 767\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 768\u001b[0m \"\"\"\n\u001b[0;32m--> 769\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mrv_frozen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 770\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 771\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__call__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;32m/data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages/scipy/stats/_distn_infrastructure.py\u001b[0m in \u001b[0;36m__init__\u001b[0;34m(self, dist, *args, **kwds)\u001b[0m\n\u001b[1;32m 435\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 436\u001b[0m \u001b[0;31m# a, b may be set in _argcheck, depending on *args, **kwds. Ouch.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 437\u001b[0;31m \u001b[0mshapes\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_parse_args\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwds\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 438\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_argcheck\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0mshapes\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 439\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mb\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mb\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: _parse_args() missing 1 required positional argument: 's'" ] } ], "source": [ "%pylab inline --no-import-all\n", "from scipy import stats\n", "\n", "x = np.linspace\n", "f = stats.lognorm.pdf()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Characterization" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Consider a random variable $X$ with probability distribution $f(x)$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Addition of Stochastic Variables" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let $X_n$ be $N$ independent stochastic variables with joint probability density $P_X(x_1, x_2, \\dots, x_N) = P(\\vect{x})$. Then, the probability distribution for the sum $Y = \\sum_n X_n$ is:\n", "\n", "$$\n", " P_Y(y) = \\idotsint \\delta\\Bigl(\\sum_{n}x_n - y\\Bigr)P_X(\\vect{x})\\prod_{n=1}^{N}\\d{x_n}\n", "$$\n", "\n", "If the variables $X_n$ are independent, then $P_X(\\vect{x}) = \\prod_{n}P_{X_n}(x_n)$, and this simplifies:\n", "\n", "$$\n", " P_Y(y) = \\idotsint \\delta\\left(\\sum_{n}x_n - y\\right)\\prod_{n=1}^{N}P_{X_n}(x_n)\\d{x_n}.\n", "$$\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Environment" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Execute the following two cells to define a conda environment for running this notebook." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Overwriting environment.soerp.yml\n" ] } ], "source": [ "%%file environment.soerp.yml\n", "name: blog.soerp\n", "channels:\n", " - defaults\n", " - conda-forge\n", "dependencies:\n", " - ipykernel\n", " - notebook\n", " - uncertainties\n", " - scipy\n", " - matplotlib\n", " - pip:\n", " - soerp\n", " - mmf_setup" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Solving environment: done\n", "Preparing transaction: done\n", "Verifying transaction: done\n", "Executing transaction: done\n", "Looking in links: https://bitbucket.org/mforbes/mypi/\n", "Requirement already satisfied: soerp in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from -r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 1)) (0.9.6)\n", "Requirement already satisfied: mmf_setup in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from -r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 2)) (0.1.11)\n", "Requirement already satisfied: matplotlib in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from soerp->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 1)) (3.0.0)\n", "Requirement already satisfied: numpy in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from soerp->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 1)) (1.15.2)\n", "Requirement already satisfied: ad in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from soerp->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 1)) (1.3.2)\n", "Requirement already satisfied: scipy in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from soerp->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 1)) (1.1.0)\n", "Requirement already satisfied: python-hglib in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from mmf_setup->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 2)) (2.6.1)\n", "Requirement already satisfied: nbstripout>=0.2.0 in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from mmf_setup->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 2)) (0.3.3)\n", "Requirement already satisfied: cycler>=0.10 in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from matplotlib->soerp->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 1)) (0.10.0)\n", "Requirement already satisfied: kiwisolver>=1.0.1 in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from matplotlib->soerp->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 1)) (1.0.1)\n", "Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from matplotlib->soerp->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 1)) (2.2.2)\n", "Requirement already satisfied: python-dateutil>=2.1 in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from matplotlib->soerp->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 1)) (2.7.3)\n", "Requirement already satisfied: nbformat in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from nbstripout>=0.2.0->mmf_setup->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 2)) (4.4.0)\n", "Requirement already satisfied: six in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from cycler>=0.10->matplotlib->soerp->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 1)) (1.11.0)\n", "Requirement already satisfied: setuptools in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from kiwisolver>=1.0.1->matplotlib->soerp->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 1)) (40.4.3)\n", "Requirement already satisfied: ipython-genutils in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from nbformat->nbstripout>=0.2.0->mmf_setup->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 2)) (0.2.0)\n", "Requirement already satisfied: jsonschema!=2.5.0,>=2.4 in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from nbformat->nbstripout>=0.2.0->mmf_setup->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 2)) (2.6.0)\n", "Requirement already satisfied: traitlets>=4.1 in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from nbformat->nbstripout>=0.2.0->mmf_setup->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 2)) (4.3.2)\n", "Requirement already satisfied: jupyter-core in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from nbformat->nbstripout>=0.2.0->mmf_setup->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 2)) (4.4.0)\n", "Requirement already satisfied: decorator in /data/apps/conda/envs/blog.soerp/lib/python3.7/site-packages (from traitlets>=4.1->nbformat->nbstripout>=0.2.0->mmf_setup->-r /Users/mforbes/work/mmfbb/forbes_group_website/posts/draft/blog/condaenv.79jey1_z.requirements.txt (line 2)) (4.3.0)\n", "\u001b[31mmkl-random 1.0.1 requires cython, which is not installed.\u001b[0m\n", "#\n", "# To activate this environment, use\n", "#\n", "# $ conda activate blog.soerp\n", "#\n", "# To deactivate an active environment, use\n", "#\n", "# $ conda deactivate\n", "\n" ] } ], "source": [ "!conda env update -f environment.soerp.yml" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:blog.soerp]", "language": "python", "name": "conda-env-blog.soerp-py" }, "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.0" }, "nikola": { "category": "", "date": "2018-10-15 00:37:20 UTC-07:00", "description": "", "link": "", "slug": "beyond-normal-distributions", "tags": "", "title": "Beyond Normal Distributions", "type": "text" }, "toc": { "base_numbering": 1, "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }