1592 lines (1591 with data), 114.9 kB
{
"cells": [
{
"cell_type": "markdown",
"id": "c98d33c4-b587-4f7c-baa6-36668659ce92",
"metadata": {},
"source": [
"# Plot the results\n",
"This jupyter notebook shows two brief examples of how to plot the results (i.e. performance metrics) of a repeated cross-validation experiment and compare the performances over different combinations of modalities for both classification and survival tasks."
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "744f80a9-46a3-4bf3-b25a-05dd9396cd16",
"metadata": {},
"outputs": [],
"source": [
"%load_ext autoreload\n",
"%autoreload 2\n",
"\n",
"import pandas as pd \n",
"\n",
"# Setup for local running - please delete this block\n",
"import sys\n",
"sys.path.append('C:\\\\Users\\\\ncaptier\\\\Documents\\\\GitHub\\\\multipit\\\\')\n",
"\n",
"from multipit.result_analysis.compute_metrics import compute_all_classif, compute_cindex\n",
"from multipit.result_analysis.plot import plot_metrics"
]
},
{
"cell_type": "markdown",
"id": "acb4ffa1-a1a8-4adf-bd60-e3ac8c92e551",
"metadata": {
"tags": []
},
"source": [
"## 1. Display classification results"
]
},
{
"cell_type": "markdown",
"id": "db87e0ec-1f7a-4230-8439-10c1c53b4658",
"metadata": {
"tags": []
},
"source": [
"### 1.1. Load results"
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "a62249d2-53d5-4a6e-875d-5bb14378bd65",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<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>repeat</th>\n",
" <th>clinicals</th>\n",
" <th>radiomics</th>\n",
" <th>pathomics</th>\n",
" <th>RNA</th>\n",
" <th>clinicals+radiomics</th>\n",
" <th>clinicals+pathomics</th>\n",
" <th>clinicals+RNA</th>\n",
" <th>radiomics+pathomics</th>\n",
" <th>radiomics+RNA</th>\n",
" <th>pathomics+RNA</th>\n",
" <th>clinicals+radiomics+pathomics</th>\n",
" <th>clinicals+radiomics+RNA</th>\n",
" <th>clinicals+pathomics+RNA</th>\n",
" <th>radiomics+pathomics+RNA</th>\n",
" <th>clinicals+radiomics+pathomics+RNA</th>\n",
" <th>fold_index</th>\n",
" <th>label</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.0</td>\n",
" <td>0.589144</td>\n",
" <td>0.500000</td>\n",
" <td>0.514520</td>\n",
" <td>0.500000</td>\n",
" <td>0.638059</td>\n",
" <td>0.584721</td>\n",
" <td>0.622264</td>\n",
" <td>0.553983</td>\n",
" <td>0.500000</td>\n",
" <td>0.535485</td>\n",
" <td>0.621743</td>\n",
" <td>0.658860</td>\n",
" <td>0.609943</td>\n",
" <td>0.564178</td>\n",
" <td>0.635850</td>\n",
" <td>0.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.0</td>\n",
" <td>0.559329</td>\n",
" <td>0.508867</td>\n",
" <td>0.608853</td>\n",
" <td>0.327443</td>\n",
" <td>0.542935</td>\n",
" <td>0.624402</td>\n",
" <td>0.520234</td>\n",
" <td>0.577555</td>\n",
" <td>0.450075</td>\n",
" <td>0.527213</td>\n",
" <td>0.601154</td>\n",
" <td>0.520136</td>\n",
" <td>0.588865</td>\n",
" <td>0.526563</td>\n",
" <td>0.576787</td>\n",
" <td>5.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.0</td>\n",
" <td>0.441417</td>\n",
" <td>0.535063</td>\n",
" <td>0.491944</td>\n",
" <td>0.414336</td>\n",
" <td>0.482720</td>\n",
" <td>0.445954</td>\n",
" <td>0.413705</td>\n",
" <td>0.521704</td>\n",
" <td>0.491417</td>\n",
" <td>0.455992</td>\n",
" <td>0.480305</td>\n",
" <td>0.450507</td>\n",
" <td>0.413282</td>\n",
" <td>0.487469</td>\n",
" <td>0.448577</td>\n",
" <td>8.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.0</td>\n",
" <td>0.464910</td>\n",
" <td>0.509158</td>\n",
" <td>0.462009</td>\n",
" <td>0.500000</td>\n",
" <td>0.482017</td>\n",
" <td>0.441719</td>\n",
" <td>0.445623</td>\n",
" <td>0.480589</td>\n",
" <td>0.515133</td>\n",
" <td>0.446343</td>\n",
" <td>0.461174</td>\n",
" <td>0.476427</td>\n",
" <td>0.420133</td>\n",
" <td>0.474244</td>\n",
" <td>0.450640</td>\n",
" <td>3.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.0</td>\n",
" <td>0.577890</td>\n",
" <td>0.560151</td>\n",
" <td>0.482865</td>\n",
" <td>0.500000</td>\n",
" <td>0.586602</td>\n",
" <td>0.578041</td>\n",
" <td>0.682947</td>\n",
" <td>0.557210</td>\n",
" <td>0.646759</td>\n",
" <td>0.464876</td>\n",
" <td>0.603863</td>\n",
" <td>0.670777</td>\n",
" <td>0.624255</td>\n",
" <td>0.578321</td>\n",
" <td>0.652808</td>\n",
" <td>5.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" repeat clinicals radiomics pathomics RNA clinicals+radiomics \\\n",
"0 0.0 0.589144 0.500000 0.514520 0.500000 0.638059 \n",
"1 0.0 0.559329 0.508867 0.608853 0.327443 0.542935 \n",
"2 0.0 0.441417 0.535063 0.491944 0.414336 0.482720 \n",
"3 0.0 0.464910 0.509158 0.462009 0.500000 0.482017 \n",
"4 0.0 0.577890 0.560151 0.482865 0.500000 0.586602 \n",
"\n",
" clinicals+pathomics clinicals+RNA radiomics+pathomics radiomics+RNA \\\n",
"0 0.584721 0.622264 0.553983 0.500000 \n",
"1 0.624402 0.520234 0.577555 0.450075 \n",
"2 0.445954 0.413705 0.521704 0.491417 \n",
"3 0.441719 0.445623 0.480589 0.515133 \n",
"4 0.578041 0.682947 0.557210 0.646759 \n",
"\n",
" pathomics+RNA clinicals+radiomics+pathomics clinicals+radiomics+RNA \\\n",
"0 0.535485 0.621743 0.658860 \n",
"1 0.527213 0.601154 0.520136 \n",
"2 0.455992 0.480305 0.450507 \n",
"3 0.446343 0.461174 0.476427 \n",
"4 0.464876 0.603863 0.670777 \n",
"\n",
" clinicals+pathomics+RNA radiomics+pathomics+RNA \\\n",
"0 0.609943 0.564178 \n",
"1 0.588865 0.526563 \n",
"2 0.413282 0.487469 \n",
"3 0.420133 0.474244 \n",
"4 0.624255 0.578321 \n",
"\n",
" clinicals+radiomics+pathomics+RNA fold_index label \n",
"0 0.635850 0.0 1.0 \n",
"1 0.576787 5.0 0.0 \n",
"2 0.448577 8.0 0.0 \n",
"3 0.450640 3.0 1.0 \n",
"4 0.652808 5.0 1.0 "
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"main_directory = \"classification\\\\xgboost_perm_100cv_OS_2209_nolivernorm\\\\\"\n",
"df = pd.read_csv(main_directory + \"predictions.csv\").rename(columns = {\"Unnamed: 0\": \"samples\"}).drop(columns = [\"dummy\"])\n",
"df.drop(columns=\"samples\").head()"
]
},
{
"cell_type": "markdown",
"id": "e6fd086f-8640-4975-9cc0-50fabfdd262a",
"metadata": {},
"source": [
"### 1.2 Load data"
]
},
{
"cell_type": "code",
"execution_count": 7,
"id": "c0df21b5-6e02-4e87-8bba-077d72fc0ed7",
"metadata": {},
"outputs": [],
"source": [
"df_clinicals = pd.read_csv(\"clinicals.csv\", index_col = 0, sep=\";\")\n",
"bool_mask = (df_clinicals['OS'].isnull()) | ((df_clinicals['OS'] <= 365) & (df_clinicals['Statut Vital'] == \"Vivant\"))\n",
"df_clinicals = df_clinicals[~bool_mask]\n",
"patient_clinicals = df_clinicals.index\n",
"\n",
"df_omics = pd.read_csv(\"omics.csv\", sep=\";\", index_col=0)\n",
"patient_omics = df_omics.index\n",
"\n",
"df_radiomics = pd.read_csv(\"radiomics.csv\", index_col=0, sep=\";\")\n",
"patient_radiomics = df_radiomics.index\n",
"\n",
"df_pathomics = pd.read_csv(\"pathomics.csv\", index_col=0, sep=\";\")\n",
"patient_pathomics = df_pathomics.index\n",
"\n",
"all_patients = set(patient_radiomics) & set(patient_pathomics) & set(patient_clinicals) & set(patient_omics)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"id": "46a2e218-ac65-41f5-9796-aa2abd96381a",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of patients with all modas available: 77\n"
]
}
],
"source": [
"print(\"Number of patients with all modas available: \", len(all_patients))"
]
},
{
"cell_type": "markdown",
"id": "d09d5ebd-0fe3-4fa4-a1cf-0bbac89e1bb0",
"metadata": {
"tags": []
},
"source": [
"### 1.3 Compute classification metrics"
]
},
{
"cell_type": "code",
"execution_count": 9,
"id": "1b368b3d-6606-449b-8f07-e0b6d33c1920",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<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>metric</th>\n",
" <th>C</th>\n",
" <th>R</th>\n",
" <th>P</th>\n",
" <th>RNA</th>\n",
" <th>C+R</th>\n",
" <th>C+P</th>\n",
" <th>C+RNA</th>\n",
" <th>R+P</th>\n",
" <th>R+RNA</th>\n",
" <th>P+RNA</th>\n",
" <th>C+R+P</th>\n",
" <th>C+R+RNA</th>\n",
" <th>C+P+RNA</th>\n",
" <th>R+P+RNA</th>\n",
" <th>C+R+P+RNA</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>sensitivity</td>\n",
" <td>0.368421</td>\n",
" <td>0.421053</td>\n",
" <td>0.473684</td>\n",
" <td>0.684211</td>\n",
" <td>0.473684</td>\n",
" <td>0.578947</td>\n",
" <td>0.526316</td>\n",
" <td>0.526316</td>\n",
" <td>0.684211</td>\n",
" <td>0.578947</td>\n",
" <td>0.526316</td>\n",
" <td>0.578947</td>\n",
" <td>0.578947</td>\n",
" <td>0.631579</td>\n",
" <td>0.578947</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>specificity</td>\n",
" <td>0.672414</td>\n",
" <td>0.706897</td>\n",
" <td>0.689655</td>\n",
" <td>0.896552</td>\n",
" <td>0.620690</td>\n",
" <td>0.620690</td>\n",
" <td>0.741379</td>\n",
" <td>0.689655</td>\n",
" <td>0.741379</td>\n",
" <td>0.827586</td>\n",
" <td>0.672414</td>\n",
" <td>0.793103</td>\n",
" <td>0.741379</td>\n",
" <td>0.793103</td>\n",
" <td>0.793103</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>f1_score</td>\n",
" <td>0.311111</td>\n",
" <td>0.363636</td>\n",
" <td>0.391304</td>\n",
" <td>0.684211</td>\n",
" <td>0.360000</td>\n",
" <td>0.423077</td>\n",
" <td>0.454545</td>\n",
" <td>0.425532</td>\n",
" <td>0.553191</td>\n",
" <td>0.550000</td>\n",
" <td>0.416667</td>\n",
" <td>0.523810</td>\n",
" <td>0.488889</td>\n",
" <td>0.558140</td>\n",
" <td>0.523810</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>balanced_accuracy</td>\n",
" <td>0.520417</td>\n",
" <td>0.563975</td>\n",
" <td>0.581670</td>\n",
" <td>0.790381</td>\n",
" <td>0.547187</td>\n",
" <td>0.599819</td>\n",
" <td>0.633848</td>\n",
" <td>0.607985</td>\n",
" <td>0.712795</td>\n",
" <td>0.703267</td>\n",
" <td>0.599365</td>\n",
" <td>0.686025</td>\n",
" <td>0.660163</td>\n",
" <td>0.712341</td>\n",
" <td>0.686025</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>mathews_coef</td>\n",
" <td>0.037226</td>\n",
" <td>0.117803</td>\n",
" <td>0.147576</td>\n",
" <td>0.580762</td>\n",
" <td>0.082963</td>\n",
" <td>0.173920</td>\n",
" <td>0.246467</td>\n",
" <td>0.193557</td>\n",
" <td>0.381421</td>\n",
" <td>0.393535</td>\n",
" <td>0.176821</td>\n",
" <td>0.350455</td>\n",
" <td>0.292020</td>\n",
" <td>0.395286</td>\n",
" <td>0.350455</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>595</th>\n",
" <td>specificity</td>\n",
" <td>0.775862</td>\n",
" <td>0.724138</td>\n",
" <td>0.741379</td>\n",
" <td>0.793103</td>\n",
" <td>0.758621</td>\n",
" <td>0.706897</td>\n",
" <td>0.793103</td>\n",
" <td>0.672414</td>\n",
" <td>0.706897</td>\n",
" <td>0.706897</td>\n",
" <td>0.775862</td>\n",
" <td>0.775862</td>\n",
" <td>0.793103</td>\n",
" <td>0.741379</td>\n",
" <td>0.827586</td>\n",
" </tr>\n",
" <tr>\n",
" <th>596</th>\n",
" <td>f1_score</td>\n",
" <td>0.400000</td>\n",
" <td>0.478261</td>\n",
" <td>0.300000</td>\n",
" <td>0.590909</td>\n",
" <td>0.500000</td>\n",
" <td>0.285714</td>\n",
" <td>0.487805</td>\n",
" <td>0.480000</td>\n",
" <td>0.588235</td>\n",
" <td>0.500000</td>\n",
" <td>0.476190</td>\n",
" <td>0.577778</td>\n",
" <td>0.450000</td>\n",
" <td>0.583333</td>\n",
" <td>0.550000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>597</th>\n",
" <td>balanced_accuracy</td>\n",
" <td>0.598457</td>\n",
" <td>0.651543</td>\n",
" <td>0.528584</td>\n",
" <td>0.738657</td>\n",
" <td>0.668784</td>\n",
" <td>0.511343</td>\n",
" <td>0.659710</td>\n",
" <td>0.651996</td>\n",
" <td>0.748185</td>\n",
" <td>0.669238</td>\n",
" <td>0.651089</td>\n",
" <td>0.730036</td>\n",
" <td>0.633394</td>\n",
" <td>0.739111</td>\n",
" <td>0.703267</td>\n",
" </tr>\n",
" <tr>\n",
" <th>598</th>\n",
" <td>mathews_coef</td>\n",
" <td>0.190619</td>\n",
" <td>0.273835</td>\n",
" <td>0.055341</td>\n",
" <td>0.439464</td>\n",
" <td>0.310800</td>\n",
" <td>0.021369</td>\n",
" <td>0.304831</td>\n",
" <td>0.267236</td>\n",
" <td>0.434225</td>\n",
" <td>0.301161</td>\n",
" <td>0.284638</td>\n",
" <td>0.419416</td>\n",
" <td>0.258257</td>\n",
" <td>0.425501</td>\n",
" <td>0.393535</td>\n",
" </tr>\n",
" <tr>\n",
" <th>599</th>\n",
" <td>roc_auc</td>\n",
" <td>0.637024</td>\n",
" <td>0.629764</td>\n",
" <td>0.568966</td>\n",
" <td>0.753176</td>\n",
" <td>0.706897</td>\n",
" <td>0.581670</td>\n",
" <td>0.784029</td>\n",
" <td>0.661525</td>\n",
" <td>0.831216</td>\n",
" <td>0.726860</td>\n",
" <td>0.672414</td>\n",
" <td>0.827586</td>\n",
" <td>0.715971</td>\n",
" <td>0.772232</td>\n",
" <td>0.784029</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>600 rows × 16 columns</p>\n",
"</div>"
],
"text/plain": [
" metric C R P RNA C+R \\\n",
"0 sensitivity 0.368421 0.421053 0.473684 0.684211 0.473684 \n",
"1 specificity 0.672414 0.706897 0.689655 0.896552 0.620690 \n",
"2 f1_score 0.311111 0.363636 0.391304 0.684211 0.360000 \n",
"3 balanced_accuracy 0.520417 0.563975 0.581670 0.790381 0.547187 \n",
"4 mathews_coef 0.037226 0.117803 0.147576 0.580762 0.082963 \n",
".. ... ... ... ... ... ... \n",
"595 specificity 0.775862 0.724138 0.741379 0.793103 0.758621 \n",
"596 f1_score 0.400000 0.478261 0.300000 0.590909 0.500000 \n",
"597 balanced_accuracy 0.598457 0.651543 0.528584 0.738657 0.668784 \n",
"598 mathews_coef 0.190619 0.273835 0.055341 0.439464 0.310800 \n",
"599 roc_auc 0.637024 0.629764 0.568966 0.753176 0.706897 \n",
"\n",
" C+P C+RNA R+P R+RNA P+RNA C+R+P C+R+RNA \\\n",
"0 0.578947 0.526316 0.526316 0.684211 0.578947 0.526316 0.578947 \n",
"1 0.620690 0.741379 0.689655 0.741379 0.827586 0.672414 0.793103 \n",
"2 0.423077 0.454545 0.425532 0.553191 0.550000 0.416667 0.523810 \n",
"3 0.599819 0.633848 0.607985 0.712795 0.703267 0.599365 0.686025 \n",
"4 0.173920 0.246467 0.193557 0.381421 0.393535 0.176821 0.350455 \n",
".. ... ... ... ... ... ... ... \n",
"595 0.706897 0.793103 0.672414 0.706897 0.706897 0.775862 0.775862 \n",
"596 0.285714 0.487805 0.480000 0.588235 0.500000 0.476190 0.577778 \n",
"597 0.511343 0.659710 0.651996 0.748185 0.669238 0.651089 0.730036 \n",
"598 0.021369 0.304831 0.267236 0.434225 0.301161 0.284638 0.419416 \n",
"599 0.581670 0.784029 0.661525 0.831216 0.726860 0.672414 0.827586 \n",
"\n",
" C+P+RNA R+P+RNA C+R+P+RNA \n",
"0 0.578947 0.631579 0.578947 \n",
"1 0.741379 0.793103 0.793103 \n",
"2 0.488889 0.558140 0.523810 \n",
"3 0.660163 0.712341 0.686025 \n",
"4 0.292020 0.395286 0.350455 \n",
".. ... ... ... \n",
"595 0.793103 0.741379 0.827586 \n",
"596 0.450000 0.583333 0.550000 \n",
"597 0.633394 0.739111 0.703267 \n",
"598 0.258257 0.425501 0.393535 \n",
"599 0.715971 0.772232 0.784029 \n",
"\n",
"[600 rows x 16 columns]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results = compute_all_classif(df.set_index(\"samples\").loc[list(set(list(all_patients)) & set(df[\"samples\"].unique()))],\n",
" names=list(df.columns[2:-2].values)\n",
" )\n",
"\n",
"new_cols = {}\n",
"for col in results.columns.values[1:]:\n",
" l = col.split(\"+\")\n",
" new = []\n",
" for item in l:\n",
" if item == 'radiomics':\n",
" new.append('R')\n",
" if item == 'RNA':\n",
" new.append('RNA')\n",
" if item == 'pathomics':\n",
" new.append(\"P\")\n",
" if item == 'clinicals':\n",
" new.append(\"C\")\n",
" new_cols[col] = \"+\".join(new)\n",
"\n",
"results = results.rename(columns = new_cols)\n",
"results"
]
},
{
"cell_type": "code",
"execution_count": 11,
"id": "a780f6e2-048a-44c0-b0c1-724c20158ea8",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<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>C</th>\n",
" <th>R</th>\n",
" <th>P</th>\n",
" <th>RNA</th>\n",
" <th>C+R</th>\n",
" <th>C+P</th>\n",
" <th>C+RNA</th>\n",
" <th>R+P</th>\n",
" <th>R+RNA</th>\n",
" <th>P+RNA</th>\n",
" <th>C+R+P</th>\n",
" <th>C+R+RNA</th>\n",
" <th>C+P+RNA</th>\n",
" <th>R+P+RNA</th>\n",
" <th>C+R+P+RNA</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>0.591897</td>\n",
" <td>0.616479</td>\n",
" <td>0.543512</td>\n",
" <td>0.750554</td>\n",
" <td>0.657169</td>\n",
" <td>0.621379</td>\n",
" <td>0.779927</td>\n",
" <td>0.623711</td>\n",
" <td>0.806252</td>\n",
" <td>0.726470</td>\n",
" <td>0.668158</td>\n",
" <td>0.810862</td>\n",
" <td>0.761561</td>\n",
" <td>0.769011</td>\n",
" <td>0.784365</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>0.046401</td>\n",
" <td>0.038671</td>\n",
" <td>0.047115</td>\n",
" <td>0.041767</td>\n",
" <td>0.044742</td>\n",
" <td>0.048565</td>\n",
" <td>0.042371</td>\n",
" <td>0.041550</td>\n",
" <td>0.033935</td>\n",
" <td>0.040244</td>\n",
" <td>0.044537</td>\n",
" <td>0.033933</td>\n",
" <td>0.043629</td>\n",
" <td>0.036266</td>\n",
" <td>0.039099</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" C R P RNA C+R C+P C+RNA \\\n",
"mean 0.591897 0.616479 0.543512 0.750554 0.657169 0.621379 0.779927 \n",
"std 0.046401 0.038671 0.047115 0.041767 0.044742 0.048565 0.042371 \n",
"\n",
" R+P R+RNA P+RNA C+R+P C+R+RNA C+P+RNA R+P+RNA \\\n",
"mean 0.623711 0.806252 0.726470 0.668158 0.810862 0.761561 0.769011 \n",
"std 0.041550 0.033935 0.040244 0.044537 0.033933 0.043629 0.036266 \n",
"\n",
" C+R+P+RNA \n",
"mean 0.784365 \n",
"std 0.039099 "
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results[results[\"metric\"]==\"roc_auc\"].drop(columns = 'metric').apply(['mean', 'std'])"
]
},
{
"cell_type": "markdown",
"id": "c3e20eb0-8ab9-4492-9f55-6052add848ec",
"metadata": {},
"source": [
"### 1.4 Plot results"
]
},
{
"cell_type": "code",
"execution_count": 17,
"id": "246e6b8f-ccbb-45d9-865e-acf19fbab99d",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAABZgAAAHuCAYAAAASmWkLAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABcbklEQVR4nO3de5hdZXk3/u+DlBYURE6FGBERQYUKllMNJQlyPijUoCDEMtWQCkqlaq0o1kFUWn9i0fqiQto3CFiw0EKBWJDIJEoQSFpog5SUckxAIaIvKGhE1u+PmcRhmGR29qydNbPz+VzXvmD2Osy919r7vtfcefazSlVVAQAAAACAtbVB0wEAAAAAADA+aTADAAAAANAWDWYAAAAAANqiwQwAAAAAQFs0mAEAAAAAaIsGMwAAAAAAbRmXDebDDjusSuLh4dHgY/bs2VUppdpjjz1a3qaUUpVSqgceeKBKUu2www5VKaXq6+tr/PV4dM9j6tSp1dSpUxuPw8PDo7OPdVWHHnjggVXbNf2aPTw8fvNQ7z3G6kN98hhvD/m0nsd69Nkf1rhsMC9fvrzpEGCdOu+88/KGN7whL3rRi1JKSW9vb9Mh1eLd7353PvCBD2TixIlJkp6enq56fQDd4uSTT87rX//6vOQlL8mWW26ZI444InfddVfTYY1aK3Vos802ywc+8IF84AMfaChKAFbnpJNOystf/vL89m//drbaaqscdthh+Y//+I+mwxo19Qla84//+I8ppaSUktNPP73pcEZtPH/2N2w6AGBkixYtyhZbbJFXvOIVefDBB5sOpzZ/9Vd/1XQIALRg1qxZ2XffffPOd74zN954Y771rW/lP//zP3Pvvffmd37nd5oOr22t1KEtttgi5513XueDAWCtPfjgg5kyZUpe+tKX5jvf+U6uv/763H333eP+byb1CUa2dOnSnHrqqdlwww3z7LPPNh1OLcbzZ39cjmCG9c3FF1+cvr6+7LHHHi2t39vbm1JKDj/88EyfPj2bbLJJ9tlnn9x7772ZOXNmXvKSl2S33XbLv//7v6/a5oEHHsjb3/72bLfddnnZy16WAw44ILfeeuuq5Y888kgOOeSQvPjFL87++++f+++//3m/81e/+lUOPvjgbLvtttloo42y+eab561vfWsefvjh1ca5ww47pJSSvr6+9PT05KKLLkqSnHXWWSmlpKenJwcffHBKKfnHf/zHVdsddthhKaXkG9/4RkvHg/XLnDlzMmfOnKbDgK5y88035/vf/34uvPDC3HTTTUmSZcuW5Qc/+MGw63dTHXrggQdWjYxZ6aGHHsrxxx+fl7/85dl8881zyCGHZPHixauWn3feeXn1q1+d3/md38nWW2+dqVOn5p577lmLIw6MRL0nSfr6+vKNb3wjX/nKV1b9vbB06dL86le/GnZ99Ul94oXGYz6tqionnXRSJkyYkGnTpo24vs9+5z/7RjBDF7v++utz6KGHZvvtt8/tt9+evfbaK695zWvyhje8Ibfcckv+7M/+LN/73vfy85//PG9+85tz//33Z/Lkydlqq63yz//8z3nzm9+c//zP/8yrX/3qnHDCCZk3b15e+9rX5lWvelX+5m/+5nm/67nnnsujjz6aQw89NC95yUtyyy235JprrsmKFSvyb//2byPGesghh+S2227L3XffnX333Td/8Ad/kH322ScvetGLcuONN+biiy/OO9/5zvzsZz9LX19fXvziF+foo4/u1KFjHNtkk02aDgG6zqRJk1b9/4oVK5IkG2ywQbbbbrs1btcNdWiop59+Om9+85tz3333rfpdV199dQ444IDcfffd+elPf5o///M/z1ZbbZWenp48+eST+f73v59HH300u+yySyuHG2iBes9KX/7yl/ODH/wgc+fOTZJ86EMfym/91m+tcRv1SX3iN8ZjPj3vvPPyve99L7feeutajeb12e/cZ98IZuhir371qzNnzpx89KMfTdKfeG688cZ87WtfS5LccccdSZLrrrsu999/f3bcccf09fXlyiuvzDHHHJOnn346f//3f5+lS5dm3rx5SZIbbrghX//61/O+973veb/rt3/7t/Mv//Iv2X333fPiF784v/d7v5ekf1TBc889N2KsJ5xwwqpkedhhh+W8887LCSeckD/6oz/KlltumW9/+9t57LHH8m//9m/55S9/mbe+9a158YtfXMtxorucf/75Of/885sOA7rSz372s/T09CTp/wN+pAZzN9Shoa677rr87//+byZMmJBddtklL3/5y7P99ttn+fLlueKKK1aNmpswYULe9ra35XOf+1zuu+++7L///iPGALROvWelK664Il/5yleyZMmSTJw4Mfvtt9+I26hP6hO/Md7y6eLFi3PGGWfkU5/6VMvf8l7JZ79zn30jmKGLvfa1r00pJZtvvnmS5Hd/93fz0pe+NJtuummS5Oc//3mS/q9+JMkuu+yy6msWr33ta5P0z2u2bNmyJMnGG2+cV7ziFUmSnXfe+Xm/67vf/W4OOOCA/PrXv37e87/85S/z1FNP5aUvfWlbr2GjjTbKu971rpx33nm57LLLsnDhwiTJiSee2Nb+6H7f/OY3kySnnnpqw5FAd1m+fHmOOOKI3H777Tn55JNfMEpjON1Qh4ZaGeuyZcvyxS9+8XnL7r333rz3ve/NWWedlS996Us59NBDV72uK664IrvttlstMQDqPb/R19eXX/ziF7n++uvztre9Lccee2z+53/+JzvssMNqt1Gf1Cd+Y7zl0yuvvDIrVqzIvHnz8t3vfjd33nlnkuRf//Vfs/HGG+ecc85Z7bY++5377BvBDF3sRS960Rp/XmnlxdeSJUtSVVWSrJqP55WvfGVe/vKXJ0meeeaZVfMFLVmy5Hn7uPLKK/PrX/86hx12WH7+858/b26ilftsNd6h/5o3Y8aMJMlFF12U6667LltuuWUOOeSQlvYJwOg9+OCD2W+//XL77bfnox/9aC644ILnzfu2Ot1Sh4aLdc8998xzzz2XqqpSVVV+8pOf5OMf/3h+/etf5+Mf/3iWL1+eBx98MH/5l3+Ze+65J3/7t3/bUgwAtOaZZ55Z1bj5nd/5nRx22GF5yUtekmefffYFc6EOpT6pT4xfK9/b3/rWt3Lddddl6dKlSZL7778/t9xyyxq39dnv3GffCGYYB2bNmpXvfe97qyacv+qqq/LAAw/kmGOOyTHHHDPq/R955JHZYYcd8r//+7854IADstVWW+Vf/uVfsvHGG+fd7353Jk6cmMmTJ2f+/Pk55JBDsvfee+fyyy9/3j5+93d/N0ly66235rTTTlv1dZG1sfJf/i655JL8v//3/3LMMcfkgAMOyK677pp99913VUJ+73vfO+K8agDUZ9KkSXnkkUey/fbb55lnnsnpp5+e5Plf3RuNsVyHXvWqVz1vnSOOOCI77rhjFi1alP322y9veMMb8tBDD6Wvry9z5szJDjvskH333TeTJ0/ONttsk5tvvjlJVo2UAaAet956a0444YRMnjw5L3vZy/Ld7343Tz75ZLbeeuv8/u//fi2/Q32Csae3tze9vb2rfl55M7wPfOADazUf85r47K+9lkcwl1JOLaXcX0r5RSllUSlljZN1lFIOLaXcUkp5qpSyvJRydSll50HLp5ZSqmEerx3NC4Ju9L3vfS8XXXTRqn8Zu/POO3PRRRetmh9otF784hdn7ty5mTZtWv77v/87N954Y6ZMmZK5c+dmp512SpJceumlOeigg/Lggw9myZIl+eAHP/i8fbz//e/PMccck1/+8peZP39+Pv7xj691HCeffHImTZqUZcuW5Utf+lIWLVq0atnKUcxJhp13CIDOeeSRR5L036H6i1/84qrHD37wg1r2Px7q0NBY3/nOd+ahhx7KRRddlHvuuSfTp0/PLrvsks022yz77LNPbr755lx44YV55JFHcvzxx+fMM89s7+AAMKwJEyZk5513zre//e38/d//fX7yk5/k7W9/e77zne/U9tVz9QnWTz77a6+0Miy7lHJckkuSnJrkewP//ZMkr6+q6qFh1n9VkruTfCnJBUlekuRzSXasqmqngXWmJrkpya5Jnhi0+eNVVT1/gpIh9tprr2rlPKzA+uFHP/pRtt1222y//fZ54IEHWvpqNuunqVOnJumfjw8A6E7qPUA95FPW0rDNmFanyPhgktlVVV048PNppZTDkpyS5Ixh1t8zyW8lOWNls7iUck6S75RStqqqavmgdR8b8jPA8/zDP/xDrrvuuiTJKaecornMGrkwAoDup94D1EM+pQ4jTpFRStko/Q3jG4YsuiHJpNVstjDJr5LMKKW8qJSyaZKTktw+TDN5YSnl0VLK3FLKAWsXPrA++NSnPpXrrrsub3/721/wtRMAAAAAmjPiFBmllAlJliWZUlXV/EHP/1WSE6uq2mU12+2f5J+SbJX+RvZ/JDm8qqrHBpbvkuSAJLcn2SjJu5K8N8nUwb9n0P5mJpmZJNtuu+2eZ511VpJkn332ydZbb71qdOP222+fQw45JLNmzUqSbLTRRunp6clVV12Vxx57LEkybdq03HvvvbnzzjuT9N+4ZtNNN83111+fJNlxxx0zefLkzJ49O0myySabZPr06bniiivyxBP9s3kcd9xxWbx4ce66664kyZQpU7Lhhhtm7ty5SZKdd945e++9dy699NIkyWabbZbjjz8+l112WZ588skkyYknnpjbb7991Z0mDzzwwDz77LOrJv7edddds9tuu62aKHyLLbbIsccem0suuSRPP/10kv7J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nLvuuitJMmXKlGy44YaZO3dukmTnnXfO3nvvnUsvvTRJstlmm+X444/PZZddlieffDJJcuKJJ+b222/PkiVLkiQHHnhgnn322cybNy9Jsuuuu2a33XbL5ZdfniTZYostcuyxx+aSSy7J008/nSTp6enJ/Pnzc9999yVJDj300Dz11FNZsGBBkmT33XfPTjvtlCuv7O/tb7PNNjnmmGMye/bsrFixIkkyY8aM3HDDDXnoof7ZTo488sg8/vjjue2225Ike+65ZyZOnJirr746STJhwoQcddRRmTVrVp577rlssMEGmTFjRq699to88sgjSZKjjz46S5cuzaJFi5wn58l5GuV5evuOYZAVK1as8Tw9+eST2W677fLzn/88ic+Tz9P4PU8lDLZs2bIxeZ7W589Tsl37J7QLjVSfxlPeSzLmP0933nlndt9990yZMqUrPk/jqT7xfKOtT/tnp2YCH6OWLVs26s/TO17T6ljI9UMdfz/xQuvL9d7Q+jRz5sxhj0epqmqNB6yUMiHJsiSTq6r67qDnP5nknVVVrfGmfKWUo5Jck2S3qqruGmHdOUmerarqrWtab6+99qoWLly4xrgBusVYGDWcJFsc/Jd54tt/03QYI45gnjp1apKkr6+v88FAB82bPKXpEJIkU787P337T246jEyZP6/pEBjiyx+6pukQxpT3n/uWpkOoTSklI/2d2DT1vjk3XXThyCutRw446eRRbX/3Z75TUySj8/ozD8wPPj236TDyuo+/edT7+OlNi2uIZPRe9ubfy0++819Nh5HND9htjctbyae9vb31BTQKZ511Vj75yU82HcaYOR4NGXYczAYtbLg8ya+TbDvk+W3ywlHNwzk5yYKRmssDbk3ymhbWAwAAAACgYSM2mKuqWpFkUZKDhyw6OMmCNW07MPr5yCSt/hPnHumfOgMAAAAAgDGulTmYk+QLSS4updyW5OYk700yIclXk6SUck6SfaqqOnDIdu9O8vMk3xy6w1LK6UkeSHJX+udgnp7kmCTT1vI1AAAAAADQgJYazFVVXV5K2TLJmem/m8fiJEdUVfXgwCrbJXn14G1KKSXJe5JcWlXV08PsdqMkn0/y8iTPpL/RfGRVVXPaeSEAAAAAAKxbrY5gTlVV5yc5fzXLeoZ5rkryqjXs73NJxsadqwDoGhdffHHTIQAAHabeA9RjLOTT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\n",
"text/plain": [
"<Figure size 1440x504 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plot_metrics(results,\n",
" metrics=\"roc_auc\",\n",
" models = list(results.columns[1:]),\n",
" annotations = {\"1 modality\": (0, 3), \"2 modalities\": (4, 9), \"3 modalities\": (10, 13), \"4 modalities\": (14, 15)},\n",
" title=None,\n",
" ylim=(0.5, 0.86),\n",
" y_text=0.85,\n",
" ax=None)"
]
},
{
"cell_type": "markdown",
"id": "a9f7722c-7b83-4303-9c8b-34e29c419f32",
"metadata": {
"tags": []
},
"source": [
"## 2. Display survival prediction results"
]
},
{
"cell_type": "markdown",
"id": "3183894b-c1f5-4b2e-86ca-2a35b7fce581",
"metadata": {},
"source": [
"### 2.1 Load results"
]
},
{
"cell_type": "code",
"execution_count": 21,
"id": "2372f38f-6f7e-4ce9-95c4-eae6e5f3e64c",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<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>repeat</th>\n",
" <th>clinicals</th>\n",
" <th>radiomics</th>\n",
" <th>pathomics</th>\n",
" <th>RNA</th>\n",
" <th>clinicals+radiomics</th>\n",
" <th>clinicals+pathomics</th>\n",
" <th>clinicals+RNA</th>\n",
" <th>radiomics+pathomics</th>\n",
" <th>radiomics+RNA</th>\n",
" <th>pathomics+RNA</th>\n",
" <th>clinicals+radiomics+pathomics</th>\n",
" <th>clinicals+radiomics+RNA</th>\n",
" <th>clinicals+pathomics+RNA</th>\n",
" <th>radiomics+pathomics+RNA</th>\n",
" <th>clinicals+radiomics+pathomics+RNA</th>\n",
" <th>fold_index</th>\n",
" <th>label.time</th>\n",
" <th>label.event</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0.0</td>\n",
" <td>0.568705</td>\n",
" <td>0.000000</td>\n",
" <td>-1.088434</td>\n",
" <td>0.000000</td>\n",
" <td>0.568705</td>\n",
" <td>-0.259865</td>\n",
" <td>0.568705</td>\n",
" <td>-1.088434</td>\n",
" <td>0.000000</td>\n",
" <td>-1.088434</td>\n",
" <td>-0.259865</td>\n",
" <td>0.568705</td>\n",
" <td>-0.259865</td>\n",
" <td>-1.088434</td>\n",
" <td>-0.259865</td>\n",
" <td>6.0</td>\n",
" <td>262.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>0.0</td>\n",
" <td>0.321816</td>\n",
" <td>-0.355895</td>\n",
" <td>0.735641</td>\n",
" <td>-0.996944</td>\n",
" <td>-0.017040</td>\n",
" <td>0.528729</td>\n",
" <td>-0.337564</td>\n",
" <td>0.189873</td>\n",
" <td>-0.676420</td>\n",
" <td>-0.130651</td>\n",
" <td>0.233854</td>\n",
" <td>-0.343674</td>\n",
" <td>0.020171</td>\n",
" <td>-0.205733</td>\n",
" <td>-0.073845</td>\n",
" <td>8.0</td>\n",
" <td>1510.0</td>\n",
" <td>0.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>0.0</td>\n",
" <td>0.200006</td>\n",
" <td>0.758021</td>\n",
" <td>0.069067</td>\n",
" <td>0.322129</td>\n",
" <td>0.479013</td>\n",
" <td>0.134536</td>\n",
" <td>0.261068</td>\n",
" <td>0.413544</td>\n",
" <td>0.540075</td>\n",
" <td>0.195598</td>\n",
" <td>0.342364</td>\n",
" <td>0.426719</td>\n",
" <td>0.197067</td>\n",
" <td>0.383072</td>\n",
" <td>0.337306</td>\n",
" <td>7.0</td>\n",
" <td>830.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>0.0</td>\n",
" <td>-0.701541</td>\n",
" <td>-0.281650</td>\n",
" <td>-0.479457</td>\n",
" <td>0.000000</td>\n",
" <td>-0.491595</td>\n",
" <td>-0.590499</td>\n",
" <td>-0.701541</td>\n",
" <td>-0.380553</td>\n",
" <td>-0.281650</td>\n",
" <td>-0.479457</td>\n",
" <td>-0.487549</td>\n",
" <td>-0.491595</td>\n",
" <td>-0.590499</td>\n",
" <td>-0.380553</td>\n",
" <td>-0.487549</td>\n",
" <td>8.0</td>\n",
" <td>243.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0.0</td>\n",
" <td>0.160662</td>\n",
" <td>1.575924</td>\n",
" <td>-0.120972</td>\n",
" <td>0.000000</td>\n",
" <td>0.868293</td>\n",
" <td>0.019845</td>\n",
" <td>0.160662</td>\n",
" <td>0.727476</td>\n",
" <td>1.575924</td>\n",
" <td>-0.120972</td>\n",
" <td>0.538538</td>\n",
" <td>0.868293</td>\n",
" <td>0.019845</td>\n",
" <td>0.727476</td>\n",
" <td>0.538538</td>\n",
" <td>0.0</td>\n",
" <td>361.0</td>\n",
" <td>1.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" repeat clinicals radiomics pathomics RNA clinicals+radiomics \\\n",
"0 0.0 0.568705 0.000000 -1.088434 0.000000 0.568705 \n",
"1 0.0 0.321816 -0.355895 0.735641 -0.996944 -0.017040 \n",
"2 0.0 0.200006 0.758021 0.069067 0.322129 0.479013 \n",
"3 0.0 -0.701541 -0.281650 -0.479457 0.000000 -0.491595 \n",
"4 0.0 0.160662 1.575924 -0.120972 0.000000 0.868293 \n",
"\n",
" clinicals+pathomics clinicals+RNA radiomics+pathomics radiomics+RNA \\\n",
"0 -0.259865 0.568705 -1.088434 0.000000 \n",
"1 0.528729 -0.337564 0.189873 -0.676420 \n",
"2 0.134536 0.261068 0.413544 0.540075 \n",
"3 -0.590499 -0.701541 -0.380553 -0.281650 \n",
"4 0.019845 0.160662 0.727476 1.575924 \n",
"\n",
" pathomics+RNA clinicals+radiomics+pathomics clinicals+radiomics+RNA \\\n",
"0 -1.088434 -0.259865 0.568705 \n",
"1 -0.130651 0.233854 -0.343674 \n",
"2 0.195598 0.342364 0.426719 \n",
"3 -0.479457 -0.487549 -0.491595 \n",
"4 -0.120972 0.538538 0.868293 \n",
"\n",
" clinicals+pathomics+RNA radiomics+pathomics+RNA \\\n",
"0 -0.259865 -1.088434 \n",
"1 0.020171 -0.205733 \n",
"2 0.197067 0.383072 \n",
"3 -0.590499 -0.380553 \n",
"4 0.019845 0.727476 \n",
"\n",
" clinicals+radiomics+pathomics+RNA fold_index label.time label.event \n",
"0 -0.259865 6.0 262.0 1.0 \n",
"1 -0.073845 8.0 1510.0 0.0 \n",
"2 0.337306 7.0 830.0 1.0 \n",
"3 -0.487549 8.0 243.0 1.0 \n",
"4 0.538538 0.0 361.0 1.0 "
]
},
"execution_count": 21,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"main_directory = \"survival\\\\RF_perm_100cv_OS_2109_noliversegmentation\\\\\"\n",
"df = pd.read_csv(main_directory + \"predictions.csv\")\n",
"df.drop(columns=\"samples\").head()"
]
},
{
"cell_type": "markdown",
"id": "579e86d3-df3e-4af6-9fd3-b81e28e2f234",
"metadata": {},
"source": [
"### 2.2 Load data"
]
},
{
"cell_type": "code",
"execution_count": 22,
"id": "3e2b9cec-858e-49c2-ae9f-f5191dfa15fd",
"metadata": {},
"outputs": [],
"source": [
"df_clinicals = pd.read_csv(\"clinicals.csv\", index_col = 0, sep=\";\")\n",
"bool_mask = df_clinicals['OS'].isnull()\n",
"df_clinicals = df_clinicals[~bool_mask]\n",
"patient_clinicals = df_clinicals.index\n",
"\n",
"df_omics = pd.read_csv(\"omics.csv\", sep=\";\", index_col=0)\n",
"patient_omics = df_omics.index\n",
"\n",
"df_radiomics = pd.read_csv(\"radiomics.csv\", index_col=0, sep=\";\")\n",
"patient_radiomics = df_radiomics.index\n",
"\n",
"df_pathomics = pd.read_csv(\"pathomics.csv\", index_col=0, sep=\";\")\n",
"patient_pathomics = df_pathomics.index\n",
"\n",
"all_patients = set(patient_radiomics) & set(patient_pathomics) & set(patient_clinicals) & set(patient_omics)"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "7c353993-444e-411a-82d7-c64435caf0a8",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of patients with all modas available: 79\n"
]
}
],
"source": [
"print(\"Number of patients with all modas available: \", len(all_patients))"
]
},
{
"cell_type": "markdown",
"id": "f4a49b3c-132f-4410-8c74-08d7dbdf5333",
"metadata": {},
"source": [
"### 2.3 Compute C-index"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "9645c92e-4665-4254-b425-68addb7a5ea8",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<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>metric</th>\n",
" <th>C</th>\n",
" <th>R</th>\n",
" <th>P</th>\n",
" <th>RNA</th>\n",
" <th>C+R</th>\n",
" <th>C+P</th>\n",
" <th>C+RNA</th>\n",
" <th>R+P</th>\n",
" <th>R+RNA</th>\n",
" <th>P+RNA</th>\n",
" <th>C+R+P</th>\n",
" <th>C+R+RNA</th>\n",
" <th>C+P+RNA</th>\n",
" <th>R+P+RNA</th>\n",
" <th>C+R+P+RNA</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>c_index</td>\n",
" <td>0.659810</td>\n",
" <td>0.589693</td>\n",
" <td>0.607118</td>\n",
" <td>0.693620</td>\n",
" <td>0.678043</td>\n",
" <td>0.677309</td>\n",
" <td>0.749478</td>\n",
" <td>0.655850</td>\n",
" <td>0.699615</td>\n",
" <td>0.692120</td>\n",
" <td>0.692686</td>\n",
" <td>0.725447</td>\n",
" <td>0.754048</td>\n",
" <td>0.708004</td>\n",
" <td>0.735309</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>c_index</td>\n",
" <td>0.695589</td>\n",
" <td>0.592447</td>\n",
" <td>0.597955</td>\n",
" <td>0.691800</td>\n",
" <td>0.673513</td>\n",
" <td>0.683269</td>\n",
" <td>0.762107</td>\n",
" <td>0.649618</td>\n",
" <td>0.698007</td>\n",
" <td>0.671555</td>\n",
" <td>0.700982</td>\n",
" <td>0.746797</td>\n",
" <td>0.749128</td>\n",
" <td>0.708973</td>\n",
" <td>0.746751</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>c_index</td>\n",
" <td>0.690391</td>\n",
" <td>0.626409</td>\n",
" <td>0.589263</td>\n",
" <td>0.696218</td>\n",
" <td>0.688368</td>\n",
" <td>0.693160</td>\n",
" <td>0.760881</td>\n",
" <td>0.660076</td>\n",
" <td>0.703450</td>\n",
" <td>0.677189</td>\n",
" <td>0.702931</td>\n",
" <td>0.744362</td>\n",
" <td>0.755680</td>\n",
" <td>0.709648</td>\n",
" <td>0.742564</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>c_index</td>\n",
" <td>0.668751</td>\n",
" <td>0.635003</td>\n",
" <td>0.627711</td>\n",
" <td>0.671152</td>\n",
" <td>0.687855</td>\n",
" <td>0.701360</td>\n",
" <td>0.731493</td>\n",
" <td>0.687901</td>\n",
" <td>0.690491</td>\n",
" <td>0.676949</td>\n",
" <td>0.729386</td>\n",
" <td>0.730354</td>\n",
" <td>0.723863</td>\n",
" <td>0.719733</td>\n",
" <td>0.745682</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>c_index</td>\n",
" <td>0.671193</td>\n",
" <td>0.608000</td>\n",
" <td>0.603053</td>\n",
" <td>0.697055</td>\n",
" <td>0.678924</td>\n",
" <td>0.678217</td>\n",
" <td>0.738403</td>\n",
" <td>0.661799</td>\n",
" <td>0.712107</td>\n",
" <td>0.698718</td>\n",
" <td>0.691363</td>\n",
" <td>0.737642</td>\n",
" <td>0.737483</td>\n",
" <td>0.713351</td>\n",
" <td>0.726051</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>95</th>\n",
" <td>c_index</td>\n",
" <td>0.680817</td>\n",
" <td>0.619918</td>\n",
" <td>0.589981</td>\n",
" <td>0.683733</td>\n",
" <td>0.698637</td>\n",
" <td>0.682220</td>\n",
" <td>0.748170</td>\n",
" <td>0.643427</td>\n",
" <td>0.695090</td>\n",
" <td>0.691974</td>\n",
" <td>0.701519</td>\n",
" <td>0.742775</td>\n",
" <td>0.740572</td>\n",
" <td>0.700029</td>\n",
" <td>0.736994</td>\n",
" </tr>\n",
" <tr>\n",
" <th>96</th>\n",
" <td>c_index</td>\n",
" <td>0.683808</td>\n",
" <td>0.599275</td>\n",
" <td>0.606327</td>\n",
" <td>0.673352</td>\n",
" <td>0.698419</td>\n",
" <td>0.718908</td>\n",
" <td>0.762587</td>\n",
" <td>0.658827</td>\n",
" <td>0.693451</td>\n",
" <td>0.697164</td>\n",
" <td>0.718937</td>\n",
" <td>0.746262</td>\n",
" <td>0.771295</td>\n",
" <td>0.719272</td>\n",
" <td>0.757630</td>\n",
" </tr>\n",
" <tr>\n",
" <th>97</th>\n",
" <td>c_index</td>\n",
" <td>0.681936</td>\n",
" <td>0.622950</td>\n",
" <td>0.632312</td>\n",
" <td>0.691211</td>\n",
" <td>0.702253</td>\n",
" <td>0.713004</td>\n",
" <td>0.764441</td>\n",
" <td>0.703018</td>\n",
" <td>0.711824</td>\n",
" <td>0.705405</td>\n",
" <td>0.736925</td>\n",
" <td>0.752371</td>\n",
" <td>0.759428</td>\n",
" <td>0.742972</td>\n",
" <td>0.767404</td>\n",
" </tr>\n",
" <tr>\n",
" <th>98</th>\n",
" <td>c_index</td>\n",
" <td>0.656847</td>\n",
" <td>0.615154</td>\n",
" <td>0.590876</td>\n",
" <td>0.674011</td>\n",
" <td>0.692707</td>\n",
" <td>0.681858</td>\n",
" <td>0.744600</td>\n",
" <td>0.644136</td>\n",
" <td>0.691802</td>\n",
" <td>0.683360</td>\n",
" <td>0.698968</td>\n",
" <td>0.739034</td>\n",
" <td>0.745125</td>\n",
" <td>0.704566</td>\n",
" <td>0.732215</td>\n",
" </tr>\n",
" <tr>\n",
" <th>99</th>\n",
" <td>c_index</td>\n",
" <td>0.669690</td>\n",
" <td>0.592228</td>\n",
" <td>0.607509</td>\n",
" <td>0.719367</td>\n",
" <td>0.660632</td>\n",
" <td>0.686721</td>\n",
" <td>0.774706</td>\n",
" <td>0.667635</td>\n",
" <td>0.712531</td>\n",
" <td>0.717563</td>\n",
" <td>0.688255</td>\n",
" <td>0.749244</td>\n",
" <td>0.767077</td>\n",
" <td>0.723260</td>\n",
" <td>0.745843</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>100 rows × 16 columns</p>\n",
"</div>"
],
"text/plain": [
" metric C R P RNA C+R C+P \\\n",
"0 c_index 0.659810 0.589693 0.607118 0.693620 0.678043 0.677309 \n",
"1 c_index 0.695589 0.592447 0.597955 0.691800 0.673513 0.683269 \n",
"2 c_index 0.690391 0.626409 0.589263 0.696218 0.688368 0.693160 \n",
"3 c_index 0.668751 0.635003 0.627711 0.671152 0.687855 0.701360 \n",
"4 c_index 0.671193 0.608000 0.603053 0.697055 0.678924 0.678217 \n",
".. ... ... ... ... ... ... ... \n",
"95 c_index 0.680817 0.619918 0.589981 0.683733 0.698637 0.682220 \n",
"96 c_index 0.683808 0.599275 0.606327 0.673352 0.698419 0.718908 \n",
"97 c_index 0.681936 0.622950 0.632312 0.691211 0.702253 0.713004 \n",
"98 c_index 0.656847 0.615154 0.590876 0.674011 0.692707 0.681858 \n",
"99 c_index 0.669690 0.592228 0.607509 0.719367 0.660632 0.686721 \n",
"\n",
" C+RNA R+P R+RNA P+RNA C+R+P C+R+RNA C+P+RNA \\\n",
"0 0.749478 0.655850 0.699615 0.692120 0.692686 0.725447 0.754048 \n",
"1 0.762107 0.649618 0.698007 0.671555 0.700982 0.746797 0.749128 \n",
"2 0.760881 0.660076 0.703450 0.677189 0.702931 0.744362 0.755680 \n",
"3 0.731493 0.687901 0.690491 0.676949 0.729386 0.730354 0.723863 \n",
"4 0.738403 0.661799 0.712107 0.698718 0.691363 0.737642 0.737483 \n",
".. ... ... ... ... ... ... ... \n",
"95 0.748170 0.643427 0.695090 0.691974 0.701519 0.742775 0.740572 \n",
"96 0.762587 0.658827 0.693451 0.697164 0.718937 0.746262 0.771295 \n",
"97 0.764441 0.703018 0.711824 0.705405 0.736925 0.752371 0.759428 \n",
"98 0.744600 0.644136 0.691802 0.683360 0.698968 0.739034 0.745125 \n",
"99 0.774706 0.667635 0.712531 0.717563 0.688255 0.749244 0.767077 \n",
"\n",
" R+P+RNA C+R+P+RNA \n",
"0 0.708004 0.735309 \n",
"1 0.708973 0.746751 \n",
"2 0.709648 0.742564 \n",
"3 0.719733 0.745682 \n",
"4 0.713351 0.726051 \n",
".. ... ... \n",
"95 0.700029 0.736994 \n",
"96 0.719272 0.757630 \n",
"97 0.742972 0.767404 \n",
"98 0.704566 0.732215 \n",
"99 0.723260 0.745843 \n",
"\n",
"[100 rows x 16 columns]"
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data_train = Surv.from_arrays(event=df[df[\"repeat\"] == 0][\"label.event\"].values,\n",
" time=df[df[\"repeat\"] == 0][\"label.time\"].values)\n",
"\n",
"results = compute_cindex(df.set_index(\"samples\").loc[list(set(list(all_patients)) & set(df[\"samples\"].unique()))],\n",
" names=list(df.columns[2:-3].values),\n",
" data_train = data_train)\n",
"\n",
"new_cols = {}\n",
"for col in results.columns.values[1:]:\n",
" l = col.split(\"+\")\n",
" new = []\n",
" for item in l:\n",
" if item == 'radiomics':\n",
" new.append('R')\n",
" if item == 'RNA':\n",
" new.append('RNA')\n",
" if item == 'pathomics':\n",
" new.append(\"P\")\n",
" if item == 'clinicals':\n",
" new.append(\"C\")\n",
" new_cols[col] = \"+\".join(new)\n",
"\n",
"results = results.rename(columns = new_cols)\n",
"results"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "7eec41cc-fc6d-4594-9f5f-de9ad3e7b2f5",
"metadata": {
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
"<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>C</th>\n",
" <th>R</th>\n",
" <th>P</th>\n",
" <th>RNA</th>\n",
" <th>C+R</th>\n",
" <th>C+P</th>\n",
" <th>C+RNA</th>\n",
" <th>R+P</th>\n",
" <th>R+RNA</th>\n",
" <th>P+RNA</th>\n",
" <th>C+R+P</th>\n",
" <th>C+R+RNA</th>\n",
" <th>C+P+RNA</th>\n",
" <th>R+P+RNA</th>\n",
" <th>C+R+P+RNA</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>0.673992</td>\n",
" <td>0.607245</td>\n",
" <td>0.588779</td>\n",
" <td>0.687014</td>\n",
" <td>0.687408</td>\n",
" <td>0.678410</td>\n",
" <td>0.747706</td>\n",
" <td>0.654439</td>\n",
" <td>0.700253</td>\n",
" <td>0.676774</td>\n",
" <td>0.701327</td>\n",
" <td>0.738519</td>\n",
" <td>0.736374</td>\n",
" <td>0.704616</td>\n",
" <td>0.737414</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>0.013987</td>\n",
" <td>0.018348</td>\n",
" <td>0.021441</td>\n",
" <td>0.017007</td>\n",
" <td>0.013717</td>\n",
" <td>0.018287</td>\n",
" <td>0.013546</td>\n",
" <td>0.018074</td>\n",
" <td>0.014133</td>\n",
" <td>0.018073</td>\n",
" <td>0.014694</td>\n",
" <td>0.011929</td>\n",
" <td>0.015782</td>\n",
" <td>0.014752</td>\n",
" <td>0.012897</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" C R P RNA C+R C+P C+RNA \\\n",
"mean 0.673992 0.607245 0.588779 0.687014 0.687408 0.678410 0.747706 \n",
"std 0.013987 0.018348 0.021441 0.017007 0.013717 0.018287 0.013546 \n",
"\n",
" R+P R+RNA P+RNA C+R+P C+R+RNA C+P+RNA R+P+RNA \\\n",
"mean 0.654439 0.700253 0.676774 0.701327 0.738519 0.736374 0.704616 \n",
"std 0.018074 0.014133 0.018073 0.014694 0.011929 0.015782 0.014752 \n",
"\n",
" C+R+P+RNA \n",
"mean 0.737414 \n",
"std 0.012897 "
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"results[results[\"metric\"]==\"c_index\"].drop(columns = 'metric').apply(['mean', 'std'])"
]
},
{
"cell_type": "markdown",
"id": "2580809a-3e05-4bd7-994a-ce32bb9eb082",
"metadata": {},
"source": [
"### 2.4 Plot results"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "a7129cee-66eb-4e0a-bb7c-22b101aeebfd",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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YAYzAAAAAAB96bnBXEo5pZTyH6WUH5RSbiylvHIT246UUupGfnbqbjNnI7f/fBNPDAAAAGAmGxkZSSmlsZ+RkZG2nxIwBfW0REYpZX6STyc5Jcnfdf/9ainlJbXWO8e5yxlJPjfmuguS1Frr/WOu3zvJw6MuP9BLTAAAAABs3MjISE9N4VJKaq2DDwgYSr2uwfzuJMtqred0L7+rlPLaJCcnOXXsxrXW7yf5/obLpZTnJ3llkjeNs+/7a60PblbUALARe+65Z9shAAADpt4DNEM+pQkTLpFRStkmyf5Jrhpz01VJDurxcd6a5HtJLh7ntjWllPtKKStKKa/qcX8AMK6lS5dm6dKlbYcBAAyQej+8LOkAW9ZUyKc+99NfLzOYd0zyjCTfGXP9d5IcOtGdSylbJXlLki/WWn846qb70pkBfUOSbdKZ3byilDKn1nrtOPtZnGRxkuy8885PvvkPPPDAPPe5z83ll1+eJNl1113zmte8Jueee26SZJtttsnChQtzySWX5P77O6tzzJs3L7fffntuvvnmJMlBBx2U7bffPldeeWWSZPfdd88hhxySZcuWJUm22267LFiwIBdddFEefrizmsf8+fNzyy235NZbb02SzJ49O1tvvXVWrFiRpPMXoJe+9KU5//zzkyQ77LBDTjjhhFxwwQV55JFHkiQnnnhibrjhhtx2221Jkrlz5+bxxx/PqlWrkiR777139tlnn1x44YVJkmc/+9k5/vjjs3z58qxbty5JsnDhwlx77bW54447kiSHH354Hn300axevTpJsu+++2aPPfbIxRd3evs77bRTjjvuuCxbtizr169PkixatChXXXVV7ryzs9rJUUcdlQceeCDXX399kmT//ffPLrvskq985StJklmzZuXoo4/OueeemyeeeCJbbbVVFi1alMsuuyz33ntvkuTYY4/N3XffnRtvvNHr5HXyOnmdvE5eJ6/TNH6dkjx53OV1mrqvk8+T18nr5HUaltdp1qxZ+eEPfzjh6/Tyl788n//853t6nZYuXep1muB1SpK1a9f6PE3x12lY896sWbPyj//4jxO+Tr/xG7+Rv/zLv+zpdVq6dKnXaQCfp8WLF2c8ZaI1dkops5Lck+SQWuvfjrr+w0neUGvd5En5SilHJ7k0yT611lsn2PaKJI/XWl+3qe0OOOCAumbNmk3GDcDMtKHg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XXfNa17zmpx77rlJkm222SYLFy7MJZdckvvv7/S2582bl9tvvz0333xzkuSggw7K9ttvnyuvvLIT/O6755BDDsmyZcuSJNttt10WLFiQiy66KA8//HCSZP78+bnlllty6623Jklmz56drbfeOitWrEiS7LnnnnnpS1+a888/P0myww475IQTTsgFF1yQRx55JEly4okn5oYbbshtt92WJJk7d24ef/zxrFq1Kkmy9957Z5999smFF16YJHn2s5+9keGeudavXz/p1ynb7t5K7FPVPffcMzSfpyRP5orxPk/HH398li9fnnXr1iVJFi5cmGuvvTZ33HFHkuTwww/Po48+mtWrVydJ9t133+yxxx65+OLOlyx22mmnHHfccVm2bFnWr1+fJFm0aFGuuuqq3HlnZ/Wgo446Kg888ECuv/76JMn++++fXXbZJV/5yleSJLNmzcrRRx+dc889N0888US22mqrLFq0KJdddlnuvffeJMmve4s+xfr16zf5Oj3yyCPZdtttn3ztx3udeLpJ16cXtxP3VNVEfSqtRD51NVGfdmsn9CnpnnvumXR9GrX6HZm4PvVyHLH3Li9rJ/gpbGP16b777sszn/nMrF271u9Pm6GR3594isnWp1dmj3YCn6KaqE+v/7mNzYWcmfz+NBiT/f1puvQjjj322Nx999258cYbkySLFy8edzxKrXWTA1ZKmZXkniSHjD6pXynlw0neUGv9+XHuszTJ25LsVWu9rXvdnknWJnl5rfUbpZTbkpxXaz191P1mJ1mZ5Hm11m9vLKYDDjigrlmzZpNxD6v93/fFtkOYUm78ozdPeh9XfGNjy4hvWUe9fLdc/vf/2XYYOfJlu7YdQmNKKZkox00H3736k22HMKU869D3b/L2OXPmJElWrly50W0O/tODG4xo+rvuXddNeh/Lbj27gUiGx8K9T5n0PlYdMruBSIbH7GtXTXofj35peQORDIft37hg0vv4zHsubSCS4fHOM4+Z9D6uu+LmBiIZHgcfue9Gb+ul3ifJxxYc32BE098Hl1806X1c84VzJt5oBnnVSW+b1P2/+bG/aSiS4fDiD7560vv43jW3NBDJ8Hjmq/bZ5O295NORkZHmAhoCM3w8xp0Hs1UPd3wwyY/TmXE82k55+qzmDe5L8viG5nLXvyV5PMmG7tW3N7LPx5M81ENcAAAAAAC0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dGZA35BkmyRvSrKilDKn1nrt2B2WUhYnWZwkO++8c5YuXZokOfDAA/Pc5z43l19+eZJk1113zWte85qce+65SZJtttkmCxcuzCWXXJL7778/STJv3rzcfvvtufnmzuodBx10ULbffvtceeWVSZLdd989hxxySJYtW5Yk2W677bJgwYJcdNFFefjhzmoe8+fPzy233JJbb701STJ79uxsvfXWWbFiRZJkzz33zEtf+tKcf/75SZIddtghJ5xwQi644II88sgjSZITTzwxN9xwQ2677bYkydy5c/P4449n1apVSZK99947++yzTy688MIkybOf/eyNDPfMtX79+km/Ttl291Zin6ruueeeSX+edmgn9CnpnnvuyQMPPJDrr78+SbL//vtnl112yVe+8pUkyaxZs3L00Ufn3HPPzRNPPJGtttoqixYtymWXXZZ77703SfLr3qJPsX79+lx77bW54447kiSHH354Hn300axevTpJsttuu+VZz3rWk3Vip512ynHHHZdly5Zl/fr1rcU91U26Pr24nbinqibqU2kl8qmrifq0WzuhT0lN1KfkeS1FPzVNVJ/23Xff7LHHHrn44ouTjF+f9t7lZe0EP4VtrD5tu+222W233bJ27Vq/P22GRn5/4ikmW59emT3aCXyKaqI+vf7nJpoLObP4/WkwJvv70/HHH5/ly5dn3bp1SZKFCxdO+jhi0aJFueqqq3LnnZ3VjI866qhJf56OPfbY3H333bnxxhuTJIsXLx53PEqtdZMDVkqZleSeJIfUWv921PUfTvKGWmtPJ+UrpZyd5Fdqrb+4iW2uSPJ4rfV1m9rXAQccUNesWdPLww6d/d/3xbZDmFJu/KM3T3ofV3xjU8uIzzxHvmzXSe/jzt//hQYiGQ67/t4/T3of3736kw1EMjyedej7J72Pg//04AYiGR7Xveu6Se9j2a1nNxDJ8Fi49ymT3seqQ2Y3EMnwmH3tqknv49EvLZ94oxli+zdO/mzxn3nPpQ1EMjzeeeYxk97HdVfcPPFGM8jBR+476X18bMHGvkg7M31w+UWT3sc1Xzhn4o1mkFed9LZJ3f+bH/ubhiIZDi/+4KsnvY/vXXNLA5EMj2e+ap9J72NkZGTygQyRGT4e486DmXCJjCQPJvlxkp3HXL9Tnj6reVO+keTnGtgGAAAAAIApYMIGc611fZIbkxw2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\n",
"text/plain": [
"<Figure size 1440x504 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig = plot_metrics(results,\n",
" metrics='c_index',\n",
" models = list(results.columns[1:]),\n",
" annotations = {\"1 modality\": (0, 3), \"2 modalities\": (4, 9), \"3 modalities\": (10, 13), \"4 modalities\": (14, 15)},\n",
" title=None, ylim=(0.5, 0.77), y_text=0.77,\n",
" ax=None)"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python [conda env:latefus_env]",
"language": "python",
"name": "conda-env-latefus_env-py"
},
"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.8.13"
}
},
"nbformat": 4,
"nbformat_minor": 5
}