Created
January 7, 2022 14:34
-
-
Save alonsosilvaallende/f067c604c9fa2dd8b3d2d3ddb3f4add8 to your computer and use it in GitHub Desktop.
pharmacoSmoking_IBS.ipynb
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat": 4, | |
"nbformat_minor": 0, | |
"metadata": { | |
"colab": { | |
"name": "pharmacoSmoking_IBS.ipynb", | |
"provenance": [], | |
"collapsed_sections": [], | |
"authorship_tag": "ABX9TyMKIDGYNk7VI9AL/6DuQPe+", | |
"include_colab_link": true | |
}, | |
"kernelspec": { | |
"name": "python3", | |
"display_name": "Python 3" | |
}, | |
"language_info": { | |
"name": "python" | |
} | |
}, | |
"cells": [ | |
{ | |
"cell_type": "markdown", | |
"metadata": { | |
"id": "view-in-github", | |
"colab_type": "text" | |
}, | |
"source": [ | |
"<a href=\"https://colab.research.google.com/gist/alonsosilvaallende/f067c604c9fa2dd8b3d2d3ddb3f4add8/pharmacosmoking_ibs.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"!pip install -q lifelines" | |
], | |
"metadata": { | |
"id": "mEAsH84H4XxX" | |
}, | |
"execution_count": 1, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"!pip install -q scikit-survival" | |
], | |
"metadata": { | |
"id": "OlU2I67w28pU" | |
}, | |
"execution_count": 2, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 3, | |
"metadata": { | |
"id": "I5x52DW02cOg" | |
}, | |
"outputs": [], | |
"source": [ | |
"import numpy as np\n", | |
"import pandas as pd\n", | |
"import matplotlib.pyplot as plt\n", | |
"import seaborn as sns" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"import statsmodels.api as sm\n", | |
"pharmacoSmoking = sm.datasets.get_rdataset(\"pharmacoSmoking\", \"asaur\")\n", | |
"data = pharmacoSmoking.data\n", | |
"data.head(3)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 198 | |
}, | |
"id": "jJPHKraK2fzC", | |
"outputId": "892d24e6-6946-4ca5-beba-f170a2eb7da4" | |
}, | |
"execution_count": 4, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stderr", | |
"text": [ | |
"/usr/local/lib/python3.7/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.\n", | |
" import pandas.util.testing as tm\n" | |
] | |
}, | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-0f053a86-c611-421b-b939-4f5be0f152bc\">\n", | |
" <div class=\"colab-df-container\">\n", | |
" <div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>id</th>\n", | |
" <th>ttr</th>\n", | |
" <th>relapse</th>\n", | |
" <th>grp</th>\n", | |
" <th>age</th>\n", | |
" <th>gender</th>\n", | |
" <th>race</th>\n", | |
" <th>employment</th>\n", | |
" <th>yearsSmoking</th>\n", | |
" <th>levelSmoking</th>\n", | |
" <th>ageGroup2</th>\n", | |
" <th>ageGroup4</th>\n", | |
" <th>priorAttempts</th>\n", | |
" <th>longestNoSmoke</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>21</td>\n", | |
" <td>182</td>\n", | |
" <td>0</td>\n", | |
" <td>patchOnly</td>\n", | |
" <td>36</td>\n", | |
" <td>Male</td>\n", | |
" <td>white</td>\n", | |
" <td>ft</td>\n", | |
" <td>26</td>\n", | |
" <td>heavy</td>\n", | |
" <td>21-49</td>\n", | |
" <td>35-49</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>113</td>\n", | |
" <td>14</td>\n", | |
" <td>1</td>\n", | |
" <td>patchOnly</td>\n", | |
" <td>41</td>\n", | |
" <td>Male</td>\n", | |
" <td>white</td>\n", | |
" <td>other</td>\n", | |
" <td>27</td>\n", | |
" <td>heavy</td>\n", | |
" <td>21-49</td>\n", | |
" <td>35-49</td>\n", | |
" <td>3</td>\n", | |
" <td>90</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>39</td>\n", | |
" <td>5</td>\n", | |
" <td>1</td>\n", | |
" <td>combination</td>\n", | |
" <td>25</td>\n", | |
" <td>Female</td>\n", | |
" <td>white</td>\n", | |
" <td>other</td>\n", | |
" <td>12</td>\n", | |
" <td>heavy</td>\n", | |
" <td>21-49</td>\n", | |
" <td>21-34</td>\n", | |
" <td>3</td>\n", | |
" <td>21</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-0f053a86-c611-421b-b939-4f5be0f152bc')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
" \n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-0f053a86-c611-421b-b939-4f5be0f152bc button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-0f053a86-c611-421b-b939-4f5be0f152bc');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
" id ttr relapse ... ageGroup4 priorAttempts longestNoSmoke\n", | |
"0 21 182 0 ... 35-49 0 0\n", | |
"1 113 14 1 ... 35-49 3 90\n", | |
"2 39 5 1 ... 21-34 3 21\n", | |
"\n", | |
"[3 rows x 14 columns]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 4 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"print(f\"sample size: {data.shape[0]}\")\n", | |
"print(f\"% censored: {100*len(data[data['relapse'] == 0])/len(data)}\")" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "OJHyIFyW2lvb", | |
"outputId": "70d14f80-6a1a-4845-d6f4-d40e71e9580c" | |
}, | |
"execution_count": 5, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": [ | |
"sample size: 125\n", | |
"% censored: 28.8\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# Drop redundant information and ids\n", | |
"data = data.drop(columns=[\"id\",\"ageGroup2\",\"ageGroup4\"])\n", | |
"data.head(3)" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 143 | |
}, | |
"id": "eSb77nMD2y6G", | |
"outputId": "a1ef7a5b-c76d-42d4-e996-5605b6504639" | |
}, | |
"execution_count": 6, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/html": [ | |
"\n", | |
" <div id=\"df-00810f6c-bad9-41da-a147-ec80d3559c68\">\n", | |
" <div class=\"colab-df-container\">\n", | |
" <div>\n", | |
"<style scoped>\n", | |
" .dataframe tbody tr th:only-of-type {\n", | |
" vertical-align: middle;\n", | |
" }\n", | |
"\n", | |
" .dataframe tbody tr th {\n", | |
" vertical-align: top;\n", | |
" }\n", | |
"\n", | |
" .dataframe thead th {\n", | |
" text-align: right;\n", | |
" }\n", | |
"</style>\n", | |
"<table border=\"1\" class=\"dataframe\">\n", | |
" <thead>\n", | |
" <tr style=\"text-align: right;\">\n", | |
" <th></th>\n", | |
" <th>ttr</th>\n", | |
" <th>relapse</th>\n", | |
" <th>grp</th>\n", | |
" <th>age</th>\n", | |
" <th>gender</th>\n", | |
" <th>race</th>\n", | |
" <th>employment</th>\n", | |
" <th>yearsSmoking</th>\n", | |
" <th>levelSmoking</th>\n", | |
" <th>priorAttempts</th>\n", | |
" <th>longestNoSmoke</th>\n", | |
" </tr>\n", | |
" </thead>\n", | |
" <tbody>\n", | |
" <tr>\n", | |
" <th>0</th>\n", | |
" <td>182</td>\n", | |
" <td>0</td>\n", | |
" <td>patchOnly</td>\n", | |
" <td>36</td>\n", | |
" <td>Male</td>\n", | |
" <td>white</td>\n", | |
" <td>ft</td>\n", | |
" <td>26</td>\n", | |
" <td>heavy</td>\n", | |
" <td>0</td>\n", | |
" <td>0</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>1</th>\n", | |
" <td>14</td>\n", | |
" <td>1</td>\n", | |
" <td>patchOnly</td>\n", | |
" <td>41</td>\n", | |
" <td>Male</td>\n", | |
" <td>white</td>\n", | |
" <td>other</td>\n", | |
" <td>27</td>\n", | |
" <td>heavy</td>\n", | |
" <td>3</td>\n", | |
" <td>90</td>\n", | |
" </tr>\n", | |
" <tr>\n", | |
" <th>2</th>\n", | |
" <td>5</td>\n", | |
" <td>1</td>\n", | |
" <td>combination</td>\n", | |
" <td>25</td>\n", | |
" <td>Female</td>\n", | |
" <td>white</td>\n", | |
" <td>other</td>\n", | |
" <td>12</td>\n", | |
" <td>heavy</td>\n", | |
" <td>3</td>\n", | |
" <td>21</td>\n", | |
" </tr>\n", | |
" </tbody>\n", | |
"</table>\n", | |
"</div>\n", | |
" <button class=\"colab-df-convert\" onclick=\"convertToInteractive('df-00810f6c-bad9-41da-a147-ec80d3559c68')\"\n", | |
" title=\"Convert this dataframe to an interactive table.\"\n", | |
" style=\"display:none;\">\n", | |
" \n", | |
" <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\"viewBox=\"0 0 24 24\"\n", | |
" width=\"24px\">\n", | |
" <path d=\"M0 0h24v24H0V0z\" fill=\"none\"/>\n", | |
" <path d=\"M18.56 5.44l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94zm-11 1L8.5 8.5l.94-2.06 2.06-.94-2.06-.94L8.5 2.5l-.94 2.06-2.06.94zm10 10l.94 2.06.94-2.06 2.06-.94-2.06-.94-.94-2.06-.94 2.06-2.06.94z\"/><path d=\"M17.41 7.96l-1.37-1.37c-.4-.4-.92-.59-1.43-.59-.52 0-1.04.2-1.43.59L10.3 9.45l-7.72 7.72c-.78.78-.78 2.05 0 2.83L4 21.41c.39.39.9.59 1.41.59.51 0 1.02-.2 1.41-.59l7.78-7.78 2.81-2.81c.8-.78.8-2.07 0-2.86zM5.41 20L4 18.59l7.72-7.72 1.47 1.35L5.41 20z\"/>\n", | |
" </svg>\n", | |
" </button>\n", | |
" \n", | |
" <style>\n", | |
" .colab-df-container {\n", | |
" display:flex;\n", | |
" flex-wrap:wrap;\n", | |
" gap: 12px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert {\n", | |
" background-color: #E8F0FE;\n", | |
" border: none;\n", | |
" border-radius: 50%;\n", | |
" cursor: pointer;\n", | |
" display: none;\n", | |
" fill: #1967D2;\n", | |
" height: 32px;\n", | |
" padding: 0 0 0 0;\n", | |
" width: 32px;\n", | |
" }\n", | |
"\n", | |
" .colab-df-convert:hover {\n", | |
" background-color: #E2EBFA;\n", | |
" box-shadow: 0px 1px 2px rgba(60, 64, 67, 0.3), 0px 1px 3px 1px rgba(60, 64, 67, 0.15);\n", | |
" fill: #174EA6;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert {\n", | |
" background-color: #3B4455;\n", | |
" fill: #D2E3FC;\n", | |
" }\n", | |
"\n", | |
" [theme=dark] .colab-df-convert:hover {\n", | |
" background-color: #434B5C;\n", | |
" box-shadow: 0px 1px 3px 1px rgba(0, 0, 0, 0.15);\n", | |
" filter: drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3));\n", | |
" fill: #FFFFFF;\n", | |
" }\n", | |
" </style>\n", | |
"\n", | |
" <script>\n", | |
" const buttonEl =\n", | |
" document.querySelector('#df-00810f6c-bad9-41da-a147-ec80d3559c68 button.colab-df-convert');\n", | |
" buttonEl.style.display =\n", | |
" google.colab.kernel.accessAllowed ? 'block' : 'none';\n", | |
"\n", | |
" async function convertToInteractive(key) {\n", | |
" const element = document.querySelector('#df-00810f6c-bad9-41da-a147-ec80d3559c68');\n", | |
" const dataTable =\n", | |
" await google.colab.kernel.invokeFunction('convertToInteractive',\n", | |
" [key], {});\n", | |
" if (!dataTable) return;\n", | |
"\n", | |
" const docLinkHtml = 'Like what you see? Visit the ' +\n", | |
" '<a target=\"_blank\" href=https://colab.research.google.com/notebooks/data_table.ipynb>data table notebook</a>'\n", | |
" + ' to learn more about interactive tables.';\n", | |
" element.innerHTML = '';\n", | |
" dataTable['output_type'] = 'display_data';\n", | |
" await google.colab.output.renderOutput(dataTable, element);\n", | |
" const docLink = document.createElement('div');\n", | |
" docLink.innerHTML = docLinkHtml;\n", | |
" element.appendChild(docLink);\n", | |
" }\n", | |
" </script>\n", | |
" </div>\n", | |
" </div>\n", | |
" " | |
], | |
"text/plain": [ | |
" ttr relapse grp ... levelSmoking priorAttempts longestNoSmoke\n", | |
"0 182 0 patchOnly ... heavy 0 0\n", | |
"1 14 1 patchOnly ... heavy 3 90\n", | |
"2 5 1 combination ... heavy 3 21\n", | |
"\n", | |
"[3 rows x 11 columns]" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 6 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from sksurv.datasets import get_x_y\n", | |
"from sklearn.compose import ColumnTransformer\n", | |
"from sklearn.preprocessing import StandardScaler\n", | |
"\n", | |
"X, y = get_x_y(data, attr_labels=[\"relapse\", \"ttr\"], pos_label=True)" | |
], | |
"metadata": { | |
"id": "stIN3Yx022Kw" | |
}, | |
"execution_count": 7, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"for c in X.columns:\n", | |
" if X[c].dtype.kind not in ['i', 'f']:\n", | |
" X[c] = X[c].astype(\"category\")" | |
], | |
"metadata": { | |
"id": "vt5EOWz625xo" | |
}, | |
"execution_count": 8, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"from sklearn.model_selection import train_test_split\n", | |
"from sklearn.model_selection import GridSearchCV\n", | |
"from sklearn.model_selection import RandomizedSearchCV\n", | |
"from sksurv.linear_model import CoxPHSurvivalAnalysis\n", | |
"from sksurv.ensemble import RandomSurvivalForest\n", | |
"from sksurv.ensemble import GradientBoostingSurvivalAnalysis\n", | |
"from lifelines.utils import concordance_index\n", | |
"from sksurv.preprocessing import OneHotEncoder\n", | |
"from sksurv.metrics import integrated_brier_score\n", | |
"\n", | |
"param_grid_cph = {\n", | |
" 'alpha': (0.01, 0.1, 0.5),\n", | |
"}\n", | |
"\n", | |
"param_grid_rsf = {\n", | |
" 'max_features': (\"sqrt\", 0.5, 1),\n", | |
" 'min_samples_leaf': (1,3,5),\n", | |
" 'n_estimators': (50, 100, 200),\n", | |
" 'max_depth': (3,5,7,10),\n", | |
"}\n", | |
"\n", | |
"param_grid_gbs = {\n", | |
" 'learning_rate': (0.05, 0.1, 0.15),\n", | |
" 'max_features': (\"sqrt\", 0.5, 1),\n", | |
" 'min_samples_leaf': (1,3,5),\n", | |
" 'n_estimators': (50, 100, 200),\n", | |
" 'subsample': (0.7,0.9,1),\n", | |
" 'max_depth': (3,5,7,10),\n", | |
"}\n", | |
"\n", | |
"param_distributions = [param_grid_cph, param_grid_rsf, param_grid_gbs]" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "j3YunrJ34DRX", | |
"outputId": "7dc1acb9-b941-462f-be8e-6616519a8550" | |
}, | |
"execution_count": 9, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stderr", | |
"text": [ | |
"/usr/lib/python3.7/importlib/_bootstrap.py:219: RuntimeWarning: sklearn.tree._tree.TreeBuilder size changed, may indicate binary incompatibility. Expected 72 from C header, got 80 from PyObject\n", | |
" return f(*args, **kwds)\n" | |
] | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"# choose 20 random seeds and fix them for reproducibility\n", | |
"seeds = np.random.RandomState(0).permutation(1000)[:20]" | |
], | |
"metadata": { | |
"id": "Mt5pVDFk4IV0" | |
}, | |
"execution_count": 10, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"df_results = pd.DataFrame(columns = ['dataset', 'model', 'seed', 'hyper', 'ci_trn', 'ci_val', 'ibs_trn', 'ibs_val'], index = None)\n", | |
"for seed in seeds:\n", | |
" X_trn, X_val, y_trn, y_val = train_test_split(X, y, random_state=seed)\n", | |
" # Preprocessing\n", | |
" enc = OneHotEncoder()\n", | |
" scaler = StandardScaler()\n", | |
" X_trn = enc.fit_transform(X_trn)\n", | |
" X_trn = pd.DataFrame(scaler.fit_transform(X_trn), columns=X_trn.columns)\n", | |
" X_val = enc.transform(X_val)\n", | |
" X_val = pd.DataFrame(scaler.transform(X_val), columns=X_val.columns)\n", | |
" \n", | |
" for i, model in enumerate([CoxPHSurvivalAnalysis(alpha=0.1), RandomSurvivalForest(random_state=0), GradientBoostingSurvivalAnalysis(random_state=42)]):\n", | |
" model.fit(X_trn, y_trn)\n", | |
" ci_rfr_trn = concordance_index(y_trn['ttr'], -model.predict(X_trn), y_trn['relapse'])\n", | |
" ci_rfr_val = concordance_index(y_val['ttr'], -model.predict(X_val), y_val['relapse'])\n", | |
" # IBS\n", | |
" survs_trn = model.predict_survival_function(X_trn)\n", | |
" survs_val = model.predict_survival_function(X_val)\n", | |
" times = np.arange(y_val['ttr'].min(), y_trn['ttr'][y_trn['ttr']!=y_trn['ttr'].max()].max())\n", | |
" preds_trn = np.asarray([[fn(t) for t in times] for fn in survs_trn])\n", | |
" preds_val = np.asarray([[fn(t) for t in times] for fn in survs_val])\n", | |
" ibs_trn = integrated_brier_score(y_trn, y_trn, preds_trn, times)\n", | |
" ibs_val = integrated_brier_score(y_trn, y_val, preds_val, times)\n", | |
" df_results = df_results.append({'dataset':'pharmacoSmoking',\n", | |
" 'model': f'{model}',\n", | |
" 'seed': f'{seed}', \n", | |
" 'hyper': 'default', \n", | |
" 'ci_trn': f'{ci_rfr_trn}', \n", | |
" 'ci_val': f'{ci_rfr_val}', \n", | |
" 'ibs_trn':f'{ibs_trn}',\n", | |
" 'ibs_val': f'{ibs_val}'}, ignore_index = True)" | |
], | |
"metadata": { | |
"id": "jbZ1ct8_4t0L" | |
}, | |
"execution_count": 11, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"df_results['ibs_val']=df_results['ibs_val'].astype(float)" | |
], | |
"metadata": { | |
"id": "D8IdoNqj6PgQ" | |
}, | |
"execution_count": 12, | |
"outputs": [] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"means = df_results.groupby('model').mean()['ibs_val'].values\n", | |
"means" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "s7IkXV6v6WcT", | |
"outputId": "851eee37-7423-4d54-9c2e-ee31331d6ce5" | |
}, | |
"execution_count": 13, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"array([0.24806001, 0.27973921, 0.24060144])" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 13 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"medians = df_results.groupby('model').median()['ibs_val'].values\n", | |
"medians" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/" | |
}, | |
"id": "FqsO-3R766tj", | |
"outputId": "eead2b91-f7f2-47e5-fc11-7579176b83b6" | |
}, | |
"execution_count": 14, | |
"outputs": [ | |
{ | |
"output_type": "execute_result", | |
"data": { | |
"text/plain": [ | |
"array([0.25227565, 0.27703836, 0.23821575])" | |
] | |
}, | |
"metadata": {}, | |
"execution_count": 14 | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"fig, ax = plt.subplots(figsize=(10,10))\n", | |
"ax = sns.swarmplot(x='model', y='ibs_val', alpha=0.5, order=['CoxPHSurvivalAnalysis(alpha=0.1)',\n", | |
" 'GradientBoostingSurvivalAnalysis(random_state=42)',\n", | |
" 'RandomSurvivalForest(random_state=0)'], data=df_results)\n", | |
"ax.scatter(range(len(means)), means, marker='_', s=800, label='Mean')\n", | |
"ax.scatter(range(len(medians)), medians, marker='_', s=800, label='Median')\n", | |
"ax.legend()\n", | |
"ax.set_ylabel('IBS')\n", | |
"plt.xticks(rotation=45)\n", | |
"plt.show()" | |
], | |
"metadata": { | |
"colab": { | |
"base_uri": "https://localhost:8080/", | |
"height": 792 | |
}, | |
"id": "iemUYISd6pBw", | |
"outputId": "16f07059-e2f6-4abe-e501-6789aa3369b4" | |
}, | |
"execution_count": 15, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\n", | |
"text/plain": [ | |
"<Figure size 720x720 with 1 Axes>" | |
] | |
}, | |
"metadata": { | |
"needs_background": "light" | |
} | |
} | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"source": [ | |
"" | |
], | |
"metadata": { | |
"id": "Jd1siQON6-8x" | |
}, | |
"execution_count": 15, | |
"outputs": [] | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment