|
a |
|
b/notebooks/plot_results.ipynb |
|
|
1 |
{ |
|
|
2 |
"cells": [ |
|
|
3 |
{ |
|
|
4 |
"cell_type": "markdown", |
|
|
5 |
"id": "c98d33c4-b587-4f7c-baa6-36668659ce92", |
|
|
6 |
"metadata": {}, |
|
|
7 |
"source": [ |
|
|
8 |
"# Plot the results\n", |
|
|
9 |
"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." |
|
|
10 |
] |
|
|
11 |
}, |
|
|
12 |
{ |
|
|
13 |
"cell_type": "code", |
|
|
14 |
"execution_count": null, |
|
|
15 |
"id": "744f80a9-46a3-4bf3-b25a-05dd9396cd16", |
|
|
16 |
"metadata": {}, |
|
|
17 |
"outputs": [], |
|
|
18 |
"source": [ |
|
|
19 |
"%load_ext autoreload\n", |
|
|
20 |
"%autoreload 2\n", |
|
|
21 |
"\n", |
|
|
22 |
"import pandas as pd \n", |
|
|
23 |
"\n", |
|
|
24 |
"# Setup for local running - please delete this block\n", |
|
|
25 |
"import sys\n", |
|
|
26 |
"sys.path.append('C:\\\\Users\\\\ncaptier\\\\Documents\\\\GitHub\\\\multipit\\\\')\n", |
|
|
27 |
"\n", |
|
|
28 |
"from multipit.result_analysis.compute_metrics import compute_all_classif, compute_cindex\n", |
|
|
29 |
"from multipit.result_analysis.plot import plot_metrics" |
|
|
30 |
] |
|
|
31 |
}, |
|
|
32 |
{ |
|
|
33 |
"cell_type": "markdown", |
|
|
34 |
"id": "acb4ffa1-a1a8-4adf-bd60-e3ac8c92e551", |
|
|
35 |
"metadata": { |
|
|
36 |
"tags": [] |
|
|
37 |
}, |
|
|
38 |
"source": [ |
|
|
39 |
"## 1. Display classification results" |
|
|
40 |
] |
|
|
41 |
}, |
|
|
42 |
{ |
|
|
43 |
"cell_type": "markdown", |
|
|
44 |
"id": "db87e0ec-1f7a-4230-8439-10c1c53b4658", |
|
|
45 |
"metadata": { |
|
|
46 |
"tags": [] |
|
|
47 |
}, |
|
|
48 |
"source": [ |
|
|
49 |
"### 1.1. Load results" |
|
|
50 |
] |
|
|
51 |
}, |
|
|
52 |
{ |
|
|
53 |
"cell_type": "code", |
|
|
54 |
"execution_count": 4, |
|
|
55 |
"id": "a62249d2-53d5-4a6e-875d-5bb14378bd65", |
|
|
56 |
"metadata": { |
|
|
57 |
"tags": [] |
|
|
58 |
}, |
|
|
59 |
"outputs": [ |
|
|
60 |
{ |
|
|
61 |
"data": { |
|
|
62 |
"text/html": [ |
|
|
63 |
"<div>\n", |
|
|
64 |
"<style scoped>\n", |
|
|
65 |
" .dataframe tbody tr th:only-of-type {\n", |
|
|
66 |
" vertical-align: middle;\n", |
|
|
67 |
" }\n", |
|
|
68 |
"\n", |
|
|
69 |
" .dataframe tbody tr th {\n", |
|
|
70 |
" vertical-align: top;\n", |
|
|
71 |
" }\n", |
|
|
72 |
"\n", |
|
|
73 |
" .dataframe thead th {\n", |
|
|
74 |
" text-align: right;\n", |
|
|
75 |
" }\n", |
|
|
76 |
"</style>\n", |
|
|
77 |
"<table border=\"1\" class=\"dataframe\">\n", |
|
|
78 |
" <thead>\n", |
|
|
79 |
" <tr style=\"text-align: right;\">\n", |
|
|
80 |
" <th></th>\n", |
|
|
81 |
" <th>repeat</th>\n", |
|
|
82 |
" <th>clinicals</th>\n", |
|
|
83 |
" <th>radiomics</th>\n", |
|
|
84 |
" <th>pathomics</th>\n", |
|
|
85 |
" <th>RNA</th>\n", |
|
|
86 |
" <th>clinicals+radiomics</th>\n", |
|
|
87 |
" <th>clinicals+pathomics</th>\n", |
|
|
88 |
" <th>clinicals+RNA</th>\n", |
|
|
89 |
" <th>radiomics+pathomics</th>\n", |
|
|
90 |
" <th>radiomics+RNA</th>\n", |
|
|
91 |
" <th>pathomics+RNA</th>\n", |
|
|
92 |
" <th>clinicals+radiomics+pathomics</th>\n", |
|
|
93 |
" <th>clinicals+radiomics+RNA</th>\n", |
|
|
94 |
" <th>clinicals+pathomics+RNA</th>\n", |
|
|
95 |
" <th>radiomics+pathomics+RNA</th>\n", |
|
|
96 |
" <th>clinicals+radiomics+pathomics+RNA</th>\n", |
|
|
97 |
" <th>fold_index</th>\n", |
|
|
98 |
" <th>label</th>\n", |
|
|
99 |
" </tr>\n", |
|
|
100 |
" </thead>\n", |
|
|
101 |
" <tbody>\n", |
|
|
102 |
" <tr>\n", |
|
|
103 |
" <th>0</th>\n", |
|
|
104 |
" <td>0.0</td>\n", |
|
|
105 |
" <td>0.589144</td>\n", |
|
|
106 |
" <td>0.500000</td>\n", |
|
|
107 |
" <td>0.514520</td>\n", |
|
|
108 |
" <td>0.500000</td>\n", |
|
|
109 |
" <td>0.638059</td>\n", |
|
|
110 |
" <td>0.584721</td>\n", |
|
|
111 |
" <td>0.622264</td>\n", |
|
|
112 |
" <td>0.553983</td>\n", |
|
|
113 |
" <td>0.500000</td>\n", |
|
|
114 |
" <td>0.535485</td>\n", |
|
|
115 |
" <td>0.621743</td>\n", |
|
|
116 |
" <td>0.658860</td>\n", |
|
|
117 |
" <td>0.609943</td>\n", |
|
|
118 |
" <td>0.564178</td>\n", |
|
|
119 |
" <td>0.635850</td>\n", |
|
|
120 |
" <td>0.0</td>\n", |
|
|
121 |
" <td>1.0</td>\n", |
|
|
122 |
" </tr>\n", |
|
|
123 |
" <tr>\n", |
|
|
124 |
" <th>1</th>\n", |
|
|
125 |
" <td>0.0</td>\n", |
|
|
126 |
" <td>0.559329</td>\n", |
|
|
127 |
" <td>0.508867</td>\n", |
|
|
128 |
" <td>0.608853</td>\n", |
|
|
129 |
" <td>0.327443</td>\n", |
|
|
130 |
" <td>0.542935</td>\n", |
|
|
131 |
" <td>0.624402</td>\n", |
|
|
132 |
" <td>0.520234</td>\n", |
|
|
133 |
" <td>0.577555</td>\n", |
|
|
134 |
" <td>0.450075</td>\n", |
|
|
135 |
" <td>0.527213</td>\n", |
|
|
136 |
" <td>0.601154</td>\n", |
|
|
137 |
" <td>0.520136</td>\n", |
|
|
138 |
" <td>0.588865</td>\n", |
|
|
139 |
" <td>0.526563</td>\n", |
|
|
140 |
" <td>0.576787</td>\n", |
|
|
141 |
" <td>5.0</td>\n", |
|
|
142 |
" <td>0.0</td>\n", |
|
|
143 |
" </tr>\n", |
|
|
144 |
" <tr>\n", |
|
|
145 |
" <th>2</th>\n", |
|
|
146 |
" <td>0.0</td>\n", |
|
|
147 |
" <td>0.441417</td>\n", |
|
|
148 |
" <td>0.535063</td>\n", |
|
|
149 |
" <td>0.491944</td>\n", |
|
|
150 |
" <td>0.414336</td>\n", |
|
|
151 |
" <td>0.482720</td>\n", |
|
|
152 |
" <td>0.445954</td>\n", |
|
|
153 |
" <td>0.413705</td>\n", |
|
|
154 |
" <td>0.521704</td>\n", |
|
|
155 |
" <td>0.491417</td>\n", |
|
|
156 |
" <td>0.455992</td>\n", |
|
|
157 |
" <td>0.480305</td>\n", |
|
|
158 |
" <td>0.450507</td>\n", |
|
|
159 |
" <td>0.413282</td>\n", |
|
|
160 |
" <td>0.487469</td>\n", |
|
|
161 |
" <td>0.448577</td>\n", |
|
|
162 |
" <td>8.0</td>\n", |
|
|
163 |
" <td>0.0</td>\n", |
|
|
164 |
" </tr>\n", |
|
|
165 |
" <tr>\n", |
|
|
166 |
" <th>3</th>\n", |
|
|
167 |
" <td>0.0</td>\n", |
|
|
168 |
" <td>0.464910</td>\n", |
|
|
169 |
" <td>0.509158</td>\n", |
|
|
170 |
" <td>0.462009</td>\n", |
|
|
171 |
" <td>0.500000</td>\n", |
|
|
172 |
" <td>0.482017</td>\n", |
|
|
173 |
" <td>0.441719</td>\n", |
|
|
174 |
" <td>0.445623</td>\n", |
|
|
175 |
" <td>0.480589</td>\n", |
|
|
176 |
" <td>0.515133</td>\n", |
|
|
177 |
" <td>0.446343</td>\n", |
|
|
178 |
" <td>0.461174</td>\n", |
|
|
179 |
" <td>0.476427</td>\n", |
|
|
180 |
" <td>0.420133</td>\n", |
|
|
181 |
" <td>0.474244</td>\n", |
|
|
182 |
" <td>0.450640</td>\n", |
|
|
183 |
" <td>3.0</td>\n", |
|
|
184 |
" <td>1.0</td>\n", |
|
|
185 |
" </tr>\n", |
|
|
186 |
" <tr>\n", |
|
|
187 |
" <th>4</th>\n", |
|
|
188 |
" <td>0.0</td>\n", |
|
|
189 |
" <td>0.577890</td>\n", |
|
|
190 |
" <td>0.560151</td>\n", |
|
|
191 |
" <td>0.482865</td>\n", |
|
|
192 |
" <td>0.500000</td>\n", |
|
|
193 |
" <td>0.586602</td>\n", |
|
|
194 |
" <td>0.578041</td>\n", |
|
|
195 |
" <td>0.682947</td>\n", |
|
|
196 |
" <td>0.557210</td>\n", |
|
|
197 |
" <td>0.646759</td>\n", |
|
|
198 |
" <td>0.464876</td>\n", |
|
|
199 |
" <td>0.603863</td>\n", |
|
|
200 |
" <td>0.670777</td>\n", |
|
|
201 |
" <td>0.624255</td>\n", |
|
|
202 |
" <td>0.578321</td>\n", |
|
|
203 |
" <td>0.652808</td>\n", |
|
|
204 |
" <td>5.0</td>\n", |
|
|
205 |
" <td>1.0</td>\n", |
|
|
206 |
" </tr>\n", |
|
|
207 |
" </tbody>\n", |
|
|
208 |
"</table>\n", |
|
|
209 |
"</div>" |
|
|
210 |
], |
|
|
211 |
"text/plain": [ |
|
|
212 |
" repeat clinicals radiomics pathomics RNA clinicals+radiomics \\\n", |
|
|
213 |
"0 0.0 0.589144 0.500000 0.514520 0.500000 0.638059 \n", |
|
|
214 |
"1 0.0 0.559329 0.508867 0.608853 0.327443 0.542935 \n", |
|
|
215 |
"2 0.0 0.441417 0.535063 0.491944 0.414336 0.482720 \n", |
|
|
216 |
"3 0.0 0.464910 0.509158 0.462009 0.500000 0.482017 \n", |
|
|
217 |
"4 0.0 0.577890 0.560151 0.482865 0.500000 0.586602 \n", |
|
|
218 |
"\n", |
|
|
219 |
" clinicals+pathomics clinicals+RNA radiomics+pathomics radiomics+RNA \\\n", |
|
|
220 |
"0 0.584721 0.622264 0.553983 0.500000 \n", |
|
|
221 |
"1 0.624402 0.520234 0.577555 0.450075 \n", |
|
|
222 |
"2 0.445954 0.413705 0.521704 0.491417 \n", |
|
|
223 |
"3 0.441719 0.445623 0.480589 0.515133 \n", |
|
|
224 |
"4 0.578041 0.682947 0.557210 0.646759 \n", |
|
|
225 |
"\n", |
|
|
226 |
" pathomics+RNA clinicals+radiomics+pathomics clinicals+radiomics+RNA \\\n", |
|
|
227 |
"0 0.535485 0.621743 0.658860 \n", |
|
|
228 |
"1 0.527213 0.601154 0.520136 \n", |
|
|
229 |
"2 0.455992 0.480305 0.450507 \n", |
|
|
230 |
"3 0.446343 0.461174 0.476427 \n", |
|
|
231 |
"4 0.464876 0.603863 0.670777 \n", |
|
|
232 |
"\n", |
|
|
233 |
" clinicals+pathomics+RNA radiomics+pathomics+RNA \\\n", |
|
|
234 |
"0 0.609943 0.564178 \n", |
|
|
235 |
"1 0.588865 0.526563 \n", |
|
|
236 |
"2 0.413282 0.487469 \n", |
|
|
237 |
"3 0.420133 0.474244 \n", |
|
|
238 |
"4 0.624255 0.578321 \n", |
|
|
239 |
"\n", |
|
|
240 |
" clinicals+radiomics+pathomics+RNA fold_index label \n", |
|
|
241 |
"0 0.635850 0.0 1.0 \n", |
|
|
242 |
"1 0.576787 5.0 0.0 \n", |
|
|
243 |
"2 0.448577 8.0 0.0 \n", |
|
|
244 |
"3 0.450640 3.0 1.0 \n", |
|
|
245 |
"4 0.652808 5.0 1.0 " |
|
|
246 |
] |
|
|
247 |
}, |
|
|
248 |
"execution_count": 4, |
|
|
249 |
"metadata": {}, |
|
|
250 |
"output_type": "execute_result" |
|
|
251 |
} |
|
|
252 |
], |
|
|
253 |
"source": [ |
|
|
254 |
"main_directory = \"classification\\\\xgboost_perm_100cv_OS_2209_nolivernorm\\\\\"\n", |
|
|
255 |
"df = pd.read_csv(main_directory + \"predictions.csv\").rename(columns = {\"Unnamed: 0\": \"samples\"}).drop(columns = [\"dummy\"])\n", |
|
|
256 |
"df.drop(columns=\"samples\").head()" |
|
|
257 |
] |
|
|
258 |
}, |
|
|
259 |
{ |
|
|
260 |
"cell_type": "markdown", |
|
|
261 |
"id": "e6fd086f-8640-4975-9cc0-50fabfdd262a", |
|
|
262 |
"metadata": {}, |
|
|
263 |
"source": [ |
|
|
264 |
"### 1.2 Load data" |
|
|
265 |
] |
|
|
266 |
}, |
|
|
267 |
{ |
|
|
268 |
"cell_type": "code", |
|
|
269 |
"execution_count": 7, |
|
|
270 |
"id": "c0df21b5-6e02-4e87-8bba-077d72fc0ed7", |
|
|
271 |
"metadata": {}, |
|
|
272 |
"outputs": [], |
|
|
273 |
"source": [ |
|
|
274 |
"df_clinicals = pd.read_csv(\"clinicals.csv\", index_col = 0, sep=\";\")\n", |
|
|
275 |
"bool_mask = (df_clinicals['OS'].isnull()) | ((df_clinicals['OS'] <= 365) & (df_clinicals['Statut Vital'] == \"Vivant\"))\n", |
|
|
276 |
"df_clinicals = df_clinicals[~bool_mask]\n", |
|
|
277 |
"patient_clinicals = df_clinicals.index\n", |
|
|
278 |
"\n", |
|
|
279 |
"df_omics = pd.read_csv(\"omics.csv\", sep=\";\", index_col=0)\n", |
|
|
280 |
"patient_omics = df_omics.index\n", |
|
|
281 |
"\n", |
|
|
282 |
"df_radiomics = pd.read_csv(\"radiomics.csv\", index_col=0, sep=\";\")\n", |
|
|
283 |
"patient_radiomics = df_radiomics.index\n", |
|
|
284 |
"\n", |
|
|
285 |
"df_pathomics = pd.read_csv(\"pathomics.csv\", index_col=0, sep=\";\")\n", |
|
|
286 |
"patient_pathomics = df_pathomics.index\n", |
|
|
287 |
"\n", |
|
|
288 |
"all_patients = set(patient_radiomics) & set(patient_pathomics) & set(patient_clinicals) & set(patient_omics)" |
|
|
289 |
] |
|
|
290 |
}, |
|
|
291 |
{ |
|
|
292 |
"cell_type": "code", |
|
|
293 |
"execution_count": 8, |
|
|
294 |
"id": "46a2e218-ac65-41f5-9796-aa2abd96381a", |
|
|
295 |
"metadata": {}, |
|
|
296 |
"outputs": [ |
|
|
297 |
{ |
|
|
298 |
"name": "stdout", |
|
|
299 |
"output_type": "stream", |
|
|
300 |
"text": [ |
|
|
301 |
"Number of patients with all modas available: 77\n" |
|
|
302 |
] |
|
|
303 |
} |
|
|
304 |
], |
|
|
305 |
"source": [ |
|
|
306 |
"print(\"Number of patients with all modas available: \", len(all_patients))" |
|
|
307 |
] |
|
|
308 |
}, |
|
|
309 |
{ |
|
|
310 |
"cell_type": "markdown", |
|
|
311 |
"id": "d09d5ebd-0fe3-4fa4-a1cf-0bbac89e1bb0", |
|
|
312 |
"metadata": { |
|
|
313 |
"tags": [] |
|
|
314 |
}, |
|
|
315 |
"source": [ |
|
|
316 |
"### 1.3 Compute classification metrics" |
|
|
317 |
] |
|
|
318 |
}, |
|
|
319 |
{ |
|
|
320 |
"cell_type": "code", |
|
|
321 |
"execution_count": 9, |
|
|
322 |
"id": "1b368b3d-6606-449b-8f07-e0b6d33c1920", |
|
|
323 |
"metadata": { |
|
|
324 |
"tags": [] |
|
|
325 |
}, |
|
|
326 |
"outputs": [ |
|
|
327 |
{ |
|
|
328 |
"data": { |
|
|
329 |
"text/html": [ |
|
|
330 |
"<div>\n", |
|
|
331 |
"<style scoped>\n", |
|
|
332 |
" .dataframe tbody tr th:only-of-type {\n", |
|
|
333 |
" vertical-align: middle;\n", |
|
|
334 |
" }\n", |
|
|
335 |
"\n", |
|
|
336 |
" .dataframe tbody tr th {\n", |
|
|
337 |
" vertical-align: top;\n", |
|
|
338 |
" }\n", |
|
|
339 |
"\n", |
|
|
340 |
" .dataframe thead th {\n", |
|
|
341 |
" text-align: right;\n", |
|
|
342 |
" }\n", |
|
|
343 |
"</style>\n", |
|
|
344 |
"<table border=\"1\" class=\"dataframe\">\n", |
|
|
345 |
" <thead>\n", |
|
|
346 |
" <tr style=\"text-align: right;\">\n", |
|
|
347 |
" <th></th>\n", |
|
|
348 |
" <th>metric</th>\n", |
|
|
349 |
" <th>C</th>\n", |
|
|
350 |
" <th>R</th>\n", |
|
|
351 |
" <th>P</th>\n", |
|
|
352 |
" <th>RNA</th>\n", |
|
|
353 |
" <th>C+R</th>\n", |
|
|
354 |
" <th>C+P</th>\n", |
|
|
355 |
" <th>C+RNA</th>\n", |
|
|
356 |
" <th>R+P</th>\n", |
|
|
357 |
" <th>R+RNA</th>\n", |
|
|
358 |
" <th>P+RNA</th>\n", |
|
|
359 |
" <th>C+R+P</th>\n", |
|
|
360 |
" <th>C+R+RNA</th>\n", |
|
|
361 |
" <th>C+P+RNA</th>\n", |
|
|
362 |
" <th>R+P+RNA</th>\n", |
|
|
363 |
" <th>C+R+P+RNA</th>\n", |
|
|
364 |
" </tr>\n", |
|
|
365 |
" </thead>\n", |
|
|
366 |
" <tbody>\n", |
|
|
367 |
" <tr>\n", |
|
|
368 |
" <th>0</th>\n", |
|
|
369 |
" <td>sensitivity</td>\n", |
|
|
370 |
" <td>0.368421</td>\n", |
|
|
371 |
" <td>0.421053</td>\n", |
|
|
372 |
" <td>0.473684</td>\n", |
|
|
373 |
" <td>0.684211</td>\n", |
|
|
374 |
" <td>0.473684</td>\n", |
|
|
375 |
" <td>0.578947</td>\n", |
|
|
376 |
" <td>0.526316</td>\n", |
|
|
377 |
" <td>0.526316</td>\n", |
|
|
378 |
" <td>0.684211</td>\n", |
|
|
379 |
" <td>0.578947</td>\n", |
|
|
380 |
" <td>0.526316</td>\n", |
|
|
381 |
" <td>0.578947</td>\n", |
|
|
382 |
" <td>0.578947</td>\n", |
|
|
383 |
" <td>0.631579</td>\n", |
|
|
384 |
" <td>0.578947</td>\n", |
|
|
385 |
" </tr>\n", |
|
|
386 |
" <tr>\n", |
|
|
387 |
" <th>1</th>\n", |
|
|
388 |
" <td>specificity</td>\n", |
|
|
389 |
" <td>0.672414</td>\n", |
|
|
390 |
" <td>0.706897</td>\n", |
|
|
391 |
" <td>0.689655</td>\n", |
|
|
392 |
" <td>0.896552</td>\n", |
|
|
393 |
" <td>0.620690</td>\n", |
|
|
394 |
" <td>0.620690</td>\n", |
|
|
395 |
" <td>0.741379</td>\n", |
|
|
396 |
" <td>0.689655</td>\n", |
|
|
397 |
" <td>0.741379</td>\n", |
|
|
398 |
" <td>0.827586</td>\n", |
|
|
399 |
" <td>0.672414</td>\n", |
|
|
400 |
" <td>0.793103</td>\n", |
|
|
401 |
" <td>0.741379</td>\n", |
|
|
402 |
" <td>0.793103</td>\n", |
|
|
403 |
" <td>0.793103</td>\n", |
|
|
404 |
" </tr>\n", |
|
|
405 |
" <tr>\n", |
|
|
406 |
" <th>2</th>\n", |
|
|
407 |
" <td>f1_score</td>\n", |
|
|
408 |
" <td>0.311111</td>\n", |
|
|
409 |
" <td>0.363636</td>\n", |
|
|
410 |
" <td>0.391304</td>\n", |
|
|
411 |
" <td>0.684211</td>\n", |
|
|
412 |
" <td>0.360000</td>\n", |
|
|
413 |
" <td>0.423077</td>\n", |
|
|
414 |
" <td>0.454545</td>\n", |
|
|
415 |
" <td>0.425532</td>\n", |
|
|
416 |
" <td>0.553191</td>\n", |
|
|
417 |
" <td>0.550000</td>\n", |
|
|
418 |
" <td>0.416667</td>\n", |
|
|
419 |
" <td>0.523810</td>\n", |
|
|
420 |
" <td>0.488889</td>\n", |
|
|
421 |
" <td>0.558140</td>\n", |
|
|
422 |
" <td>0.523810</td>\n", |
|
|
423 |
" </tr>\n", |
|
|
424 |
" <tr>\n", |
|
|
425 |
" <th>3</th>\n", |
|
|
426 |
" <td>balanced_accuracy</td>\n", |
|
|
427 |
" <td>0.520417</td>\n", |
|
|
428 |
" <td>0.563975</td>\n", |
|
|
429 |
" <td>0.581670</td>\n", |
|
|
430 |
" <td>0.790381</td>\n", |
|
|
431 |
" <td>0.547187</td>\n", |
|
|
432 |
" <td>0.599819</td>\n", |
|
|
433 |
" <td>0.633848</td>\n", |
|
|
434 |
" <td>0.607985</td>\n", |
|
|
435 |
" <td>0.712795</td>\n", |
|
|
436 |
" <td>0.703267</td>\n", |
|
|
437 |
" <td>0.599365</td>\n", |
|
|
438 |
" <td>0.686025</td>\n", |
|
|
439 |
" <td>0.660163</td>\n", |
|
|
440 |
" <td>0.712341</td>\n", |
|
|
441 |
" <td>0.686025</td>\n", |
|
|
442 |
" </tr>\n", |
|
|
443 |
" <tr>\n", |
|
|
444 |
" <th>4</th>\n", |
|
|
445 |
" <td>mathews_coef</td>\n", |
|
|
446 |
" <td>0.037226</td>\n", |
|
|
447 |
" <td>0.117803</td>\n", |
|
|
448 |
" <td>0.147576</td>\n", |
|
|
449 |
" <td>0.580762</td>\n", |
|
|
450 |
" <td>0.082963</td>\n", |
|
|
451 |
" <td>0.173920</td>\n", |
|
|
452 |
" <td>0.246467</td>\n", |
|
|
453 |
" <td>0.193557</td>\n", |
|
|
454 |
" <td>0.381421</td>\n", |
|
|
455 |
" <td>0.393535</td>\n", |
|
|
456 |
" <td>0.176821</td>\n", |
|
|
457 |
" <td>0.350455</td>\n", |
|
|
458 |
" <td>0.292020</td>\n", |
|
|
459 |
" <td>0.395286</td>\n", |
|
|
460 |
" <td>0.350455</td>\n", |
|
|
461 |
" </tr>\n", |
|
|
462 |
" <tr>\n", |
|
|
463 |
" <th>...</th>\n", |
|
|
464 |
" <td>...</td>\n", |
|
|
465 |
" <td>...</td>\n", |
|
|
466 |
" <td>...</td>\n", |
|
|
467 |
" <td>...</td>\n", |
|
|
468 |
" <td>...</td>\n", |
|
|
469 |
" <td>...</td>\n", |
|
|
470 |
" <td>...</td>\n", |
|
|
471 |
" <td>...</td>\n", |
|
|
472 |
" <td>...</td>\n", |
|
|
473 |
" <td>...</td>\n", |
|
|
474 |
" <td>...</td>\n", |
|
|
475 |
" <td>...</td>\n", |
|
|
476 |
" <td>...</td>\n", |
|
|
477 |
" <td>...</td>\n", |
|
|
478 |
" <td>...</td>\n", |
|
|
479 |
" <td>...</td>\n", |
|
|
480 |
" </tr>\n", |
|
|
481 |
" <tr>\n", |
|
|
482 |
" <th>595</th>\n", |
|
|
483 |
" <td>specificity</td>\n", |
|
|
484 |
" <td>0.775862</td>\n", |
|
|
485 |
" <td>0.724138</td>\n", |
|
|
486 |
" <td>0.741379</td>\n", |
|
|
487 |
" <td>0.793103</td>\n", |
|
|
488 |
" <td>0.758621</td>\n", |
|
|
489 |
" <td>0.706897</td>\n", |
|
|
490 |
" <td>0.793103</td>\n", |
|
|
491 |
" <td>0.672414</td>\n", |
|
|
492 |
" <td>0.706897</td>\n", |
|
|
493 |
" <td>0.706897</td>\n", |
|
|
494 |
" <td>0.775862</td>\n", |
|
|
495 |
" <td>0.775862</td>\n", |
|
|
496 |
" <td>0.793103</td>\n", |
|
|
497 |
" <td>0.741379</td>\n", |
|
|
498 |
" <td>0.827586</td>\n", |
|
|
499 |
" </tr>\n", |
|
|
500 |
" <tr>\n", |
|
|
501 |
" <th>596</th>\n", |
|
|
502 |
" <td>f1_score</td>\n", |
|
|
503 |
" <td>0.400000</td>\n", |
|
|
504 |
" <td>0.478261</td>\n", |
|
|
505 |
" <td>0.300000</td>\n", |
|
|
506 |
" <td>0.590909</td>\n", |
|
|
507 |
" <td>0.500000</td>\n", |
|
|
508 |
" <td>0.285714</td>\n", |
|
|
509 |
" <td>0.487805</td>\n", |
|
|
510 |
" <td>0.480000</td>\n", |
|
|
511 |
" <td>0.588235</td>\n", |
|
|
512 |
" <td>0.500000</td>\n", |
|
|
513 |
" <td>0.476190</td>\n", |
|
|
514 |
" <td>0.577778</td>\n", |
|
|
515 |
" <td>0.450000</td>\n", |
|
|
516 |
" <td>0.583333</td>\n", |
|
|
517 |
" <td>0.550000</td>\n", |
|
|
518 |
" </tr>\n", |
|
|
519 |
" <tr>\n", |
|
|
520 |
" <th>597</th>\n", |
|
|
521 |
" <td>balanced_accuracy</td>\n", |
|
|
522 |
" <td>0.598457</td>\n", |
|
|
523 |
" <td>0.651543</td>\n", |
|
|
524 |
" <td>0.528584</td>\n", |
|
|
525 |
" <td>0.738657</td>\n", |
|
|
526 |
" <td>0.668784</td>\n", |
|
|
527 |
" <td>0.511343</td>\n", |
|
|
528 |
" <td>0.659710</td>\n", |
|
|
529 |
" <td>0.651996</td>\n", |
|
|
530 |
" <td>0.748185</td>\n", |
|
|
531 |
" <td>0.669238</td>\n", |
|
|
532 |
" <td>0.651089</td>\n", |
|
|
533 |
" <td>0.730036</td>\n", |
|
|
534 |
" <td>0.633394</td>\n", |
|
|
535 |
" <td>0.739111</td>\n", |
|
|
536 |
" <td>0.703267</td>\n", |
|
|
537 |
" </tr>\n", |
|
|
538 |
" <tr>\n", |
|
|
539 |
" <th>598</th>\n", |
|
|
540 |
" <td>mathews_coef</td>\n", |
|
|
541 |
" <td>0.190619</td>\n", |
|
|
542 |
" <td>0.273835</td>\n", |
|
|
543 |
" <td>0.055341</td>\n", |
|
|
544 |
" <td>0.439464</td>\n", |
|
|
545 |
" <td>0.310800</td>\n", |
|
|
546 |
" <td>0.021369</td>\n", |
|
|
547 |
" <td>0.304831</td>\n", |
|
|
548 |
" <td>0.267236</td>\n", |
|
|
549 |
" <td>0.434225</td>\n", |
|
|
550 |
" <td>0.301161</td>\n", |
|
|
551 |
" <td>0.284638</td>\n", |
|
|
552 |
" <td>0.419416</td>\n", |
|
|
553 |
" <td>0.258257</td>\n", |
|
|
554 |
" <td>0.425501</td>\n", |
|
|
555 |
" <td>0.393535</td>\n", |
|
|
556 |
" </tr>\n", |
|
|
557 |
" <tr>\n", |
|
|
558 |
" <th>599</th>\n", |
|
|
559 |
" <td>roc_auc</td>\n", |
|
|
560 |
" <td>0.637024</td>\n", |
|
|
561 |
" <td>0.629764</td>\n", |
|
|
562 |
" <td>0.568966</td>\n", |
|
|
563 |
" <td>0.753176</td>\n", |
|
|
564 |
" <td>0.706897</td>\n", |
|
|
565 |
" <td>0.581670</td>\n", |
|
|
566 |
" <td>0.784029</td>\n", |
|
|
567 |
" <td>0.661525</td>\n", |
|
|
568 |
" <td>0.831216</td>\n", |
|
|
569 |
" <td>0.726860</td>\n", |
|
|
570 |
" <td>0.672414</td>\n", |
|
|
571 |
" <td>0.827586</td>\n", |
|
|
572 |
" <td>0.715971</td>\n", |
|
|
573 |
" <td>0.772232</td>\n", |
|
|
574 |
" <td>0.784029</td>\n", |
|
|
575 |
" </tr>\n", |
|
|
576 |
" </tbody>\n", |
|
|
577 |
"</table>\n", |
|
|
578 |
"<p>600 rows × 16 columns</p>\n", |
|
|
579 |
"</div>" |
|
|
580 |
], |
|
|
581 |
"text/plain": [ |
|
|
582 |
" metric C R P RNA C+R \\\n", |
|
|
583 |
"0 sensitivity 0.368421 0.421053 0.473684 0.684211 0.473684 \n", |
|
|
584 |
"1 specificity 0.672414 0.706897 0.689655 0.896552 0.620690 \n", |
|
|
585 |
"2 f1_score 0.311111 0.363636 0.391304 0.684211 0.360000 \n", |
|
|
586 |
"3 balanced_accuracy 0.520417 0.563975 0.581670 0.790381 0.547187 \n", |
|
|
587 |
"4 mathews_coef 0.037226 0.117803 0.147576 0.580762 0.082963 \n", |
|
|
588 |
".. ... ... ... ... ... ... \n", |
|
|
589 |
"595 specificity 0.775862 0.724138 0.741379 0.793103 0.758621 \n", |
|
|
590 |
"596 f1_score 0.400000 0.478261 0.300000 0.590909 0.500000 \n", |
|
|
591 |
"597 balanced_accuracy 0.598457 0.651543 0.528584 0.738657 0.668784 \n", |
|
|
592 |
"598 mathews_coef 0.190619 0.273835 0.055341 0.439464 0.310800 \n", |
|
|
593 |
"599 roc_auc 0.637024 0.629764 0.568966 0.753176 0.706897 \n", |
|
|
594 |
"\n", |
|
|
595 |
" C+P C+RNA R+P R+RNA P+RNA C+R+P C+R+RNA \\\n", |
|
|
596 |
"0 0.578947 0.526316 0.526316 0.684211 0.578947 0.526316 0.578947 \n", |
|
|
597 |
"1 0.620690 0.741379 0.689655 0.741379 0.827586 0.672414 0.793103 \n", |
|
|
598 |
"2 0.423077 0.454545 0.425532 0.553191 0.550000 0.416667 0.523810 \n", |
|
|
599 |
"3 0.599819 0.633848 0.607985 0.712795 0.703267 0.599365 0.686025 \n", |
|
|
600 |
"4 0.173920 0.246467 0.193557 0.381421 0.393535 0.176821 0.350455 \n", |
|
|
601 |
".. ... ... ... ... ... ... ... \n", |
|
|
602 |
"595 0.706897 0.793103 0.672414 0.706897 0.706897 0.775862 0.775862 \n", |
|
|
603 |
"596 0.285714 0.487805 0.480000 0.588235 0.500000 0.476190 0.577778 \n", |
|
|
604 |
"597 0.511343 0.659710 0.651996 0.748185 0.669238 0.651089 0.730036 \n", |
|
|
605 |
"598 0.021369 0.304831 0.267236 0.434225 0.301161 0.284638 0.419416 \n", |
|
|
606 |
"599 0.581670 0.784029 0.661525 0.831216 0.726860 0.672414 0.827586 \n", |
|
|
607 |
"\n", |
|
|
608 |
" C+P+RNA R+P+RNA C+R+P+RNA \n", |
|
|
609 |
"0 0.578947 0.631579 0.578947 \n", |
|
|
610 |
"1 0.741379 0.793103 0.793103 \n", |
|
|
611 |
"2 0.488889 0.558140 0.523810 \n", |
|
|
612 |
"3 0.660163 0.712341 0.686025 \n", |
|
|
613 |
"4 0.292020 0.395286 0.350455 \n", |
|
|
614 |
".. ... ... ... \n", |
|
|
615 |
"595 0.793103 0.741379 0.827586 \n", |
|
|
616 |
"596 0.450000 0.583333 0.550000 \n", |
|
|
617 |
"597 0.633394 0.739111 0.703267 \n", |
|
|
618 |
"598 0.258257 0.425501 0.393535 \n", |
|
|
619 |
"599 0.715971 0.772232 0.784029 \n", |
|
|
620 |
"\n", |
|
|
621 |
"[600 rows x 16 columns]" |
|
|
622 |
] |
|
|
623 |
}, |
|
|
624 |
"execution_count": 9, |
|
|
625 |
"metadata": {}, |
|
|
626 |
"output_type": "execute_result" |
|
|
627 |
} |
|
|
628 |
], |
|
|
629 |
"source": [ |
|
|
630 |
"results = compute_all_classif(df.set_index(\"samples\").loc[list(set(list(all_patients)) & set(df[\"samples\"].unique()))],\n", |
|
|
631 |
" names=list(df.columns[2:-2].values)\n", |
|
|
632 |
" )\n", |
|
|
633 |
"\n", |
|
|
634 |
"new_cols = {}\n", |
|
|
635 |
"for col in results.columns.values[1:]:\n", |
|
|
636 |
" l = col.split(\"+\")\n", |
|
|
637 |
" new = []\n", |
|
|
638 |
" for item in l:\n", |
|
|
639 |
" if item == 'radiomics':\n", |
|
|
640 |
" new.append('R')\n", |
|
|
641 |
" if item == 'RNA':\n", |
|
|
642 |
" new.append('RNA')\n", |
|
|
643 |
" if item == 'pathomics':\n", |
|
|
644 |
" new.append(\"P\")\n", |
|
|
645 |
" if item == 'clinicals':\n", |
|
|
646 |
" new.append(\"C\")\n", |
|
|
647 |
" new_cols[col] = \"+\".join(new)\n", |
|
|
648 |
"\n", |
|
|
649 |
"results = results.rename(columns = new_cols)\n", |
|
|
650 |
"results" |
|
|
651 |
] |
|
|
652 |
}, |
|
|
653 |
{ |
|
|
654 |
"cell_type": "code", |
|
|
655 |
"execution_count": 11, |
|
|
656 |
"id": "a780f6e2-048a-44c0-b0c1-724c20158ea8", |
|
|
657 |
"metadata": {}, |
|
|
658 |
"outputs": [ |
|
|
659 |
{ |
|
|
660 |
"data": { |
|
|
661 |
"text/html": [ |
|
|
662 |
"<div>\n", |
|
|
663 |
"<style scoped>\n", |
|
|
664 |
" .dataframe tbody tr th:only-of-type {\n", |
|
|
665 |
" vertical-align: middle;\n", |
|
|
666 |
" }\n", |
|
|
667 |
"\n", |
|
|
668 |
" .dataframe tbody tr th {\n", |
|
|
669 |
" vertical-align: top;\n", |
|
|
670 |
" }\n", |
|
|
671 |
"\n", |
|
|
672 |
" .dataframe thead th {\n", |
|
|
673 |
" text-align: right;\n", |
|
|
674 |
" }\n", |
|
|
675 |
"</style>\n", |
|
|
676 |
"<table border=\"1\" class=\"dataframe\">\n", |
|
|
677 |
" <thead>\n", |
|
|
678 |
" <tr style=\"text-align: right;\">\n", |
|
|
679 |
" <th></th>\n", |
|
|
680 |
" <th>C</th>\n", |
|
|
681 |
" <th>R</th>\n", |
|
|
682 |
" <th>P</th>\n", |
|
|
683 |
" <th>RNA</th>\n", |
|
|
684 |
" <th>C+R</th>\n", |
|
|
685 |
" <th>C+P</th>\n", |
|
|
686 |
" <th>C+RNA</th>\n", |
|
|
687 |
" <th>R+P</th>\n", |
|
|
688 |
" <th>R+RNA</th>\n", |
|
|
689 |
" <th>P+RNA</th>\n", |
|
|
690 |
" <th>C+R+P</th>\n", |
|
|
691 |
" <th>C+R+RNA</th>\n", |
|
|
692 |
" <th>C+P+RNA</th>\n", |
|
|
693 |
" <th>R+P+RNA</th>\n", |
|
|
694 |
" <th>C+R+P+RNA</th>\n", |
|
|
695 |
" </tr>\n", |
|
|
696 |
" </thead>\n", |
|
|
697 |
" <tbody>\n", |
|
|
698 |
" <tr>\n", |
|
|
699 |
" <th>mean</th>\n", |
|
|
700 |
" <td>0.591897</td>\n", |
|
|
701 |
" <td>0.616479</td>\n", |
|
|
702 |
" <td>0.543512</td>\n", |
|
|
703 |
" <td>0.750554</td>\n", |
|
|
704 |
" <td>0.657169</td>\n", |
|
|
705 |
" <td>0.621379</td>\n", |
|
|
706 |
" <td>0.779927</td>\n", |
|
|
707 |
" <td>0.623711</td>\n", |
|
|
708 |
" <td>0.806252</td>\n", |
|
|
709 |
" <td>0.726470</td>\n", |
|
|
710 |
" <td>0.668158</td>\n", |
|
|
711 |
" <td>0.810862</td>\n", |
|
|
712 |
" <td>0.761561</td>\n", |
|
|
713 |
" <td>0.769011</td>\n", |
|
|
714 |
" <td>0.784365</td>\n", |
|
|
715 |
" </tr>\n", |
|
|
716 |
" <tr>\n", |
|
|
717 |
" <th>std</th>\n", |
|
|
718 |
" <td>0.046401</td>\n", |
|
|
719 |
" <td>0.038671</td>\n", |
|
|
720 |
" <td>0.047115</td>\n", |
|
|
721 |
" <td>0.041767</td>\n", |
|
|
722 |
" <td>0.044742</td>\n", |
|
|
723 |
" <td>0.048565</td>\n", |
|
|
724 |
" <td>0.042371</td>\n", |
|
|
725 |
" <td>0.041550</td>\n", |
|
|
726 |
" <td>0.033935</td>\n", |
|
|
727 |
" <td>0.040244</td>\n", |
|
|
728 |
" <td>0.044537</td>\n", |
|
|
729 |
" <td>0.033933</td>\n", |
|
|
730 |
" <td>0.043629</td>\n", |
|
|
731 |
" <td>0.036266</td>\n", |
|
|
732 |
" <td>0.039099</td>\n", |
|
|
733 |
" </tr>\n", |
|
|
734 |
" </tbody>\n", |
|
|
735 |
"</table>\n", |
|
|
736 |
"</div>" |
|
|
737 |
], |
|
|
738 |
"text/plain": [ |
|
|
739 |
" C R P RNA C+R C+P C+RNA \\\n", |
|
|
740 |
"mean 0.591897 0.616479 0.543512 0.750554 0.657169 0.621379 0.779927 \n", |
|
|
741 |
"std 0.046401 0.038671 0.047115 0.041767 0.044742 0.048565 0.042371 \n", |
|
|
742 |
"\n", |
|
|
743 |
" R+P R+RNA P+RNA C+R+P C+R+RNA C+P+RNA R+P+RNA \\\n", |
|
|
744 |
"mean 0.623711 0.806252 0.726470 0.668158 0.810862 0.761561 0.769011 \n", |
|
|
745 |
"std 0.041550 0.033935 0.040244 0.044537 0.033933 0.043629 0.036266 \n", |
|
|
746 |
"\n", |
|
|
747 |
" C+R+P+RNA \n", |
|
|
748 |
"mean 0.784365 \n", |
|
|
749 |
"std 0.039099 " |
|
|
750 |
] |
|
|
751 |
}, |
|
|
752 |
"execution_count": 11, |
|
|
753 |
"metadata": {}, |
|
|
754 |
"output_type": "execute_result" |
|
|
755 |
} |
|
|
756 |
], |
|
|
757 |
"source": [ |
|
|
758 |
"results[results[\"metric\"]==\"roc_auc\"].drop(columns = 'metric').apply(['mean', 'std'])" |
|
|
759 |
] |
|
|
760 |
}, |
|
|
761 |
{ |
|
|
762 |
"cell_type": "markdown", |
|
|
763 |
"id": "c3e20eb0-8ab9-4492-9f55-6052add848ec", |
|
|
764 |
"metadata": {}, |
|
|
765 |
"source": [ |
|
|
766 |
"### 1.4 Plot results" |
|
|
767 |
] |
|
|
768 |
}, |
|
|
769 |
{ |
|
|
770 |
"cell_type": "code", |
|
|
771 |
"execution_count": 17, |
|
|
772 |
"id": "246e6b8f-ccbb-45d9-865e-acf19fbab99d", |
|
|
773 |
"metadata": { |
|
|
774 |
"tags": [] |
|
|
775 |
}, |
|
|
776 |
"outputs": [ |
|
|
777 |
{ |
|
|
778 |
"data": { |
|
|
779 |
"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", |
|
|
780 |
"text/plain": [ |
|
|
781 |
"<Figure size 1440x504 with 1 Axes>" |
|
|
782 |
] |
|
|
783 |
}, |
|
|
784 |
"metadata": { |
|
|
785 |
"needs_background": "light" |
|
|
786 |
}, |
|
|
787 |
"output_type": "display_data" |
|
|
788 |
} |
|
|
789 |
], |
|
|
790 |
"source": [ |
|
|
791 |
"fig = plot_metrics(results,\n", |
|
|
792 |
" metrics=\"roc_auc\",\n", |
|
|
793 |
" models = list(results.columns[1:]),\n", |
|
|
794 |
" annotations = {\"1 modality\": (0, 3), \"2 modalities\": (4, 9), \"3 modalities\": (10, 13), \"4 modalities\": (14, 15)},\n", |
|
|
795 |
" title=None,\n", |
|
|
796 |
" ylim=(0.5, 0.86),\n", |
|
|
797 |
" y_text=0.85,\n", |
|
|
798 |
" ax=None)" |
|
|
799 |
] |
|
|
800 |
}, |
|
|
801 |
{ |
|
|
802 |
"cell_type": "markdown", |
|
|
803 |
"id": "a9f7722c-7b83-4303-9c8b-34e29c419f32", |
|
|
804 |
"metadata": { |
|
|
805 |
"tags": [] |
|
|
806 |
}, |
|
|
807 |
"source": [ |
|
|
808 |
"## 2. Display survival prediction results" |
|
|
809 |
] |
|
|
810 |
}, |
|
|
811 |
{ |
|
|
812 |
"cell_type": "markdown", |
|
|
813 |
"id": "3183894b-c1f5-4b2e-86ca-2a35b7fce581", |
|
|
814 |
"metadata": {}, |
|
|
815 |
"source": [ |
|
|
816 |
"### 2.1 Load results" |
|
|
817 |
] |
|
|
818 |
}, |
|
|
819 |
{ |
|
|
820 |
"cell_type": "code", |
|
|
821 |
"execution_count": 21, |
|
|
822 |
"id": "2372f38f-6f7e-4ce9-95c4-eae6e5f3e64c", |
|
|
823 |
"metadata": {}, |
|
|
824 |
"outputs": [ |
|
|
825 |
{ |
|
|
826 |
"data": { |
|
|
827 |
"text/html": [ |
|
|
828 |
"<div>\n", |
|
|
829 |
"<style scoped>\n", |
|
|
830 |
" .dataframe tbody tr th:only-of-type {\n", |
|
|
831 |
" vertical-align: middle;\n", |
|
|
832 |
" }\n", |
|
|
833 |
"\n", |
|
|
834 |
" .dataframe tbody tr th {\n", |
|
|
835 |
" vertical-align: top;\n", |
|
|
836 |
" }\n", |
|
|
837 |
"\n", |
|
|
838 |
" .dataframe thead th {\n", |
|
|
839 |
" text-align: right;\n", |
|
|
840 |
" }\n", |
|
|
841 |
"</style>\n", |
|
|
842 |
"<table border=\"1\" class=\"dataframe\">\n", |
|
|
843 |
" <thead>\n", |
|
|
844 |
" <tr style=\"text-align: right;\">\n", |
|
|
845 |
" <th></th>\n", |
|
|
846 |
" <th>repeat</th>\n", |
|
|
847 |
" <th>clinicals</th>\n", |
|
|
848 |
" <th>radiomics</th>\n", |
|
|
849 |
" <th>pathomics</th>\n", |
|
|
850 |
" <th>RNA</th>\n", |
|
|
851 |
" <th>clinicals+radiomics</th>\n", |
|
|
852 |
" <th>clinicals+pathomics</th>\n", |
|
|
853 |
" <th>clinicals+RNA</th>\n", |
|
|
854 |
" <th>radiomics+pathomics</th>\n", |
|
|
855 |
" <th>radiomics+RNA</th>\n", |
|
|
856 |
" <th>pathomics+RNA</th>\n", |
|
|
857 |
" <th>clinicals+radiomics+pathomics</th>\n", |
|
|
858 |
" <th>clinicals+radiomics+RNA</th>\n", |
|
|
859 |
" <th>clinicals+pathomics+RNA</th>\n", |
|
|
860 |
" <th>radiomics+pathomics+RNA</th>\n", |
|
|
861 |
" <th>clinicals+radiomics+pathomics+RNA</th>\n", |
|
|
862 |
" <th>fold_index</th>\n", |
|
|
863 |
" <th>label.time</th>\n", |
|
|
864 |
" <th>label.event</th>\n", |
|
|
865 |
" </tr>\n", |
|
|
866 |
" </thead>\n", |
|
|
867 |
" <tbody>\n", |
|
|
868 |
" <tr>\n", |
|
|
869 |
" <th>0</th>\n", |
|
|
870 |
" <td>0.0</td>\n", |
|
|
871 |
" <td>0.568705</td>\n", |
|
|
872 |
" <td>0.000000</td>\n", |
|
|
873 |
" <td>-1.088434</td>\n", |
|
|
874 |
" <td>0.000000</td>\n", |
|
|
875 |
" <td>0.568705</td>\n", |
|
|
876 |
" <td>-0.259865</td>\n", |
|
|
877 |
" <td>0.568705</td>\n", |
|
|
878 |
" <td>-1.088434</td>\n", |
|
|
879 |
" <td>0.000000</td>\n", |
|
|
880 |
" <td>-1.088434</td>\n", |
|
|
881 |
" <td>-0.259865</td>\n", |
|
|
882 |
" <td>0.568705</td>\n", |
|
|
883 |
" <td>-0.259865</td>\n", |
|
|
884 |
" <td>-1.088434</td>\n", |
|
|
885 |
" <td>-0.259865</td>\n", |
|
|
886 |
" <td>6.0</td>\n", |
|
|
887 |
" <td>262.0</td>\n", |
|
|
888 |
" <td>1.0</td>\n", |
|
|
889 |
" </tr>\n", |
|
|
890 |
" <tr>\n", |
|
|
891 |
" <th>1</th>\n", |
|
|
892 |
" <td>0.0</td>\n", |
|
|
893 |
" <td>0.321816</td>\n", |
|
|
894 |
" <td>-0.355895</td>\n", |
|
|
895 |
" <td>0.735641</td>\n", |
|
|
896 |
" <td>-0.996944</td>\n", |
|
|
897 |
" <td>-0.017040</td>\n", |
|
|
898 |
" <td>0.528729</td>\n", |
|
|
899 |
" <td>-0.337564</td>\n", |
|
|
900 |
" <td>0.189873</td>\n", |
|
|
901 |
" <td>-0.676420</td>\n", |
|
|
902 |
" <td>-0.130651</td>\n", |
|
|
903 |
" <td>0.233854</td>\n", |
|
|
904 |
" <td>-0.343674</td>\n", |
|
|
905 |
" <td>0.020171</td>\n", |
|
|
906 |
" <td>-0.205733</td>\n", |
|
|
907 |
" <td>-0.073845</td>\n", |
|
|
908 |
" <td>8.0</td>\n", |
|
|
909 |
" <td>1510.0</td>\n", |
|
|
910 |
" <td>0.0</td>\n", |
|
|
911 |
" </tr>\n", |
|
|
912 |
" <tr>\n", |
|
|
913 |
" <th>2</th>\n", |
|
|
914 |
" <td>0.0</td>\n", |
|
|
915 |
" <td>0.200006</td>\n", |
|
|
916 |
" <td>0.758021</td>\n", |
|
|
917 |
" <td>0.069067</td>\n", |
|
|
918 |
" <td>0.322129</td>\n", |
|
|
919 |
" <td>0.479013</td>\n", |
|
|
920 |
" <td>0.134536</td>\n", |
|
|
921 |
" <td>0.261068</td>\n", |
|
|
922 |
" <td>0.413544</td>\n", |
|
|
923 |
" <td>0.540075</td>\n", |
|
|
924 |
" <td>0.195598</td>\n", |
|
|
925 |
" <td>0.342364</td>\n", |
|
|
926 |
" <td>0.426719</td>\n", |
|
|
927 |
" <td>0.197067</td>\n", |
|
|
928 |
" <td>0.383072</td>\n", |
|
|
929 |
" <td>0.337306</td>\n", |
|
|
930 |
" <td>7.0</td>\n", |
|
|
931 |
" <td>830.0</td>\n", |
|
|
932 |
" <td>1.0</td>\n", |
|
|
933 |
" </tr>\n", |
|
|
934 |
" <tr>\n", |
|
|
935 |
" <th>3</th>\n", |
|
|
936 |
" <td>0.0</td>\n", |
|
|
937 |
" <td>-0.701541</td>\n", |
|
|
938 |
" <td>-0.281650</td>\n", |
|
|
939 |
" <td>-0.479457</td>\n", |
|
|
940 |
" <td>0.000000</td>\n", |
|
|
941 |
" <td>-0.491595</td>\n", |
|
|
942 |
" <td>-0.590499</td>\n", |
|
|
943 |
" <td>-0.701541</td>\n", |
|
|
944 |
" <td>-0.380553</td>\n", |
|
|
945 |
" <td>-0.281650</td>\n", |
|
|
946 |
" <td>-0.479457</td>\n", |
|
|
947 |
" <td>-0.487549</td>\n", |
|
|
948 |
" <td>-0.491595</td>\n", |
|
|
949 |
" <td>-0.590499</td>\n", |
|
|
950 |
" <td>-0.380553</td>\n", |
|
|
951 |
" <td>-0.487549</td>\n", |
|
|
952 |
" <td>8.0</td>\n", |
|
|
953 |
" <td>243.0</td>\n", |
|
|
954 |
" <td>1.0</td>\n", |
|
|
955 |
" </tr>\n", |
|
|
956 |
" <tr>\n", |
|
|
957 |
" <th>4</th>\n", |
|
|
958 |
" <td>0.0</td>\n", |
|
|
959 |
" <td>0.160662</td>\n", |
|
|
960 |
" <td>1.575924</td>\n", |
|
|
961 |
" <td>-0.120972</td>\n", |
|
|
962 |
" <td>0.000000</td>\n", |
|
|
963 |
" <td>0.868293</td>\n", |
|
|
964 |
" <td>0.019845</td>\n", |
|
|
965 |
" <td>0.160662</td>\n", |
|
|
966 |
" <td>0.727476</td>\n", |
|
|
967 |
" <td>1.575924</td>\n", |
|
|
968 |
" <td>-0.120972</td>\n", |
|
|
969 |
" <td>0.538538</td>\n", |
|
|
970 |
" <td>0.868293</td>\n", |
|
|
971 |
" <td>0.019845</td>\n", |
|
|
972 |
" <td>0.727476</td>\n", |
|
|
973 |
" <td>0.538538</td>\n", |
|
|
974 |
" <td>0.0</td>\n", |
|
|
975 |
" <td>361.0</td>\n", |
|
|
976 |
" <td>1.0</td>\n", |
|
|
977 |
" </tr>\n", |
|
|
978 |
" </tbody>\n", |
|
|
979 |
"</table>\n", |
|
|
980 |
"</div>" |
|
|
981 |
], |
|
|
982 |
"text/plain": [ |
|
|
983 |
" repeat clinicals radiomics pathomics RNA clinicals+radiomics \\\n", |
|
|
984 |
"0 0.0 0.568705 0.000000 -1.088434 0.000000 0.568705 \n", |
|
|
985 |
"1 0.0 0.321816 -0.355895 0.735641 -0.996944 -0.017040 \n", |
|
|
986 |
"2 0.0 0.200006 0.758021 0.069067 0.322129 0.479013 \n", |
|
|
987 |
"3 0.0 -0.701541 -0.281650 -0.479457 0.000000 -0.491595 \n", |
|
|
988 |
"4 0.0 0.160662 1.575924 -0.120972 0.000000 0.868293 \n", |
|
|
989 |
"\n", |
|
|
990 |
" clinicals+pathomics clinicals+RNA radiomics+pathomics radiomics+RNA \\\n", |
|
|
991 |
"0 -0.259865 0.568705 -1.088434 0.000000 \n", |
|
|
992 |
"1 0.528729 -0.337564 0.189873 -0.676420 \n", |
|
|
993 |
"2 0.134536 0.261068 0.413544 0.540075 \n", |
|
|
994 |
"3 -0.590499 -0.701541 -0.380553 -0.281650 \n", |
|
|
995 |
"4 0.019845 0.160662 0.727476 1.575924 \n", |
|
|
996 |
"\n", |
|
|
997 |
" pathomics+RNA clinicals+radiomics+pathomics clinicals+radiomics+RNA \\\n", |
|
|
998 |
"0 -1.088434 -0.259865 0.568705 \n", |
|
|
999 |
"1 -0.130651 0.233854 -0.343674 \n", |
|
|
1000 |
"2 0.195598 0.342364 0.426719 \n", |
|
|
1001 |
"3 -0.479457 -0.487549 -0.491595 \n", |
|
|
1002 |
"4 -0.120972 0.538538 0.868293 \n", |
|
|
1003 |
"\n", |
|
|
1004 |
" clinicals+pathomics+RNA radiomics+pathomics+RNA \\\n", |
|
|
1005 |
"0 -0.259865 -1.088434 \n", |
|
|
1006 |
"1 0.020171 -0.205733 \n", |
|
|
1007 |
"2 0.197067 0.383072 \n", |
|
|
1008 |
"3 -0.590499 -0.380553 \n", |
|
|
1009 |
"4 0.019845 0.727476 \n", |
|
|
1010 |
"\n", |
|
|
1011 |
" clinicals+radiomics+pathomics+RNA fold_index label.time label.event \n", |
|
|
1012 |
"0 -0.259865 6.0 262.0 1.0 \n", |
|
|
1013 |
"1 -0.073845 8.0 1510.0 0.0 \n", |
|
|
1014 |
"2 0.337306 7.0 830.0 1.0 \n", |
|
|
1015 |
"3 -0.487549 8.0 243.0 1.0 \n", |
|
|
1016 |
"4 0.538538 0.0 361.0 1.0 " |
|
|
1017 |
] |
|
|
1018 |
}, |
|
|
1019 |
"execution_count": 21, |
|
|
1020 |
"metadata": {}, |
|
|
1021 |
"output_type": "execute_result" |
|
|
1022 |
} |
|
|
1023 |
], |
|
|
1024 |
"source": [ |
|
|
1025 |
"main_directory = \"survival\\\\RF_perm_100cv_OS_2109_noliversegmentation\\\\\"\n", |
|
|
1026 |
"df = pd.read_csv(main_directory + \"predictions.csv\")\n", |
|
|
1027 |
"df.drop(columns=\"samples\").head()" |
|
|
1028 |
] |
|
|
1029 |
}, |
|
|
1030 |
{ |
|
|
1031 |
"cell_type": "markdown", |
|
|
1032 |
"id": "579e86d3-df3e-4af6-9fd3-b81e28e2f234", |
|
|
1033 |
"metadata": {}, |
|
|
1034 |
"source": [ |
|
|
1035 |
"### 2.2 Load data" |
|
|
1036 |
] |
|
|
1037 |
}, |
|
|
1038 |
{ |
|
|
1039 |
"cell_type": "code", |
|
|
1040 |
"execution_count": 22, |
|
|
1041 |
"id": "3e2b9cec-858e-49c2-ae9f-f5191dfa15fd", |
|
|
1042 |
"metadata": {}, |
|
|
1043 |
"outputs": [], |
|
|
1044 |
"source": [ |
|
|
1045 |
"df_clinicals = pd.read_csv(\"clinicals.csv\", index_col = 0, sep=\";\")\n", |
|
|
1046 |
"bool_mask = df_clinicals['OS'].isnull()\n", |
|
|
1047 |
"df_clinicals = df_clinicals[~bool_mask]\n", |
|
|
1048 |
"patient_clinicals = df_clinicals.index\n", |
|
|
1049 |
"\n", |
|
|
1050 |
"df_omics = pd.read_csv(\"omics.csv\", sep=\";\", index_col=0)\n", |
|
|
1051 |
"patient_omics = df_omics.index\n", |
|
|
1052 |
"\n", |
|
|
1053 |
"df_radiomics = pd.read_csv(\"radiomics.csv\", index_col=0, sep=\";\")\n", |
|
|
1054 |
"patient_radiomics = df_radiomics.index\n", |
|
|
1055 |
"\n", |
|
|
1056 |
"df_pathomics = pd.read_csv(\"pathomics.csv\", index_col=0, sep=\";\")\n", |
|
|
1057 |
"patient_pathomics = df_pathomics.index\n", |
|
|
1058 |
"\n", |
|
|
1059 |
"all_patients = set(patient_radiomics) & set(patient_pathomics) & set(patient_clinicals) & set(patient_omics)" |
|
|
1060 |
] |
|
|
1061 |
}, |
|
|
1062 |
{ |
|
|
1063 |
"cell_type": "code", |
|
|
1064 |
"execution_count": 23, |
|
|
1065 |
"id": "7c353993-444e-411a-82d7-c64435caf0a8", |
|
|
1066 |
"metadata": {}, |
|
|
1067 |
"outputs": [ |
|
|
1068 |
{ |
|
|
1069 |
"name": "stdout", |
|
|
1070 |
"output_type": "stream", |
|
|
1071 |
"text": [ |
|
|
1072 |
"Number of patients with all modas available: 79\n" |
|
|
1073 |
] |
|
|
1074 |
} |
|
|
1075 |
], |
|
|
1076 |
"source": [ |
|
|
1077 |
"print(\"Number of patients with all modas available: \", len(all_patients))" |
|
|
1078 |
] |
|
|
1079 |
}, |
|
|
1080 |
{ |
|
|
1081 |
"cell_type": "markdown", |
|
|
1082 |
"id": "f4a49b3c-132f-4410-8c74-08d7dbdf5333", |
|
|
1083 |
"metadata": {}, |
|
|
1084 |
"source": [ |
|
|
1085 |
"### 2.3 Compute C-index" |
|
|
1086 |
] |
|
|
1087 |
}, |
|
|
1088 |
{ |
|
|
1089 |
"cell_type": "code", |
|
|
1090 |
"execution_count": 24, |
|
|
1091 |
"id": "9645c92e-4665-4254-b425-68addb7a5ea8", |
|
|
1092 |
"metadata": {}, |
|
|
1093 |
"outputs": [ |
|
|
1094 |
{ |
|
|
1095 |
"data": { |
|
|
1096 |
"text/html": [ |
|
|
1097 |
"<div>\n", |
|
|
1098 |
"<style scoped>\n", |
|
|
1099 |
" .dataframe tbody tr th:only-of-type {\n", |
|
|
1100 |
" vertical-align: middle;\n", |
|
|
1101 |
" }\n", |
|
|
1102 |
"\n", |
|
|
1103 |
" .dataframe tbody tr th {\n", |
|
|
1104 |
" vertical-align: top;\n", |
|
|
1105 |
" }\n", |
|
|
1106 |
"\n", |
|
|
1107 |
" .dataframe thead th {\n", |
|
|
1108 |
" text-align: right;\n", |
|
|
1109 |
" }\n", |
|
|
1110 |
"</style>\n", |
|
|
1111 |
"<table border=\"1\" class=\"dataframe\">\n", |
|
|
1112 |
" <thead>\n", |
|
|
1113 |
" <tr style=\"text-align: right;\">\n", |
|
|
1114 |
" <th></th>\n", |
|
|
1115 |
" <th>metric</th>\n", |
|
|
1116 |
" <th>C</th>\n", |
|
|
1117 |
" <th>R</th>\n", |
|
|
1118 |
" <th>P</th>\n", |
|
|
1119 |
" <th>RNA</th>\n", |
|
|
1120 |
" <th>C+R</th>\n", |
|
|
1121 |
" <th>C+P</th>\n", |
|
|
1122 |
" <th>C+RNA</th>\n", |
|
|
1123 |
" <th>R+P</th>\n", |
|
|
1124 |
" <th>R+RNA</th>\n", |
|
|
1125 |
" <th>P+RNA</th>\n", |
|
|
1126 |
" <th>C+R+P</th>\n", |
|
|
1127 |
" <th>C+R+RNA</th>\n", |
|
|
1128 |
" <th>C+P+RNA</th>\n", |
|
|
1129 |
" <th>R+P+RNA</th>\n", |
|
|
1130 |
" <th>C+R+P+RNA</th>\n", |
|
|
1131 |
" </tr>\n", |
|
|
1132 |
" </thead>\n", |
|
|
1133 |
" <tbody>\n", |
|
|
1134 |
" <tr>\n", |
|
|
1135 |
" <th>0</th>\n", |
|
|
1136 |
" <td>c_index</td>\n", |
|
|
1137 |
" <td>0.659810</td>\n", |
|
|
1138 |
" <td>0.589693</td>\n", |
|
|
1139 |
" <td>0.607118</td>\n", |
|
|
1140 |
" <td>0.693620</td>\n", |
|
|
1141 |
" <td>0.678043</td>\n", |
|
|
1142 |
" <td>0.677309</td>\n", |
|
|
1143 |
" <td>0.749478</td>\n", |
|
|
1144 |
" <td>0.655850</td>\n", |
|
|
1145 |
" <td>0.699615</td>\n", |
|
|
1146 |
" <td>0.692120</td>\n", |
|
|
1147 |
" <td>0.692686</td>\n", |
|
|
1148 |
" <td>0.725447</td>\n", |
|
|
1149 |
" <td>0.754048</td>\n", |
|
|
1150 |
" <td>0.708004</td>\n", |
|
|
1151 |
" <td>0.735309</td>\n", |
|
|
1152 |
" </tr>\n", |
|
|
1153 |
" <tr>\n", |
|
|
1154 |
" <th>1</th>\n", |
|
|
1155 |
" <td>c_index</td>\n", |
|
|
1156 |
" <td>0.695589</td>\n", |
|
|
1157 |
" <td>0.592447</td>\n", |
|
|
1158 |
" <td>0.597955</td>\n", |
|
|
1159 |
" <td>0.691800</td>\n", |
|
|
1160 |
" <td>0.673513</td>\n", |
|
|
1161 |
" <td>0.683269</td>\n", |
|
|
1162 |
" <td>0.762107</td>\n", |
|
|
1163 |
" <td>0.649618</td>\n", |
|
|
1164 |
" <td>0.698007</td>\n", |
|
|
1165 |
" <td>0.671555</td>\n", |
|
|
1166 |
" <td>0.700982</td>\n", |
|
|
1167 |
" <td>0.746797</td>\n", |
|
|
1168 |
" <td>0.749128</td>\n", |
|
|
1169 |
" <td>0.708973</td>\n", |
|
|
1170 |
" <td>0.746751</td>\n", |
|
|
1171 |
" </tr>\n", |
|
|
1172 |
" <tr>\n", |
|
|
1173 |
" <th>2</th>\n", |
|
|
1174 |
" <td>c_index</td>\n", |
|
|
1175 |
" <td>0.690391</td>\n", |
|
|
1176 |
" <td>0.626409</td>\n", |
|
|
1177 |
" <td>0.589263</td>\n", |
|
|
1178 |
" <td>0.696218</td>\n", |
|
|
1179 |
" <td>0.688368</td>\n", |
|
|
1180 |
" <td>0.693160</td>\n", |
|
|
1181 |
" <td>0.760881</td>\n", |
|
|
1182 |
" <td>0.660076</td>\n", |
|
|
1183 |
" <td>0.703450</td>\n", |
|
|
1184 |
" <td>0.677189</td>\n", |
|
|
1185 |
" <td>0.702931</td>\n", |
|
|
1186 |
" <td>0.744362</td>\n", |
|
|
1187 |
" <td>0.755680</td>\n", |
|
|
1188 |
" <td>0.709648</td>\n", |
|
|
1189 |
" <td>0.742564</td>\n", |
|
|
1190 |
" </tr>\n", |
|
|
1191 |
" <tr>\n", |
|
|
1192 |
" <th>3</th>\n", |
|
|
1193 |
" <td>c_index</td>\n", |
|
|
1194 |
" <td>0.668751</td>\n", |
|
|
1195 |
" <td>0.635003</td>\n", |
|
|
1196 |
" <td>0.627711</td>\n", |
|
|
1197 |
" <td>0.671152</td>\n", |
|
|
1198 |
" <td>0.687855</td>\n", |
|
|
1199 |
" <td>0.701360</td>\n", |
|
|
1200 |
" <td>0.731493</td>\n", |
|
|
1201 |
" <td>0.687901</td>\n", |
|
|
1202 |
" <td>0.690491</td>\n", |
|
|
1203 |
" <td>0.676949</td>\n", |
|
|
1204 |
" <td>0.729386</td>\n", |
|
|
1205 |
" <td>0.730354</td>\n", |
|
|
1206 |
" <td>0.723863</td>\n", |
|
|
1207 |
" <td>0.719733</td>\n", |
|
|
1208 |
" <td>0.745682</td>\n", |
|
|
1209 |
" </tr>\n", |
|
|
1210 |
" <tr>\n", |
|
|
1211 |
" <th>4</th>\n", |
|
|
1212 |
" <td>c_index</td>\n", |
|
|
1213 |
" <td>0.671193</td>\n", |
|
|
1214 |
" <td>0.608000</td>\n", |
|
|
1215 |
" <td>0.603053</td>\n", |
|
|
1216 |
" <td>0.697055</td>\n", |
|
|
1217 |
" <td>0.678924</td>\n", |
|
|
1218 |
" <td>0.678217</td>\n", |
|
|
1219 |
" <td>0.738403</td>\n", |
|
|
1220 |
" <td>0.661799</td>\n", |
|
|
1221 |
" <td>0.712107</td>\n", |
|
|
1222 |
" <td>0.698718</td>\n", |
|
|
1223 |
" <td>0.691363</td>\n", |
|
|
1224 |
" <td>0.737642</td>\n", |
|
|
1225 |
" <td>0.737483</td>\n", |
|
|
1226 |
" <td>0.713351</td>\n", |
|
|
1227 |
" <td>0.726051</td>\n", |
|
|
1228 |
" </tr>\n", |
|
|
1229 |
" <tr>\n", |
|
|
1230 |
" <th>...</th>\n", |
|
|
1231 |
" <td>...</td>\n", |
|
|
1232 |
" <td>...</td>\n", |
|
|
1233 |
" <td>...</td>\n", |
|
|
1234 |
" <td>...</td>\n", |
|
|
1235 |
" <td>...</td>\n", |
|
|
1236 |
" <td>...</td>\n", |
|
|
1237 |
" <td>...</td>\n", |
|
|
1238 |
" <td>...</td>\n", |
|
|
1239 |
" <td>...</td>\n", |
|
|
1240 |
" <td>...</td>\n", |
|
|
1241 |
" <td>...</td>\n", |
|
|
1242 |
" <td>...</td>\n", |
|
|
1243 |
" <td>...</td>\n", |
|
|
1244 |
" <td>...</td>\n", |
|
|
1245 |
" <td>...</td>\n", |
|
|
1246 |
" <td>...</td>\n", |
|
|
1247 |
" </tr>\n", |
|
|
1248 |
" <tr>\n", |
|
|
1249 |
" <th>95</th>\n", |
|
|
1250 |
" <td>c_index</td>\n", |
|
|
1251 |
" <td>0.680817</td>\n", |
|
|
1252 |
" <td>0.619918</td>\n", |
|
|
1253 |
" <td>0.589981</td>\n", |
|
|
1254 |
" <td>0.683733</td>\n", |
|
|
1255 |
" <td>0.698637</td>\n", |
|
|
1256 |
" <td>0.682220</td>\n", |
|
|
1257 |
" <td>0.748170</td>\n", |
|
|
1258 |
" <td>0.643427</td>\n", |
|
|
1259 |
" <td>0.695090</td>\n", |
|
|
1260 |
" <td>0.691974</td>\n", |
|
|
1261 |
" <td>0.701519</td>\n", |
|
|
1262 |
" <td>0.742775</td>\n", |
|
|
1263 |
" <td>0.740572</td>\n", |
|
|
1264 |
" <td>0.700029</td>\n", |
|
|
1265 |
" <td>0.736994</td>\n", |
|
|
1266 |
" </tr>\n", |
|
|
1267 |
" <tr>\n", |
|
|
1268 |
" <th>96</th>\n", |
|
|
1269 |
" <td>c_index</td>\n", |
|
|
1270 |
" <td>0.683808</td>\n", |
|
|
1271 |
" <td>0.599275</td>\n", |
|
|
1272 |
" <td>0.606327</td>\n", |
|
|
1273 |
" <td>0.673352</td>\n", |
|
|
1274 |
" <td>0.698419</td>\n", |
|
|
1275 |
" <td>0.718908</td>\n", |
|
|
1276 |
" <td>0.762587</td>\n", |
|
|
1277 |
" <td>0.658827</td>\n", |
|
|
1278 |
" <td>0.693451</td>\n", |
|
|
1279 |
" <td>0.697164</td>\n", |
|
|
1280 |
" <td>0.718937</td>\n", |
|
|
1281 |
" <td>0.746262</td>\n", |
|
|
1282 |
" <td>0.771295</td>\n", |
|
|
1283 |
" <td>0.719272</td>\n", |
|
|
1284 |
" <td>0.757630</td>\n", |
|
|
1285 |
" </tr>\n", |
|
|
1286 |
" <tr>\n", |
|
|
1287 |
" <th>97</th>\n", |
|
|
1288 |
" <td>c_index</td>\n", |
|
|
1289 |
" <td>0.681936</td>\n", |
|
|
1290 |
" <td>0.622950</td>\n", |
|
|
1291 |
" <td>0.632312</td>\n", |
|
|
1292 |
" <td>0.691211</td>\n", |
|
|
1293 |
" <td>0.702253</td>\n", |
|
|
1294 |
" <td>0.713004</td>\n", |
|
|
1295 |
" <td>0.764441</td>\n", |
|
|
1296 |
" <td>0.703018</td>\n", |
|
|
1297 |
" <td>0.711824</td>\n", |
|
|
1298 |
" <td>0.705405</td>\n", |
|
|
1299 |
" <td>0.736925</td>\n", |
|
|
1300 |
" <td>0.752371</td>\n", |
|
|
1301 |
" <td>0.759428</td>\n", |
|
|
1302 |
" <td>0.742972</td>\n", |
|
|
1303 |
" <td>0.767404</td>\n", |
|
|
1304 |
" </tr>\n", |
|
|
1305 |
" <tr>\n", |
|
|
1306 |
" <th>98</th>\n", |
|
|
1307 |
" <td>c_index</td>\n", |
|
|
1308 |
" <td>0.656847</td>\n", |
|
|
1309 |
" <td>0.615154</td>\n", |
|
|
1310 |
" <td>0.590876</td>\n", |
|
|
1311 |
" <td>0.674011</td>\n", |
|
|
1312 |
" <td>0.692707</td>\n", |
|
|
1313 |
" <td>0.681858</td>\n", |
|
|
1314 |
" <td>0.744600</td>\n", |
|
|
1315 |
" <td>0.644136</td>\n", |
|
|
1316 |
" <td>0.691802</td>\n", |
|
|
1317 |
" <td>0.683360</td>\n", |
|
|
1318 |
" <td>0.698968</td>\n", |
|
|
1319 |
" <td>0.739034</td>\n", |
|
|
1320 |
" <td>0.745125</td>\n", |
|
|
1321 |
" <td>0.704566</td>\n", |
|
|
1322 |
" <td>0.732215</td>\n", |
|
|
1323 |
" </tr>\n", |
|
|
1324 |
" <tr>\n", |
|
|
1325 |
" <th>99</th>\n", |
|
|
1326 |
" <td>c_index</td>\n", |
|
|
1327 |
" <td>0.669690</td>\n", |
|
|
1328 |
" <td>0.592228</td>\n", |
|
|
1329 |
" <td>0.607509</td>\n", |
|
|
1330 |
" <td>0.719367</td>\n", |
|
|
1331 |
" <td>0.660632</td>\n", |
|
|
1332 |
" <td>0.686721</td>\n", |
|
|
1333 |
" <td>0.774706</td>\n", |
|
|
1334 |
" <td>0.667635</td>\n", |
|
|
1335 |
" <td>0.712531</td>\n", |
|
|
1336 |
" <td>0.717563</td>\n", |
|
|
1337 |
" <td>0.688255</td>\n", |
|
|
1338 |
" <td>0.749244</td>\n", |
|
|
1339 |
" <td>0.767077</td>\n", |
|
|
1340 |
" <td>0.723260</td>\n", |
|
|
1341 |
" <td>0.745843</td>\n", |
|
|
1342 |
" </tr>\n", |
|
|
1343 |
" </tbody>\n", |
|
|
1344 |
"</table>\n", |
|
|
1345 |
"<p>100 rows × 16 columns</p>\n", |
|
|
1346 |
"</div>" |
|
|
1347 |
], |
|
|
1348 |
"text/plain": [ |
|
|
1349 |
" metric C R P RNA C+R C+P \\\n", |
|
|
1350 |
"0 c_index 0.659810 0.589693 0.607118 0.693620 0.678043 0.677309 \n", |
|
|
1351 |
"1 c_index 0.695589 0.592447 0.597955 0.691800 0.673513 0.683269 \n", |
|
|
1352 |
"2 c_index 0.690391 0.626409 0.589263 0.696218 0.688368 0.693160 \n", |
|
|
1353 |
"3 c_index 0.668751 0.635003 0.627711 0.671152 0.687855 0.701360 \n", |
|
|
1354 |
"4 c_index 0.671193 0.608000 0.603053 0.697055 0.678924 0.678217 \n", |
|
|
1355 |
".. ... ... ... ... ... ... ... \n", |
|
|
1356 |
"95 c_index 0.680817 0.619918 0.589981 0.683733 0.698637 0.682220 \n", |
|
|
1357 |
"96 c_index 0.683808 0.599275 0.606327 0.673352 0.698419 0.718908 \n", |
|
|
1358 |
"97 c_index 0.681936 0.622950 0.632312 0.691211 0.702253 0.713004 \n", |
|
|
1359 |
"98 c_index 0.656847 0.615154 0.590876 0.674011 0.692707 0.681858 \n", |
|
|
1360 |
"99 c_index 0.669690 0.592228 0.607509 0.719367 0.660632 0.686721 \n", |
|
|
1361 |
"\n", |
|
|
1362 |
" C+RNA R+P R+RNA P+RNA C+R+P C+R+RNA C+P+RNA \\\n", |
|
|
1363 |
"0 0.749478 0.655850 0.699615 0.692120 0.692686 0.725447 0.754048 \n", |
|
|
1364 |
"1 0.762107 0.649618 0.698007 0.671555 0.700982 0.746797 0.749128 \n", |
|
|
1365 |
"2 0.760881 0.660076 0.703450 0.677189 0.702931 0.744362 0.755680 \n", |
|
|
1366 |
"3 0.731493 0.687901 0.690491 0.676949 0.729386 0.730354 0.723863 \n", |
|
|
1367 |
"4 0.738403 0.661799 0.712107 0.698718 0.691363 0.737642 0.737483 \n", |
|
|
1368 |
".. ... ... ... ... ... ... ... \n", |
|
|
1369 |
"95 0.748170 0.643427 0.695090 0.691974 0.701519 0.742775 0.740572 \n", |
|
|
1370 |
"96 0.762587 0.658827 0.693451 0.697164 0.718937 0.746262 0.771295 \n", |
|
|
1371 |
"97 0.764441 0.703018 0.711824 0.705405 0.736925 0.752371 0.759428 \n", |
|
|
1372 |
"98 0.744600 0.644136 0.691802 0.683360 0.698968 0.739034 0.745125 \n", |
|
|
1373 |
"99 0.774706 0.667635 0.712531 0.717563 0.688255 0.749244 0.767077 \n", |
|
|
1374 |
"\n", |
|
|
1375 |
" R+P+RNA C+R+P+RNA \n", |
|
|
1376 |
"0 0.708004 0.735309 \n", |
|
|
1377 |
"1 0.708973 0.746751 \n", |
|
|
1378 |
"2 0.709648 0.742564 \n", |
|
|
1379 |
"3 0.719733 0.745682 \n", |
|
|
1380 |
"4 0.713351 0.726051 \n", |
|
|
1381 |
".. ... ... \n", |
|
|
1382 |
"95 0.700029 0.736994 \n", |
|
|
1383 |
"96 0.719272 0.757630 \n", |
|
|
1384 |
"97 0.742972 0.767404 \n", |
|
|
1385 |
"98 0.704566 0.732215 \n", |
|
|
1386 |
"99 0.723260 0.745843 \n", |
|
|
1387 |
"\n", |
|
|
1388 |
"[100 rows x 16 columns]" |
|
|
1389 |
] |
|
|
1390 |
}, |
|
|
1391 |
"execution_count": 24, |
|
|
1392 |
"metadata": {}, |
|
|
1393 |
"output_type": "execute_result" |
|
|
1394 |
} |
|
|
1395 |
], |
|
|
1396 |
"source": [ |
|
|
1397 |
"data_train = Surv.from_arrays(event=df[df[\"repeat\"] == 0][\"label.event\"].values,\n", |
|
|
1398 |
" time=df[df[\"repeat\"] == 0][\"label.time\"].values)\n", |
|
|
1399 |
"\n", |
|
|
1400 |
"results = compute_cindex(df.set_index(\"samples\").loc[list(set(list(all_patients)) & set(df[\"samples\"].unique()))],\n", |
|
|
1401 |
" names=list(df.columns[2:-3].values),\n", |
|
|
1402 |
" data_train = data_train)\n", |
|
|
1403 |
"\n", |
|
|
1404 |
"new_cols = {}\n", |
|
|
1405 |
"for col in results.columns.values[1:]:\n", |
|
|
1406 |
" l = col.split(\"+\")\n", |
|
|
1407 |
" new = []\n", |
|
|
1408 |
" for item in l:\n", |
|
|
1409 |
" if item == 'radiomics':\n", |
|
|
1410 |
" new.append('R')\n", |
|
|
1411 |
" if item == 'RNA':\n", |
|
|
1412 |
" new.append('RNA')\n", |
|
|
1413 |
" if item == 'pathomics':\n", |
|
|
1414 |
" new.append(\"P\")\n", |
|
|
1415 |
" if item == 'clinicals':\n", |
|
|
1416 |
" new.append(\"C\")\n", |
|
|
1417 |
" new_cols[col] = \"+\".join(new)\n", |
|
|
1418 |
"\n", |
|
|
1419 |
"results = results.rename(columns = new_cols)\n", |
|
|
1420 |
"results" |
|
|
1421 |
] |
|
|
1422 |
}, |
|
|
1423 |
{ |
|
|
1424 |
"cell_type": "code", |
|
|
1425 |
"execution_count": 25, |
|
|
1426 |
"id": "7eec41cc-fc6d-4594-9f5f-de9ad3e7b2f5", |
|
|
1427 |
"metadata": { |
|
|
1428 |
"tags": [] |
|
|
1429 |
}, |
|
|
1430 |
"outputs": [ |
|
|
1431 |
{ |
|
|
1432 |
"data": { |
|
|
1433 |
"text/html": [ |
|
|
1434 |
"<div>\n", |
|
|
1435 |
"<style scoped>\n", |
|
|
1436 |
" .dataframe tbody tr th:only-of-type {\n", |
|
|
1437 |
" vertical-align: middle;\n", |
|
|
1438 |
" }\n", |
|
|
1439 |
"\n", |
|
|
1440 |
" .dataframe tbody tr th {\n", |
|
|
1441 |
" vertical-align: top;\n", |
|
|
1442 |
" }\n", |
|
|
1443 |
"\n", |
|
|
1444 |
" .dataframe thead th {\n", |
|
|
1445 |
" text-align: right;\n", |
|
|
1446 |
" }\n", |
|
|
1447 |
"</style>\n", |
|
|
1448 |
"<table border=\"1\" class=\"dataframe\">\n", |
|
|
1449 |
" <thead>\n", |
|
|
1450 |
" <tr style=\"text-align: right;\">\n", |
|
|
1451 |
" <th></th>\n", |
|
|
1452 |
" <th>C</th>\n", |
|
|
1453 |
" <th>R</th>\n", |
|
|
1454 |
" <th>P</th>\n", |
|
|
1455 |
" <th>RNA</th>\n", |
|
|
1456 |
" <th>C+R</th>\n", |
|
|
1457 |
" <th>C+P</th>\n", |
|
|
1458 |
" <th>C+RNA</th>\n", |
|
|
1459 |
" <th>R+P</th>\n", |
|
|
1460 |
" <th>R+RNA</th>\n", |
|
|
1461 |
" <th>P+RNA</th>\n", |
|
|
1462 |
" <th>C+R+P</th>\n", |
|
|
1463 |
" <th>C+R+RNA</th>\n", |
|
|
1464 |
" <th>C+P+RNA</th>\n", |
|
|
1465 |
" <th>R+P+RNA</th>\n", |
|
|
1466 |
" <th>C+R+P+RNA</th>\n", |
|
|
1467 |
" </tr>\n", |
|
|
1468 |
" </thead>\n", |
|
|
1469 |
" <tbody>\n", |
|
|
1470 |
" <tr>\n", |
|
|
1471 |
" <th>mean</th>\n", |
|
|
1472 |
" <td>0.673992</td>\n", |
|
|
1473 |
" <td>0.607245</td>\n", |
|
|
1474 |
" <td>0.588779</td>\n", |
|
|
1475 |
" <td>0.687014</td>\n", |
|
|
1476 |
" <td>0.687408</td>\n", |
|
|
1477 |
" <td>0.678410</td>\n", |
|
|
1478 |
" <td>0.747706</td>\n", |
|
|
1479 |
" <td>0.654439</td>\n", |
|
|
1480 |
" <td>0.700253</td>\n", |
|
|
1481 |
" <td>0.676774</td>\n", |
|
|
1482 |
" <td>0.701327</td>\n", |
|
|
1483 |
" <td>0.738519</td>\n", |
|
|
1484 |
" <td>0.736374</td>\n", |
|
|
1485 |
" <td>0.704616</td>\n", |
|
|
1486 |
" <td>0.737414</td>\n", |
|
|
1487 |
" </tr>\n", |
|
|
1488 |
" <tr>\n", |
|
|
1489 |
" <th>std</th>\n", |
|
|
1490 |
" <td>0.013987</td>\n", |
|
|
1491 |
" <td>0.018348</td>\n", |
|
|
1492 |
" <td>0.021441</td>\n", |
|
|
1493 |
" <td>0.017007</td>\n", |
|
|
1494 |
" <td>0.013717</td>\n", |
|
|
1495 |
" <td>0.018287</td>\n", |
|
|
1496 |
" <td>0.013546</td>\n", |
|
|
1497 |
" <td>0.018074</td>\n", |
|
|
1498 |
" <td>0.014133</td>\n", |
|
|
1499 |
" <td>0.018073</td>\n", |
|
|
1500 |
" <td>0.014694</td>\n", |
|
|
1501 |
" <td>0.011929</td>\n", |
|
|
1502 |
" <td>0.015782</td>\n", |
|
|
1503 |
" <td>0.014752</td>\n", |
|
|
1504 |
" <td>0.012897</td>\n", |
|
|
1505 |
" </tr>\n", |
|
|
1506 |
" </tbody>\n", |
|
|
1507 |
"</table>\n", |
|
|
1508 |
"</div>" |
|
|
1509 |
], |
|
|
1510 |
"text/plain": [ |
|
|
1511 |
" C R P RNA C+R C+P C+RNA \\\n", |
|
|
1512 |
"mean 0.673992 0.607245 0.588779 0.687014 0.687408 0.678410 0.747706 \n", |
|
|
1513 |
"std 0.013987 0.018348 0.021441 0.017007 0.013717 0.018287 0.013546 \n", |
|
|
1514 |
"\n", |
|
|
1515 |
" R+P R+RNA P+RNA C+R+P C+R+RNA C+P+RNA R+P+RNA \\\n", |
|
|
1516 |
"mean 0.654439 0.700253 0.676774 0.701327 0.738519 0.736374 0.704616 \n", |
|
|
1517 |
"std 0.018074 0.014133 0.018073 0.014694 0.011929 0.015782 0.014752 \n", |
|
|
1518 |
"\n", |
|
|
1519 |
" C+R+P+RNA \n", |
|
|
1520 |
"mean 0.737414 \n", |
|
|
1521 |
"std 0.012897 " |
|
|
1522 |
] |
|
|
1523 |
}, |
|
|
1524 |
"execution_count": 25, |
|
|
1525 |
"metadata": {}, |
|
|
1526 |
"output_type": "execute_result" |
|
|
1527 |
} |
|
|
1528 |
], |
|
|
1529 |
"source": [ |
|
|
1530 |
"results[results[\"metric\"]==\"c_index\"].drop(columns = 'metric').apply(['mean', 'std'])" |
|
|
1531 |
] |
|
|
1532 |
}, |
|
|
1533 |
{ |
|
|
1534 |
"cell_type": "markdown", |
|
|
1535 |
"id": "2580809a-3e05-4bd7-994a-ce32bb9eb082", |
|
|
1536 |
"metadata": {}, |
|
|
1537 |
"source": [ |
|
|
1538 |
"### 2.4 Plot results" |
|
|
1539 |
] |
|
|
1540 |
}, |
|
|
1541 |
{ |
|
|
1542 |
"cell_type": "code", |
|
|
1543 |
"execution_count": 28, |
|
|
1544 |
"id": "a7129cee-66eb-4e0a-bb7c-22b101aeebfd", |
|
|
1545 |
"metadata": {}, |
|
|
1546 |
"outputs": [ |
|
|
1547 |
{ |
|
|
1548 |
"data": { |
|
|
1549 |
"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+keTnGtgGAAAAAIApYMIGc611fZIbkxw25qbDkqzejMfaL51lMSa7DQBs1Lx58zJv3ry2wwAABki9B2iGfEoTelmDOUk+leS8Usr16ayr/I4ks5J8LklKKZ9IcmCtdW738klJfpTkH5M8keSYJL+Z5Hc27LCUsiTJt5Lcms4azAuSHJfEuxqAvj300ENthwAADJh6D9AM+ZQm9NRgrrVeWEp5TpLT0jmbxy1Jjqy1/md3k+cledGYu52WZLd0lte4LclbRp3gL+k0lc9I8rNJHkun0XxUrfWKPp8LAAAAAABbUK8zmFNrPTvJuGfwqbUuHHP5C0m+MMH+PpnEmasAAAAAAKapXk7yBwAAAAAAT9PzDGYAmA7mzp3bdggAwICp9wDNkE9pggYzAEPlQx/6UNshAAADpt4DNEM+pQmWyAAAAAAAoC8azAAMlSOOOCJHHHFE22EAAAOk3gM0Qz6lCZbIAGCoPPbYY22HAAAMmHoP0Az5lCaYwQwAAAAAQF80mAEAAAAA6IsGMwAAAAAAfbEGMwBD5eijj247BABgwNR7gGbIpzRBgxmAofLe97637RAAgAFT7wGaIZ/SBEtkAAAAAADQFw1mAIbKnDlzMmfOnLbDAAAGSL0HaIZ8ShM0mAEAAAAA6IsGMwAAAAAAfdFgBgAAAACgLxrMAAAAAAD0Zeu2AwCAJr3+9a9vOwQAYMDUe4BmyKc0QYMZgKFyyimntB0CADBg6j1AM+RTmmCJDACGyrp167Ju3bq2wwAABki9B2iGfEoTzGAGYKgceeSRSZKVK1e2GwgAMDDqPUAz5FOaYAYzAAAAAAB90WAGAAAAAKAvGswAAAAAAPRFgxkAAAAAgL44yR8AQ2XhwoVthwAADJh6D9AM+ZQmaDADMFQcIAHA8FPvAZohn9IES2QAMFQefPDBPPjgg22HAQAMkHoP0Az5lCaYwQzAUDn++OOTJCtXrmw3EABgYNR7gGbIpzTBDGYAAAAAAPqiwQwAAAAAQF80mAEAAAAA6IsGMwAAAAAAfXGSPwCGysknn9x2CADAgKn3AM2QT2mCBjMAQ2X+/PlthwAADJh6D9AM+ZQmWCIDgKFy11135a677mo7DABggNR7gGbIpzTBDGYAhsqb3vSmJMnKlSvbDQQAGBj1HqAZ8ilNMIMZAAAAAIC+aDADAAAAANAXDWYAAAAAAPqiwQwAAAAAQF+c5A+AofKe97yn7RAAgAFT7wGaIZ/SBA1mAIbKMccc03YIAMCAqfcAzZBPaYIlMgAYKmvXrs3atWvbDgMAGCD1HqAZ8ilNMIMZgKHy9re/PUmycuXKdgMBAAZGvQdohnxKE8xgBgAAAACgLxrMAAAAAAD0RYMZAAAAAIC+aDADAAAAANAXJ/kDYKicdtppbYcAAAyYeg/QDPmUJmgwAzBUDj300LZDAAAGTL0HaIZ8ShMskQHAULnpppty0003tR0GADBA6j1AM+RTmmAGMwBDZcmSJUmSlStXthoHADA46j1AM+RTmmAGMwAAAAAAfdFgBgAAAACgLxrMAAAAAAD0RYMZAAAAAIC+OMkfAEPl4x//eNshAAADpt4DNEM+pQkazAAMlYMOOqjtEACAAVPvAZohn9IES2QAMFRWr16d1atXtx0GADBA6j1AM+RTmmAGMwBD5QMf+ECSZOXKle0GAgAMjHoP0Az5lCaYwQwAAAAAQF80mAEAAAAA6IsGMwAAAAAAfdFgBgAAAACgL07yB8BQOeuss9oOAQAYMPUeoBnyKU3QYAZgqOy3335thwAADJh6D9AM+ZQmWCIDgKFy9dVX5+qrr247DABggNR7gGbIpzTBDGYAhspHP/rRJMmhhx7aciQAwKCo9wDNkE9pghnMAAAAAAD0RYMZAAAAAIC+aDADAAAAANCXnhvMpZRTSin/UUr5QSnlxlLKKzex7QtKKXWcn9eO2W52d18/KKXcUUp5x2SeDAAAAAAAW05PJ/krpcxP8ukkpyT5u+6/Xy2lvKTWeucm7vraJDePuvzwqH2+MMkVSf4syYIkv5Lk7FLKA7XWizfrWQBA1+c///m2QwAABky9B2iGfEoTemowJ3l3kmW11nO6l9/VnY18cpJTN3G/h2qt397Ibe9Icm+t9V3dy98spbwsyXuTaDAD0Je99tqr7RAAgAFT7wGaIZ/ShAmXyCilbJNk/yRXjbnpqiQHTXD3vyil3F9Kua6UcvyY214xzj6vTHJAKeUnJooLAMZz6aWX5tJLL207DABggNR7gGbIpzSh1Fo3vUEps5Lck2R2rfXaUdf/XpITa61P+1NHKWXHJCcluS7J40lel+SDSU6qtS7vbnNbkuW11t8fdb9DkqxKMqvWet+YfS5Osrh7ca8kazfvqdKwHZM82HYQQ8aYNs+YNst4Ns+YNs+YNs+YNst4Ns+YNs+YNs+YNs+YNst4Ns+YNs+Ytu/BWutrx17Z6xIZSTK2E13Gua6zYa0PJjlz1FVruk3n9ydZPsE+x7s+tdalSZZuRrwMUCllTa31gLbjGCbGtHnGtFnGs3nGtHnGtHnGtFnGs3nGtHnGtHnGtHnGtFnGs3nGtHnGdOqacImMdP4y8OMkO4+5fqck39mMx/pGkp8bdfnbG9nn40ke2oz9AgAAAADQggkbzLXW9UluTHLYmJsOS7J6Mx5rvySjl734epJDx9nnmlrrjzZjvwAAAAAAtKDXJTI+leS8Usr16ayr/I4ks5J8LklKKZ9IcmCtdW738klJfpTkH5M8keSYJL+Z5HdG7fNzSd5ZSjkryeeTHJxkYZI3TOoZsaVYrqR5xrR5xrRZxrN5xrR5xrR5xrRZxrN5xrR5xrR5xrR5xrRZxrN5xrR5xnSKmvAkf09uWMop6ayh/LwktyT57Q0n/SulLEsyp9b6gu7lk9JpJu+WzvIatyU5a8MJ/kbtc3aSP06yd5J7k/xhrfVzk35WAAAAAAAMXM8NZgAAAAAAGK2Xk/wBAAAAAMDTaDADAAAAANAXDWY2SynlZ0opny6l/Hsp5YellHtKKV8tpRzZdmzTTSllWSmldn8eL6XcWUr5bCnlWW3HNp2NGdcflVLuKKWcUUr5qbZjm0p6ef+VUr7Vvf2VY+47Ukq5ZZx9blNKeaCU8mgp5ae3xPOYSprMj6WUF4x6fWop5f+VUv6+lHLMIGKfygY8rt8tpVzbPSfEtNbG+6+UsrB7+9Xj7KOWUo4f5/p3l1J+XEr52ObGNRU1XcuH9T26BcZpxr1HmzzeGTVOG36+U0q5tJSy90Ye87Qx18/pXr/jOPv+q+54Hrb5z3LLmw61vMnXfhIxTLdx2mjeKVPkeHfAYzrpWjJqnGop5bFSyr+WUt5XSinjPO5DY8emlLKylPKZcfb7S90ccV2/sW0k3ilfn6fKmE7Dz/Ok815R9wZCg5melVJekOQfkhye5NQkv5jk0CSXJ3Fyxv5cnc6JM1+QZFGSY5Kc3WZAQ2LDuO6e5LQkpyQ5o9WIpqZe3n8/SPKHPe7vuCT/keTvk7yxkQiniX7yY/egcs4Eu35tOq/Ry5Jcn+TiUso+jQQ9DWyBcZ2d5JEkV5RSXthI0C1o+f334ySzSymH9xjuW5P8QZKFpZRn9HifqW6zavlMfI92DXKcZup7tKfjnQ2/8E+wr3Xdfc1KclSSn0pyeSllmzHb/SDJ+0spz50ouFLK85LMTeek7osm2r5tU6WWdxsfKyfYZ2vHutN0nF6QTeedVo93p8LxTreRNjLB/n6/u78Xp/N++3iSxeNst12S351gXxu8LZ3XZJ9Syot7vE+vWq3P02FMp+nnecK8p+61Q4OZzXF2kpLkgFrrl2uta2ut36y1fibJvi3HNl39sNb67Vrr3bXWq5JcmOQ1bQc1BDaM61211i8lOT+dg0Geqpf339Ikv1RK+bUe9vfWJOcl+WL3/zPJoPLjQ93X6F+TfDDJTyR5VQPxTheDHtd/SvL2dA7ap3PubfP994N08sQfllI2eVxZSnlFkh2TjCR5LMkRk4htKhlELR+292gy2HGaqe/RJo93andf99Va16Tzy/FuSfYas901Sb6V5EM97HNhkq8l+ZMkryulPKfP2LaU6VTL2zzWnY7jNFHeaft4d7oc7zza3d+3aq3nJvmnjezvT5L8z1LKz25qZ6WUbdNp0p+T5KI0//vDdKjPbY/pdPw8N5X31L2GaTDTk1LKs9P5K9Rnaq3fH3t7rfW7Wz6q4VJK2T2dMf5R27EMocfSKWpsxCbef3cl+dMknyilbL2J+++WZE6SC5L8RZKfL6XsN5Bgp5gtkR9LKT+RzmyEZIbkiC1Yd9Z1/52WOWKKvP8+kuRFSU6cYFeLklxQa/1RkuUZwpkdA6rl0/o9Op6mx8l79EmNHO+UUp6Z/56ZOXY8n0hnFt07Sikv2sQ+SpK3JFlea70zyTeSvGmysQ3KFMmlk7FFjnWn8zhNkHdaO96djsc7pWNOOrNuxxvPP0/yz+nMzt2U45P8Z7dZe16SN3df/8ZN9frcxphO589zV2N5bybWvUHQYKZXe6Tzl61vth3IkHltKeX7pZTHkvx7kpek969n0YNSyoHpFIsVbccyBfX6/vtEkudm079ovyXJX9daH6i1/lc6B90zZRbzIPPjtaWU76czA+/MdL6S+eUBPM5UNPC6Uzrrtn0ina/QrxrU4wxY6++/Wuv96XxF8fRSyk+Ot6NSyv+X5PXp/LKTdGZ+HVlK2XkAcW9pA6vlQ/Ie3WAQ4+Q92tXA8c5PdV+f/0ry3SQnJPmr7uyzp6i1XpHkuiSbWqd6TpJnp/M162Tqf7up9Vzary18rDvdxmlz8k5bx7vT6XjnY93X6IfpzOos6czUHM/7k5xUxqxpO8ai/HfOXZVOw/Z1k4hvrOlQn9sc0+n2eX5SQ3lvpte9xmkw06sy8Sb04dok+yU5MJ2/ml+RjRcUerfhYOIHSb6ezji/q+WYpqKe3n/dv15/IsmHyzgnUuh+5Xhh/vtgJt3/n1hK+R+NRz319JQfS+dkGd/f8JNk1yRjrxvrjUl+KZ0Dw39L8pZa68ONRT61DXJcNxz0PprOenwLa63/3FzoW9RUef+dmeR/JPnNjdx+QpK7u19BTK31jiQ3JDmpl/inuE3mUu/RJw1inGb6e3Sjxztjxu3WsdeVUr46Zl/r0nl99k/na9//1v13Y96f5NdLKQds5Pa3JvlyrXV99/JFSV5USnnZZj/LLaO1XFpKeeWY+38uySvHvF4fGLPPto51p9s49fy7VovHu60c75RSPjDmvicm+cCY8XzlmP19Kp3xnJ1OM/QjtdbV48Vba12V5Mp0xnS857NHkoOTfKm7fU1nyYMmvzmyRevzNBzT6fZ53mTeU/fat9Gvf8AY/5akpvOVjb9sOZZhsq7Wenv3/79VSrkmnbV9RtoLaShcm87JEX6U5N7uV115us15//1pkncmefc4t70mnQON80sp54+6/hlJ5qVzYDPMes2Pi5JsO+ryyiS/k87Xpzbm7lrrvyX5t+7B0p+XUl5Sa31wciFPC4Mc1zem8zXD79VaH5pcmK2bEu+/Wuv3Sym/n84M0T/byOPvVUp5fNR1W6UzW2y6f3Nnolw609+jGwxinGb6e3RTxzv7jfr/z6YznqOve2zMvuqo1+dfS+dERf83G1kzs9Z6Qynl4nTG5vTRt5XOV43nJdmmlPK2UTc9I51x3tRr2pY2c+maPPW1+bV0xm/0ki5j/3DS1rHudBunzf1dq43j3baOdz6Xp84o/cMk9+SpDfh7xtznoe543l5KmZfOa/WNWus1G3n830ly8zhN1Q3P5xlJ7izlyT5nSZJSyvNrrXdt4nn1akvX5+k2ptPt8zxR3hu9P3WvBRrM9KTW+nAp5cok7yyl/MnYNXpKKc+stX6vneiGykfS+Wvg0lrrvW0HM42NPpigdxt9/9Vaf1BK+b10DrzPG3O/t6bzFcEPj7n+t7q3DXWDudf8WGu9Z8z1jye5p9f3aq11VSnlX5L8XjpjO9QGPK5311r/fQBhb3FT7P23NMmSjDnLeel8lfNlSQ5L8u1RN22b5LpSyiG11mt7iWOaeEounenv0U1oYpyeNEPfoxs93hl9/Yam+WYeG/1xkneXUn6t1voXG9nmA0n+JZ01PEc7MckDSY4cc/0rkpxZSlnSXV5gymgzl9ZaH0sy+vW6P8ljE+yzlWPdaThOY23yd602jnfbOt7pziYdPaP00SQPb8Zr9N1SymeS/HEp5Ze6s2XHbnNLKeWLST6ZzhIQGx5r63S+HXJqksvG3O28JL+Ridca7sdA6/N0G9Np+HneZN5T99pniQw2xynp/AVsTSnl10spe5VSfr6UcnI6ZztlkmqtK9P5OsdpLYfCDNTD+++8dM6g+5YNV5RSdkznq09fqLXeMvonyf9OMqds4mQIQ2RL5cczkywupTy/wX1OZepOb6bE+6/W+ng6B95jm3uLkvxjrfXqMXnihnTWzptuJ1LbJLW8NwMaJ+/RhtRaH0lybpKPlM7SAONtc3s6Tfv/Oeamtya5aJzjgi+kc7Kk+QMMfTKmRC6dBqbtOPWYd9o43p2uxzv/K8leSX59E9v8XjqzSEcvE3BUkh2TnDPOeF6Q5C0byzuTMU3q85Ye02n7eW7aDK17jdJgpme11v9I8stJ/jqdrwX8U5K/SafYbmqtGjbPp5K8tXTOUgxb2kbff7XWJ9L5OtTodebenM5fz68cZ/tvpHNW7qE/ucEWzI+XpfNLz4ca3OeUpe70Ziq9/2qtF2XULySllG2SLEhnHbrx/HmS40spP91cmFOCWt6bpsfJe7RZn07y8+msT70xv5/kyWVFSim/nM66m08bz9pZl/KvMkUb9lMpl05lQzBOm8w7bRzvTtfjnVrrA+k05Ec20ZC7K50lIkaP51uTXFPHXwLqz5PsluTQhsPdYErX5y09pkPweW7ajKp7TSvjzLoHAAAAAIAJmcEMAAAAAEBfNJgBAAAAAOiLBjMAAAAAAH3RYAYAAAAAoC8azAAAAAAA9EWDGQAAAACAvmgwAwAAAADQFw1mAAAAAAD68v8DY+PT5qWGwcsAAAAASUVORK5CYII=\n", |
|
|
1550 |
"text/plain": [ |
|
|
1551 |
"<Figure size 1440x504 with 1 Axes>" |
|
|
1552 |
] |
|
|
1553 |
}, |
|
|
1554 |
"metadata": { |
|
|
1555 |
"needs_background": "light" |
|
|
1556 |
}, |
|
|
1557 |
"output_type": "display_data" |
|
|
1558 |
} |
|
|
1559 |
], |
|
|
1560 |
"source": [ |
|
|
1561 |
"fig = plot_metrics(results,\n", |
|
|
1562 |
" metrics='c_index',\n", |
|
|
1563 |
" models = list(results.columns[1:]),\n", |
|
|
1564 |
" annotations = {\"1 modality\": (0, 3), \"2 modalities\": (4, 9), \"3 modalities\": (10, 13), \"4 modalities\": (14, 15)},\n", |
|
|
1565 |
" title=None, ylim=(0.5, 0.77), y_text=0.77,\n", |
|
|
1566 |
" ax=None)" |
|
|
1567 |
] |
|
|
1568 |
} |
|
|
1569 |
], |
|
|
1570 |
"metadata": { |
|
|
1571 |
"kernelspec": { |
|
|
1572 |
"display_name": "Python [conda env:latefus_env]", |
|
|
1573 |
"language": "python", |
|
|
1574 |
"name": "conda-env-latefus_env-py" |
|
|
1575 |
}, |
|
|
1576 |
"language_info": { |
|
|
1577 |
"codemirror_mode": { |
|
|
1578 |
"name": "ipython", |
|
|
1579 |
"version": 3 |
|
|
1580 |
}, |
|
|
1581 |
"file_extension": ".py", |
|
|
1582 |
"mimetype": "text/x-python", |
|
|
1583 |
"name": "python", |
|
|
1584 |
"nbconvert_exporter": "python", |
|
|
1585 |
"pygments_lexer": "ipython3", |
|
|
1586 |
"version": "3.8.13" |
|
|
1587 |
} |
|
|
1588 |
}, |
|
|
1589 |
"nbformat": 4, |
|
|
1590 |
"nbformat_minor": 5 |
|
|
1591 |
} |