{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Who will be the Mormon prophet in year 2028?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Summary October 3, 2015\n", "\n", " * Method 1: Winner takes all predicts Dallin H. Oaks\n", " * Method 2: Monte-Carlo simulation predicts Jeffery R. Holland with an approx. 25% chance.\n", " * Method 3: Subjectively adjusted health predicts Dallin H. Oaks with an approx. 28% chance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Summary January 1, 2018\n", "\n", " * Method 1: Winner takes all predicts David A. Bednar in 2028 and Russle M. Nelson lives to 2020\n", " * Method 2: Monte-Carlo simulation predicts David A. Bednar in 2028 with approx. 26% chance and Russle M. Nelson lives to 2020 with an approx. 42% chance.\n", " * Method 3: Subjectively adjusted health predicts Other in 2028 with approx. 99% chance and Russle M. Nelson lives to 2022 with approx. 25% chance.\n", "\n", "## Notes\n", " \n", " * Adds qgrid dependency" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Overview" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It just so happens that there's a a convenient pattern to whom is usually called to be the next prophet of *The Church of Jesus Christ of Latter-day Saints*. For most of the 20th century and all of the 21st century so far, the pattern has been that the prophet of the church is the most senior apostle (by date of calling to the Quorum of the Twelve) becomes the prophet when the previous prophet dies. There are 15 of these apostles at any given time: three in the \"First Presidency\", comprising the prophet and his two counselors, and twelve in the Quorum of the Twelve Apostles.\n", "\n", "Given the ages of the apostles and some average actuarial life tables (which we use here despite knowing that these men are generally far healthier than the average population), we can fairly easily calculate the likely age of death of the current apostles and rank them by seniority to find some likely scenarios for new prophets." ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "%matplotlib inline\n", "\n", "import matplotlib.pyplot as plt\n", "from matplotlib import rcParams\n", "import numpy as np\n", "import pandas as pd\n", "import qgrid as qg\n", "from datetime import datetime, timedelta\n", "from collections import defaultdict\n", "import seaborn as sns\n", "rcParams['figure.figsize'] = (10.0, 2.0)\n", "sns.set(style=\"darkgrid\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "now = datetime.now()\n", "CURRENT_YEAR = now.year" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we load some actuarial life tables which give the population-level probability of death at any particular age." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", " | M | \n", "F | \n", "
---|---|---|
Age | \n", "\n", " | \n", " |
80 | \n", "0.061620 | \n", "0.043899 | \n", "
81 | \n", "0.068153 | \n", "0.048807 | \n", "
82 | \n", "0.075349 | \n", "0.054374 | \n", "
83 | \n", "0.083230 | \n", "0.060661 | \n", "
84 | \n", "0.091933 | \n", "0.067751 | \n", "
85 | \n", "0.101625 | \n", "0.075729 | \n", "
86 | \n", "0.112448 | \n", "0.084673 | \n", "
87 | \n", "0.124502 | \n", "0.094645 | \n", "
88 | \n", "0.137837 | \n", "0.105694 | \n", "
89 | \n", "0.152458 | \n", "0.117853 | \n", "
90 | \n", "0.168352 | \n", "0.131146 | \n", "
91 | \n", "0.185486 | \n", "0.145585 | \n", "
92 | \n", "0.203817 | \n", "0.161175 | \n", "
93 | \n", "0.223298 | \n", "0.177910 | \n", "
94 | \n", "0.243867 | \n", "0.195774 | \n", "
95 | \n", "0.264277 | \n", "0.213849 | \n", "
96 | \n", "0.284168 | \n", "0.231865 | \n", "
97 | \n", "0.303164 | \n", "0.249525 | \n", "
98 | \n", "0.320876 | \n", "0.266514 | \n", "
Failed to display Jupyter Widget of type QgridWidget
.
\n", " If you're reading this message in the Jupyter Notebook or JupyterLab Notebook, it may mean\n", " that the widgets JavaScript is still loading. If this message persists, it\n", " likely means that the widgets JavaScript library is either not installed or\n", " not enabled. See the Jupyter\n", " Widgets Documentation for setup instructions.\n", "
\n", "\n", " If you're reading this message in another frontend (for example, a static\n", " rendering on GitHub or NBViewer),\n", " it may mean that your frontend doesn't currently support widgets.\n", "
\n" ], "text/plain": [ "QgridWidget(grid_options={'fullWidthRows': True, 'syncColumnCellResize': True, 'forceFitColumns': True, 'defaultColumnWidth': 150, 'rowHeight': 28, 'enableColumnReorder': False, 'enableTextSelectionOnCells': True, 'editable': True, 'autoEdit': False, 'explicitInitialization': True, 'maxVisibleRows': 15, 'minVisibleRows': 8}, precision=5, show_toolbar=True)" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Load current apostle ages and seniority\n", "apostle_data = pd.read_csv('../data/apostles.csv', parse_dates=['Birth', 'Twelve', 'Ordained'])\n", "now = pd.Timestamp(datetime.now())\n", "apostle_data['Current Age'] = (now - apostle_data['Birth']).astype('