{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# DeepHit with Competing Risks\n", "\n", "In this notebook we give an example of how to apply the [DeepHit](http://medianetlab.ee.ucla.edu/papers/AAAI_2018_DeepHit) method for competing risks.\n", "\n", "The `pycox` package has (so far) limited support for competing-risk data, so the evaluation procedure at the end is somewhat limited." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "import torch\n", "import torchtuples as tt\n", "\n", "from pycox.preprocessing.label_transforms import LabTransDiscreteTime\n", "from pycox.models import DeepHit\n", "from pycox.evaluation import EvalSurv" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "np.random.seed(1234)\n", "_ = torch.manual_seed(1234)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Dataset from the DeepHit repo\n", "\n", "We download a competing risk data set from the DeepHit authors repo.\n", "The dataset is from a simulation study with two event types and censored observations.\n", "\n", "We split in train, val and test." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "url = 'https://raw.githubusercontent.com/chl8856/DeepHit/master/sample%20data/SYNTHETIC/synthetic_comprisk.csv'\n", "df_train = pd.read_csv(url)\n", "df_test = df_train.sample(frac=0.2)\n", "df_train = df_train.drop(df_test.index)\n", "df_val = df_train.sample(frac=0.2)\n", "df_train = df_train.drop(df_val.index)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
timelabeltrue_timetrue_labelfeature1feature2feature3feature4feature5feature6feature7feature8feature9feature10feature11feature12
110110.015579-0.846080.487530.651930.20099-0.11238-1.39630-0.188740-0.30001-0.24032-0.38533-1.02450
23423420.4464901.64100-1.745000.31795-1.140600.365600.28110-0.582530-1.690701.20220-0.519201.78400
390920.629460-0.61575-0.32345-0.900200.45360-0.619922.162400.198750-1.11960-2.73210-0.25673-0.81836
51121120.4870100.520861.99370-0.947360.243711.065500.576860.0191920.232120.48023-0.730961.43960
6370402-1.183700-0.31602-0.58640-0.53890-1.158301.040100.61938-0.415420-0.50700-2.183000.973200.97753
\n", "
" ], "text/plain": [ " time label true_time true_label feature1 feature2 feature3 feature4 \\\n", "1 1 0 1 1 0.015579 -0.84608 0.48753 0.65193 \n", "2 34 2 34 2 0.446490 1.64100 -1.74500 0.31795 \n", "3 9 0 9 2 0.629460 -0.61575 -0.32345 -0.90020 \n", "5 11 2 11 2 0.487010 0.52086 1.99370 -0.94736 \n", "6 37 0 40 2 -1.183700 -0.31602 -0.58640 -0.53890 \n", "\n", " feature5 feature6 feature7 feature8 feature9 feature10 feature11 \\\n", "1 0.20099 -0.11238 -1.39630 -0.188740 -0.30001 -0.24032 -0.38533 \n", "2 -1.14060 0.36560 0.28110 -0.582530 -1.69070 1.20220 -0.51920 \n", "3 0.45360 -0.61992 2.16240 0.198750 -1.11960 -2.73210 -0.25673 \n", "5 0.24371 1.06550 0.57686 0.019192 0.23212 0.48023 -0.73096 \n", "6 -1.15830 1.04010 0.61938 -0.415420 -0.50700 -2.18300 0.97320 \n", "\n", " feature12 \n", "1 -1.02450 \n", "2 1.78400 \n", "3 -0.81836 \n", "5 1.43960 \n", "6 0.97753 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_train.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Feature transforms\n", "\n", "The covariates are standardized, so we don't need to any preprocessing." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "get_x = lambda df: (df\n", " .drop(columns=['time', 'label', 'true_time', 'true_label'])\n", " .values.astype('float32'))" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "x_train = get_x(df_train)\n", "x_val = get_x(df_val)\n", "x_test = get_x(df_test)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Label transforms\n", "\n", "Currently, the `pycox` package is mainly focused on single-event data, so there is no dedicated label transformer for competing risks. \n", "So, we make a simple one on our own, based on the the transform for the discrete methods `LabTransDiscreteSurv`.\n", "\n", "The class returns durations (as integers) and event types (as integers) where 0 is reserved for censored observations.\n", "\n", "We discretize the data to `num_durations` time points, which can be found with `labtrans.cuts`." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "class LabTransform(LabTransDiscreteTime):\n", " def transform(self, durations, events):\n", " durations, is_event = super().transform(durations, events > 0)\n", " events[is_event == 0] = 0\n", " return durations, events.astype('int64')" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "num_durations = 10\n", "labtrans = LabTransform(num_durations)\n", "get_target = lambda df: (df['time'].values, df['label'].values)" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "y_train = labtrans.fit_transform(*get_target(df_train))\n", "y_val = labtrans.transform(*get_target(df_val))\n", "durations_test, events_test = get_target(df_test)\n", "val = (x_val, y_val)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(array([0, 2, 0, 1, 1, 1]), array([0, 2, 0, 2, 0, 1]))" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y_train[0][:6], y_train[1][:6]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([ 0. , 21.33333333, 42.66666667, 64. ,\n", " 85.33333333, 106.66666667, 128. , 149.33333333,\n", " 170.66666667, 192. ])" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "labtrans.cuts" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Network architecture\n", "\n", "Under, we describe two networks that can be for competing risks:\n", "\n", "The first, `SimpleMLP`, is a regular MLP which outputs a `[batch_size x num_risks x num_durations]`, e.g., `[64, 2, 10]` tensor.\n", "\n", "The other, `CauseSpecificNet` is similar to the cause-specific network described in the [DeepHit paper](http://medianetlab.ee.ucla.edu/papers/AAAI_2018_DeepHit).\n", "It has the same output shape as the `SimpleMLP`, but is a little more complex to make." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "class SimpleMLP(torch.nn.Module):\n", " \"\"\"Simple network structure for competing risks.\n", " \"\"\"\n", " def __init__(self, in_features, num_nodes, num_risks, out_features, batch_norm=True,\n", " dropout=None):\n", " super().__init__()\n", " self.num_risks = num_risks\n", " self.mlp = tt.practical.MLPVanilla(\n", " in_features, num_nodes, num_risks * out_features,\n", " batch_norm, dropout,\n", " )\n", " \n", " def forward(self, input):\n", " out = self.mlp(input)\n", " return out.view(out.size(0), self.num_risks, -1)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "class CauseSpecificNet(torch.nn.Module):\n", " \"\"\"Network structure similar to the DeepHit paper, but without the residual\n", " connections (for simplicity).\n", " \"\"\"\n", " def __init__(self, in_features, num_nodes_shared, num_nodes_indiv, num_risks,\n", " out_features, batch_norm=True, dropout=None):\n", " super().__init__()\n", " self.shared_net = tt.practical.MLPVanilla(\n", " in_features, num_nodes_shared[:-1], num_nodes_shared[-1],\n", " batch_norm, dropout,\n", " )\n", " self.risk_nets = torch.nn.ModuleList()\n", " for _ in range(num_risks):\n", " net = tt.practical.MLPVanilla(\n", " num_nodes_shared[-1], num_nodes_indiv, out_features,\n", " batch_norm, dropout,\n", " )\n", " self.risk_nets.append(net)\n", "\n", " def forward(self, input):\n", " out = self.shared_net(input)\n", " out = [net(out) for net in self.risk_nets]\n", " out = torch.stack(out, dim=1)\n", " return out" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "in_features = x_train.shape[1]\n", "num_nodes_shared = [64, 64]\n", "num_nodes_indiv = [32]\n", "num_risks = y_train[1].max()\n", "out_features = len(labtrans.cuts)\n", "batch_norm = True\n", "dropout = 0.1\n", "\n", "# net = SimpleMLP(in_features, num_nodes_shared, num_risks, out_features)\n", "net = CauseSpecificNet(in_features, num_nodes_shared, num_nodes_indiv, num_risks,\n", " out_features, batch_norm, dropout)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Training\n", "\n", "We fit the net with the [AdamWR](https://arxiv.org/abs/1711.05101) cyclic optimizer with initial learning rate of 0.01, decoupled_weight_decay of 0.01, initial cycle length of 1 epoch, and multiply the learning rate with 0.8 and cycle length with 2 at each new cycle.\n", "\n", "The hyperparameters in the DeepHit loss-function, `alpha` and `sigma`, are set to 0.2 and 0.1, respectively. Note that `alpha` here controls the convex combination of the two losses,\n", "$$\\text{loss} = \\alpha \\text{loss}_\\text{NLL} + (1 - \\alpha) \\text{loss}_\\text{rank},$$\n", "and therefore has a different interpretation than in the [DeepHit paper](http://medianetlab.ee.ucla.edu/papers/AAAI_2018_DeepHit)." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [], "source": [ "optimizer = tt.optim.AdamWR(lr=0.01, decoupled_weight_decay=0.01,\n", " cycle_eta_multiplier=0.8)\n", "model = DeepHit(net, optimizer, alpha=0.2, sigma=0.1,\n", " duration_index=labtrans.cuts)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "epochs = 512\n", "batch_size = 256\n", "callbacks = [tt.callbacks.EarlyStoppingCycle()]\n", "verbose = False # set to True if you want printout" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPU times: user 3min 53s, sys: 19.9 s, total: 4min 13s\n", "Wall time: 2min 2s\n" ] } ], "source": [ "%%time\n", "log = model.fit(x_train, y_train, batch_size, epochs, callbacks, verbose, val_data=val)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "_ = log.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Evaluation\n", "\n", "There is, currently, limited support for competing risks in `pycox`, so the evaluation here is just illustrative and should not be considered *best practice*.\n", "\n", "The survival function obtained with `predict_surv_df` is the probability of surviving any of the events, and does, therefore, not distinguish between the event types.\n", "This means that we evaluate this \"single-event case\" as before." ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "surv = model.predict_surv_df(x_test)\n", "ev = EvalSurv(surv, durations_test, events_test != 0, censor_surv='km')" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.7202672608491353" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ev.concordance_td()" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.10413137528575585" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ev.integrated_brier_score(np.linspace(0, durations_test.max(), 100))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The cumulative incidence function\n", "\n", "The cumulative incidence function, or CIF, is commonly used in settings with competing risks.\n", "We can evaluate the case-specific concordance using these CIF's.\n", "\n", "We use `1 - cif` here because the CIF increases with with risk (while the survival function decreases with higher risk)." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "cif = model.predict_cif(x_test)\n", "cif1 = pd.DataFrame(cif[0], model.duration_index)\n", "cif2 = pd.DataFrame(cif[1], model.duration_index)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "ev1 = EvalSurv(1-cif1, durations_test, events_test == 1, censor_surv='km')\n", "ev2 = EvalSurv(1-cif2, durations_test, events_test == 2, censor_surv='km')" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.7150254240668652" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ev1.concordance_td()" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.712722920851343" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ev2.concordance_td()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Plot CIF\n", "\n", "Finally, we plot six random individuals and their cumulative incidence functions" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "sample = np.random.choice(len(durations_test), 6)\n", "fig, axs = plt.subplots(2, 3, True, True, figsize=(10, 5))\n", "for ax, idx in zip(axs.flat, sample):\n", " pd.DataFrame(cif.transpose()[idx], index=labtrans.cuts).plot(ax=ax)\n", " ax.set_ylabel('CIF')\n", " ax.set_xlabel('Time')\n", " ax.grid(linestyle='--')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "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.4" } }, "nbformat": 4, "nbformat_minor": 4 }