{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Example Notebook : Kaplan-Meier\n", "\n", "The Kaplan-Meier estimator is a non-parametric method used to estimate the survival function from lifetime data. It's particularly useful in medical research, engineering, and other fields where we need to understand the probability of an event (like death, failure, or recovery) occurring over time.\n", "\n", "In this notebook, we'll use the **mastectomy dataset**, which contains information about breast cancer patients and their survival times. We'll demonstrate how to use PyBH's `SurvivalAnalysis` class with the Kaplan-Meier model from `lifelines` to analyze survival data.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Understanding the Kaplan-Meier Estimator\n", "\n", "The Kaplan-Meier estimator provides a way to estimate the survival function $S(t)$, which represents the probability that a subject survives longer than time $t$. The estimator is particularly useful because it can handle **censored data** - cases where we don't observe the event of interest (e.g., a patient is still alive at the end of the study).\n", "\n", "The formula for the Kaplan-Meier estimator is:\n", "\n", "$$S(t) = \\prod_{i: t_i \\leq t} \\left(1 - \\frac{d_i}{n_i}\\right)$$\n", "\n", "where:\n", "- $d_i$ is the number of events at time $t_i$\n", "- $n_i$ is the number of subjects at risk just before time $t_i$\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Imports\n", "\n", "First, let's import the necessary libraries:\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "# Imports\n", "import pandas as pd\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import pymc as pm\n", "from lifelines import KaplanMeierFitter\n", "from PyBH.SurvivalAnalysis.SurvivalAnalysis import SurvivalAnalysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Loading the Mastectomy Dataset\n", "\n", "The mastectomy dataset contains information about breast cancer patients, including:\n", "- **time**: Survival time in months\n", "- **event**: Whether the event (death) was observed (1) or censored (0)\n", "- **metastasized**: Whether the cancer had metastasized (yes/no)\n", "\n", "Let's load the dataset using PyMC's data loading utility:\n" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dataset loaded successfully!\n", "Shape: (44, 3)\n", "\n", "Columns: ['time', 'event', 'metastasized']\n", "\n", "First few rows:\n", " time event metastasized\n", "0 23 True no\n", "1 47 True no\n", "2 69 True no\n", "3 70 False no\n", "4 100 False no\n" ] } ], "source": [ "# Load the mastectomy dataset using PyMC's get_data function\n", "data = pd.read_csv(pm.get_data(\"mastectomy.csv\"))\n", "\n", "print(\"Dataset loaded successfully!\")\n", "print(f\"Shape: {data.shape}\")\n", "print(f\"\\nColumns: {data.columns.tolist()}\")\n", "print(f\"\\nFirst few rows:\")\n", "print(data.head())\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data Exploration\n", "\n", "Let's explore the dataset to understand its structure:\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Dataset Summary:\n", "Total patients: 44\n", "\n", "Event statistics:\n", " - Events observed: 26\n", " - Censored: 18\n", "\n", "Metastasis status:\n", "metastasized\n", "yes 32\n", "no 12\n", "Name: count, dtype: int64\n", "\n", "Time statistics:\n", "count 44.000000\n", "mean 96.613636\n", "std 69.866389\n", "min 5.000000\n", "25% 38.750000\n", "50% 73.500000\n", "75% 145.750000\n", "max 225.000000\n", "Name: time, dtype: float64\n" ] } ], "source": [ "# Basic statistics\n", "print(\"Dataset Summary:\")\n", "print(f\"Total patients: {len(data)}\")\n", "print(f\"\\nEvent statistics:\")\n", "print(f\" - Events observed: {data['event'].sum()}\")\n", "print(f\" - Censored: {(data['event'] == 0).sum()}\")\n", "print(f\"\\nMetastasis status:\")\n", "print(data['metastasized'].value_counts())\n", "print(f\"\\nTime statistics:\")\n", "print(data['time'].describe())\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using PyBH's SurvivalAnalysis with Kaplan-Meier\n", "\n", "Now, let's use PyBH's `SurvivalAnalysis` class with the Kaplan-Meier model from `lifelines`. The `SurvivalAnalysis` class acts as a workflow manager that handles data validation, preprocessing, and model fitting automatically.\n" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " -> Mode: Frequentist (Lifelines)\n" ] } ], "source": [ "# Initialize the Kaplan-Meier Fitter from lifelines\n", "kmf = KaplanMeierFitter()\n", "\n", "# Use PyBH's SurvivalAnalysis class to fit the model\n", "# This automatically handles validation and preprocessing\n", "survival_analysis = SurvivalAnalysis(\n", " model=kmf,\n", " data=data,\n", " time_col='time',\n", " event_col='event'\n", ")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Visualizing the Survival Function\n", "\n", "Now let's plot the survival function to see how the probability of survival changes over time:\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Plot the survival function using PyBH's built-in method\n", "plt.title('Kaplan-Meier Survival Curve - All Patients')\n", "plt.xlabel('Time (months)')\n", "plt.ylabel('Survival Probability')\n", "plt.tight_layout()\n", "\n", "survival_analysis.plot_survival_function()\n", "\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Comparing Survival by Metastasis Status\n", "\n", "One of the key advantages of survival analysis is the ability to compare survival curves between different groups. Let's compare the survival of patients with and without metastasis:\n" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " -> Mode: Frequentist (Lifelines)\n", " -> Mode: Frequentist (Lifelines)\n" ] }, { "data": { "image/png": "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vmr773//K//617/qvNZk2oUe4NKDRHr99ttvNyFTD4BomNu0aVNSBx6OOeYYOf74482BLA311157rZx//vnmfg1FWr+63/rvj34+dF5wMqFb6WvX91NHFsTahoZw/azFO5Cl748G3/Xr15s2puXTAxD6nRFrZxrIfvvb35q/9fXr0Gy96O2xnnT9HOi0AW1POsz6n//8p/kO0fe+9ugPrWO9X7fTgzFa7xpclda9lqVbt241z6GXVNqlbqPl0s+JHmzQ70xdW0EPQoZCoUZHY2j5zzvvPPMYPaioBxpiZUtEX7e2QX1vNQwnGrGRjtem00X0vxF6UCT2+FSnkLS0LQPIcw4A5JH77rtPuy/MpW3bts7q1auTelw0GnXC4bAzf/5889j/+7//q7nvpJNOMrfdeuutdR5z3XXXmdvffPPNmtv69u1rtk8kEomY55kyZYqz22671blP99W1a1dn48aNNbetWrXK8Xg8zvXXX9/ka3j99dfNPp544gnniy++cCzLcp5//nlz3y9+8QtnzJgx5u9DDz3UlDPmnXfeMY+76aab6uzvq6++ckpKSpyLL764Tl0097GjR48227766qtOMv73v/85gwcPrnk/dX8HHHCA86c//ckJhUI12y1btszcr+99fXr7jBkzaq7r33rblVde2WDbiRMnOr169XJs26657cUXXzTbP/fccwnrYO3atU5RUZFz2WWX1dnf0Ucfbd5Pfb/j0efR+66++mqnY8eOpg3Wriu9NOaGG24wZXvppZecVD4bWl/x2o3+29R7peXV13TcccfVuV3fZ60DrYtU2sW7775rtnvmmWecVMXK+Le//a3O7aeffrr5zHz55Zfmun6e2rRp45x//vl1ths0aJCz3377Nfk8+l7rZyb2nEcddZT5+4UXXjCfMa1P/czVr8OBAweaz3j993/8+PFO9+7da9pZvMc29h2lr6v+6y4vL3emTZvW6OPrf+4TSdQun3zySfO8H3zwQaOPr/+Z08/wkUce6aSqurraPC72+fd6vaY+L7/88gbf6y19bWqnnXaK+5lL9nPTkrYMIP/R0w0gL+mQzg0bNpietkQ9pNp7rL142kPi9XrNqs+jR4+uWTW3Pu1xqU0fG+vRaoz2pmpPjA6T1KHu+jzaux7vOXSIae35i127djW99Tp0MiYSidS5xBuarEM5tadfe6S0R0l72RIN5dbh69ojqL2atfer9aLD2xtbkTnVx+oQY11BPRk67Ft7uLWXS4eIas/d4sWLzSgD7QXTofvNpUNi69NeWh0NEBuSq+677z7zWg455JCE+9KhttoTXnvo8Q8//GDqXIck63seoz3E+jp0WHOszWnvpL5Hq1evbvbrcUO890pfi77X2mOony+lny/tvdRh0FoXqbQLHW2gz6ND+LU3ONW1BvSzop/1+p9LfR90aHxsG31vtXc5NnVE3wd9Lm1LqdDP0LPPPmveL/0M6+c13kr2Ok1Be/9j3xm160BHzGgP7ieffNLk82mbmDp1qhk2Hvvu0OH9qvb3xx577GFen/byL1q0qE4veDKSaZfaS6+93DqMXdt6sqNvtGx///vfzdQdfd+TXWNAh2drb7O+TzfffLMZ0aDD6HVOvU6/Sab+kn1t6dDStgwgvxG6AeQlndepP6x0VVv94V8/eOt8Tp2Hq0M19Yeq/hjUQKdhQtX/Yag/eGOBIkYDhGpsmKTu7+ijjzZzTXWYsg5b1OfRH+/xQmP954j9+IyVR4dK6o/G2hcNpfFMmTLFrFw9a9YsM/9Sh97Go8MhNbhrwK+/b/0BX3/+aEsem2iOdiI6bFcXU9P3UsOODu/V4blLliypM2c9VfHKocFab9egHQvO+pwanPXHemP0/fzmm29qTken0wh0akHt08fp8GtdQ0DpoltvvfWWaQuXX365uS3VBc902GpsVXo3JHqvYm33scceM9d1uLWGyNpDy5NtFxqEtP1qoLvssstkp512MvNgZ8yYkVRw1P3XF+9zqcOJdYjvww8/bK7rFA6dJ60HClKhnyGdl6whUD9b+hmLJzZ8XqeV1H/9sSkVjX2ulB440Pai3yEXX3yxvPrqq6YNaf3Vby+6PoWu16DDyvWAlE5L0Xarw++bkmy71INgekBKDwLqkHy9rpdbb7210f3fdtttJojq8Hc9SKFl0ykR9Yf7J6IBWw+e6venTm3Q7zN9b/U7Pl2vLR1a2pYB5DdWLweQt7R3VHvb9F/9Aas/uGO9jtr7oQFOw3asd1vp/Mt4tIdKf+jVDsWxH7TxgnKM/lDUXmf9UVx7cR8NZM2hP+L0R2NtO+ywQ9xtde6i/jjWeZenn366Cd7x6FxlLZsuSKUBv754tzX3sbXroDl0/uill15q6vPf//63uU1DULw6bexgSLxyaLDWubEaErQd6AEb3WeiefC16UJd+t5oYNe/9V9dvGnQoEE122hI1dClvcCxMisNI82hAUb3p4/X3tCmJKqnROEv0Xulr0l7L/U16lxZ/VdfeyzcpNoudIFDrRsN6R9++KHpsdU1DbS9au9oY+KtNxDvc6m9kHpQRefa6r96MEW/F5o6mFKfLiinPa66sr4uylV7kbzaYvP/ta0m2ibR5zZG27eO9ND60EAdE2+xP30+nT+sFw2m+vq07rQnV+dRNyaVdqkHKvWiBzF1kbg//vGPJhDrwQ+tl0SfWa1rvej7Fev11tEhOhogFdqmLrjgAtM+Yp//dL22dHxuWtKWAeQ3eroB5DVdhEt/7OkiOjrsVMNz7UBRPxDo4miJxHrJYjSUKR3GnYg+jw7JrB1gNBTEW708GbovXfm39qX2cPTa9Iee9hDrj9szzzwz4T51tV39kag9tfX3rZfGTrPWksc2RXtP44kNq9Wgp/QHv/4w1h+5tTWnjjVgay+u9lTrD2btNRw4cGCTj4sFdv0xr0FTA0n94fzaBvSgT+2gpz1tOjS7ObRHV09VpT3N8Rbliy3EFauX2DDo+vWkAa059aSjRHQBOe3x1VBY+3U1p11o/ejQc+1FbteunVlhvinae12//Pq5jI2QqE0XV9PXHiurHohqDv0s6WdKP1u1g1z9QK2rpmtojvf6a39uY99B9Xtdm/MdFRsBocPmdVGv2nVYe8RMS9ulbqsHlfQghkrmvYp9VnX0x7HHHmuGhzd29odEn389WKoL4MU+/+l6bYn20ZzPTXPaMoD8Rk83gLynP471R7gOR9QgoIFKV1DW+XfaQ6jD/7Q3REO1/khOFHZvuukmMyx9+PDh8vbbb5th6dprpisJJ6LhQ4eH6pBSHZr61VdfmVVzdehussMrW0JXDtZLY3S+uc7T1CClYVHDivZO6Y/e2KnWEoX2ljy2KTo8U1eL1zrWYawahjXo6fugP95jQ3tjc4d1uLlupz92dVhp7KBIKjRga9DWnkx9r2bPnp30YzVk33jjjebgjh7wqL+yva78rENj9X6tM+2J/8Mf/tDoSIKm6P50bq0GGQ3futK91o32wulQd+2F1p43PW2YtlsNgzrkWQ8+afvXObP6PqVKQ5O2K/23/jD6VNqF9kDq6tM63FhXj9bPp35edKSBhsamaG+27kd7dwcMGGBWWddhxHpbbPh9jO5Pe+l1DQZtLzpMujl0+HAyPaUajrXt6sgHrR+dYqJnMtCDRhrCdK0HpadmU9rWNIhrkNfRMdoWtT1rD6nWiw7L1gMcsSkMMTq3Xkc9aLvSx+g+dDSM9nDX7mXXOte61ZXEhw4dar4TNfwn2y51nrKOENLttW718xib4pHolGlKw7l+D2ob1Danr19Dr37OGjvvu5ZF24Guv6B1pMFZe8Y1yGrZdch6ul5bbB/6WdFRNNoW9X3Q25L93LS0LQPIc5leyQ0A0im20uzixYsb3BdbbVxXqdbVr99++21nxIgRTmlpqdO5c2fntNNOc957770GK2HratVlZWXOhx9+aFYA19WXO3To4Jx55pnO5s2b6zxHvNXLdZXpbbbZxgkEAs6OO+7ozJkzp2YV7dr0+tlnn92g3E2tiB5v9fLGJFrp995773X23HNP81r1NW677bbOiSeeaFblrV0XzX2srgysKwQn6+677zbvVf/+/c17pKtj636nTp1qVsGubcOGDeb905W1tQyHHXaYs3z58oSrl69Zsybh886ePbtmtXTdb32J6kDtvffe5rHHH3983Pu1nnbYYQfTFvR16ar099xzT4PVkZNZvbz2ivgPPPCAs//++5t26fP5THs+5JBDnEceeaTOauyffvqpM3bsWKeiosJsc+6555pVuOOtXt7Ue6UrmOvjRo4cmXCbptrFf//7X+fYY481t+v9esaBPfbYw7n//vubfN2xMr7xxhvOsGHDTJ3qquC6inyiFeOvuuoqU+ZFixY5yaq9enkiiVYg17Mg6Cr2Xbp0cfx+v9OtWzfzPt111111trvlllucfv36mRW6a3//LF261DnooIPM6uvt27c3ZyFYsWJFnXatq3zrZ2KXXXYx76vWo7Yxvb+ysrLmOb7//nuz8nq7du3Mquu1v3+SaZe6Iv2ECRNMfeh2uvq3vgfPPvtsnddS/zN3ySWXmPdHyx/b/wUXXFCz0n0i8+bNc0499VSzyry2C23X+v7qd4KWpbaWvjal3xf62dC61vtqf8aT+dy0pC0DyH+W/l+mgz8AZDPtpXryySdNLzeA3KW9nzoyov66CAAAuInh5QAAIG/p/F9ddEuH/+qq9zo0GACA1kToBgAAeUvnT+ucZ53/res36JxbAABaE8PLAQAAAABwCacMAwAAAADAJYRuAAAAAABcQugGAAAAAMAlBbeQWjQalW+//VbatGljThsCAAAAAECq9OzbmzZtkh49eojHk7g/u+BCtwbu3r17Z7oYAAAAAIA88NVXX0mvXr0S3l9woVt7uGMVU1FRIdncI79mzRrp3Llzo0dNgFxGO0e+o42jENDOke9o40hk48aNpkM3ljETKbjQHRtSroE720N3dXW1KSOhG/mKdo58RxtHIaCdI9/RxtGUpqYt04UKAAAAAIBLCN0AAAAAALiE0A0AAAAAgEsKbk43AAAAgMJh27aEw+EWzenWx+t6S6y1VFj8fr94vd4W74fQDQAAACAvz6G8atUqWb9+fYv3o8Fbz8fc1IJZyD/t2rWTbt26tei9J3QDAAAAyDuxwN2lSxcpLS1tdmjS0B2JRMTn8xG6C4jjOLJlyxZZvXq1ud69e/dm74vQDQAAACDvhpTHAnfHjh1btC9Cd+EqKSkx/2rw1rbU3KHmLKQGAAAAIK/E5nBrDzfQErE21JJ1AQjdAAAAAPISc7CRDW2I0A0AAAAAgEsI3QAAAACAvHXVVVfJrrvumrHnJ3QDAAAAQBY4+eSTzXDmG264oc7tzzzzTIuHOd9///1mHzvuuGOD++bOnWvu22abbVLapz5Gy5ZOY8aMkWnTpqV1nxdeeKG8+uqrkimEbgAAAADIEsXFxXLjjTfKDz/8kPZ9l5WVmZW433nnnTq333vvvdKnTx/JV+Xl5S1exb4lCN0AAAAAkCUOPPBA6datm1x//fWNbvfXv/5VdtppJwkEAqaH+qabbmpy33qu8eOOO86E7Jivv/5a3njjDXN7fc8995wMHTrUHAjo37+/zJw505yzXMV6xSdMmFCnl/zzzz+XI444Qrp27WrC7vDhw+Uf//hHnf3ecccdsv3225v96nZHHXVUTU///Pnz5dZbbzX71Mvy5cvNKeCmTJki/fr1M6fx2mGHHcw2telr2GOPPcyBhXbt2snIkSPlyy+/jDu8vLFt3cB5ugEAAADkNT3XdlXYbvZjNWj6os1bybrE703pcXou6N/+9rcmBJ933nnSq1evBtssWbJEjj76aBMmJ02aJG+//bacddZZpjdXg2tjNLzuu+++JrTq6bB02Pm4ceNM+K1t3rx5csIJJ8htt90mo0aNMmH6jDPOMPfNmDFDFi9ebM5dfd9995nHx85hvXnzZvnZz34m1157rQnVDzzwgBx22GHyySefmN70d99917yuv/zlL7L33nvL999/LwsXLjSP1TJ9+umnMnjwYLn66qvNbZ07d5ZoNGrqQYfBd+rUybxeLUv37t1NPej7c+SRR8rpp58ujz76qIRCIfnXv/4Vt95T2TZdCN0AAAAA8poG7kFXzsvIcy+9+mApLUotdmnvsfbMari95557Gtw/a9YsOeCAA+SKK64w1wcMGCBLly6V3//+902Gbt3vtttuK08++aRMnjzZhG7d3xdffFFnu+uuu04uueQSOemkk8x17em+5ppr5OKLLzbl0jCstKdYe+ZjhgwZYi4x1157rTz99NPy7LPPyjnnnCMrVqwwPczjx4+XNm3aSN++fWW33XYz27Zt21aKiorMwYDa+9RAr73sMdrjrcFbQ7iG7o0bN8qGDRvMPvW1qXhz11Uq2+bF8PIFCxaYox49evRIehK+DjeoPcThrrvuapWyAgAAAEBr0Xnd2kusYbq+jz/+2AyJrk2vf/bZZ2YodlNOPfVU00Ot2SrWMx2vN117m3WIeOyivcMrV66ULVu2JNx3ZWWlCeaDBg0ygby8vFz++9//mrCtDjroIBO0Nctp6H/44Ycb3V+M5r5hw4aZsK/7nDNnTs0+O3ToYA42HHzwwSZfao+5ljOeVLbNi55ufUP0KMgpp5wiP//5z5vcftmyZaZB6Jv90EMPyVtvvWWGUWjFJ/N4AAAAAIVHh3hrj3OLhpf7fM0eXt4cOgRcg+Fll13WoPday1S/LHpbso4//ngTjHV4+oknnmheW306pFt7lydOnNjgPu0ATeSiiy4yQ9P/8Ic/yHbbbWfmYOucbR3GrbR3+7333jPzql9++WW58sorTTl0uLqG9Hi0R/uCCy4w89ZHjBhh9qG9+v/85z9rttGDCDps/aWXXpLHH39cfvOb38grr7wie+21V4P9pbJtzofuQw45xFySpUc3dB7ALbfcUjMMQOcE6BuaT6HbiUZly+YNUr1lk2zZHBCPJw0DEvylOgklHcXLeanOqwEAAEBu099+qQ7xrhO6PVsXIWvt35B66jAdDq7Dx2vTXuQ333yzzm063Fq3i82tboz29h5++OEmzCYaObz77rubedganBPx+/0NetZ1frYeJNAh8mrz5s1mMbTatC51wTi96FB1DduvvfaaCfg6vDzePnX+t3a4xugc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ttx8880yd+5cM5c7FKrbQ/j999+ns3yAqwoxsGjPswbhsvWftsrz6fNY0aA43sKr61ToaAodVaEHeZKZEmFGaCQ4YAQA6ez11BD2yXebqNQCoe+1jmoo9nszXRSgcEP3zJkz5c9//rNZwVxXK7/88stl+fLl8swzz8iVV17pTikBpI9lmZ5nDcJuD11vjZ70fAveyYyqMGsQJJgSAQDppMPFtdcz0dDymuHlm38Qf3l7ekdzmL7HjGYAsiR0P/zwwzJnzhw59NBDTQA/9thjZdttt5VddtlFFi1aJOedd547JQWQPpbles+z23PFAQCtF7wb6/XU0O3xeaTI7yV0A0A6ztOt5+Teeeedzd/l5eWyYcMG8/f48ePlhRdeSHV3AAAAAADkrZRDd69evWTlypXm7+22205efvll8/fixYvNuboBAAAAAEAzQ/eECRPk1VdfNX+ff/75Zl739ttvLyeeeKKceuqpqe4OAAAAAIC8lfKc7htuuKHm76OOOsr0fL/99tum1/vwww9Pd/kAAAAAACjc83Tvtdde5gIAAAAAANIQuj/55BP54x//KB9//LFZpXLgwIFy7rnnyg477NCc3QEAAAAAkJdSntP95JNPyuDBg2XJkiUyZMgQc6qw9957z9z2xBNPpFyAO+64Q/r16yfFxcUydOhQWbhwYaPbB4NBc27wvn37moXb9HRl9957b8rPCwAAAABA1vV0X3zxxXLppZfK1VdfXef2GTNmyK9//Wv5xS9+kfS+Hn/8cZk2bZoJ3iNHjpS7775bDjnkEFm6dKn06dMn7mOOPvpo+e677+See+4x88hXr14tkUgk1ZcBAAAAAEB2nqdbVyqv74QTTjD3pWLWrFkyZcoUOe2002THHXeUW265RXr37i133nln3O1feuklmT9/vrz44oty4IEHyjbbbCN77LGH7L333qm+DAAAAAAAsi90jxkzJu4Q8DfffFNGjRqV9H5CoZAZoj527Ng6t+t1XQ09nmeffVaGDRsmv/vd76Rnz54yYMAAufDCC6WqqirVlwEAAAAAQHYML9ewG6OnBdNh5BqYY6uWL1q0yMznnjlzZtJPvHbtWrFtW7p27Vrndr2eqMf8iy++MOFe538//fTTZh9nnXWWfP/99wnndesccL3EbNy40fwbjUbNJVtp2RzHyeoy5qJYvcYujdm6jf679W+k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7NixTufOnc13e58+fczt9dsvbRzZLF771st9991Xsw3f5UgXS/8v+YgOAAAAAACSxZxuAAAAAABcQugGAAAAAMAlhG4AAAAAAFxC6AYAAAAAwCWEbgAAAAAAXELoBgAAAADAJYRuAAAAAABcQugGAAAAAMAlhG4AAFrZVVddJbvuumvG6v2KK66QM844Q/K1fi688EI577zz0lomAACai9ANAEAaWZbV6OXkk082ofDVV1/NSL1/9913cuutt8pll10m2UDr5JlnnknrPi+++GK57777ZNmyZWndLwAAzUHoBgAgjVauXFlzueWWW6SioqLObRp4y8vLpWPHjhmp93vuuUdGjBgh22yzjeSrLl26yNixY+Wuu+7KdFEAACB0AwCQTt26dau5tG3b1vTk1r+t/vBp7f0+8sgj5be//a107dpV2rVrJzNnzpRIJCIXXXSRdOjQQXr16iX33ntvnef65ptvZNKkSdK+fXsT4o844ghZvnx5o+V77LHH5PDDD69z25gxY+Tcc8+VadOmmX1pGWbPni2VlZVyyimnSJs2bWTbbbeVv//973UeN3/+fNljjz0kEAhI9+7d5ZJLLjFlrr1fHeatPc/6GvT162uPiQX/CRMmmHqqfyDgL3/5i7lN6+yYY46RTZs21dz35JNPys477ywlJSXmtR944IGmvDH6Gh999NEm3y8AANxGTzcAAFngtddek2+//VYWLFggs2bNMuF0/PjxJgT/85//lKlTp5rLV199ZbbfsmWL7LfffqbXXB/z5ptvmr/HjRsnoVAo7nP88MMP8u9//1uGDRvW4L4HHnhAOnXqJP/6179MAD/zzDPlF7/4hey9997y3nvvycEHHyyTJ082zxsL/D/72c9k+PDh8n//939y5513ml70a6+9tsF+y8rKzGv43e9+J1dffbW88sor5r7Fixebf3UouI4CiF1Xn3/+uRl2/vzzz5uLBvwbbrjB3KfbHnvssXLqqafKxx9/LG+88YZMnDhRHMepebweDNC6+vLLL9Pw7gAA0AIOAABwxX333ee0bdu2we0zZsxwhgwZUnP9pJNOcvr27evYtl1z2w477OCMGjWq5nokEnHKysqcRx991Fy/5557zDbRaLRmm2Aw6JSUlDjz5s2LW573339fU6mzYsWKOrePHj3a2WeffRo81+TJk2tuW7lypXnsO++8Y65fdtllDZ7/9ttvd8rLy2teR/39quHDhzu//vWva67rPp9++ukG9VNaWups3Lix5raLLrrI2XPPPc3fS5YsMY9bvny5k8iGDRvMNm+88UbCbQAAaA30dAMAkAV22mkn8Xh++s+yDvHW4dMxXq/XDKNevXq1ub5kyRL53//+Z4Z+aw+3XnQId3V1tekljqeqqsr8W1xc3OC+XXbZpcFz1X5+LY+KPb/2MOvccB0WHjNy5EjZvHmzfP3113H3q3QYemwfjdFh5fra4j1uyJAhcsABB5jyaW/8nDlzTC9+bTrsXMV65gEAyBRfxp4ZAADU8Pv9dWpDw2y826LRqPlb/x06dKg8/PDDDWqxc+fOcWtWh48rDaj1t2nq+WPhOvb82kldO3DHbqu9baL9xvbRmMYepwcFdIj622+/LS+//LL88Y9/lMsvv9wMYe/Xr5/Z5vvvv2+0LgAAaC30dAMAkIN23313+eyzz8xK3dttt12diy48Fo8uhqarqS9durTFzz9o0CATemvPo9br2jvds2fPpPej4dq27ZSfX0O49qzrgnPvv/++FBUVydNPP11zv85d133rCAIAADKJ0A0AQA46/vjjTc+1rli+cOFCc05qXWzs/PPPrzO8uzYdvq6rfOuiay111llnmYXKdNG1//73v/K3v/1NZsyYIdOnT68zTD6ZYeR6zvJVq1Y1GCKeiPZo60rv7777rqxYsUKeeuopWbNmjey4444122idjBo1qmaYOQAAmULoBgAgB5WWlppVy/v06WNW7tbAqat567xt7c1O5IwzzjCnDUtmiHdjtDf7xRdfNKud6xxrXVl9ypQp8pvf/Cal/dx0001mqHjv3r1lt912S+ox+vr0tevq6QMGDDDPqfs55JBDarbR04WdfvrpKb8uAADSzdLV1NK+VwAAkJX0P/t77bWXOSe3nnYrH73wwgvm/OYffvih+HwsXwMAyCx6ugEAKCA6F3r27NkSiUQkX1VWVppzfxO4AQDZgJ5uAAAAAABcQk83AAAAAAAuIXQDAAAAAOASQjcAAAAAAC4hdAMAAAAA4BJCNwAAAAAALiF0AwAAAADgEkI3AAAAAAAuIXQDAAAAAOASQjcAAAAAAC4hdAMAAAAAIO74f3bQaAT7tjrrAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Create separate Kaplan-Meier models for each group\n", "kmf_no_meta = KaplanMeierFitter()\n", "kmf_yes_meta = KaplanMeierFitter()\n", "\n", "# Fit models for each group using PyBH\n", "survival_no_meta = SurvivalAnalysis(\n", " model=kmf_no_meta,\n", " data=data[data['metastasized'] == 'no'],\n", " time_col='time',\n", " event_col='event'\n", ")\n", "\n", "survival_yes_meta = SurvivalAnalysis(\n", " model=kmf_yes_meta,\n", " data=data[data['metastasized'] == 'yes'],\n", " time_col='time',\n", " event_col='event'\n", ")\n", "\n", "# Plot both survival curves\n", "plt.figure(figsize=(10, 6))\n", "ax = plt.subplot(111)\n", "\n", "kmf_no_meta.plot_survival_function(ax=ax, label='No Metastasis')\n", "kmf_yes_meta.plot_survival_function(ax=ax, label='Metastasis')\n", "\n", "plt.title('Kaplan-Meier Survival Curves by Metastasis Status')\n", "plt.xlabel('Time (months)')\n", "plt.ylabel('Survival Probability')\n", "plt.legend()\n", "plt.grid(True, alpha=0.3)\n", "plt.tight_layout()\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Median Survival Time\n", "\n", "The median survival time is the time at which 50% of the subjects have experienced the event:\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Median Survival Times:\n", " All patients: 113.00 months\n", " No metastasis: inf months\n", " With metastasis: 61.00 months\n" ] } ], "source": [ "print(\"Median Survival Times:\")\n", "print(f\" All patients: {kmf.median_survival_time_:.2f} months\")\n", "print(f\" No metastasis: {kmf_no_meta.median_survival_time_:.2f} months\")\n", "print(f\" With metastasis: {kmf_yes_meta.median_survival_time_:.2f} months\")\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Conclusion\n", "\n", "This notebook demonstrated how to use PyBH's `SurvivalAnalysis` class with the Kaplan-Meier estimator from `lifelines` to:\n", "\n", "1. **Load and preprocess** survival data (the mastectomy dataset)\n", "2. **Fit Kaplan-Meier models** using PyBH's workflow manager\n", "3. **Visualize survival curves** for different patient groups\n", "4. **Compare survival** between groups using statistical tests\n", "5. **Extract survival probabilities** at specific time points\n", "\n", "The `SurvivalAnalysis` class simplifies the workflow by automatically handling data validation, preprocessing (including one-hot encoding of categorical variables), and routing to the appropriate model type (Bayesian or frequentist).\n" ] } ], "metadata": { "kernelspec": { "display_name": "PyBH", "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.12.12" } }, "nbformat": 4, "nbformat_minor": 2 }