{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Introducing censoring\n", "\n", "![img](https://lifelines.readthedocs.io/en/latest/_images/survival_analysis_intro_censoring.png)\n", "\n", "\n", "![img2](https://lifelines.readthedocs.io/en/latest/_images/survival_analysis_intro_censoring_revealed.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "All we know is that actual lifetime is greater than some threshold. Mathematically, we know $P(T \\ge t) = 1 - F(t) := S(t)$. We can use this in our log likelihood:\n", "\n", "No censoring cases:\n", "\n", "$$l(\\theta, t) = \\sum_{\\text{observed}} \\log{\\text{pdf}(\\theta, t)} $$\n", "\n", "With censoring cases:\n", "$$ \n", "\\begin{align}\n", "l(\\theta, t) & = \\sum_{\\text{observed}} \\log{\\text{pdf}(t, \\theta)} + \\sum_{\\text{censored}} \\log{\\text{S}(t, \\theta)} \\\\\n", "& = \\sum_{\\text{observed}} \\log{\\text{pdf}(t, \\theta)} \\frac{S(t)}{S(t)} + \\sum_{\\text{censored}} \\log{\\text{S}(t, \\theta)} \\\\\n", "& = \\sum_{\\text{observed}} (\\log{\\frac{\\text{pdf}(t, \\theta)}{S(t)}} + \\log{S(t)}) + \\sum_{\\text{censored}} \\log{\\text{S}(t, \\theta)} \\\\\n", "& = \\sum_{\\text{observed}} \\log{\\frac{\\text{pdf}(t, \\theta)}{S(t)}} + \\sum_{\\text{observed}} \\log{S(t)} + \\sum_{\\text{censored}} \\log{\\text{S}(t, \\theta)} \\\\\n", "& = \\sum_{\\text{observed}} \\log{\\frac{\\text{pdf}(t, \\theta)}{S(t)}} + \\sum \\log{S(t)} \n", "\\end{align}\n", "$$\n", "\n", "\n", "\n", "The $-\\log{S(t)}$ is known as the _cumulative hazard_, denoted $H(t)$. \n", "\n", "$$l(\\theta, t) = \\sum_{\\text{observed}} \\log{\\frac{\\text{pdf}(t, \\theta)}{S(t)}} - \\sum H(t, \\theta) $$\n", "\n", "Also, $\\frac{dH}{dt} = \\frac{\\text{pdf}(t, \\theta)}{S(t)}$. Denote that $h(t)$. \n", "\n", "$$l(\\theta, t) = \\sum_{\\text{observed}} \\log{h(t, \\theta}) - \\sum H(t, \\theta) $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Phew! Now, instead of working in probability space, we will work in hazard space! Here's a link to all the relatioships: https://lifelines.readthedocs.io/en/latest/Survival%20Analysis%20intro.html#hazard-function \n", "\n", "\n", "## Take away: the likelihood function can be used to \"add\" information about the system (think about how penalizers are used...)" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "# the hazard and cumulative hazard for Weibull are much simplier to implement 😗👌\n", "\n", "def cumulative_hazard(params, t):\n", " lambda_, rho_ = params\n", " return (t / lambda_) ** rho_\n", "\n", "def hazard(params, t):\n", " # diff of cumulative hazard w.r.t. t\n", " lambda_, rho_ = params\n", " return rho_ / lambda_ * (t / lambda_) ** (rho_ - 1)\n", "\n", "def log_hazard(params, t):\n", " lambda_, rho_ = params\n", " return np.log(rho_) - np.log(lambda_) + (rho_ - 1) * (np.log(t) - np.log(lambda_))\n", "\n", "\n", "\n", "def log_likelihood(params, t, e):\n", " return np.sum(e * log_hazard(params, t)) - np.sum(cumulative_hazard(params, t))\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " fun: -inf\n", " hess_inv: <2x2 LbfgsInvHessProduct with dtype=float64>\n", " jac: array([ 39.23116765, -2483.29052965])\n", " message: b'ABNORMAL_TERMINATION_IN_LNSRCH'\n", " nfev: 63\n", " nit: 0\n", " status: 2\n", " success: False\n", " x: array([1., 1.])\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/camerondavidson-pilon/venvs/data/lib/python3.7/site-packages/ipykernel_launcher.py:5: RuntimeWarning: overflow encountered in power\n", " \"\"\"\n", "/Users/camerondavidson-pilon/venvs/data/lib/python3.7/site-packages/scipy/optimize/optimize.py:670: RuntimeWarning: invalid value encountered in double_scalars\n", " grad[k] = (f(*((xk + d,) + args)) - f0) / d[k]\n" ] } ], "source": [ "T = (np.random.exponential(size=1000)/1.5) ** 2.3\n", "E = np.random.binomial(1, 0.95, size=1000)\n", "\n", "from scipy.optimize import minimize\n", "\n", "results = minimize(log_likelihood, \n", " x0 = np.array([1.0, 1.0]),\n", " method=None, \n", " args=(T, E),\n", " bounds=((0.00001, None), (0.00001, None)))\n", "\n", "print(results)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " fun: nan\n", " hess_inv: <2x2 LbfgsInvHessProduct with dtype=float64>\n", " jac: array([ 85.23691122, 2313.87556369])\n", " message: b'ABNORMAL_TERMINATION_IN_LNSRCH'\n", " nfev: 129\n", " nit: 1\n", " status: 2\n", " success: False\n", " x: array([1.1570978 , 0.99599559])\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/Users/camerondavidson-pilon/venvs/data/lib/python3.7/site-packages/ipykernel_launcher.py:14: RuntimeWarning: divide by zero encountered in log\n", " \n", "/Users/camerondavidson-pilon/venvs/data/lib/python3.7/site-packages/ipykernel_launcher.py:14: RuntimeWarning: invalid value encountered in double_scalars\n", " \n", "/Users/camerondavidson-pilon/venvs/data/lib/python3.7/site-packages/ipykernel_launcher.py:5: RuntimeWarning: divide by zero encountered in true_divide\n", " \"\"\"\n", "/Users/camerondavidson-pilon/venvs/data/lib/python3.7/site-packages/ipykernel_launcher.py:19: RuntimeWarning: invalid value encountered in multiply\n", "/Users/camerondavidson-pilon/venvs/data/lib/python3.7/site-packages/ipykernel_launcher.py:14: RuntimeWarning: invalid value encountered in add\n", " \n" ] } ], "source": [ "def negative_log_likelihood(params, t, e):\n", " return -log_likelihood(params, t, e)\n", "\n", "results = minimize(negative_log_likelihood, \n", " x0 = np.array([1.0, 1.0]),\n", " method=None, \n", " args=(T, E),\n", " bounds=((0., None), (0., None)))\n", "\n", "print(results)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Text(0.5, 1.0, 'Estimated survival function')" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "t = np.linspace(0, 10, 100)\n", "plt.plot(t, np.exp(-cumulative_hazard(results.x, t)))\n", "plt.ylim(0, 1)\n", "plt.title(\"Estimated survival function\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's move to part 3. " ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.3" } }, "nbformat": 4, "nbformat_minor": 2 }