{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Use Case 9: Survival Analysis of Endometrial Cancer--PODXL, RAC2, and Tumor Stage\n",
"\n",
"Through modern statistical methods, we can determine survival risk based on a variety of factors. In this tutorial, we will walk through a small example of something you could do with our data to understand what factors relate with survival in various different types of cancer. In this use case, we will be looking at Endometrial Cancer."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 1: Import Data and Dependencies"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import cptac\n",
"import cptac.utils as ut\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import scipy\n",
"import lifelines\n",
"from lifelines import KaplanMeierFitter\n",
"from lifelines import CoxPHFitter\n",
"from lifelines.statistics import proportional_hazard_test\n",
"%matplotlib inline"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"cptac warning: Your version of cptac (1.5.1) is out-of-date. Latest is 1.5.0. Please run 'pip install --upgrade cptac' to update it. (C:\\Users\\sabme\\anaconda3\\lib\\threading.py, line 910)\n"
]
}
],
"source": [
"en = cptac.Ucec()\n",
"clinical = en.get_clinical('mssm')\n",
"proteomics = en.get_proteomics('umich')\n",
"follow_up = en.get_followup('mssm')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 2: Gather Data from CPTAC API\n",
"The Endometrial cancer dataset contains months of follow-up data, including whether a patient is still alive (Survival Status) at each follow-up period. We will first merge the clinical and follow-up tables together for analysis. Then we will choose a few attributes to focus on, and narrow our dataframe to those attributes. While you could study a wide variety of factors related to survival, we will be focusing on tumor stage, grade and a proteins of interest listed below in *omics_genes*."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First we will join the *clinical* and *proteomics* dataframes to contain protein data for proteins of interest, and clinical data for each patient in the same dataframe."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"cols = list(clinical.columns)\n",
"omics_genes = ['RAC2', 'PODXL']\n",
"\n",
"clinical_and_protein = en.join_metadata_to_omics(metadata_name=\"clinical\",\n",
" metadata_source=\"mssm\",\n",
" metadata_cols=cols,\n",
" omics_name=\"proteomics\",\n",
" omics_source=\"umich\",\n",
" omics_genes=omics_genes)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, we will rename the foreign key (\"PPID\" -> \"Patient_ID\") on the follow_up table to allow us to easily join that data with the dataframe of clinical and protein data"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
"
],
"text/plain": [
"Name tumor_code discovery_study type_of_analyzed_samples_mssm_clinical \\\n",
"Patient_ID \n",
"C3L-00006 UCEC Yes Tumor_and_Normal \n",
"C3L-00008 UCEC Yes Tumor \n",
"C3L-00032 UCEC Yes Tumor \n",
"C3L-00084 UCEC Yes Tumor \n",
"C3L-00090 UCEC Yes Tumor \n",
"... ... ... ... \n",
"NX5.N NaN NaN NaN \n",
"NX6.N NaN NaN NaN \n",
"NX7.N NaN NaN NaN \n",
"NX8.N NaN NaN NaN \n",
"NX9.N NaN NaN NaN \n",
"\n",
"Name type_of_analyzed_samples_mssm_clinical confirmatory_study age \\\n",
"Patient_ID \n",
"C3L-00006 NaN NaN 64 \n",
"C3L-00008 NaN NaN 58 \n",
"C3L-00032 NaN NaN 50 \n",
"C3L-00084 NaN NaN 74 \n",
"C3L-00090 NaN NaN 75 \n",
"... ... ... ... \n",
"NX5.N NaN NaN NaN \n",
"NX6.N NaN NaN NaN \n",
"NX7.N NaN NaN NaN \n",
"NX8.N NaN NaN NaN \n",
"NX9.N NaN NaN NaN \n",
"\n",
"Name sex race ethnicity \\\n",
"Patient_ID \n",
"C3L-00006 Female White Not Hispanic or Latino \n",
"C3L-00008 Female White Not Hispanic or Latino \n",
"C3L-00032 Female White Not Hispanic or Latino \n",
"C3L-00084 Female White Not Hispanic or Latino \n",
"C3L-00090 Female White Not Hispanic or Latino \n",
"... ... ... ... \n",
"NX5.N NaN NaN NaN \n",
"NX6.N NaN NaN NaN \n",
"NX7.N NaN NaN NaN \n",
"NX8.N NaN NaN NaN \n",
"NX9.N NaN NaN NaN \n",
"\n",
"Name ethnicity_race_ancestry_identified ... \\\n",
"Patient_ID ... \n",
"C3L-00006 White ... \n",
"C3L-00008 White ... \n",
"C3L-00032 White ... \n",
"C3L-00084 White ... \n",
"C3L-00090 White ... \n",
"... ... ... \n",
"NX5.N NaN ... \n",
"NX6.N NaN ... \n",
"NX7.N NaN ... \n",
"NX8.N NaN ... \n",
"NX9.N NaN ... \n",
"\n",
"Name number_of_days_from_date_of_initial_pathologic_diagnosis_to_date_of_additional_surgery_for_new_tumor_event_loco-regional \\\n",
"Patient_ID \n",
"C3L-00006 NaN \n",
"C3L-00008 NaN \n",
"C3L-00032 NaN \n",
"C3L-00084 NaN \n",
"C3L-00090 NaN \n",
"... ... \n",
"NX5.N NaN \n",
"NX6.N NaN \n",
"NX7.N NaN \n",
"NX8.N NaN \n",
"NX9.N NaN \n",
"\n",
"Name number_of_days_from_date_of_initial_pathologic_diagnosis_to_date_of_additional_surgery_for_new_tumor_event_metastasis \\\n",
"Patient_ID \n",
"C3L-00006 NaN \n",
"C3L-00008 NaN \n",
"C3L-00032 NaN \n",
"C3L-00084 NaN \n",
"C3L-00090 NaN \n",
"... ... \n",
"NX5.N NaN \n",
"NX6.N NaN \n",
"NX7.N NaN \n",
"NX8.N NaN \n",
"NX9.N NaN \n",
"\n",
"Name Recurrence-free survival, days \\\n",
"Patient_ID \n",
"C3L-00006 NaN \n",
"C3L-00008 NaN \n",
"C3L-00032 NaN \n",
"C3L-00084 NaN \n",
"C3L-00090 50.0 \n",
"... ... \n",
"NX5.N NaN \n",
"NX6.N NaN \n",
"NX7.N NaN \n",
"NX8.N NaN \n",
"NX9.N NaN \n",
"\n",
"Name Recurrence-free survival from collection, days \\\n",
"Patient_ID \n",
"C3L-00006 NaN \n",
"C3L-00008 NaN \n",
"C3L-00032 NaN \n",
"C3L-00084 NaN \n",
"C3L-00090 56.0 \n",
"... ... \n",
"NX5.N NaN \n",
"NX6.N NaN \n",
"NX7.N NaN \n",
"NX8.N NaN \n",
"NX9.N NaN \n",
"\n",
"Name Recurrence status (1, yes; 0, no) Overall survival, days \\\n",
"Patient_ID \n",
"C3L-00006 0.0 737.0 \n",
"C3L-00008 0.0 898.0 \n",
"C3L-00032 0.0 1710.0 \n",
"C3L-00084 0.0 335.0 \n",
"C3L-00090 1.0 1281.0 \n",
"... ... ... \n",
"NX5.N NaN NaN \n",
"NX6.N NaN NaN \n",
"NX7.N NaN NaN \n",
"NX8.N NaN NaN \n",
"NX9.N NaN NaN \n",
"\n",
"Name Overall survival from collection, days \\\n",
"Patient_ID \n",
"C3L-00006 737.0 \n",
"C3L-00008 898.0 \n",
"C3L-00032 1710.0 \n",
"C3L-00084 335.0 \n",
"C3L-00090 1287.0 \n",
"... ... \n",
"NX5.N NaN \n",
"NX6.N NaN \n",
"NX7.N NaN \n",
"NX8.N NaN \n",
"NX9.N NaN \n",
"\n",
"Name Survival status (1, dead; 0, alive) RAC2_umich_proteomics \\\n",
"Patient_ID \n",
"C3L-00006 0.0 -0.182830 \n",
"C3L-00008 0.0 -0.793159 \n",
"C3L-00032 0.0 0.583774 \n",
"C3L-00084 0.0 -0.193889 \n",
"C3L-00090 1.0 -0.361299 \n",
"... ... ... \n",
"NX5.N NaN 0.864272 \n",
"NX6.N NaN 0.841041 \n",
"NX7.N NaN 0.430521 \n",
"NX8.N NaN -0.000459 \n",
"NX9.N NaN 0.448693 \n",
"\n",
"Name PODXL_umich_proteomics \n",
"Patient_ID \n",
"C3L-00006 0.731055 \n",
"C3L-00008 0.451984 \n",
"C3L-00032 1.344697 \n",
"C3L-00084 -1.994844 \n",
"C3L-00090 0.154995 \n",
"... ... \n",
"NX5.N -0.980967 \n",
"NX6.N -0.260866 \n",
"NX7.N -0.498802 \n",
"NX8.N -0.140857 \n",
"NX9.N -0.370379 \n",
"\n",
"[152 rows x 126 columns]"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"follow_up = follow_up.rename({'PPID' : 'Patient_ID'}, axis='columns')\n",
"clin_prot_follow = pd.merge(clinical_and_protein, follow_up, on = \"Patient_ID\")\n",
"clinical_and_protein"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"#Determine columns to focus on, and create a subset to work with\n",
"columns_to_focus_on = ['Survival status (1, dead; 0, alive)',\n",
" 'number_of_days_from_date_of_collection_to_date_of_last_contact', \n",
" 'number_of_days_from_date_of_collection_to_date_of_death',\n",
" 'tumor_stage_pathological']\n",
"\n",
"#This adds the protein data that we got from the clinical and proteomics join\n",
"#so that it will be present in our subset of data to work with\n",
"for i in range(len(omics_genes)):\n",
" omics_genes[i] += '_umich_proteomics'\n",
" columns_to_focus_on.append(omics_genes[i])\n",
"\n",
"focus_group = clin_prot_follow[columns_to_focus_on].copy().drop_duplicates()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Step 3: Kaplan Meier Plotting\n",
"Kaplan Meier plots show us the probability of some event occuring over a given length of time, based on some attribute(s). Oftentimes, they are used to plot the probability of death for clinical attributes, however they could also be used in a variety of other contexts. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We will start by finding all patients that have died during the follow-up period and update the column to contain boolean values, where True denotes that the event occurred ('Deceased'), and False denotes that it did not ('Living'). We will then combine the two columns containing timeframe data ('Days_Between_Collection_And_Last_Contact', and 'Days_Between_Collection_And_Death'), to help us with plotting survival curves. These steps are necessary to fit the requirements of the *lifelines* package."
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"#Make the Survival Status column boolean\n",
"focus_group['Survival status (1, dead; 0, alive)'] = focus_group['Survival status (1, dead; 0, alive)'].replace(0, False)\n",
"focus_group['Survival status (1, dead; 0, alive)'] = focus_group['Survival status (1, dead; 0, alive)'].replace(1, True)\n",
"focus_group['Survival status (1, dead; 0, alive)'] = focus_group['Survival status (1, dead; 0, alive)'].astype('bool')"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"cols = ['number_of_days_from_date_of_collection_to_date_of_last_contact', 'number_of_days_from_date_of_collection_to_date_of_death']\n",
"\n",
"focus_group = focus_group.assign(Days_Until_Last_Contact_Or_Death=focus_group[cols].sum(1)).drop(cols, axis=1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Next, we will create a general Kaplan Meier Plot of overall survival for our cohort, using the KaplanMeierFitter() from the *lifelines* package."
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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WsiBZcKECTp06JDmzZunkpISDRo0SPn5+YFBs8XFxUHjUyorKzVnzhx99tlnateuna666io999xzSkxMbHCdQF1YORqILCer7HMLF6GLclhh/b0b8jwsdsQ8LAg35oVBJPjuvC4rpl50xj58qrx+7S87obNczMESyeLcURrRJ6lZv29C+fzmuwcA0KJcUQ6lJcRxyzSCebw+nfB4w3obnsACAGhxPEEX+ap94X2ogO8gAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABgewQWAABge0wcBzQjj7f2WilOh8WkWQDQRAQWoBlEOSzFuaN0wuOtNRtkRZVXaQlxhBYAaAICC9AMYqKdGtEnqdY6GyerfCrce5g1VGA7Hu83wdod5ZBlWWFuDXB6BBagmYRz2XUgVLetKpIkZaS01/yx/QgtsD2uUQNAG+GOcigjpX3Qvt2lxwJXWwA74woLALQRlmVp/th+8nj98nj9gassQCQgsABAG2JZFrcvEZG4JQQAAGyPwAIAAGyPwAIAAGyPwAIAAGyPwAIAAGyPwAIAAGyPwAIAAGyPwAIAAGyPieOAM8Dj9YW7CQ3idFisKg3AlggsQAuKcliKc0fphMerap/912upqPIqLSGO0ALAdggsQAuKiXZqRJ8kef0m3E05rZNVPhXuPSxfBLQVQNtDYAFaGOu2AEDTcd0XAADYHoEFAADYHoEFAADYHoEFAADYHoEFAADYHk8JAUAb5/E2bo4gd5RDlmU1c2uAuhFYAKCNu21VUaOOy0hpr/lj+xFacEZwSwgA2iB3lEMZKe2bVMfu0mONvjoDhIorLADQBlmWpflj+zUqcHi8/kZflQEai8ACAG2UZVnMxIyIwS0hAABgewQWAABgewQWAABge40KLIsXL1aPHj0UExOjzMxMbdmypd7yixYtUkZGhmJjY5Wenq677rpLlZWVgdcfeughWZYVtJ177rmNaRoAAGiFQh50u2bNGuXm5mrp0qXKzMzUokWLlJOTo927d6tTp061yv/1r3/V/fffr+XLl2v48OH6z3/+o6lTp8qyLC1cuDBQ7vzzz9frr7/+bcOiGA8MAAC+EXIqWLhwoaZPn65p06ZJkpYuXap169Zp+fLluv/++2uVf++99/TDH/5QN9xwgySpR48emjhxojZv3hzckKgopaamNqgN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fvaznykvLy/ipnS//vrrA//u37+/BgwYoN69e2vjxo264oorwtiyM2P58uWaNGmSYmJigva3pnNcH24JnUJSUpKcTmetJ0dKS0uVmpoaplY1ze23365XXnlFb775prp27Vpv2czMTEnSnj17JEmpqal1/l/UvGZ3iYmJOuecc7Rnzx6lpqaqqqpKR48eDSrz3XMbyf394osv9Prrr+uWW26pt1xrOsc17avv5zU1NVUHDx4Met3r9eq///1vRJ/3mrDyxRdfaMOGDUFXV+qSmZkpr9erzz//XFJk9rlGr169lJSUFPQ93BrPsSS988472r1792l/rqXWdY6/i8ByCi6XS0OGDFFBQUFgn9/vV0FBgbKyssLYstAZY3T77bfrxRdf1BtvvFHr0mBdtm/fLknq3LmzJCkrK0sff/xx0C+Dml+O/fr1a5F2N6fjx49r79696ty5s4YMGaLo6Oigc7t7924VFxcHzm0k93fFihXq1KmTxowZU2+51nSOe/bsqdTU1KBzWl5ers2bNwed06NHj6qoqChQ5o033pDf7w+Et6ysLL399tuqrq4OlNmwYYMyMjJsedm8Jqx8+umnev3119WxY8fTHrN9+3Y5HI7ArZNI6/N3ffXVVzpy5EjQ93BrO8c1li1bpiFDhmjgwIGnLduaznGQcI/6tbPVq1cbt9ttVq5caXbu3GluvfVWk5iYGPQURSSYMWOGSUhIMBs3bgx67O3EiRPGGGP27NljFixYYD788EOzb98+8/LLL5tevXqZSy65JFBHzSOvV155pdm+fbvJz883ycnJtnnk9fvuvvtus3HjRrNv3z7z7rvvmuzsbJOUlGQOHjxojPnmseZu3bqZN954w3z44YcmKyvLZGVlBY6PtP7W8Pl8plu3bua+++4L2t8azvGxY8fMtm3bzLZt24wks3DhQrNt27bAEzGPPvqoSUxMNC+//LL56KOPzLhx4+p8rHnw4MFm8+bNZtOmTaZv375Bj7wePXrUpKSkmJtuusns2LHDrF692sTFxYXt8c/6+lxVVWV+9KMfma5du5rt27cH/WzXPA3y3nvvmd///vdm+/btZu/evWbVqlUmOTnZTJ482ZZ9rq+/x44dM7NmzTKFhYVm37595vXXXzcXXnih6du3r6msrAzU0ZrOcY2ysjITFxdnlixZUuv4SDvHTUFgOY0//vGPplu3bsblcplhw4aZ999/P9xNCpmkOrcVK1YYY4wpLi42l1xyienQoYNxu92mT58+5p577gmao8MYYz7//HMzevRoExsba5KSkszdd99tqqurw9Cj05swYYLp3LmzcblcpkuXLmbChAlmz549gddPnjxpfv7zn5uzzz7bxMXFmauvvtocOHAgqI5I6m+N1157zUgyu3fvDtrfGs7xm2++Wef38ZQpU4wx3zzaPHfuXJOSkmLcbre54oorav0/HDlyxEycONG0a9fOxMfHm2nTppljx44FlfnXv/5lRowYYdxut+nSpYt59NFHz1QXa6mvz/v27Tvlz3bN3DtFRUUmMzPTJCQkmJiYGHPeeeeZRx55JOgD3hj79Lm+/p44ccJceeWVJjk52URHR5vu3bub6dOn1/oDsjWd4xpPP/20iY2NNUePHq11fKSd46awjDGmRS/hAAAANBFjWAAAgO0RWAAAgO0RWAAAgO0RWAAAgO0RWAAAgO0RWAAAgO0RWAAAgO0RWAAAgO0RWAA0m40bN8qyrFoLSza3lStXKjExMfD1Qw89pEGDBrXoewIILwILgEYbOXKk7rzzzsDXw4cP14EDB5SQkHBG2zFr1qyghQ8BtD5R4W4AgNbD5XKFZbn6du3aqV27dmf8fQGcOVxhAdAoU6dO1VtvvaUnnnhClmXJsiytXLky6JZQza2bV155RRkZGYqLi9OPf/xjnThxQs8884x69Oihs88+W7/4xS/k8/kCdXs8Hs2aNUtdunTRWWedpczMTG3cuPGUbfn+LaGpU6dq/Pjxevzxx9W5c2d17NhRM2fOVHV1daPfA0B4cYUFQKM88cQT+s9//qMLLrhACxYskCT9+9//rlXuxIkT+sMf/qDVq1fr2LFjuuaaa3T11VcrMTFR69ev12effaZrr71WP/zhDzVhwgRJ0u23366dO3dq9erVSktL04svvqhRo0bp448/Vt++fRvUvjfffFOdO3fWm2++qT179mjChAkaNGiQpk+f3mzvAeDMIbAAaJSEhAS5XC7FxcUFbgN98skntcpVV1dryZIl6t27tyTpxz/+sZ577jmVlpaqXbt26tevny677DK9+eabmjBhgoqLi7VixQoVFxcrLS1N0jdjVPLz87VixQo98sgjDWrf2WefrSeffFJOp1PnnnuuxowZo4KCAk2fPr3Z3gPAmUNgAdCi4uLiAmFFklJSUtSjR4+gMScpKSk6ePCgJOnjjz+Wz+fTOeecE1SPx+NRx44dG/y+559/vpxOZ+Drzp076+OPP27W9wBw5hBYALSo6OjooK8ty6pzn9/vlyQdP35cTqdTRUVFQYFDUkgDa8/EewA4cwgsABrN5XIFDZZtDoMHD5bP59PBgwd18cUXN2vdZ/I9ADQvnhIC0Gg9evTQ5s2b9fnnn+vw4cOBKxhNcc4552jSpEmaPHmy1q5dq3379mnLli3Ky8vTunXrmqHVZ+Y9ADQvAguARps1a5acTqf69eun5ORkFRcXN0u9K1as0OTJk3X33XcrIyND48eP1wcffKBu3bo1S/1n6j0ANB/LGGPC3QgAAID6cIUFAADYHoEFAADYHoEFAADYHoEFAADYHoEFAADYHoEFAADYHoEFAADYHoEFAADYHoEFAADYHoEFAADYHoEFAADY3v8HvQ3G5wCp/94AAAAASUVORK5CYII=",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"time = focus_group['Days_Until_Last_Contact_Or_Death']\n",
"status = focus_group['Survival status (1, dead; 0, alive)']\n",
"\n",
"kmf = KaplanMeierFitter()\n",
"kmf.fit(time, event_observed = status)\n",
"kmf.plot()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Step 4 Prepare Data for Multivariate Kaplan Meier Plots and Cox's Proportional Hazard Test\n",
"We will now group our columns of interest into 3-4 distinct categories each, and assign them numeric values. It is necessary for the requirements of the *lifelines* package that the categories are assigned numeric values (other data types, including category, are not compatible with the functions we will be using)."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"df_genes = focus_group.copy()\n",
"\n",
"#Here, we are separating the protein abundance values for each of our proteins\n",
"#of interest into 3 groups, based on relative abundance of the protein\n",
"for col in omics_genes:\n",
" lower_25_filter = df_genes[col] <= df_genes[col].quantile(.25)\n",
" upper_25_filter = df_genes[col] >= df_genes[col].quantile(.75)\n",
"\n",
" df_genes[col] = np.where(lower_25_filter, \"Lower_25%\", df_genes[col])\n",
" df_genes[col] = np.where(upper_25_filter, \"Upper_25%\", df_genes[col])\n",
" df_genes[col] = np.where(~lower_25_filter & ~upper_25_filter, \"Middle_50%\", df_genes[col])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"#Here, we map numeric values to correspond with our 3 protein categories\n",
"proteomics_map = {\"Lower_25%\" : 1, \"Middle_50%\" : 2, \"Upper_25%\" : 3}\n",
"for gene in omics_genes:\n",
" df_genes[gene] = df_genes[gene].map(proteomics_map)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"#Here we map numeric values to corresponding tumor stages\n",
"figo_map = {\"Stage III\" : 3, \"Stage IV\" : 4, \n",
" \"Not Reported/ Unknown\" : np.nan,\n",
" \"Stage I\" : 1, \"Stage II\" : 2}\n",
"\n",
"df_genes['tumor_stage_pathological'] = df_genes['tumor_stage_pathological'].map(figo_map)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Name Survival status (1, dead; 0, alive) tumor_stage_pathological \\\n",
"Patient_ID \n",
"C3L-00006 False 1.0 \n",
"C3L-00008 False 1.0 \n",
"C3L-00032 False 1.0 \n",
"C3L-00084 False 1.0 \n",
"C3L-00090 True 1.0 \n",
"... ... ... \n",
"C3N-01520 True 1.0 \n",
"C3N-01521 False 1.0 \n",
"C3N-01537 False 2.0 \n",
"C3N-01802 False 2.0 \n",
"C3N-01825 False 1.0 \n",
"\n",
"Name RAC2_umich_proteomics PODXL_umich_proteomics \\\n",
"Patient_ID \n",
"C3L-00006 2 3 \n",
"C3L-00008 1 3 \n",
"C3L-00032 3 3 \n",
"C3L-00084 2 1 \n",
"C3L-00090 2 2 \n",
"... ... ... \n",
"C3N-01520 2 2 \n",
"C3N-01521 3 3 \n",
"C3N-01537 3 2 \n",
"C3N-01802 1 1 \n",
"C3N-01825 3 1 \n",
"\n",
"Name Days_Until_Last_Contact_Or_Death \n",
"Patient_ID \n",
"C3L-00006 737.0 \n",
"C3L-00008 898.0 \n",
"C3L-00032 1710.0 \n",
"C3L-00084 335.0 \n",
"C3L-00090 1287.0 \n",
"... ... \n",
"C3N-01520 278.0 \n",
"C3N-01521 681.0 \n",
"C3N-01537 671.0 \n",
"C3N-01802 740.0 \n",
"C3N-01825 661.0 \n",
"\n",
"[103 rows x 5 columns]\n"
]
}
],
"source": [
"#Then we will drop missing values, as missing values \n",
"# will throw an error in the lifelines functions\n",
"print(df_genes)\n",
"df_clean = df_genes.dropna(axis=0, how='any').copy()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Verify that your columns are the correct data types. They may appear to be correct up front, but could actually be hidden as slightly different data types. The event of interest, in this case *Survival Status* needs to contain boolean values, and all other columns in the table must be of a numeric type (either int64 or float64)."
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Survival status (1, dead; 0, alive) : bool\n",
"tumor_stage_pathological : float64\n",
"RAC2_umich_proteomics : int64\n",
"PODXL_umich_proteomics : int64\n",
"Days_Until_Last_Contact_Or_Death : float64\n"
]
}
],
"source": [
"for col in df_clean.columns:\n",
" print(col, \":\", df_clean[col].dtype)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
Name
\n",
"
Survival status (1, dead; 0, alive)
\n",
"
tumor_stage_pathological
\n",
"
RAC2_umich_proteomics
\n",
"
PODXL_umich_proteomics
\n",
"
Days_Until_Last_Contact_Or_Death
\n",
"
\n",
"
\n",
"
Patient_ID
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
"
\n",
" \n",
" \n",
"
\n",
"
C3L-00006
\n",
"
False
\n",
"
1.0
\n",
"
2
\n",
"
3
\n",
"
737.0
\n",
"
\n",
"
\n",
"
C3L-00008
\n",
"
False
\n",
"
1.0
\n",
"
1
\n",
"
3
\n",
"
898.0
\n",
"
\n",
"
\n",
"
C3L-00032
\n",
"
False
\n",
"
1.0
\n",
"
3
\n",
"
3
\n",
"
1710.0
\n",
"
\n",
"
\n",
"
C3L-00084
\n",
"
False
\n",
"
1.0
\n",
"
2
\n",
"
1
\n",
"
335.0
\n",
"
\n",
"
\n",
"
C3L-00090
\n",
"
True
\n",
"
1.0
\n",
"
2
\n",
"
2
\n",
"
1287.0
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
"Name Survival status (1, dead; 0, alive) tumor_stage_pathological \\\n",
"Patient_ID \n",
"C3L-00006 False 1.0 \n",
"C3L-00008 False 1.0 \n",
"C3L-00032 False 1.0 \n",
"C3L-00084 False 1.0 \n",
"C3L-00090 True 1.0 \n",
"\n",
"Name RAC2_umich_proteomics PODXL_umich_proteomics \\\n",
"Patient_ID \n",
"C3L-00006 2 3 \n",
"C3L-00008 1 3 \n",
"C3L-00032 3 3 \n",
"C3L-00084 2 1 \n",
"C3L-00090 2 2 \n",
"\n",
"Name Days_Until_Last_Contact_Or_Death \n",
"Patient_ID \n",
"C3L-00006 737.0 \n",
"C3L-00008 898.0 \n",
"C3L-00032 1710.0 \n",
"C3L-00084 335.0 \n",
"C3L-00090 1287.0 "
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_clean.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Step 5: Multivariate Survival Risk Plotting\n",
"\n",
"With the CoxPHFitter from the lifelines package we can create covariate survival plots, as shown below. The variables we are interested in exploring are Tumor Stage, RAC2 abundance, and PODXL abundance."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First we will fit our model to the data we have prepared using the CoxPHFitter() class from the lifelines module."
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cph = CoxPHFitter()\n",
"cph.fit(df_clean, duration_col = \"Days_Until_Last_Contact_Or_Death\", \n",
" event_col = \"Survival status (1, dead; 0, alive)\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Then we will plot each of the attributes to see how different levels of protein or different tumor stages affect survival outcomes in Endometrial Cancer patients."
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [],
"source": [
"attributes = ['tumor_stage_pathological', 'PODXL_umich_proteomics', 'RAC2_umich_proteomics']"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"for attribute in attributes:\n",
" plot_title = \"Endometrial Cancer Survival Risk: \" + attribute\n",
" cph.plot_partial_effects_on_outcome(attribute, [1,2,3], cmap='coolwarm', \n",
" title=plot_title)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Results\n",
"These different analyses tend to follow the baseline survival function, however, there are some differences in varying levels of each attribute. For example, FIGO Stage I tumors tend to have a higher survival rate over time comparatively to Stage III tumors. We can explore these differences with the CoxPHFitter object's *print_summary* function (which prints out results for multivariate linear regression)."
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
model
\n",
"
lifelines.CoxPHFitter
\n",
"
\n",
"
\n",
"
duration col
\n",
"
'Days_Until_Last_Contact_Or_Death'
\n",
"
\n",
"
\n",
"
event col
\n",
"
'Survival status (1, dead; 0, alive)'
\n",
"
\n",
"
\n",
"
baseline estimation
\n",
"
breslow
\n",
"
\n",
"
\n",
"
number of observations
\n",
"
103
\n",
"
\n",
"
\n",
"
number of events observed
\n",
"
12
\n",
"
\n",
"
\n",
"
partial log-likelihood
\n",
"
-45.702
\n",
"
\n",
"
\n",
"
time fit was run
\n",
"
2023-09-13 20:43:11 UTC
\n",
"
\n",
"
\n",
"
model
\n",
"
untransformed variables
\n",
"
\n",
" \n",
"
\n",
"
\n",
" \n",
"
\n",
"
\n",
"
coef
\n",
"
exp(coef)
\n",
"
se(coef)
\n",
"
coef lower 95%
\n",
"
coef upper 95%
\n",
"
exp(coef) lower 95%
\n",
"
exp(coef) upper 95%
\n",
"
cmp to
\n",
"
z
\n",
"
p
\n",
"
-log2(p)
\n",
"
\n",
" \n",
" \n",
"
\n",
"
tumor_stage_pathological
\n",
"
0.759
\n",
"
2.136
\n",
"
0.274
\n",
"
0.222
\n",
"
1.295
\n",
"
1.249
\n",
"
3.652
\n",
"
0.000
\n",
"
2.773
\n",
"
0.006
\n",
"
7.490
\n",
"
\n",
"
\n",
"
RAC2_umich_proteomics
\n",
"
0.170
\n",
"
1.185
\n",
"
0.409
\n",
"
-0.632
\n",
"
0.971
\n",
"
0.531
\n",
"
2.641
\n",
"
0.000
\n",
"
0.415
\n",
"
0.678
\n",
"
0.560
\n",
"
\n",
"
\n",
"
PODXL_umich_proteomics
\n",
"
-0.173
\n",
"
0.841
\n",
"
0.416
\n",
"
-0.989
\n",
"
0.643
\n",
"
0.372
\n",
"
1.903
\n",
"
0.000
\n",
"
-0.415
\n",
"
0.678
\n",
"
0.560
\n",
"
\n",
" \n",
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
Concordance
\n",
"
0.754
\n",
"
\n",
"
\n",
"
Partial AIC
\n",
"
97.403
\n",
"
\n",
"
\n",
"
log-likelihood ratio test
\n",
"
8.276 on 3 df
\n",
"
\n",
"
\n",
"
-log2(p) of ll-ratio test
\n",
"
4.621
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/latex": [
"\\begin{tabular}{lrrrrrrrrrrr}\n",
" & coef & exp(coef) & se(coef) & coef lower 95% & coef upper 95% & exp(coef) lower 95% & exp(coef) upper 95% & cmp to & z & p & -log2(p) \\\\\n",
"covariate & & & & & & & & & & & \\\\\n",
"tumor_stage_pathological & 0.759 & 2.136 & 0.274 & 0.222 & 1.295 & 1.249 & 3.652 & 0.000 & 2.773 & 0.006 & 7.490 \\\\\n",
"RAC2_umich_proteomics & 0.170 & 1.185 & 0.409 & -0.632 & 0.971 & 0.531 & 2.641 & 0.000 & 0.415 & 0.678 & 0.560 \\\\\n",
"PODXL_umich_proteomics & -0.173 & 0.841 & 0.416 & -0.989 & 0.643 & 0.372 & 1.903 & 0.000 & -0.415 & 0.678 & 0.560 \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"\n",
" duration col = 'Days_Until_Last_Contact_Or_Death'\n",
" event col = 'Survival status (1, dead; 0, alive)'\n",
" baseline estimation = breslow\n",
" number of observations = 103\n",
"number of events observed = 12\n",
" partial log-likelihood = -45.702\n",
" time fit was run = 2023-09-13 20:43:11 UTC\n",
" model = untransformed variables\n",
"\n",
"---\n",
" coef exp(coef) se(coef) coef lower 95% coef upper 95% exp(coef) lower 95% exp(coef) upper 95%\n",
"covariate \n",
"tumor_stage_pathological 0.759 2.136 0.274 0.222 1.295 1.249 3.652\n",
"RAC2_umich_proteomics 0.170 1.185 0.409 -0.632 0.971 0.531 2.641\n",
"PODXL_umich_proteomics -0.173 0.841 0.416 -0.989 0.643 0.372 1.903\n",
"\n",
" cmp to z p -log2(p)\n",
"covariate \n",
"tumor_stage_pathological 0.000 2.773 0.006 7.490\n",
"RAC2_umich_proteomics 0.000 0.415 0.678 0.560\n",
"PODXL_umich_proteomics 0.000 -0.415 0.678 0.560\n",
"---\n",
"Concordance = 0.754\n",
"Partial AIC = 97.403\n",
"log-likelihood ratio test = 8.276 on 3 df\n",
"-log2(p) of ll-ratio test = 4.621"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cph.print_summary(model=\"untransformed variables\", decimals=3)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Step 6 Cox's Proportional Hazard Test\n",
"With the *proportional_hazard_test* function, we can now perform Cox's Proportional Hazard Test on the data to determine how each attribute contributes to our cohort's overall survival. This is shown by the hazard ratio in the column labeled *-log2(p)* below. In general, a hazard ratio of 1 suggests that an attribute has no effect on overall survival. A ratio less than 1 suggests that an attribute contributes to lower survival risk. A ratio greater than 1 suggests that an attribute contributes to higher survival risk."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
time_transform
\n",
"
rank
\n",
"
\n",
"
\n",
"
null_distribution
\n",
"
chi squared
\n",
"
\n",
"
\n",
"
degrees_of_freedom
\n",
"
1
\n",
"
\n",
"
\n",
"
model
\n",
"
<lifelines.CoxPHFitter: fitted with 103 total ...
\n",
"
\n",
"
\n",
"
test_name
\n",
"
proportional_hazard_test
\n",
"
\n",
" \n",
"
\n",
"
\n",
" \n",
"
\n",
"
\n",
"
test_statistic
\n",
"
p
\n",
"
-log2(p)
\n",
"
\n",
" \n",
" \n",
"
\n",
"
PODXL_umich_proteomics
\n",
"
1.40
\n",
"
0.24
\n",
"
2.08
\n",
"
\n",
"
\n",
"
RAC2_umich_proteomics
\n",
"
0.31
\n",
"
0.58
\n",
"
0.79
\n",
"
\n",
"
\n",
"
tumor_stage_pathological
\n",
"
1.73
\n",
"
0.19
\n",
"
2.41
\n",
"
\n",
" \n",
"
"
],
"text/latex": [
"\\begin{tabular}{lrrr}\n",
" & test_statistic & p & -log2(p) \\\\\n",
"PODXL_umich_proteomics & 1.40 & 0.24 & 2.08 \\\\\n",
"RAC2_umich_proteomics & 0.31 & 0.58 & 0.79 \\\\\n",
"tumor_stage_pathological & 1.73 & 0.19 & 2.41 \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"\n",
" time_transform = rank\n",
" null_distribution = chi squared\n",
"degrees_of_freedom = 1\n",
" model = \n",
" test_name = proportional_hazard_test\n",
"\n",
"---\n",
" test_statistic p -log2(p)\n",
"PODXL_umich_proteomics 1.40 0.24 2.08\n",
"RAC2_umich_proteomics 0.31 0.58 0.79\n",
"tumor_stage_pathological 1.73 0.19 2.41"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"results = proportional_hazard_test(cph, df_clean, time_transform='rank')\n",
"results.print_summary(decimals=3, model=\"untransformed variables\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Below, we show confidence intervals for each of the hazard ratios. Since both bars include the log(HR) of 1.0 and both of their p-values were greater than 0.05, there is insufficient evidence to suggest that a specific Histologic Grade or Tumor Stage is connected with negative clinical outcomes of death or the development of a new tumor *in our cohort of Endometrial cancer tumors*."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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++Wdd95RrVq1FBQUpJo1a+q1117zyLRlyxbdfPPNCg4OVunSpdWnTx+dOnXqon3/wgsvqHz58oqIiHCPAA8aNEiRkZGqVKmSZs2addF2/HkEcevWrbrzzjtlt9sVHh6uG2+8Ubt373b/HBo3bqzQ0FBFRESoWbNm2rdvX6H3KwAAV5N/POwRHBys48eP64MPPlB8fLzuuuuui+Z56qmntGDBAi1duvSiEvVn5cqVU5cuXTRz5kzl5OTIz89P0h8jdAsXLtSDDz6oLVu2aNSoUapfv/4/jV4k7733ngYPHqz169fro48+0qOPPqqFCxfqnnvu0fDhwzVlyhQ9+OCDSklJUUhIyEXLb9q0Sbfccot69OihadOmyd/fX8uXL1dOTo7Hezz55JNat26d1q5dq27duqlZs2a69dZbC5XxmWee0fjx4zVt2jS9//776tSpk7Zs2aJatWq55xk6dKhefvllNWzYUEFBQZo2bZpefvllvfnmm2rYsKFmzpypu+++W1u3blWNGjW0fv16NW7cWN98843q1KnjLtNz587VqFGjNH36dDVs2FAbN25U7969FRoaqq5du+r06dNq1aqVmjRpoh9//FFHjhxRr1691K9fP82ePdud59tvv1WlSpX03XffafXq1e6Cf9NNN2ndunX66KOP9PDDD+vWW2/N84+VHzhwQDfddJNatGihb7/9Vna7XatXr1Z2drays7PVrl079e7dWx9++KHOnz+v9evXFziKeu7cOZ07d8793OVyFWrfF1ZqaiqHUyDpj89CTEzMJee5nJ+X7OxsnTx5UqtWrWIUvJgrzOcFkP7BxROGYeibb77RkiVLdPPNN+v333/3KBB/dmH677//fsn11qxZUxkZGTp+/Lh72oXRqGXLlql8+fIaOnTo3439t9WvX18jR45UjRo1NGzYMAUFBalMmTLq3bu3atSooVGjRun48eP65Zdf8lx+woQJatSokV577TXVr19fderUUb9+/VSmTBn3PPXq1dPo0aNVo0YNPfTQQ2rUqJGWLVtW6Izt27dXr169FB8fr+eee06NGjXSq6++6jHPwIEDde+996pq1aqKjo7WpEmTNGTIEHXq1EkJCQl66aWX1KBBA02dOlWSVLZsWUlS6dKlFRUVpcjISEnS6NGj9fLLL7vXde+99+qJJ57Qm2++KUn64IMPlJmZqTlz5uiaa67RzTffrOnTp+v999/X4cOH3XkiIyP1yiuvKCEhQT169FBCQoLOnDmj4cOHu/d1QECAVq1alec2z5gxQw6HQ/PmzVOjRo0UHx+v7t27KyEhQS6XS06nU3feeaeqV6+uWrVqqWvXrgUe4nrxxRflcDjcD/4hhZX5+/urTJkylDrAQor8f/OXX36psLAwZWVlKTc3V/fff7/GjBmjL7/8UoZh/ONAF9bx11GVmTNnKiQkRMnJydq/f79iY2P/8XsVRb169dz/7efnp9KlS6tu3bruaeXLl5ckHTlyJM/lN23apPbt2xf6PSQpOjo63/XlpUmTJhc9/+tFD40aNXL/t8vl0sGDB9WsWTOPeZo1a6bNmzfn+z6nT5/W7t271bNnT/Xu3ds9PTs7232xyPbt21W/fn2FhoZ6rDc3N1c7duxw7686deqoRIn///2ifPnyHhdGXNjXBe3XG2+8USVLlrzotcjISHXr1k2tWrXSrbfeqqSkJHXo0EHR0dH5btuwYcP05JNPup+7XC6vlruYmBjt2bPHa+vD1aswI3F8XnABI/0orCKP2LVs2VKbNm3Szp07dfbsWb333nsKDQ1VfHy8tm/fnucyF6bHx8dfcv3bt2+X3W5X6dKl3dPWrFmjKVOm6Msvv1Tjxo3Vs2dPr5RISSpRosRF68rrooK/FgebzeYx7UIRzc3NzfN9goODL5klr/fIb31/15+L1t914Ty5t99+W5s2bXI/fv31V/3www9FWtel9uuFaX93v86aNUtr165V06ZN9dFHHyk+Pr7AjIGBgbLb7R4PwKpSU1PVr18/rr4FLKTIxS40NFRxcXGqXLmyx/B9p06dtHPnTv33v/+9aJmXX35ZpUuXvuS5YkeOHNEHH3ygdu3auUdxzpw5o27duunRRx9Vy5Yt9e6772r9+vV64403iho9T2XLlr3oHk6X49Ye9erVK9Jh1b/jr4Xlhx9+yPfwuPTHlckVKlS46HY0q1evVu3atSXJfU7dn88FLF++vCpUqKA9e/YoLi7O43HhYotatWpp8+bNHhfMrF69WiVKlFBCQsI/29A/qVevnr7//vsCr/Bt2LChhg0bpjVr1uiaa67RBx984LX3B/6JlJSUfO9hV9CtULwlOztbJ06ccN+yCsDVz2snVnTq1EmffPKJunbtqokTJ+qWW26Ry+XSjBkz9MUXX+iTTz7xGC0yDEOHDh2SYRg6efKk1q5dqxdeeEEOh0Pjx493zzds2DAZhuGeFhsbq0mTJunpp59W69atPQ7J7tix46JcderUyfMw3QU333yzJk6cqDlz5qhJkyb6z3/+o19//VUNGzb0wl75f8OGDVPdunXVt29fPfLIIwoICNDy5cvVvn17j/Ps/olPPvlEjRo10g033KC5c+dq/fr1evfddwtcZtCgQRo9erSqV6+uBg0aaNasWdq0aZP79jLlypVTcHCwFi9erEqVKikoKEgOh0Njx47V448/LofDodtvv13nzp3TTz/9pPT0dD355JPq0qWLRo8era5du2rMmDE6evSo+vfvrwcffNB9GNYb+vXrp1dffVWdOnXSsGHD5HA49MMPP6hx48YKCAhwX5VdoUIF7dixQzt37tRDDz3ktfcvCg6p4c8udYi/cuXKnOMJN/79QGF5rdjZbDZ9/PHHmjp1qqZMmaK+ffsqKChITZo00YoVKy46j8vlcik6Olo2m012u10JCQnq2rWrBgwY4D78tXLlSs2YMUMrVqzwuNL04Ycf1oIFC9SzZ09988037ul5/c3D1NTUPK+mvKBVq1Z65plnNHjwYGVmZqpHjx566KGHtGXLln+6SzzEx8fr66+/1vDhw9W4cWMFBwcrMTFRnTt39tp7jB07VvPmzVPfvn0VHR2tDz/80D3ylp/HH39cTqdTTz31lI4cOaLatWvriy++UI0aNST9cXL1K6+8omeffVajRo3SjTfeqBUrVqhXr14KCQnRxIkTNWjQIIWGhqpu3bruv54REhKiJUuWaMCAAbruuusUEhKi++67T5MnT/ba9kp/XNTx7bffatCgQWrevLn8/PzUoEEDNWvWTCEhIfrtt9/03nvv6fjx44qOjtZjjz2mhx9+2KsZgL9j5cqVZkcAYEE2w1snq8FUNptNCxcuLPB2Mig6l8slh8Mhp9PJ+XawnOTkZI0YMULjxo1zn0YBoPgpyncRfysWAHxUdHS0Ro4cWeCV4gCuLpYvdnXq1FFYWFiejz//mbLibO7cufluQ506dcyOB+AqFRQUpNq1aysoKMjsKAC8xPJ3pVy0aFG+V0x68yT+y+nuu+9WYmJinq9duDCEI+oAiurEiRP6+uuvddttt7lvPg7g6mb5YlelShWzI/xj4eHhCg8PNzsGAItxOp364osv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kydPVkREhPv1o0eP6ttvv9Vdd931t3P4+/srKipKFStWVFJSktq3b6+lS5d6zFOqVCk1a9ZM8+bNK3Bd8+bN88hy9uxZzZ8/XxMmTNBNN92kuLg4jRkzRnFxcXr99dc9lg0MDFRUVJT7UapUKfdr27dv19133606deroscce09GjR3Xs2DFJ0qOPPqqXXnpJdrv9kts6fPhw7d27V+vWrVPXrl1Vu3ZtxcfHq3fv3tq0aZPCwsLyXM7Pz09t2rS55PYDVxLFDgCKkW7duumnn37SF198obVr18owDLVp00ZZWVmSpNWrV+uRRx7RgAEDtGnTJt16660XjUqtWrVKISEhqlWrllcy7d27V0uWLFFAQMBFrzVu3Fjff/99vsueOHFC27ZtU6NGjdzTsrOzlZOTo6CgII95g4ODtWrVKo9pK1asULly5ZSQkKBHH31Ux48fd79Wv359rVq1SmfPntWSJUsUHR2tMmXKaO7cuQoKCtI999xzyW3Lzc3VvHnz1KVLF1WoUOGi18PCwuTv75/v8pfafuBKy//TCgC4onbu3KkvvvhCq1evVtOmTSVJc+fOVUxMjD777DO1b99er776qlq3bq2nn35akhQfH681a9boyy+/dK9n3759Kl++fJ6HYYcMGaKRI0d6TDt//rxq167tMW3Lli0KCwtTTk6OMjMzJUmTJ0++aH0VKlTQvn378t2mlJQUGYbhUZrCw8PVpEkTPffcc6pVq5bKly+vDz/8UGvXrlVcXJx7vttvv1333nuvqlatqt27d2v48OFq3bq11q5dKz8/P/Xo0UO//PKLateurTJlyujjjz9Wenq6Ro0apRUrVmjkyJGaN2+eqlevrpkzZ6pixYoX5Tt27JjS09NVs2bNfLehIBUqVFBqaqpyc3P/9mFvwJsodgBQTGzfvl3+/v5KTEx0TytdurQSEhK0fft2SdKOHTsuGolq3LixR7E7e/bsRaNhFwwaNEjdunXzmPbKK6/ou+++85iWkJCgL774QpmZmfrPf/6jTZs25XkhQnBwsM6cOZPvNp09e1aSLsrz/vvvq0ePHqpYsaL8/Pz0r3/9S507d9aGDRvc8/z5wo+6deuqXr16ql69ulasWKFbbrlFJUuW1IwZMzzW2717dz3++OPauHGjPvvsM23evFkTJkzQ448/nucVrBfOyfu7goODlZubq3Pnzik4OPgfrQvwBn69AACLKVOmjNLT0/N9LS4uzuMRGRl50XwBAQGKi4vTNddco/Hjx8vPz09jx469aL4TJ06obNmyBWaRdFGe6tWra+XKlTp16pRSU1O1fv16ZWVlqVq1avmuq1q1aipTpox27dqV5+vLly/X1q1b1a9fP61YsUJt2rRRaGioOnTooBUrVuS5TNmyZRUREaHffvst3/ctyIkTJxQaGkqpQ7FBsQOAYqJWrVrKzs7WunXr3NOOHz+uHTt2uA+VJiQkXHRbkL8+b9iwoQ4dOpRvufs7Ro4cqUmTJungwYMe03/99Vc1bNgw3+WqV68uu92ubdu25fl6aGiooqOjlZ6eriVLlqht27b5rmv//v06fvy4oqOjL3otMzNTjz32mN588035+fkpJyfHfV5iVlaWcnJy8lxniRIl1KlTJ82dO/eibZOkU6dOKTs7O99Ml9p+4Eqj2AFAMVGjRg21bdtWvXv31qpVq7R582Y98MADqlixorvw9O/fX4sWLdLkyZO1c+dOvfnmm/rqq69ks9nc62nYsKHKlCmj1atXey1bkyZNVK9ePb3wwgse07///nvddttt+S5XokQJJSUlXXRRxJIlS7R48WIlJydr6dKlatmypWrWrKnu3btL+qNQDRo0SD/88IP27t2rZcuWqW3btoqLi1OrVq0uep/nnntObdq0cZesZs2aacGCBfrll180ffp0NWvWLN+M48aNU0xMjBITEzVnzhxt27ZNO3fu1MyZM9WwYUOdOnUq32Uvtf3AlUaxA4BiZNasWbr22mt15513qkmTJjIMQ4sWLVLJkiUl/VFY3njjDU2ePFn169fX4sWL9cQTT3icw+bn56fu3btr7ty5Xs32xBNP6J133lFqaqokae3atXI6nfr3v/9d4HK9evXSvHnzPG7k63Q69dhjj6lmzZp66KGHdMMNN2jJkiXu7fTz89Mvv/yiu+++W/Hx8erZs6euvfZaff/99woMDPRY/6+//qqPP/7Y41Dxv//9b91xxx268cYb9csvv2jatGn55ouMjNQPP/ygBx54QM8//7waNmyoG2+8UR9++KEmTpwoh8OR53IHDhzQmjVr3GUUKA5sxj89cxQAYKrevXvrt99+87jtxqFDh1SnTh39/PPPHjcG9qaOHTuqfv36Gj58eIHzGYahxMREPfHEE+rcufNlyWKGIUOGKD09XW+99ZbZUQA3RuwA4CozadIkbd68Wbt27dKrr76q9957T127dvWYJyoqSu+++65SUlIuS4bz58+rbt26euKJJy45r81m01tvvVXguWpXo3Llyum5554zOwbggRE7ALjKXLjKMyMjQ9WqVVP//v31yCOPmB0LQDFAsQMAALAIDsUCAABYBMUOAADAIih2AAAAFkGxAwAAsAiKHQAAgEVQ7AAAACyCYgcAAGARFDsAAACLoNgBAABYxP8Bd0toF7VOfRYAAAAASUVORK5CYII=",
"text/plain": [
"
"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cph.plot()\n",
"plt.tight_layout()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Closing Remarks\n",
"It is important to note that there are relatively few patients who died in our cohort (7 out of 88), which is good, but with such a small sample size of death events, it is difficult to conclude with certainty that these features are not more or less connected with survival. Perhaps a sample of patients with more deaths might have different results. Alternatively, studying an event with more negative outcomes (such as tumor recurrence) may also provide more data to work with."
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Survival status (1, dead; 0, alive)\n",
"False 91\n",
"True 12\n",
"Name: count, dtype: int64"
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_clean['Survival status (1, dead; 0, alive)'].value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is also important to note that the confidence intervals for these ratios are very large, especially since hazard ratios are standardly shown on a log-scale."
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
"
\n",
"
\n",
"
95% lower-bound
\n",
"
95% upper-bound
\n",
"
\n",
"
\n",
"
covariate
\n",
"
\n",
"
\n",
"
\n",
" \n",
" \n",
"
\n",
"
tumor_stage_pathological
\n",
"
0.222404
\n",
"
1.295220
\n",
"
\n",
"
\n",
"
RAC2_umich_proteomics
\n",
"
-0.632089
\n",
"
0.971199
\n",
"
\n",
"
\n",
"
PODXL_umich_proteomics
\n",
"
-0.988706
\n",
"
0.643185
\n",
"
\n",
" \n",
"
\n",
"
"
],
"text/plain": [
" 95% lower-bound 95% upper-bound\n",
"covariate \n",
"tumor_stage_pathological 0.222404 1.295220\n",
"RAC2_umich_proteomics -0.632089 0.971199\n",
"PODXL_umich_proteomics -0.988706 0.643185"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cph.confidence_intervals_"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is just one example of how you might use Survival Analysis to learn more about different types of cancer, and how clinical and/or genetic attributes contribute to likelihood of survival. There are many other clinical and genetic attributes, as well as several other cancer types, that can be explored using a similar process to that above. In particular, lung cancer and ovarian cancer have a larger number of negative outcomes per cohort, and would be good to look into further. "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"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.9.12"
}
},
"nbformat": 4,
"nbformat_minor": 4
}