Skip to content

Instantly share code, notes, and snippets.

@mmore500
Created January 18, 2022 17:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mmore500/2b95ef3279e49fc1780b3b319c35083a to your computer and use it in GitHub Desktop.
Save mmore500/2b95ef3279e49fc1780b3b319c35083a to your computer and use it in GitHub Desktop.
symmetric_pareto.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"name": "symmetric_pareto.ipynb",
"provenance": [],
"collapsed_sections": [],
"authorship_tag": "ABX9TyN4QJtNmq0c60TkyEz4q1Mu",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/mmore500/2b95ef3279e49fc1780b3b319c35083a/symmetric_pareto.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "WA0VRxjNhkGH"
},
"outputs": [],
"source": [
"from matplotlib import pyplot as plt\n",
"import numpy as np"
]
},
{
"cell_type": "code",
"source": [
"def bounded_pareto_pdf(x, *, alpha=1.0, lower_bound=1.0, upper_bound=float('inf')):\n",
" return alpha * lower_bound**alpha * x**(-alpha-1) / (1 - (lower_bound / upper_bound)**alpha)"
],
"metadata": {
"id": "Kr0cCFLCjooO"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"def symmetric_pareto_pdf(x, *, alpha=1.0, lower_bound=float('-inf'), upper_bound=float('inf'), normalized=True):\n",
"\n",
" assert upper_bound >= 0\n",
" assert lower_bound <= 0\n",
"\n",
" mu = (\n",
" 1 / (1 + min([-lower_bound, upper_bound]))\n",
" if upper_bound != -lower_bound else\n",
" 0.5\n",
" )\n",
"\n",
" if not normalized:\n",
" mu = 1\n",
" \n",
" return mu * bounded_pareto_pdf(\n",
" abs(x), \n",
" alpha=alpha, \n",
" lower_bound=0.01, \n",
" upper_bound=(\n",
" upper_bound\n",
" if x > 0 else\n",
" -lower_bound\n",
" )\n",
" )"
],
"metadata": {
"id": "94TgY8SRq5b0"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"def plot_symmetric_pareto(*, alpha=1.0, lower_bound=float('-inf'), upper_bound=float('inf')):\n",
"\n",
" xs = np.logspace(0.01, min([upper_bound, 100])) \n",
" ys = [symmetric_pareto_pdf(x, alpha=alpha, lower_bound=lower_bound, upper_bound=upper_bound) for x in xs]\n",
" plt.plot(xs, ys, 'k')\n",
" \n",
" xs = -np.logspace(0.01, min([-lower_bound, 100])) \n",
" ys = [symmetric_pareto_pdf(x, alpha=alpha, lower_bound=lower_bound, upper_bound=upper_bound) for x in xs]\n",
" plt.plot(xs, ys, 'k')\n",
"\n",
" plt.gca().set_xscale('symlog')\n",
" plt.gca().set_yscale('log')\n"
],
"metadata": {
"id": "oPLsJlvrjSiW"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "code",
"source": [
"plot_symmetric_pareto(lower_bound=-50, upper_bound=10)"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 269
},
"id": "CufLPrcykn6A",
"outputId": "d0fb6729-38b3-407e-c817-ef3bc132a750"
},
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"source": [
"plot_symmetric_pareto()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 269
},
"id": "Arc8P7FtyhZL",
"outputId": "50014d92-d40e-42ad-cfa4-d74353f958c5"
},
"execution_count": null,
"outputs": [
{
"output_type": "display_data",
"data": {
"image/png": "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HD58mIyMDPr37287TpMRETIyMujXrx/h4eHoMT3lKxLon80OCwszBQUFtmMoP5Kbm0tERAQLFizg+eeftx3HiiNHjjB06FAeeOAB9u7dS1BQkO1Iys+ISKExJqy219fTfahm5fjx48yYMYOf/vSnJCcn245jzb/8y7+wfv169u3bx8qVK23HUc2ANgvVbFy8eBGHw0H79u39eiKjphITE8PUqVNJTEzkjTfesB1HBThtFqpZMMbw+OOP895775GVlcVtt91mO5J1IsKGDRu4++67iYqKoqSkxHYkFcC0WahmIT09nczMTJYtW8YvfvEL23H8RocOHXC73Vy+fJnw8HDKyspsR1IBSpuFCnhHjhxh7ty5jBgxguXLl9uO43cGDBhAWloab7/9Nv/2b/9mO44KUNosVEA7d+4cDoeD7t27k52drZ/6qcaECROYN28eL7zwAjt37rQdRwUgbRYqYBljmD59Oh9//DG5ubnccssttiP5tdWrVzNkyBCio6MpLi62HUcFGG0WKmClpKSwc+dOkpOTuf/++2u+QQvXrl07XC4XQUFBOBwOLl26ZDuSCiDaLFRAOnjwIIsWLeJXv/oVCxcutB0nYPTr14+tW7fy7rvvEhcXZzuOCiDaLFTAOXPmDOHh4fTt25f09HQ9u2odPfLIIyxZsoS0tDQyMzNtx1EBQpuFCigVFRVERUXx1Vdf4Xa7ufnmm21HCkiJiYkMHz6cOXPmcPToUdtxVADQZqECysqVK9m3bx9r164lNFSnaK+v1q1bs337drp06YLD4eD8+fO2Iyk/p81CBYw33niDxMREpkyZwsyZM23HCXg9e/YkNzeXDz/8kBkzZhDoJxVVjUubhQoIJSUlREVFERISwoYNG/Q4hY888MADJCUlkZeX1yImiFL1p81C+b2ysjImTJjA5cuX2bFjBx07drQdqVmJj4/nl7/8JU8++SSHDh2yHUf5KavNQkRaiUiSiKwTkamesbtEZJOIuEVkjs18yj8sXryYgwcPkpaWxoABA2zHaXZatWpFZmYmvXv3xul0cvbsWduRlB9qyEx56SLypYgc8xofJSLHRaRYRBbXUGYs1+bpLgNKAIwxRcaYWCAc0G9atXA7d+7k+eefZ968eUyYMMF2nGbrn/7pn3C73Zw+fZrJkydz9epV25GUn2nInsUWYFTlAREJAl4CRgMhQKSIhIjIQBF53evSAxgAHDTGLATmVKrzKPB7YE8D8qkAV1xcTHR0NPfeey+rV6+2HafZ+/GPf0xKSgp79+7l2WeftR1H+ZnW9b2hMSZfRG73Gr4XKDbGfAQgIjnAWGPMs8AY7xoiUgJc8SxWVKq9C9glIr8Hsqu43SxgFkDfvn3rexeUH7t06RIOh4OgoCDy8vJo166d7UgtQmxsLAcOHGD58uXcd999/PznP7cdSfkJXx+z6A2cqrRc4hmrzk5gpIisA/IBRGS4iKwVkc1Us2dhjEk1xoQZY8L05HHNU1xcHO+++y7btm2jX79+tuO0GCJCamoqAwYMIDIyks8++8x2JOUn6r1n4QvGmItAjNfYW8BbNvIo/5CZmUlaWhpLlizh4Ycfth2nxenUqRNut5shQ4YQGRnJf//3f9O6tdWXCuUHfL1n8SnQp9LybZ4xpWrl6NGjzJkzh+HDh5OYmGg7TosVEhJCamoq+fn5PP3007bjKD/g62bxJ6C/iNwhIm2BCGCXj9ehmqnz58/jdDrp0qUL27dv179mLYuKimL27NkkJyeza5c+jVu6hnx0djvwNjBAREpEJMYYUw7MA/4IFAF5xpj3fBNVNWfGGGbMmMEHH3xATk4OPXv2tB1JcW3OkMGDBzN16lROnDhhO46yqN7NwhgTaYz5/4wxbYwxtxljXvGM7zHG3GmM+aExJsl3UVVz9tJLL5GXl0dSUhIPPvig7TjKo3379rhcLowxOJ1OLl++bDuSskRP96GsO3z4MAsXLmTMmDEsWrTIdhzlJTg4mMzMTAoLC3WiqRZMm4Wy6uzZszidTnr37k1mZiatWukm6Y/Gjh1LfHw8GzduJCsry3YcZYE+M5U1V69eZfLkyXzxxRe4XC66du1qO5K6gaSkJIYNG8bs2bP5y1/+YjuOamLaLJQ1q1atYu/evaSkpBAWFmY7jqpBmzZtyM3NpWPHjjgcDi5cuGA7kmpC2iyUFfv372fZsmVERkYSGxtrO46qpV69epGdnc3x48eJjY3VCZNaEG0Wqsl99tlnREZGcuedd5KamqoTGQWYhx56iMTERLKysti8ebPtOKqJaLNQTaq8vJyIiAguXLiA2+2mU6dOtiOpeliyZAmjR49m/vz5FBYW2o6jmoA2C9Wkli5dyoEDB0hNTeXuu++2HUfVU6tWrdi6dSu33norDoeD0tJS25FUI9NmoZrMrl27eO6555g9ezZRUVG246gG6tatGy6Xi08//ZSpU6fqhEnNnDYL1SROnDjB1KlTGTx4MCkpKbbjKB/5yU9+wpo1a9i9e7dOUNXMabNQje7y5cs4nU6MMbhcLtq3b287kvKhefPmER4ezpIlS8jPz7cdRzUSbRaq0S1cuJDCwkJeffVVgoODbcdRPiYivPzyywQHBxMREcHp06dtR1KNQJuFalTZ2dls3LiR+Ph4Hn30UdtxVCPp3LkzO3bs4Ouvv2bixIlUVFTUfCMVULRZqEZTVFTErFmz+NnPfkZSkp6AuLkbOHAgGzZsYP/+/axYscJ2HOVj2ixUo7hw4QLjx4+nY8eO5OTk0KZNG9uRVBOYNm0a06dPJykpib1799qOo3zIarMQkb4i8h8iki4ii6sbU4HFGENsbCx//etfyc7OplevXrYjqSa0fv16Bg0axKRJkzh58qTtOMpHGjJTXrqIfCkix7zGR4nIcREprsWL/UDAbYyZDoTeYEwFkNTUVLKysnjmmWd46KGHbMdRTeymm27C7XZTVlZGeHg4V65csR1J+UBD9iy2AKMqD4hIEPASMBoIASJFJEREBorI616XHsD/AjEish/4g6dMVWMqQPz5z38mLi6OUaNGsWTJEttxlCX9+/cnIyODQ4cO8dRTT9mOo3ygIdOq5gN/8xq+Fyg2xnxkjLkC5ABjjTFHjTFjvC5fAtHACmPMz4FHPDWqGvseEZklIgUiUnDmzJn63gXlY6WlpTgcDnr06MHWrVt1IqMWbvz48fz6179m3bp15OXl2Y6jGsjXz+bewKlKyyWeser8AYgTkU3AxzcY+x5jTKoxJswYE3bLLbc0OLRqOGMM06ZN49SpU7hcLrp37247kvIDycnJ3HfffcTExHD8+HHbcVQDtLa5cmPMMcBR05jyf6tXr2bXrl28+OKLDB061HYc5Sfatm1Lbm4uoaGhOBwODh06RIcOHWzHUvXg6z2LT4E+lZZv84ypZiw/P5+EhAScTidPPPGE7TjKz/Tp04esrCzee+895syZoxMmBShfN4s/Af1F5A4RaQtEALt8vA7lR06fPk1ERATBwcGkpaXpREaqSiNHjmTZsmW8+uqrvPLKK7bjqHpoyEdntwNvAwNEpEREYowx5cA84I9AEZBnjHnPN1GVv6moqCAyMpKvv/6aHTt20LlzZ9uRlB9bvnw5I0aMYN68eRw5csR2HFVH9T5mYYyJrGZ8D7Cn3olUwFixYgVvvvkmGRkZDBw40HYc5eeCgoLIysr67vhFYWEhXbp0sR1L1ZJ+tlHVy969e0lKSiImJoZp06bZjqMCRI8ePcjLy+Pjjz9m+vTpevwigGizUHV28uRJJk2axD333MO6detsx1EB5v777yc5OZmdO3fqRFgBRJuFqpMrV64QHh5OeXk5LpeLm266yXYkFYAWLlzIuHHjWLRoEQcPHrQdR9WCNgtVJ/Hx8Rw6dIiMjAz69+9vO44KUCJCRkYGffv2JTw8HD0Tg//TZqFqzeVysXbtWn7961/z2GOP2Y6jAtzNN9+M2+3mq6++IioqSidM8nPaLFStvP/++8TExDB06FCSk5Ntx1HNRGhoKOvWrWPfvn2sXLnSdhx1A9osVI0uXryIw+Ggbdu25OXl0bZtW9uRVDMyY8YMpkyZQmJiIvv27bMdR1VDm4W6IWMMjz/+OMeOHSMrK4s+ffrUfCOl6kBE2LBhAyEhIUycOJGSkhLbkVQVtFmoG0pPTyczM5Nly5YxcuRI23FUM9WxY0fcbjeXL19mwoQJlJWV2Y6kvGizUNU6cuQI8+bNY8SIESxfvtx2HNXM/ehHP+Lll1/m4MGDJCQk2I6jvGizUFU6d+4cDoeDrl27kpWVRVBQkO1IqgWIiIhg7ty5rFmzhp07d9qOoyrRZqH+gTGG6OhoPv74Y/Ly8ujRo4ftSKoFWbNmDUOGDCE6Opri4mLbcZSHNgv1D1JSUnjttddITk7m/vvvtx1HtTDt2rXD5XIRFBSE0+nk0qVLtiMptFkoLwcPHmTRokWMGzeOhQsX2o6jWqh+/fqxbds2jhw5QlxcnO04iiZsFiISLCKviIi7ujERuUtENomIW0TmNFU2dc2ZM2cIDw+nb9++ZGRk6ERGyqqHH36YJUuWkJaWRmZmpu04LV6tmoWIpIvIlyJyzGt8lIgcF5FiEVl8oxrGmI+MMTE3GjPGFBljYoFwQN//aEIVFRVMmjSJr776Crfbzc0332w7klIkJiYyfPhw5syZw9GjR23HadFqu2exBRhVeUBEgoCXgNFACBApIiEiMlBEXve61PoIqYg8CvwenUCpSa1cuZI33niDdevWERoaajuOUgC0bt2a7du306VLFxwOB3//+99tR2qxatUsjDH5wN+8hu8Fij17B1eAHGCsMeaoMWaM1+XL2gYyxuwyxowGomp7G9Uw+/btIzExkcmTJzNjxgzbcZT6np49e5KTk0NxcTEzZ87UCZMsacgxi97AqUrLJZ6xKolINxHZBISKSEJVYyIyXETWishmbrBnISKzRKRARAr01MYNU1JSwsSJEwkJCWHjxo16nEL5pQcffJCkpCTy8vJ46aWXbMdpkeo9B3ddGWPOArE1jQFv1aJWKpAKEBYWpn9m1FNZWRkTJkzg8uXL7Nixg44dO9qOpFS1Fi1axP/8z/+wcOFChgwZwk9+8hPbkVqUhuxZfApUPqvcbZ4xFSAWL17MwYMHSUtLY8CAAbbjKHVDrVq1IjMzk969exMeHs7Zs2dtR2pRGtIs/gT0F5E7RKQtEAHs8k0s1dh27tzJ888/z9y5c5kwYYLtOErVSteuXXG5XHzxxRdMnjyZq1ev2o7UYtT2o7PbgbeBASJSIiIxxphyYB7wR6AIyDPGvNd4UZWvFBcXEx0dzZAhQ1izZo3tOErVSVhYGCkpKezdu5dVq1bZjtNiSKB/siAsLMwUFBTYjhEwLl26xE9/+lM++eQT3nnnHfr162c7klJ1ZowhKiqK3Nxc/uu//ot//dd/tR0p4IhIoTEmrLbX19N9tDBxcXEcOXKErVu3aqNQAUtESE1NZcCAAURGRvL555/bjtTsabNoQV599VXS0tJISEjgkUcesR1HqQbp1KkTbreb8+fPExERQXl5ue1IzZo2ixbi6NGjxMbGMnz4cJ555hnbcZTyiZCQEFJTU8nPz+fpp5+2HadZ02bRApw/fx6n00mXLl3Yvn07rVs32ddrlGp0UVFRzJ49m+TkZHbv3m07TrOlzaKZM8YwY8YMPvjgA3JycujZs6ftSEr5XEpKCoMHD2bKlCmcOHHCdpxmSZtFM/fSSy+Rl5dHUlISDz74oO04SjWK9u3b43K5MMbgdDq5fPmy7UjNjjaLZuzw4cMsXLiQMWPGsGjRIttxlGpUwcHBZGZmUlhYqBN3NQJtFs3U2bNncTqd9O7dm8zMTFq10v9q1fyNHTuW+Ph4Nm7cSHZ2tu04zYq+gjRDV69eZcqUKXzxxRe4XC66du1qO5JSTSYpKYlhw4Yxa9YsioqKbMdpNrRZNEOrVq1iz549vPDCC4SF1foLmko1C23atCE3N5eOHTsyfvx4Lly4YDtSs6DNopl58803WbZsGREREcyZo9OYq5apV69eZGdn89e//pXY2FidMMkHtFk0I59//jmRkZHceeedpKam6kRGqkV76KGHeOaZZ8jKyiI1NdV2nICnzaKZKC8vJyIigvPnz+N2u/nBD35gO5JS1i1ZsoRRo0YRFxdHYWGh7TgBTZtFM7Fs2TLy8/PZtGkTd999t+04SvmFVq1asXXrVnr06IHT6aS0tNR2pIClzaIZ2L17N6tWrWL27NlMnjzZdhyl/Er37t1xuVycOnWKadOm6fGLemqyZiEiwSLyioi4K43dJSKbRMQtInNEpK+I/IeIpIvI4qbKFshOnDjBlClTGDx4MCkpKbbjKOWXhg4dyurVq9m1axerV6+2HScg1XamvHQR+VJEjnmNjxKR4yJSXNOLuzHmI2NMjNdYkTEmFggH7gcGAm5jzHQgtE73pAX69ttvcTqdGGNwuVy0b9/ediSl/FZcXBwOh4OEhATy8/Ntxwk4td2z2AKMqjwgIkHAS8BoIASIFJEQERkoIq97XXpUV1hEHgV+D+wB/heIEZH9wB/qfndalgULFlBYWEhmZibBwcG24yjl10SEV155heDgYCIiIjh9+rTtSAGlVs3CGJMP/M1r+F6g2LPHcAXIAcYaY44aY8Z4Xb68Qe1dxpjRQBQQDawwxvwc0Nl5biA7O5uNGzfy1FNPMXbsWNtxlAoInTt3xu12U1paysSJE6moqLAdKWA05JhFb+BUpeUSz1iVRKSbiGwCQkUkwTM2XETWishmru1Z/AGI81zv4xvUmiUiBSJScObMmQbchcBUVFTErFmzGDZsGL/97W9tx1EqoAwaNIiNGzeyf/9+fvOb39iOEzCabBYcY8xZINZr7C3gLa+rOmpRKxVIBQgLC2tRH224cOEC48ePp0OHDuTk5NCmTRvbkZQKONOmTePAgQOsXLmSn/70p4wePdp2JL/XkD2LT4E+lZZv84ypRmKMITY2lr/+9a9s376d3r2r3ZFTStVg/fr1DBo0iEmTJnHy5EnbcfxeQ5rFn4D+InKHiLQFIoBdvomlqpKamkpWVhaJiYk89NBDtuMoFdBuuukmduzYQVlZGeHh4Vy5csV2JL9W24/ObgfeBgaISImIxBhjyoF5wB+BIiDPGPNe40Vt2QoLC4mLi2PkyJEsXbrUdhylmoV//ud/JiMjg0OHDhEfH287jl+TQP82Y1hYmCkoKLAdo1GVlpby4x//mLKyMt555x26d+9uO5JSzcqCBQtISUkhLy8Pp9NpO06TEJFCY0yt5zDQ0334OWMM06ZN49SpU7hcLm0USjWC5ORk7rvvPqZPn877779vO45f0mbh5yqfomDo0KG24yjVLLVt25bc3FzatWuHw+Hg4sWLtiP5HW0WfuzAgQMkJCTgdDqJi4uzHUepZq1Pnz5kZWVx7Ngx5s6dazuO39Fm4adOnz7NhAkTCA4OJi0tTScyUqoJjBw5kmXLlrFlyxbS09NtxxfvMogAABG3SURBVPEr2iz8UEVFBRMnTqS0tBS3203nzp1tR1KqxVi+fDkjRoxg7ty5vPvuu7bj+A1tFn7oN7/5Dfv372fDhg0MGjTIdhylWpSgoCCysrLo2rUrDoeDc+fO2Y7kF7RZ+Jm9e/eycuVKoqOjiY6Oth1HqRapR48e5ObmcuLECaZPn64TJqHNwq+cPHmSSZMmMWjQINavX287jlIt2rBhw0hOTmbnzp28+OKLtuNYp83CT1y5coXw8HDKyspwu9106NDBdiSlWryFCxcybtw44uPjOXjwoO04Vmmz8BPx8fEcOnSI9PR0+vfvbzuOUoprEyZlZGTQt29fJkyYQEucEuE6bRZ+wOVysXbtWubPn4/DUeMZ2pVSTejmm2/G7XZz5swZJk2a1GInTNJmYdnx48eZPn06Q4cO5bnnnrMdRylVhdDQUNatW8cbb7xBUlKS7ThWaLOw6OLFizidTtq1a0deXh5t27a1HUkpVY0ZM2YwZcoUfvOb37Bv3z7bcZqcNguL5s6dy7Fjx8jKyqJPnz4130ApZY2IsGHDBkJCQpg4cSIlJSW2IzUpbRaWpKens2XLFpYtW8bIkSNtx1FK1ULHjh1xu91cvnyZCRMmUFZWZjtSk2myZiEiwSLyioi4K421EpEkEVknIlNF5C4R2SQibhGZ01TZmtq7777L3LlzGTFiBMuXL7cdRylVBz/60Y94+eWXOXjwIAkJCbbjNJnazpSXLiJfisgxr/FRInJcRIpFZPGNahhjPjLGxHgNj+Xa3N1lQIkxpsgYEwuEA/fX/m4EjnPnzuFwOOjatStZWVkEBQXZjqSUqqOIiAjmzp3LmjVreO2112zHaRK13bPYAoyqPCAiQcBLwGggBIgUkRARGSgir3tdelRTdwBw0BizEJjjqfso8HtgT93vjn8zxhATE8OJEyfIzc2lR4/qHhallL9bs2YNQ4YMYdq0aXz44Ye24zS6WjULY0w+8Dev4XuBYs8ewxUgBxhrjDlqjBnjdfmymtIlQKnn9wrPunYZY0YDUdXlEZFZIlIgIgWB9CWZF198kR07drBq1SqGDRtmO45SqgHatWuHy+UiKCgIh8PBpUuXbEdqVA05ZtEbOFVpucQzViUR6SYim4BQEbn+Rt9OYKSIrAPyRWS4iKwVkc3cYM/CGJNqjAkzxoTdcsstDbgLTefgwYPEx8czbtw4nnzySdtxlFI+0K9fP7Zu3cqRI0eYP3++7TiNqnVTrcgYcxaI9Rq7CHgfx3irqTI1lTNnzhAeHk7fvn3JyMjQiYyUakYeeeQREhISePbZZxk2bBhTpkyxHalRNGTP4lOg8pcDbvOMqUoqKiqYNGkSX331FS6Xi5tvvtl2JKWUjz3zzDMMHz6c2NhYjh07VvMNAlBDmsWfgP4icoeItAUigF2+idV8rFy5kjfeeIN169YxePBg23GUUo2gdevWbN++nS5duuBwODh//rztSD5X24/ObgfeBgaISImIxBhjyoF5wB+BIiDPGPNe40UNPPv27SMxMZHJkyczY8YM23GUUo2oZ8+e5OTk8MEHHzBz5sxmN2GSBPodCgsLMwUFBbZj/IOSkhJCQ0O59dZbOXToEB07drQdSSnVBFatWkVCQgLr169n7ty5tuNUS0QKjTFhtb2+nu6jEZSVlTFhwgQuXbqE2+3WRqFUC7Jo0SLGjBnDggULOHz4sO04PqPNohEsXryYgwcPkpaWxo9+9CPbcZRSTahVq1ZkZmbSq1cvnE4nZ8+etR3JJ7RZ+NjOnTt5/vnnmTt3LhEREbbjKKUs6Nq1Ky6Xiy+++IIpU6Zw9epV25EaTJuFDxUXFxMdHc2QIUNYs2aN7ThKKYuGDBnCCy+8wJ49e0hOTrYdp8G0WfjIpUuXcDqdBAUFkZeXR7t27WxHUkpZNmfOHCIiInj66ad58803bcdpEG0WPjJ//nyOHDnCq6++yu233247jlLKD4gIqamp3HnnnURGRvL555/bjlRv2ix8YOvWrbz88sskJCQwZswY23GUUn7kBz/4AW63m/PnzxMREUF5ebntSPWizaKBjh07xuzZs3nwwQd55plnbMdRSvmhu+++m82bN5Ofn8/TTz9tO069aLNogPPnz+NwOOjSpQs5OTm0bt1k52VUSgWYSZMmMWvWLJKTk9m9e7ftOHWmzaKejDHMnDmTDz74gO3bt9OzZ0/bkZRSfu7FF18kNDSUKVOmcOLECdtx6kSbRT1t2LCB3NxckpKSGD58uO04SqkA0L59e1wuF8YYnE4n3377re1ItabNoh4OHz7MggULGDNmDIsWLbIdRykVQH74wx+yZcsWCgsLWbBgge04tabNoo7Onj2L0+mkV69eZGZm0qqVPoRKqboZN24cTz31FBs3biQ7O9t2nFrRV7o6uHr1KlOmTOHzzz/H5XLRtWtX25GUUgHqt7/9LcOGDWPWrFkUFRXZjlMjbRZ1sGrVKvbs2UNKSgpDhgyxHUcpFcDatGlDTk4OHTp0wOFw8M0339iOdENN1ixEJFhEXhERd6WxviLyHyKSLiKLvZebKlttvPnmmyxbtozIyEjmzJljO45Sqhno3bs327dvp6ioiNmzZ/v1hEm1nSkvXUS+FJFjXuOjROS4iBTX9OJujPnIGBPjNTwQcBtjpgOhVSz7hc8//5zIyEjuvPNOUlNTERHbkZRSzcRDDz1EYmIiWVlZpKam2o5TrdruWWwBRlUeEJEg4CVgNBACRIpIiIgMFJHXvS49qqn7v0CMiOwH/lDFsnXl5eVERERw/vx53G43nTp1sh1JKdXMLF26lJEjRxIXF0dhYaHtOFWqVbMwxuQDf/Mavhco9uwxXAFygLHGmKPGmDFely+rKR0NrDDG/Bx4pIrlKonILBEpEJGCM2fO1OYu1NuyZcvIz89n8+bN3H333Y26LqVUy9SqVSu2bdtGjx49cDqdlJaW2o70DxpyzKI3cKrScolnrEoi0k1ENgGhIpLgGf4DEOcZ/7iK5SoZY1KNMWHGmLBbbrmlAXfhxl5//XVWrVrFrFmzmDRpUqOtRymlunfvjsvl4tSpU0RHR/vd8YsmO5mRMeYsEOs1dgxweF3Ve9mKEydOMHnyZEJDQ3nxxRdtx1FKtQBDhw5l9erV/PrXv2b16tXEx8fbjvSdhuxZfAr0qbR8m2cs4H377beEh4djjMHlctG+fXvbkZRSLURcXBzjx48nISGBAwcO2I7znYY0iz8B/UXkDhFpC0QAu3wTy66FCxdSUFDAli1b+OEPf2g7jlKqBRER0tPTCQ4OZsKECZw+fdp2JKD2H53dDrwNDBCREhGJMcaUA/OAPwJFQJ4x5r3Gi9o0srOz2bBhA0899RTjxo2zHUcp1QJ17twZt9tNaWkpEydOpKKiwnYkxN8OotRVWFiYKSgo8EmtoqIihgwZQmhoKPv376dNmzY+qauUUvWRkZHB9OnTefrpp/n3f/93n9YWkUJjTFhtr6+n+/D45ptvcDgcdOjQgZycHG0USinroqOjiY6OZuXKlezdu9dqFm0WXJvIaPbs2RQVFZGdnU3v3tV+AlgppZrU+vXrGTRoEJMmTeLkyZPWcmizAFJTU8nKyiIxMZERI0bYjqOUUt/p0KEDbrebsrIywsPDuXLlipUcLb5ZFBYWEhcXx8iRI1m6dKntOEop9Q/69+9Peno6hw4dsvbdixbdLEpLS3E6nfTo0YNt27bpREZKKb/lcDiYP38+a9euxeVyNfn6W+yrozGGadOmcerUKfLy8ujevbvtSEopdUPPPfccQ4cOJSYmhvfff79J191im8Xq1avZtWsXv/vd77jvvvtsx1FKqRq1bduWvLw82rZti8Ph4OLFi0227hbZLIwxvPPOO4wfP5758+fbjqOUUrXWp08ftm3bxtdff80nn3zSZOttsV/KM8bw7bff6nmflFIB6fLlyw16/dIv5dWSiGijUEoFrKZ+/WqxzUIppVTtabNQSilVI20WSimlaqTNQimlVI20WSillKqRNgullFI10mahlFKqRgH/pTwROQNU9zXG7sBXjbTqQKwdiJkbs3ZjZ74u0B6XxqwdiJkbs7bNzP2MMbfUtljAN4sbEZGCunxDsbnXDsTMjVm7sTNf/z3QHpfGrB2ImRuzdiBl1rehlFJK1UibhVJKqRq1th2gkaVq7SapG6i1AzFzU61DH/OmqR0wmZv1MQullFK+oW9DKaWUqpE2C6WUUjXSZqGUUqpGLa5ZiEiwiLwiIm7PckcRyRSRl0UkyjM2XEQOiMgmERlex/ohIpInIhtFxFFV/QZk/5knU5qIHGxIzipqtxKRJBFZJyJTfZy7o4gUiMgYH2e+y1PHLSJzfJzZezvxSW6vjNN9kdc7q6/yej++VeT32Xbhw8zf2459mdn7+eerzJ4633vdaGjuaraJ79Wra/aAbxYiki4iX4rIMa/xUSJyXESKRWTx9XFjzEfGmJhKV30McBtjZgKPXr8acAFoD8ytS31gNLDOGDMHmFJN/fpmP2CMiQVeBzK9cpY0pDYwFrgNKPPUqjJ3PeoC/BuQd/1u+CqzMabI83iEA/dXl7metb23k9rkLvX8/NhT8zMROVPpZzGQXinjLF/krSJrtXnrWNf78cWXjzHf3y58kpl/3I59lrmK51+1meuR2/t14x9y+2Cb8H4cqs1eJWNMQF+AB4DBwLFKY0HAh0Aw0BZ4Fwjxup3b8zMB+BfP79men608P28F9tWlPtADeAn4HfA/VdX3QfY84AdeObMaUhtYDMy+/thUl7sedf8fEAFMA8b4MrPn3x8F9gITG+mxvr6d1Cb3R0AY8C3wz57aRcBJz897gM+Bxzy3O+LLvNez3ihvPf7/vnt8q3u+1Ke293bhq8x4bce+zOz9/KvDdlGb3N973agqtw+2Ce961Wav6hLwexbGmHzgb17D9wLF5lp3vQLkcO0vjqqUcO0vEfDsaRljrnqWS4FzdalvjPnSGDOXaxvtV1XVb0h2EekLnDPGnPfK2a6BtUs8dQAqqstdj7rDgaFcezGfWek2vsiMMWaXMWY0EFVd5vrW9rp9bR7ri0Af4ApwC1AMvAVcBl4FHgYOVFrHpabOW9e6Xo8v+O4xHk6l7UJEWvkos/d27MvM33v+eW7vk+dgFa8b/5Db1691N8peleb6pbzewKlKyyXATwBEpBuQBISKSAKwFlgvIo8Auz3XeQwYCdwMrK9j/duBJUBHrv2V8I53/fpm94gBMmqZsy61dwLrRORnQL5nuba5q61rjFnqyTqNa0+CcSLik8ye91kf49qGvqeOmWuq7b2dHKd2j3VPrr0Fcr12Gf/3lshPgDeAJ0VkI/AyML6heb2zGmOereO2UV3d4Xz/8QUfPcbGmHnwf9uFMeaqLzIDL/L97dhnmT2/f/f88+T3yXOwiteN2uau9TbhXa+u2f2+WYjIf3HtCehtqTHmP+tazxhzFoitpv7PPC8M36vv+Y+sbf2PufZedFXZr9evV3ZP/RXV1F4vIt/LXce6F4EYT91/BeZ45b5Q38ye+lsaIfNbXPvL/frj4Z253o+193biWcfjXMt/Pfd1S7m2+18b3wL/ff3FkmvHMBqkqqzGmJ1ce3FoSN238Dy+lca+AaIbUter3pZKv/si80WuvaBXHvNZ5uvPv0rLDc7sqfMxnteNSmP1zl3NNlFVvVpn9/tmYYwZUY+bfcq1twOuu80z1qT1A7F2IGZu7Nq1WUelPyi+ANpUqv2RZ/l67Ruuw5d5/aBuY9YOxMyNUbsxs35fTQc1AuEC3M73D/q05tqT9A7+76DP3f5YPxBrB2LmpqoN/JBrxyz+2VO7iGtvE1w/wF3rdej/X2BnbozajZm1xnU3RtGmvADbufYJk+vvC8d4xh8G3ufaJwWW+mP9QKwdiJmbsPZVrh1UrfCs52uuHaf53POz1uvQ/7/AztwYtRsza20ueiJBpZRSNQr4j84qpZRqfNoslFJK1UibhVJKqRpps1BKKVUjbRZKKaVqpM1CKaVUjbRZKKWUqpE2C6WUUjXSZqGUUqpG/z+7e6yYjI6zIAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"source": [
"def shade_symmetric_pareto_region(*, from_, to, color='gray', alpha=1.0, lower_bound=float('-inf'), upper_bound=float('inf')):\n",
" \n",
" # assert (from_ < 0) == (to < 0)\n",
" #assert abs(lower_bound) <= abs(upper_bound)\n",
"\n",
" xs = np.linspace(from_, to)\n",
" plt.fill_between(\n",
" xs,\n",
" [symmetric_pareto_pdf(x, alpha=alpha, lower_bound=lower_bound, upper_bound=upper_bound) for x in xs],\n",
" color=color,\n",
" )\n",
"\n",
" # plt.gca().set_xscale('symlog')\n",
" plt.gca().set_yscale('log')\n"
],
"metadata": {
"id": "SzUYIFHWniMq"
},
"execution_count": null,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"# Setting up & solving how to generate symmetric pareto from generic pareto"
],
"metadata": {
"id": "gqvjB055H-JY"
}
},
{
"cell_type": "code",
"source": [
"lb, ub = -5, 10\n",
"\n",
"inner = min(abs(lb), ub)\n",
"outer = max(abs(lb), ub)\n",
"\n",
"shade_symmetric_pareto_region(from_=-inner, to=0, lower_bound=lb, upper_bound=ub, color='red',)\n",
"shade_symmetric_pareto_region(from_=0, to=inner, lower_bound=lb, upper_bound=ub, color='red',)\n",
"shade_symmetric_pareto_region(from_=inner, to=outer, lower_bound=lb, upper_bound=ub, color='blue',)\n",
"\n",
"plt.axvline(0, linestyle='-', color='k', linewidth=2,)\n",
"\n",
"plt.gca().annotate('$n$', xy=(inner, 0.5), xycoords='data', annotation_clip=False, fontsize=20,)\n",
"plt.axvline(inner, linestyle='--', color='k', linewidth=2,)\n",
"\n",
"plt.gca().annotate('$\\mathrm{lower\\_bound}$', xy=(-inner, 1.1), xycoords='data', annotation_clip=False, fontsize=15, xytext=(-inner, 3), textcoords='data', arrowprops={'arrowstyle' : '->', 'color' : 'k'}, horizontalalignment=\"right\", )\n",
"plt.gca().annotate('$-n$', xy=(-inner, 0.5), xycoords='data', annotation_clip=False, fontsize=20,)\n",
"plt.axvline(-inner, linestyle='--', color='k', linewidth=2,)\n",
"\n",
"plt.gca().annotate('$\\mathrm{upper\\_bound}$', xy=(outer, 1.1), xycoords='data', annotation_clip=False, fontsize=15, xytext=(outer, 3), textcoords='data', arrowprops={'arrowstyle' : '->', 'color' : 'k'}, horizontalalignment=\"left\", )\n",
"plt.gca().annotate('$m$', xy=(outer, 0.5), xycoords='data', annotation_clip=False, fontsize=20,)\n",
"plt.axvline(outer, linestyle='--', color='k', linewidth=2,)\n",
"\n",
"plt.gca().annotate('$-m$', xy=(-outer, 0.5), xycoords='data', annotation_clip=False, fontsize=20,)\n",
"plt.axvline(-outer, linestyle='--', color='k', linewidth=2,)\n",
"E\n",
"plt.gca().annotate('$z$', xy=(-inner/2, 0.000015), xycoords='data', annotation_clip=False, fontsize=40, color='white',)\n",
"plt.gca().annotate('$z$', xy=(inner/2, 0.000015), xycoords='data', annotation_clip=False, fontsize=40, color='white',)\n",
"plt.gca().annotate('$y$', xy=((inner+outer)/2.7, 0.000015), xycoords='data', annotation_clip=False, fontsize=40, color='white',)\n",
"\n",
"plt.gca().set_axisbelow(True)\n",
"plt.grid()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 366
},
"id": "Ag8vOHhgpT_l",
"outputId": "c860124a-5b13-4cb5-8c9b-6d0aecdede4c"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:2: RuntimeWarning: divide by zero encountered in double_scalars\n",
" \n"
]
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "code",
"source": [
"lb, ub = -10, 5\n",
"\n",
"inner = min(abs(lb), ub)\n",
"outer = max(abs(lb), ub)\n",
"\n",
"shade_symmetric_pareto_region(from_=-inner, to=0, lower_bound=lb, upper_bound=ub, color='red',)\n",
"shade_symmetric_pareto_region(from_=0, to=inner, lower_bound=lb, upper_bound=ub, color='red',)\n",
"shade_symmetric_pareto_region(from_=-outer, to=-inner, lower_bound=lb, upper_bound=ub, color='blue',)\n",
"\n",
"plt.axvline(0, linestyle='-', color='k', linewidth=2)\n",
"\n",
"plt.gca().annotate('$\\mathrm{lower\\_bound}$', xy=(-outer, 1.1), xycoords='data', annotation_clip=False, fontsize=15, xytext=(-outer, 3), textcoords='data', arrowprops={'arrowstyle' : '->', 'color' : 'k'}, horizontalalignment=\"right\", )\n",
"plt.gca().annotate('$-m$', xy=(-outer, 0.5), xycoords='data', annotation_clip=False, fontsize=20,)\n",
"plt.axvline(-outer, linestyle='--', color='k', linewidth=2)\n",
"\n",
"plt.gca().annotate('$m$', xy=(outer, 0.5), xycoords='data', annotation_clip=False, fontsize=20,)\n",
"plt.axvline(outer, linestyle='--', color='k', linewidth=2)\n",
"\n",
"plt.gca().annotate('$-n$', xy=(-inner, 0.5), xycoords='data', annotation_clip=False, fontsize=20,)\n",
"plt.axvline(-inner, linestyle='--', color='k', linewidth=2)\n",
"\n",
"plt.gca().annotate('$\\mathrm{upper\\_bound}$', xy=(inner, 1.1), xycoords='data', annotation_clip=False, fontsize=15, xytext=(inner, 3), textcoords='data', arrowprops={'arrowstyle' : '->', 'color' : 'k'}, horizontalalignment=\"left\", )\n",
"plt.gca().annotate('$n$', xy=(inner, 0.5), xycoords='data', annotation_clip=False, fontsize=20,)\n",
"plt.axvline(inner, linestyle='--', color='k', linewidth=2)\n",
"\n",
"plt.gca().annotate('$z$', xy=(-inner/2, 0.000015), xycoords='data', annotation_clip=False, fontsize=40, color='white',)\n",
"plt.gca().annotate('$z$', xy=(inner/2, 0.000015), xycoords='data', annotation_clip=False, fontsize=40, color='white',)\n",
"plt.gca().annotate('$y$', xy=(-(inner+outer)/2.2, 0.000015), xycoords='data', annotation_clip=False, fontsize=40, color='white',)\n",
"\n",
"plt.gca().set_axisbelow(True)\n",
"plt.grid()"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/",
"height": 366
},
"id": "kNEPQKxjHHsY",
"outputId": "dd212f19-dd48-4908-d32a-7c4580640681"
},
"execution_count": null,
"outputs": [
{
"output_type": "stream",
"name": "stderr",
"text": [
"/usr/local/lib/python3.7/dist-packages/ipykernel_launcher.py:2: RuntimeWarning: divide by zero encountered in double_scalars\n",
" \n"
]
},
{
"output_type": "display_data",
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
}
}
]
},
{
"cell_type": "markdown",
"source": [
"\n",
"# bounded pareto probability density function \n",
"\n",
"not symmetric, and with lower bound = 0\n",
"\n",
"$p(x; \\alpha, L, H) = \\frac{\\alpha x^{-\\alpha - 1}}{1 - (L/H)^\\alpha}$\n",
"\n",
"\n",
"# lomax probability density function \n",
"\n",
"not symmetric, has lower bound = 0\n",
"\n",
"$p(x; \\alpha, \\lambda) = \\frac{\\alpha \\lambda^\\alpha}{(x+\\lambda)^{\\alpha + 1}}$\n",
"\n",
"# solve for lomax truncation normalization factor\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda) dx = \\int_0^H \\frac{\\alpha \\lambda^\\alpha}{(x+\\lambda)^{\\alpha + 1}} dx$\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda) dx = \\alpha\\lambda^\\alpha \\int_0^H (x+\\lambda)^{-\\alpha - 1} dx$\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda) dx = \\alpha\\lambda^\\alpha \\Big( -\\frac{1}{\\alpha(x+\\lambda)^{\\alpha}} |_0^H \\Big)$\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda) dx = \\alpha\\lambda^\\alpha \\Big( \\frac{1}{\\alpha(0+\\lambda)^{\\alpha}} - \\frac{1}{\\alpha(H+\\lambda)^{\\alpha}} \\Big)$\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda) dx = \\lambda^\\alpha \\Big( \\frac{1}{\\lambda^{\\alpha}} - \\frac{1}{(H+\\lambda)^{\\alpha}} \\Big)$\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda) dx = 1 - \\frac{\\lambda^\\alpha}{(H+\\lambda)^{\\alpha}}$\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda) dx = \\frac{(H+\\lambda)^{\\alpha} - \\lambda^\\alpha}{(H+\\lambda)^{\\alpha}}$\n",
"\n",
"normalization factor is $\\frac{(H+\\lambda)^{\\alpha} - \\lambda^\\alpha}{(H+\\lambda)^{\\alpha}}$\n",
"\n",
"# bounded lomax probability density function\n",
"\n",
"unnormalized lomax times inverse of normalization factor\n",
"\n",
"$p(x; \\alpha, \\lambda, H) = \\alpha \\lambda^\\alpha (x + \\lambda)^{-\\alpha - 1} \\times \\frac{(H+\\lambda)^{\\alpha}}{(H+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$p(x; \\alpha, \\lambda, H) = \\frac{\\alpha \\lambda^{\\alpha} (H+\\lambda)^{\\alpha} (x + \\lambda)^{-\\alpha - 1}}{(H+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"# sanity check: does this integrate to 1?\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda, H) dx = \\int_0^H \\frac{\\alpha \\lambda^{\\alpha} (H+\\lambda)^{\\alpha} (x + \\lambda)^{-\\alpha - 1}}{(H+\\lambda)^{\\alpha} - \\lambda^\\alpha} dx$\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda, H) dx = \\frac{\\alpha \\lambda^{\\alpha} (H+\\lambda)^{\\alpha}}{(H+\\lambda)^{\\alpha} - \\lambda^\\alpha} \\int_0^H (x + \\lambda)^{-\\alpha - 1} dx$\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda, H) dx = \\frac{\\alpha \\lambda^{\\alpha} (H+\\lambda)^{\\alpha}}{(H+\\lambda)^{\\alpha} - \\lambda^\\alpha} \\Big( -\\frac{(x + \\lambda)^{-\\alpha}}{\\alpha} |_0^H \\Big)$\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda, H) dx = \\frac{\\lambda^{\\alpha}(H+\\lambda)^{\\alpha}}{(H+\\lambda)^{\\alpha} - \\lambda^\\alpha} \\Big( \\lambda^{-\\alpha} - (H + \\lambda)^{-\\alpha} \\Big)$\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda, H) dx = \\frac{(H+\\lambda)^{\\alpha}}{(H+\\lambda)^{\\alpha} - \\lambda^\\alpha} - \\frac{\\lambda^\\alpha}{(H+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda, H) dx = \\frac{(H+\\lambda)^{\\alpha} - \\lambda^\\alpha}{(H+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$\\int_0^H p(x; \\alpha, \\lambda, H) dx = 1$"
],
"metadata": {
"id": "WvB5K0qrk6pw"
}
},
{
"cell_type": "markdown",
"source": [
"# because probability sums to 1\n",
"\n",
"$1 = x + y$\n",
"\n",
"# calculating weight of $y$ region in bounded pareto probability density function\n",
"\n",
"i.e., not symmetric with lower bound 0 and upper bound $m$\n",
"\n",
"by integrating from $n$ to $m$\n",
"\n",
"$y = \\int_n^m p(x; \\alpha, \\lambda, m) dx$\n",
"\n",
"$y = \\int_n^m \\frac{\\alpha \\lambda^{\\alpha} (m+\\lambda)^{\\alpha} (x + \\lambda)^{-\\alpha - 1}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} dx$\n",
"\n",
"$y = \\frac{\\lambda^{\\alpha} (m+\\lambda)^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} \\int_n^m \\alpha (x+\\lambda)^{-\\alpha - 1} dx$\n",
"\n",
"$y = -\\frac{\\lambda^{\\alpha} (m+\\lambda)^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} (x+\\lambda)^{-\\alpha} |_n^m$\n",
"\n",
"$y = -\\frac{\\lambda^{\\alpha} (m+\\lambda)^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} \\frac{1}{(x+\\lambda)^{\\alpha}} |_n^m$\n",
"\n",
"$y = \\frac{\\lambda^{\\alpha} (m+\\lambda)^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} \\Big(\\frac{1}{(n+\\lambda)^{\\alpha}} - \\frac{1}{(m+\\lambda)^{\\alpha}} \\Big)$\n",
"\n",
"$y = \\frac{\\lambda^{\\alpha} (m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} - \\frac{\\lambda^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$y = \\frac{ \\lambda^{\\alpha} (m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$y = \\lambda^\\alpha \\frac{(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - 1}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"# using $y$ to solve for $z$\n",
"\n",
"$z = 1 - y$\n",
"\n",
"$z = 1 + \\lambda^\\alpha \\frac{1 - (m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$z = \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} + \\frac{ \\lambda^\\alpha - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$z = \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} }{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$z = (m+\\lambda)^{\\alpha} \\frac{1 - \\lambda^\\alpha (n+\\lambda)^{-\\alpha} }{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"# sanity check: calculating $z$ directly\n",
"\n",
"$z = \\int_0^n \\frac{\\alpha \\lambda^{\\alpha} (m+\\lambda)^{\\alpha} (x + \\lambda)^{-\\alpha - 1}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} dx$\n",
"\n",
"$z = \\frac{\\lambda^{\\alpha} (m+\\lambda)^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} \\int_0^n \\alpha (x+\\lambda)^{-\\alpha - 1} dx$\n",
"\n",
"$z = - \\frac{\\lambda^{\\alpha} (m+\\lambda)^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} (x+\\lambda)^{-\\alpha} |_0^n$\n",
"\n",
"$z = \\frac{\\lambda^{\\alpha} (m+\\lambda)^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} \\frac{1}{(x+\\lambda)^{\\alpha}} |_n^0$\n",
"\n",
"$z = \\frac{\\lambda^{\\alpha} (m+\\lambda)^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} \\Big(\\frac{1}{\\lambda^{\\alpha}} - \\frac{1}{(n+\\lambda)^{\\alpha}}\\Big)$\n",
"\n",
"$z = \\frac{\\lambda^{\\alpha} (m+\\lambda)^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}\\frac{1}{\\lambda^{\\alpha}} - \\frac{\\lambda^{\\alpha} (m+\\lambda)^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} \\frac{1}{(n+\\lambda)^{\\alpha}}$\n",
"\n",
"$z = \\frac{(m+\\lambda)^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}\\frac{(n+\\lambda)^{\\alpha}}{(n+\\lambda)^{\\alpha}} - \\frac{\\lambda^{\\alpha} (m+\\lambda)^{\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} \\frac{1}{(n+\\lambda)^{\\alpha}} $\n",
"\n",
"$z = \\frac{(m+\\lambda)^{\\alpha}(n+\\lambda)^{\\alpha} - \\lambda^{\\alpha} (m+\\lambda)^{\\alpha}}{ \\Big((m+\\lambda)^{\\alpha} - \\lambda^\\alpha \\Big)(n+\\lambda)^{\\alpha}}$\n",
"\n",
"$z = \\frac{ (m+\\lambda)^{\\alpha} - \\lambda^{\\alpha} (m+\\lambda)^{\\alpha}(n+\\lambda)^{-\\alpha} }{ (m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$z = (m+\\lambda)^{\\alpha} \\frac{ 1 - \\lambda^{\\alpha} (n+\\lambda)^{-\\alpha} }{ (m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"\n",
"# sanity check: using $z$ to solve for $y$\n",
"\n",
"$y = 1 - z$\n",
"\n",
"$y = 1 - (m+\\lambda)^{\\alpha} \\frac{ \\lambda^{\\alpha} (n+\\lambda)^{-\\alpha} - 1 }{ (m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$y = \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} - (m+\\lambda)^{\\alpha} \\frac{ \\lambda^{\\alpha} (n+\\lambda)^{-\\alpha} - 1 }{ (m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$y = \\frac{\\lambda^{\\alpha} (m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$y = \\lambda^{\\alpha} \\frac{(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - 1}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"# $\\mu$ scaling factor for symmetric pareto \n",
"\n",
"$\\mu * (2z + y) = 1$\n",
"\n",
"$\\mu = \\frac{1}{2z + y}$\n",
"\n",
"$\\mu = \\frac{1}{2(1-y) + y}$\n",
"\n",
"$\\mu = \\frac{1}{2-y}$\n",
"\n",
"so\n",
"\n",
"$\\mu = \\frac{1}{2-\\lambda^{\\alpha} \\frac{(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - 1}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}}$\n",
"\n",
"$\\mu = \\frac{1}{2 \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha} -\\lambda^{\\alpha} \\frac{(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - 1}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}}$\n",
"\n",
"$\\mu = \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{2 (m+\\lambda)^{\\alpha} - 2 \\lambda^\\alpha - \\lambda^{\\alpha}(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} + \\lambda^{\\alpha}}$\n",
"\n",
"$\\mu = \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{2 (m+\\lambda)^{\\alpha} - \\lambda^{\\alpha}(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^{\\alpha}}$\n",
"\n",
"\n",
"# sanity check: $\\mu$ another way\n",
"\n",
"$\\mu * (2z + 1 - z) = 1$\n",
"\n",
"$\\mu * (z + 1) = 1$\n",
"\n",
"$\\mu = \\frac{1}{z+1}$\n",
"\n",
"so\n",
"\n",
"$\\mu = \\frac{1}{(m+\\lambda)^{\\alpha} \\frac{ 1 - \\lambda^{\\alpha} (n+\\lambda)^{-\\alpha} }{ (m+\\lambda)^{\\alpha} - \\lambda^\\alpha} + 1}$\n",
"\n",
"$\\mu = \\frac{1}{(m+\\lambda)^{\\alpha} \\frac{ 1 - \\lambda^{\\alpha} (n+\\lambda)^{-\\alpha} }{ (m+\\lambda)^{\\alpha} - \\lambda^\\alpha} + \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}}$\n",
"\n",
"$\\mu = \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{ (m+\\lambda)^{\\alpha} - \\lambda^\\alpha (m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} + (m + \\lambda)^\\alpha - \\lambda^\\alpha }$\n",
"\n",
"$\\mu = \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha}$"
],
"metadata": {
"id": "WaIp1lXZhz07"
}
},
{
"cell_type": "markdown",
"source": [
"# calculating $m$ and $n$\n",
"\n",
"assume arguments $\\mathrm{lower\\_bound} \\leq 0$ and $\\mathrm{upper\\_bound} \\geq 0$ \n",
"\n",
"then\n",
"\n",
"$n = \\min(-\\mathrm{lower\\_bound}, \\mathrm{upper\\_bound})$\n",
"\n",
"$m = \\max(-\\mathrm{lower\\_bound}, \\mathrm{upper\\_bound})$\n",
"\n",
"# calculating $P(X$ \"is on skinny side\"$)$\n",
"\n",
"$P = \\frac{z}{2z+y}$\n",
"\n",
"$P = \\frac{z}{2z+1-z}$\n",
"\n",
"$P = \\frac{z}{1+z}$\n",
"\n",
"$P = \\mu \\times z$\n",
"\n",
"$P = \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha} \\times \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha}}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$P = \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha}}{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$P = \\frac{1 - \\lambda^\\alpha (n+\\lambda)^{-\\alpha}}{2 - \\lambda^\\alpha (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha(m+\\lambda)^{-\\alpha}}$\n",
"\n",
"$P = \\frac{1 - (\\frac{\\lambda}{n+\\lambda})^{\\alpha} }{2 - (\\frac{\\lambda}{n+\\lambda})^{\\alpha} - (\\frac{\\lambda}{m+\\lambda})^{\\alpha}}$\n",
"\n",
"# calculating $P(X$ \"is on fat side\"$)$\n",
"\n",
"$P = 1 - P(X$ \"is on skinny side\"$)$\n",
"\n",
"$P = 1 - \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} }{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$P = \\frac{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha}{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha} - \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} }{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$P = \\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"# sanity check: calculating $P(X$ \"is on fat side\"$)$ directly\n",
"\n",
"$P = \\frac{z + y}{2z+y}$\n",
"\n",
"$P = \\frac{1}{2z+y}$\n",
"\n",
"$P = \\frac{1}{1 + z}$\n",
"\n",
"$P = \\mu$\n",
"\n",
"# manipulations $P(X$ \"is on fat side\"$)$ for floating point safety\n",
"\n",
"$P = \\frac{(m+\\lambda)^{\\alpha}}{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha} - \\frac{\\lambda^\\alpha}{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$P = \\frac{1}{2 - \\lambda^\\alpha (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha(m+\\lambda)^{-\\alpha}} - \\frac{\\lambda^\\alpha}{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$P = \\frac{1}{2 - \\lambda^\\alpha (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha(m+\\lambda)^{-\\alpha}} - \\frac{\\lambda^\\alpha}{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha (\\frac{m+\\lambda}{n+\\lambda})^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"if $m = n = k$ then $P = \\frac{1}{2 - \\lambda^\\alpha (k+\\lambda)^{-\\alpha} - \\lambda^\\alpha(k+\\lambda)^{-\\alpha}} - \\frac{\\lambda^\\alpha}{2(k+\\lambda)^{\\alpha} - 2\\lambda^\\alpha }$ else $P = \\frac{1}{2 - \\lambda^\\alpha (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha(m+\\lambda)^{-\\alpha}} - \\frac{\\lambda^\\alpha}{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha (\\frac{m+\\lambda}{n+\\lambda})^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"if $m = n = k$ then $P = \\frac{1}{2}\\frac{1}{ 1 - \\lambda^\\alpha(k+\\lambda)^{-\\alpha} } - \\frac{1}{2}\\frac{\\lambda^\\alpha}{(k+\\lambda)^{\\alpha} - \\lambda^\\alpha }$ else $P = \\frac{1}{2 - \\lambda^\\alpha (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha(m+\\lambda)^{-\\alpha}} - \\frac{\\lambda^\\alpha}{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha (\\frac{m+\\lambda}{n+\\lambda})^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"if $m = n = k$ then $P = \\frac{1}{2}\\frac{(k+\\lambda)^{\\alpha}}{ (k+\\lambda)^{\\alpha} - \\lambda^\\alpha } - \\frac{1}{2}\\frac{\\lambda^\\alpha}{(k+\\lambda)^{\\alpha} - \\lambda^\\alpha }$ else $P = \\frac{1}{2 - \\lambda^\\alpha (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha(m+\\lambda)^{-\\alpha}} - \\frac{1}{2(\\frac{m+\\lambda}{\\lambda})^\\alpha - (\\frac{m+\\lambda}{n+\\lambda})^{\\alpha} - 1}$\n",
"\n",
"if $m = n = k$ then $P = \\frac{1}{2}\\frac{(k+\\lambda)^{\\alpha} - \\lambda^\\alpha}{ (k+\\lambda)^{\\alpha} - \\lambda^\\alpha }$ else $P = \\frac{1}{2 - (\\frac{\\lambda}{n+\\lambda})^\\alpha - (\\frac{\\lambda}{m+\\lambda})^\\alpha} - \\frac{1}{2(\\frac{m+\\lambda}{\\lambda})^\\alpha - (\\frac{m+\\lambda}{n+\\lambda})^{\\alpha} - 1}$\n",
"\n",
"if $m = n = k$ then $P = \\frac{1}{2}$ else $P = \\frac{1}{2 - (\\frac{\\lambda}{n+\\lambda})^\\alpha - (\\frac{\\lambda}{m+\\lambda})^\\alpha} - \\frac{1}{2(\\frac{m+\\lambda}{\\lambda})^\\alpha - (\\frac{m+\\lambda}{n+\\lambda})^{\\alpha} - 1}$"
],
"metadata": {
"id": "ypWNWIR9z-B1"
}
},
{
"cell_type": "markdown",
"source": [
"# sanity check: further $m = n = k$\n",
"\n",
"$P = \\frac{1}{2 - (\\frac{\\lambda}{n+\\lambda})^\\alpha - (\\frac{\\lambda}{m+\\lambda})^\\alpha} - \\frac{1}{2(\\frac{m+\\lambda}{\\lambda})^\\alpha - (\\frac{m+\\lambda}{n+\\lambda})^{\\alpha} - 1}$\n",
"\n",
"$P = \\frac{1}{2 - 2(\\frac{\\lambda}{k+\\lambda})^\\alpha } - \\frac{1}{2(\\frac{k+\\lambda}{\\lambda})^\\alpha - 1 - 1}$\n",
"\n",
"$P = \\frac{1}{2 - 2(\\frac{\\lambda}{k+\\lambda})^\\alpha } + \\frac{1}{2 - 2(\\frac{k+\\lambda}{\\lambda})^\\alpha}$\n",
"\n",
"$P = \\frac{1/2}{1 - (\\frac{\\lambda}{k+\\lambda})^\\alpha } + \\frac{1/2}{ 1 - (\\frac{k+\\lambda}{\\lambda})^\\alpha}$\n",
"\n",
"$P = \\frac{1}{2}\\frac{1 - (\\frac{k+\\lambda}{\\lambda})^\\alpha + 1 - (\\frac{\\lambda}{k+\\lambda})^\\alpha}{ \\Big( 1 - (\\frac{\\lambda}{k+\\lambda})^\\alpha \\Big)\\Big(1 - (\\frac{k+\\lambda}{\\lambda})^\\alpha \\Big)}$\n",
"\n",
"$P = \\frac{1}{2}\\frac{1 - (\\frac{k+\\lambda}{\\lambda})^\\alpha + 1 - (\\frac{\\lambda}{k+\\lambda})^\\alpha}{ 1 - (\\frac{\\lambda}{k+\\lambda})^\\alpha - (\\frac{k+\\lambda}{\\lambda})^\\alpha + 1}$\n",
"\n",
"$P = \\frac{1}{2}\\frac{2 - (\\frac{k+\\lambda}{\\lambda})^\\alpha - (\\frac{\\lambda}{k+\\lambda})^\\alpha}{ 2 - (\\frac{\\lambda}{k+\\lambda})^\\alpha - (\\frac{k+\\lambda}{\\lambda})^\\alpha }$\n",
"\n",
"$P = \\frac{1}{2}$"
],
"metadata": {
"id": "OKf4-1zOsKks"
}
},
{
"cell_type": "markdown",
"source": [
"# sanity check: calculating $P(X$ \"is on fat side\"$)$ with $n=0$\n",
"\n",
"$\\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (n+\\lambda)^{-\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$\\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{2(m+\\lambda)^{\\alpha} - \\lambda^\\alpha(m+\\lambda)^{\\alpha} (\\lambda)^{-\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$\\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{2(m+\\lambda)^{\\alpha} - (m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$\\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{2(m+\\lambda)^{\\alpha} - (m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"$\\frac{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}{(m+\\lambda)^{\\alpha} - \\lambda^\\alpha}$\n",
"\n",
"1"
],
"metadata": {
"id": "peRYjtmeyR4t"
}
},
{
"cell_type": "markdown",
"source": [
"# sanity check: calculating $P(X$ \"is on fat side\"$)$ with $n=0$\n",
"\n",
"$\\frac{1}{2 - (\\frac{\\lambda}{n+\\lambda})^\\alpha - (\\frac{\\lambda}{m+\\lambda})^\\alpha} - \\frac{1}{2(\\frac{m+\\lambda}{\\lambda})^\\alpha - (\\frac{m+\\lambda}{n+\\lambda})^{\\alpha} - 1}$\n",
"\n",
"$\\frac{1}{2 - (\\frac{\\lambda}{\\lambda})^\\alpha - (\\frac{\\lambda}{m+\\lambda})^\\alpha} - \\frac{1}{2(\\frac{m+\\lambda}{\\lambda})^\\alpha - (\\frac{m+\\lambda}{\\lambda})^{\\alpha} - 1}$\n",
"\n",
"$\\frac{1}{1 - (\\frac{\\lambda}{m+\\lambda})^\\alpha} - \\frac{1}{(\\frac{m+\\lambda}{\\lambda})^\\alpha - 1}$\n",
"\n",
"$\\frac{1}{1 - (\\frac{\\lambda}{m+\\lambda})^\\alpha} + \\frac{1}{1 - (\\frac{m+\\lambda}{\\lambda})^\\alpha}$\n",
"\n",
"$\\frac{1 - (\\frac{\\lambda}{m+\\lambda})^\\alpha + 1 - (\\frac{m+\\lambda}{\\lambda})^\\alpha}{1 - (\\frac{\\lambda}{m+\\lambda})^\\alpha - (\\frac{m+\\lambda}{\\lambda})^\\alpha + 1}$\n",
"\n",
"$\\frac{2 - (\\frac{\\lambda}{m+\\lambda})^\\alpha - (\\frac{m+\\lambda}{\\lambda})^\\alpha}{2 - (\\frac{\\lambda}{m+\\lambda})^\\alpha - (\\frac{m+\\lambda}{\\lambda})^\\alpha }$"
],
"metadata": {
"id": "ucn9VTTQy9Nk"
}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment