{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Analyse de survie en pratique"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Quelques données\n",
"\n",
"On récupère les données disponibles sur *open.data.gouv.fr* [Données hospitalières relatives à l'épidémie de COVID-19](https://www.data.gouv.fr/fr/datasets/donnees-hospitalieres-relatives-a-lepidemie-de-covid-19/). Ces données ne permettent pas de construire la courbe de [Kaplan-Meier](https://fr.wikipedia.org/wiki/Estimateur_de_Kaplan-Meier). On sait combien de personnes rentrent et sortent chaque jour mais on ne sait pas quand une personne qui sort un 1er avril est entrée."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" jour \n",
" rad \n",
" dc \n",
" \n",
" \n",
" \n",
" \n",
" 0 \n",
" 2020-03-18 \n",
" NaN \n",
" NaN \n",
" \n",
" \n",
" 1 \n",
" 2020-03-19 \n",
" 695.0 \n",
" 207.0 \n",
" \n",
" \n",
" 2 \n",
" 2020-03-20 \n",
" 806.0 \n",
" 248.0 \n",
" \n",
" \n",
" 3 \n",
" 2020-03-21 \n",
" 452.0 \n",
" 151.0 \n",
" \n",
" \n",
" 4 \n",
" 2020-03-22 \n",
" 608.0 \n",
" 210.0 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" jour rad dc\n",
"0 2020-03-18 NaN NaN\n",
"1 2020-03-19 695.0 207.0\n",
"2 2020-03-20 806.0 248.0\n",
"3 2020-03-21 452.0 151.0\n",
"4 2020-03-22 608.0 210.0"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import numpy.random as rnd\n",
"\n",
"import pandas\n",
"\n",
"df = pandas.read_csv(\n",
" \"https://www.data.gouv.fr/fr/datasets/r/63352e38-d353-4b54-bfd1-f1b3ee1cabd7\",\n",
" sep=\";\",\n",
")\n",
"gr = df[[\"jour\", \"rad\", \"dc\"]].groupby([\"jour\"]).sum()\n",
"diff = gr.diff().reset_index(drop=False)\n",
"diff.head()"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" entree \n",
" sortie \n",
" issue \n",
" \n",
" \n",
" \n",
" \n",
" 1905678 \n",
" -148 \n",
" 3 \n",
" 1 \n",
" \n",
" \n",
" 577877 \n",
" -147 \n",
" 40 \n",
" 1 \n",
" \n",
" \n",
" 1126578 \n",
" -140 \n",
" 6 \n",
" 1 \n",
" \n",
" \n",
" 1140232 \n",
" -140 \n",
" 11 \n",
" 1 \n",
" \n",
" \n",
" 1205621 \n",
" -131 \n",
" 26 \n",
" 1 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" entree sortie issue\n",
"1905678 -148 3 1\n",
"577877 -147 40 1\n",
"1126578 -140 6 1\n",
"1140232 -140 11 1\n",
"1205621 -131 26 1"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"def donnees_artificielles(hosp, mu=14, nu=21):\n",
" dt = pandas.to_datetime(hosp[\"jour\"])\n",
" res = []\n",
" for i in range(hosp.shape[0]):\n",
" date = dt[i].dayofyear\n",
" h1 = hosp.iloc[i, 1]\n",
" h2 = hosp.iloc[i, 2]\n",
" if h1 < 0 or h2 < 0:\n",
" continue\n",
" delay1 = rnd.exponential(mu, int(h1))\n",
" for j in range(delay1.shape[0]):\n",
" res.append([date - int(delay1[j]), date, 1])\n",
" delay2 = rnd.exponential(mu, int(h2))\n",
" for j in range(delay2.shape[0]):\n",
" res.append([date - int(delay2[j]), date, 0])\n",
" return pandas.DataFrame(res, columns=[\"entree\", \"sortie\", \"issue\"])\n",
"\n",
"\n",
"data = donnees_artificielles(diff[1:].reset_index(drop=True)).sort_values(\"entree\")\n",
"data.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Chaque ligne est une personne, `entree` est le jour d'entrée à l'hôpital, `sortie` celui de la sortie, `issue`, 0 pour décès, 1 pour en vie."
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" entree \n",
" sortie \n",
" issue \n",
" \n",
" \n",
" \n",
" \n",
" count \n",
" 1.993886e+06 \n",
" 1.993886e+06 \n",
" 1.993886e+06 \n",
" \n",
" \n",
" mean \n",
" 1.481621e+02 \n",
" 1.616597e+02 \n",
" 8.642781e-01 \n",
" \n",
" \n",
" std \n",
" 1.152239e+02 \n",
" 1.143726e+02 \n",
" 3.424931e-01 \n",
" \n",
" \n",
" min \n",
" -1.480000e+02 \n",
" 1.000000e+00 \n",
" 0.000000e+00 \n",
" \n",
" \n",
" 25% \n",
" 5.100000e+01 \n",
" 6.400000e+01 \n",
" 1.000000e+00 \n",
" \n",
" \n",
" 50% \n",
" 1.130000e+02 \n",
" 1.250000e+02 \n",
" 1.000000e+00 \n",
" \n",
" \n",
" 75% \n",
" 2.600000e+02 \n",
" 2.750000e+02 \n",
" 1.000000e+00 \n",
" \n",
" \n",
" max \n",
" 3.660000e+02 \n",
" 3.660000e+02 \n",
" 1.000000e+00 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" entree sortie issue\n",
"count 1.993886e+06 1.993886e+06 1.993886e+06\n",
"mean 1.481621e+02 1.616597e+02 8.642781e-01\n",
"std 1.152239e+02 1.143726e+02 3.424931e-01\n",
"min -1.480000e+02 1.000000e+00 0.000000e+00\n",
"25% 5.100000e+01 6.400000e+01 1.000000e+00\n",
"50% 1.130000e+02 1.250000e+02 1.000000e+00\n",
"75% 2.600000e+02 2.750000e+02 1.000000e+00\n",
"max 3.660000e+02 3.660000e+02 1.000000e+00"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"data.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Il y a environ 80% de survie dans ces données."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {},
"outputs": [],
"source": [
"import numpy\n",
"\n",
"duree = data.sortie - data.entree\n",
"deces = (data.issue == 0).astype(numpy.int32)"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA0EAAAFzCAYAAAD40AJWAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAABDLElEQVR4nO3deXxU9b3/8feZSWaSEJIQskMiqEixKqtE0KotFLA+rFR75SotixarIi5oi7SKS1tjxQWrKL21ovdai0tdHnXBH0bjSkFBqsWCBpGgQELUkECW2c7vj3TGmWSSzIRk1tfz8eBxyVnmfOf0mHs+fD7fz9cwTdMUAAAAACQJS7QHAAAAAACRRBAEAAAAIKkQBAEAAABIKgRBAAAAAJIKQRAAAACApEIQBAAAACCpEAQBAAAASCoEQQAAAACSSkq0BxAKj8ejPXv2aODAgTIMI9rDAQAAABAlpmmqqalJJSUlslh6l9OJiyBoz549Ki0tjfYwAAAAAMSI3bt3a+jQob06Ny6CoIEDB0pq/6JZWVlRHg0AAACAaGlsbFRpaakvRuiNuAiCvCVwWVlZBEEAAAAADmuaDI0RAAAAACQVgiAAAAAASYUgCAAAAEBSiYs5QQAAAEgcbrdbTqcz2sNAjLJarUpJSenXpXHCDoLeeOMNLV++XJs2bdLevXv1zDPPaObMmd2eU1VVpcWLF2vr1q0qLS3V9ddfr3nz5vVyyAAAAIhXBw8e1Oeffy7TNKM9FMSwjIwMFRcXy2az9cvnhx0EHTp0SKNHj9aFF16oc845p8fjd+7cqTPPPFOXXHKJ/vKXv6iyslI/+9nPVFxcrOnTp/dq0AAAAIg/brdbn3/+uTIyMpSfn9+v/9KP+GSaphwOh/bv36+dO3dqxIgRvV4QtTthB0FnnHGGzjjjjJCPX7VqlYYPH64777xTkjRq1Ci99dZbuvvuuwmCAAAAkojT6ZRpmsrPz1d6enq0h4MYlZ6ertTUVO3atUsOh0NpaWl9fo1+b4ywfv16TZ06NWDb9OnTtX79+i7PaWtrU2NjY8AfAAAAJAYyQOhJf2R/Aj6/Xz9d0r59+1RYWBiwrbCwUI2NjWppaQl6TkVFhbKzs31/SktL+3uYAAAAAJJETLbIXrp0qQ4cOOD7s3v37mgPSVJ7jWKzw9XpDxP7AAAAgPjR7y2yi4qKVFtbG7CttrZWWVlZXdaC2u122e32/h5a2Fqcbh277OVO28eU5uiZyyaT2gUAAEDMmTdvnhoaGvTss89Geygxo98zQZMmTVJlZWXAtnXr1mnSpEn9femI2bK7QXsbWqM9DAAAAPSDefPmdVoS5qmnnlJaWpruvPNOzZs3T4Zh6JJLLul07sKFC2UYRkSWh/nss89kGIa2bNkSsP2ee+7Rww8/3O/XD3afYlXYQdDBgwe1ZcsW383duXOntmzZopqaGkntpWxz5szxHX/JJZfo008/1S9/+Utt27ZN999/v5544gldffXVffMNIig91aqPbpmu9dd9T69fe7rWXvkd377GVielcQAAAEngwQcf1OzZs/XAAw/ommuukSSVlpZqzZo1AXPeW1tb9dhjj6msrCxaQ5UkZWdnKycnJ6pjiDVhB0Hvvfeexo4dq7Fjx0qSFi9erLFjx2rZsmWSpL179/oCIkkaPny4XnjhBa1bt06jR4/WnXfeqQcffDAu22MbhqEMW4qKc9J1RN4AlQ3O8O2bcc+bOnbZy/rR/e8QCAEAAISgq/nWkfjT2/e122+/XYsWLdKaNWs0f/583/Zx48aptLRUTz/9tG/b008/rbKyMt97cyg8Ho8qKio0fPhwpaena/To0Xrqqad8+7/++mvNnj3b12Z8xIgRWr16taT2925JGjt2rAzD0Omnny6pc4bm9NNP16JFi3TVVVdp0KBBKiws1J/+9CcdOnRI8+fP18CBA3X00UfrpZde8p3jdrt10UUX+cY1cuRI3XPPPb79N910kx555BE999xzMgxDhmGoqqpKkrR7926dd955ysnJUW5urs4++2x99tlnId+T/hD2nKDTTz+924cmWKrt9NNP1/vvvx/upWJeeqpVY0pztGV3g2+btzSuZBC97wEAALrT1XzrSPjolunKsIX3KrxkyRLdf//9ev755zVlypRO+y+88EKtXr1as2fPliQ99NBDmj9/vi8YCEVFRYUeffRRrVq1SiNGjNAbb7yhn/zkJ8rPz9dpp52mG264QR999JFeeukl5eXlqbq62pd92rhxoyZOnKhXXnlF3/72t2Wz2bq8ziOPPKJf/vKX2rhxox5//HFdeumleuaZZ/SjH/1Iv/rVr3T33Xfrpz/9qWpqapSRkSGPx6OhQ4fqySef1ODBg/XOO+/o4osvVnFxsc477zxde+21+ve//63GxkZfUJabmyun06np06dr0qRJevPNN5WSkqLf/va3mjFjhj744INux9if+r0xQiIzDEPPXDZZexta1djq1Ix73pTUXhqX40iV1B4o0TABAAAgvr300kt67rnnVFlZqe9973tBj/nJT36ipUuXateuXZKkt99+W2vWrAk5CGpra9Ott96qV155xTd//sgjj9Rbb72lP/7xjzrttNNUU1OjsWPHasKECZKkYcOG+c7Pz8+XJA0ePFhFRUXdXmv06NG6/vrrJbVPZ7ntttuUl5enBQsWSJKWLVumBx54QB988IFOOukkpaam6uabb/adP3z4cK1fv15PPPGEzjvvPGVmZio9PV1tbW0B13700Ufl8Xj04IMP+t6JV69erZycHFVVVWnatGkh3Zu+RhB0mAzDUMmgdF/QI8kXDEl0jgMAAOiKd751tK4djhNOOEH19fW68cYbNXHiRGVmZnY6Jj8/X2eeeaYefvhhmaapM888U3l5eSFfo7q6Ws3Nzfr+978fsN3hcPhK6i699FKde+652rx5s6ZNm6aZM2dq8uTJYX0X7/fxslqtGjx4sI4//njfNu86n3V1db5tK1eu1EMPPaSamhq1tLTI4XBozJgx3V7nn//8p6qrqzVw4MCA7a2trdqxY0fY4+4rBEF9JFhpnER5HAAAQFe8863jwZAhQ/TUU0/pu9/9rmbMmKGXXnqp04u91F4Sd/nll0tqDxrCcfDgQUnSCy+8oCFDhgTs8y4fc8YZZ2jXrl168cUXtW7dOk2ZMkULFy7UHXfcEda1UlNTA342DCNgm/cf8D0ejyRpzZo1uvbaa3XnnXdq0qRJGjhwoJYvX64NGzb0+J3Gjx+vv/zlL532eTNX0RAfT10c8C+Nc7o9anG6KY8DAABIIEcccYRef/11XyC0du3aToHQjBkz5HA4ZBhG2I3Ajj32WNntdtXU1Oi0007r8rj8/HzNnTtXc+fO1Xe+8x394he/0B133OGbX+N2u8P/cj14++23NXnyZF122WW+bR0zOTabrdO1x40bp8cff1wFBQXKysrq83H1Vr+vE5RMvKVxXXWOo3scAABAfCstLVVVVZXq6uo0ffp0NTY2Buy3Wq3697//rY8++khWa3gldwMHDtS1116rq6++Wo888oh27NihzZs3695779UjjzwiqX2uznPPPafq6mpt3bpVzz//vEaNGiVJKigoUHp6utauXava2lodOHCgb760pBEjRui9997Tyy+/rI8//lg33HCD3n333YBjhg0bpg8++EDbt29XfX29nE6nZs+erby8PJ199tl68803tXPnTlVVVemKK67Q559/3mfjCxdBUD/xlsd1xMKqAAAA8W3o0KGqqqpSfX190EAoKyur11mP3/zmN7rhhhtUUVGhUaNGacaMGXrhhRd87a9tNpuWLl2qE044QaeeeqqsVqvWrFkjSUpJSdEf/vAH/fGPf1RJSYnOPvvsw/uifn7+85/rnHPO0axZs1ReXq4vv/wyICskSQsWLNDIkSM1YcIE5efn6+2331ZGRobeeOMNlZWV6ZxzztGoUaN00UUXqbW1NaqZIcOMg7REY2OjsrOzdeDAgZhKo/XENM2g5XHPXjZZJYPSNdCeovQ4qYMFAAA4XK2trdq5c6eGDx+utLS0aA8HMay7Z6UvYgPewPuRtzxOkpodLt/2mfe/I0k6uiBTf7/8ZAIhAAAAIIIoh4uQ9FSrxpXlBGyrrjuo3V+3HPbKxQAAAIh9NTU1yszM7PJPTU1NtIeYNEhBRIhhGPrbpZP1dbNDTa0unba8SpI07e43fMeMK8vR3y5lTSEAAIBEVFJSoi1btnS7H5FBEBRBhmEod4BdgzJsGj00W//8PLBjx+aaBn3d7FDuAHuURggAAID+kpKSoqOPPjraw4AIgqLCMAytufgkvbqtTs0Olxwuj3797FZJUv1Bh9L+s4IxawoBAIBExBQA9KS/nxGCoChJt6VoyqhCuTymmh0uXxDkXx43pjRHz1xGeRwAAEgM3nVzHA6H0tPTozwaxLLm5mZJUmpqar98PkFQFHkzPgNs7WsKbdndELDfu6aQt8McAABAPEtJSVFGRob279+v1NRUWSz06EIg0zTV3Nysuro65eTkhL3gbKgIgmKAYRh65rLJQdcUamx1KseRSmkcAACIe4ZhqLi4WDt37tSuXbuiPRzEsJycHBUVFfXb5xMExYiu1hTyBkOUxgEAgERgs9k0YsQIORyOaA8FMSo1NbXfMkBeBEExKD21c3kcpXEAACBRWCwWpaWlRXsYSGIEQTHIvzyusdXZqTROonMcAAAA0FsEQTHKWx7nDXqkb0rjJMrjAAAAgN6iJUeM85bGdeQtjwMAAAAQHjJBMS6UznES5XEAAABAqAiC4kBPneMkyuMAAACAUFEOF2e6K4/7dP8hNTtcMk0z8gMDAAAA4oRhxsEbc2Njo7Kzs3XgwAFlZWVFezhRZ5pm0PI4r3FlOfrbpWSFAAAAkHj6IjagHC4O+ZfHmaap0UOz9c/PD/j2b65p0NfNDuUOsEdriAAAAEDMIgiKc4ZhaM3FJ+nVbXVqaHbo189ulSTVH3QoLbV9pV2aJgAAAADfoBwuQbQ63WpsdWri7yo77aNpAgAAABJFX8QGNEZIEGmpVuVn2llTCAAAAOgB5XAJhDWFAAAAgJ4RBCUY1hQCAAAAukc5XAJjTSEAAACgMxojJDjWFAIAAEAiYZ0g9Ig1hQAAAIBABEFJhDWFAAAAAMrhkhJrCgEAACBesU4QeoU1hQAAAJDMKIdLUqwpBAAAgGRFEJTEWFMIAAAAyYhyOEhiTSEAAAAkDxojwIc1hQAAABDrWCcIfYo1hQAAAJAMCIIQFGsKAQAAIFFRDodusaYQAAAAYgnrBKHfsaYQAAAAEg3lcOhRd2sK1TW1KiWlPRM00J6idBuPFAAAAGIbb6wISVdrCs28/x3f348uyNTfLz+ZQAgAAAAxjXI4hC091apxZTmdtlfXHdTur1tYUwgAAAAxjcYI6BXTNPV1s0Muj6kWh1unLa8K2E/TBAAAAPQHGiMgagzDUO4AuwoGpqksN6NT4wSaJgAAACBWMXkDh82/cUJjq5OmCQAAAIhpvJWiT3gbJ+Q4Un3baJoAAACAWEQ5HPpUKE0TaJwAAACAaKIxAvpcT00TJBonAAAAoHei1hhh5cqVGjZsmNLS0lReXq6NGzd2e/yKFSs0cuRIpaenq7S0VFdffbVaW5k0n6h6apogtTdO+HT/IbJCAAAAiLiwJ2g8/vjjWrx4sVatWqXy8nKtWLFC06dP1/bt21VQUNDp+Mcee0zXXXedHnroIU2ePFkff/yx5s2bJ8MwdNddd/XJl0Ds8m+a4HR71OJ0+xonTLnrdUnSuLIc/e1SskIAAACIjLAzQXfddZcWLFig+fPn69hjj9WqVauUkZGhhx56KOjx77zzjk4++WRdcMEFGjZsmKZNm6bzzz+/x+wREoe3acIReQM0smigRg/NDti/uaZBXzc7ojQ6AAAAJJuwgiCHw6FNmzZp6tSp33yAxaKpU6dq/fr1Qc+ZPHmyNm3a5At6Pv30U7344ov6wQ9+0OV12tra1NjYGPAHicEwDK25+CStvGCsfjfz277t9QcdNE0AAABARIRVDldfXy+3263CwsKA7YWFhdq2bVvQcy644ALV19frlFNOkWmacrlcuuSSS/SrX/2qy+tUVFTo5ptvDmdoiCPpthRNGVWoxlanfv3sVknStLvf8O2naQIAAAD6U7+3yK6qqtKtt96q+++/X5s3b9bTTz+tF154Qb/5zW+6PGfp0qU6cOCA78/u3bv7e5iIsLRUq/Iz7T02TSAzBAAAgL4WViYoLy9PVqtVtbW1Adtra2tVVFQU9JwbbrhBP/3pT/Wzn/1MknT88cfr0KFDuvjii/XrX/9aFkvnOMxut8tut4czNMShUJomSDROAAAAQN8KKxNks9k0fvx4VVZW+rZ5PB5VVlZq0qRJQc9pbm7uFOhYrVZJ4l/40WPTBInGCQAAAOhbYbfIXrx4sebOnasJEyZo4sSJWrFihQ4dOqT58+dLkubMmaMhQ4aooqJCknTWWWfprrvu0tixY1VeXq7q6mrdcMMNOuuss3zBECB90zTh1W11ana45HB5fHOGPv+qRS6PqYH2FKXbwn5sAQAAAJ+w3yZnzZql/fv3a9myZdq3b5/GjBmjtWvX+pol1NTUBGR+rr/+ehmGoeuvv15ffPGF8vPzddZZZ+l3v/td330LJAxv0wSXx1Szw+ULgn648m1J0tEFmfr75ScTCAEAAKDXDDMOatIaGxuVnZ2tAwcOKCsrK9rDQYSYpqlzH3hHm2saArb/v6tP1dBB6ZKk9FQrc4UAAACSSF/EBgRBiGmmaerrZoeaWl06bXlVp/200wYAAEgufREb9HuLbOBwGIah3AF2leVm0E4bAAAAfYJMEOKGaZpB22n7o502AABAYuuL2IDZ5Ygb3nbaUntANHpotv75+YGAY7zttHMHsM4UAAAAgiMIQlyinTYAAAB6i3I4xLVWp9vXTnvi7yoD9tFOGwAAIPHQGAFJLy3Vqkx7ivIz7RpXlhOwr7ruoHZ/3ULTBAAAAAQgE4SEQTttAACAxEcmCPBDO20AAACEgkwQEhLttAEAABITLbKBLoTaTntPQ4sGDbApPdVKMAQAAJAkyAQhKbQ4XEHbaXuRFQIAAIgPZIKAEKXbUjRlVKFcHlOmaWrNu5/rwy++yQyxyCoAAEDyIAhC0khLtfr+/sTP2xdabWh2dFpkVRILrQIAACQwyuGQtFqdbjW2Ojstsiqx0CoAAECsokU2cBjSUq1BF1mV2hda/aT2oOqaWlXX1KoWhyvyAwQAAEC/IBOEpOddZNXlMdXicAddaJXMEAAAQGwgEwT0Ae8iqwUD01SWm9FlZmj31y0ssgoAAJAAyAQBHfSUGRpTmqNnLqOdNgAAQDSQCQL6QcfM0JjSnID9W3Y36NP9h9TscJEZAgAAiENkgoAemKapvQ2tamx1asY9b3baz0KrAAAAkUMmCIgAwzBUMihdI4sGavTQ7E77N9c0aE9DC5khAACAOEEmCAhDi8OlV7fVqdnhksPl8S206o/MEAAAQP/pi9iAfr9AGNJtKZoyqlAujynTNLXm3c/14RcHAo7xZoYGDbApPdVKMAQAABBjyAQBh6GnzBBZIQAAgL5FJgiIsp4yQ5trGvR1s0O5A+xRHCUAAAD8EQQBhykt1er7+xM/P0mvbqtTQ7PDlxX6/KsWuTztCdeB9hSl2/jPDgAAIJoohwP6WKvTrcZWpyb+rrLTvqMLMvX3y08mEAIAAOglWmQDMSgt1ar8TLvGleV02lddd1Cf1B5UXVOr6ppa1eJwRX6AAAAASY5MENBPTNPU180OuTymWhxunba8qtMxZIYAAADCQyYIiGGGYSh3gF0FA9NUlpvRY2aIrBAAAEBkkAkCIqSnzBBZIQAAgJ7RIhuII97MkNQeEI0ry9Hmmgbffm9WqCgnTRKd5AAAAPoLmSAgSryZoaZWF/OFAAAAQsScICCOeTNDocwXYs4QAABA3yETBMQAOskBAACEhkwQkCDoJAcAABA5ZIKAGEQnOQAAgODoDgckKDrJAQAA9B8yQUAcoJMcAABAO+YEAUmCTnIAAAB9h0wQEGfoJAcAAJIZmSAgCdFJDgAA4PCQCQLiHJ3kAABAMqE7HAA6yQEAAISJTBCQYOgkBwAAEhlzggB0Qic5AACA7pEJAhJYKJ3kSnPT9exlJyvdZlV6qlWGYUR+oAAAACFiThCAbvU0X0iSdn/VovG/fUWSNK4sR3+7dDKBEAAASGgEQUCSMAxDf7t0si8zJFOa/eAGfVJ30HfM5poG7Wlo0aABNkkiMwQAABIS5XBAEmtxuPTqtjo1NDv062e3dtpPZggAAMQaGiMAOCzpthRNGVWoH44ZouOHZHfa780MNTtcana4FAf/ZgIAANAjMkEAJH2TFWp2uORwecgMAQCAmBS1TNDKlSs1bNgwpaWlqby8XBs3buz2+IaGBi1cuFDFxcWy2+065phj9OKLL/ZqwAD6hzcrdMbxJd1mhnbsP0RrbQAAENfCbozw+OOPa/HixVq1apXKy8u1YsUKTZ8+Xdu3b1dBQUGn4x0Oh77//e+roKBATz31lIYMGaJdu3YpJyenL8YPoA+lpVp9f3/i5ycFzQxNvet1SSy6CgAA4lfY5XDl5eU68cQTdd9990mSPB6PSktLtWjRIl133XWdjl+1apWWL1+ubdu2KTU1tVeDpBwOiI5Wp1sujynTNPWTBzfon58fCNj/8lWnatCA9v+uB9pTCIgAAEC/64vYIKwgyOFwKCMjQ0899ZRmzpzp2z537lw1NDToueee63TOD37wA+Xm5iojI0PPPfec8vPzdcEFF2jJkiWyWq2djg+GIAiIvp46yZEZAgAAkRDxxVLr6+vldrtVWFgYsL2wsFDbtm0Les6nn36qV199VbNnz9aLL76o6upqXXbZZXI6nbrxxhuDntPW1qa2tjbfz42NjeEME0A/8M4Zcro9enLTF9qyuyFgf3XdQX1Se1BFOWmSyAwBAIDY1e9vKB6PRwUFBfqf//kfWa1WjR8/Xl988YWWL1/eZRBUUVGhm2++ub+HBiBMaalWpaVa9cxl3yy62uJw67TlVZKkH65823csmSEAABCrwuoOl5eXJ6vVqtra2oDttbW1KioqCnpOcXGxjjnmmIDSt1GjRmnfvn1yOBxBz1m6dKkOHDjg+7N79+5whgmgnxmGodwBdhUMTFNZbobGleV0OsabGaKTHAAAiDVh/ROtzWbT+PHjVVlZ6ZsT5PF4VFlZqcsvvzzoOSeffLIee+wxeTweWSztMdfHH3+s4uJi2Wy2oOfY7XbZ7fZwhgYgSgzD0N8u7T4zVJqbrmcvO1nptvZ/DElPtbLWEAAAiJqw61QWL16suXPnasKECZo4caJWrFihQ4cOaf78+ZKkOXPmaMiQIaqoqJAkXXrppbrvvvt05ZVXatGiRfrkk09066236oorrujbbwIgaryZIUkyTVPjynK0uabBt3/3Vy0a/9tXfD+z6CoAAIimsIOgWbNmaf/+/Vq2bJn27dunMWPGaO3atb5mCTU1Nb6MjySVlpbq5Zdf1tVXX60TTjhBQ4YM0ZVXXqklS5b03bcAEDMCMkNuU7Mf3KBP6g4GHONddDUrvf1XEE0UAABAJIW9TlA00CIbiF/e1todF131RxMFAAAQqoi3yAaAcHlba3sXXX3ivc87LbpaXXdQNV+1aNCAVLJCAACg35EJAhBRPWWGaKIAAAC60xexAUEQgIhrdbp9maGfPLihU2bIH00UAACAP8rhAMSltNRv1g1bc/FJ7ZmhNpdWVFbri4aWgGNpogAAAPoamSAAUefNDLU53frHp1/SRAEAAHSJTBCAhODNDGXaaaIAAAD6H5kgADGrpyYKZIUAAEg+ZIIAJLSe2mv7Z4Uk5gsBAIDQkAkCEDe8maGGZkfQ+UK01wYAIPHRIhtA0ml1uuV0e3psrS3RXhsAgEREORyApJOWalVaqvWb1toOl2Sqx/balMoBAAAvMkEA4pa3tbakHttr00QBAIDEQCYIQFLzX3S1p/baNFEAAABeZIIAJKSemiiQGQIAID6RCQKALnjbazvdnh4XXZXIDAEAkEzIBAFIeD0tuiq1t9f+64KTZEuxEBABABDDyAQBQAg6Lrr65KYvtGV3Q8Axu79q0Sm/f00SpXIAACQ6/j88gKTg30Thmcsm6+tmR3tnOVP6yZ836OPag779lMoBAJDYKIcDkPR6aqLgXyonERQBABBNfREbEAQBgNrXHHK6PfrJgxs6NVHoiHI5AACihzlBANBH0lKtSku1as3FJ/maKMiUVlRW64uGloBj/cvlyAoBABB/yAQBQAetTnf7fCFJbU63/vHpl112lqNUDgCAyKIcDgAiwBsUmabZY7kcpXIAAPQvyuEAIAL8O8v5yuXaXD2WyklkhgAAiEVkggAgTN7MUE+lchKLsAIA0NcohwOAKKNUDgCAyKIcDgCiLGipXBed5SiVAwAgNpAJAoA+FKyzHIuwAgDQdyiHA4AYF+4irI9ffJLs/8kupViMgEwTAACgHA4AYl64i7Cu/ddeX2YoJ8Om74zIJxACAKCPkQkCgAgJZxFWSRqSk67HFpQr3WalVA4AgP+gHA4A4li4neUolQMAgHI4AIhr4XaWo1QOAIC+QSYIAGJEOJ3l/EvlJDrLAQCSB+VwAJDAwu0sx0KsAIBkQDkcACSwcDvLeRdiJSsEAED3yAQBQBzwL5VrbnPp9Y/rlGq1SKahq57YEnAsi7ACABIZmSAASBL+DRBSLIYGDbCruc0lU6aOzBugT+sP+fbv/qpFp/z+Nd/PdJYDACAQQRAAxJm0VKtOOTrPlxk6ZUR++5pDba6QF2Edf0SubCkWAiIAQFKiHA4AEoC3XK6nUjlJKs5O0+KpIySDVtsAgPhDORwAQNI35XI9lcpJ0t4DrfrF3z6UJB2ZN0CjL87xZZXIDAEAkgFBEAAkkC5L5broLPdp/SGt+2hf0FI5iaAIAJCYKIcDgAQXziKs/qVyEvOHAACxh8VSAQBhC2cRVuYPAQBiDUEQAKDXWhyuHhdh9TckJ12PLShXuq09CGL9IQBANBAEAQAOS7BSuVCDItYfAgBEA93hAACHxT9oybSnaMqoQl9Q9L1Rhaw/BABISGSCAABdOpz1h+gyBwDoD2SCAAD9qrfrD3XXZc77eQRFAIBoIRMEAAjJ4cwfChYU0WkOANAbNEYAAERN0KCoi/lDHR2ZN0BrLj5JGfYUskIAgLBQDgcAiJqumiqcNrLAN3/IZrXqtrXbVPNVc8C5n9Yf0rqP9smWYqFUDgAQcWSCAAB9qtXp1lvV9Wpuc0mSTNNUQ4tTgzJs8njUqakCpXIAgHCQCQIAxJy0VKtOOTrPVyrncHm0ueZrNbe5ZBidmyr4N1SQ2kvlRl+c4zufzBAAoK9ZenPSypUrNWzYMKWlpam8vFwbN24M6bw1a9bIMAzNnDmzN5cFAMSJtFSrMu0pyrSnKHeATaccnafvjSrUlGOL9OQlk7TygrFafu7xGpKT3ulcb6ncSx/u0Usf7tGbn+zXV4ccOtjmUqvTHYVvAwBINGGXwz3++OOaM2eOVq1apfLycq1YsUJPPvmktm/froKCgi7P++yzz3TKKafoyCOPVG5urp599tmQr0k5HAAkFtYfAgD0VlS6w5WXl+vEE0/UfffdJ0nyeDwqLS3VokWLdN111wU9x+1269RTT9WFF16oN998Uw0NDQRBAICA+UOmaeqeyupO6w/5Y/0hAEDE5wQ5HA5t2rRJS5cu9W2zWCyaOnWq1q9f3+V5t9xyiwoKCnTRRRfpzTff7PE6bW1tamtr8/3c2NgYzjABAHGi4/yhSUflddtZruP8oe6CIgIiAEBXwgqC6uvr5Xa7VVhYGLC9sLBQ27ZtC3rOW2+9pT//+c/asmVLyNepqKjQzTffHM7QAABxyj9QSbEYGjTAruY2l1wej675/gg1tDiVk2HTnf/v406ttrsLiugyBwDoSr92h2tqatJPf/pT/elPf1JeXl7I5y1dulSLFy/2/dzY2KjS0tL+GCIAIIZ011nOGxANyrApxWIJuv6Qf1BElzkAQFfCCoLy8vJktVpVW1sbsL22tlZFRUWdjt+xY4c+++wznXXWWb5tHo+n/cIpKdq+fbuOOuqoTufZ7XbZ7fZwhgYASBABgYpdvqDIPyDyzxJ1FRT5L8gqMX8IAPCNXjVGmDhxou69915J7UFNWVmZLr/88k6NEVpbW1VdXR2w7frrr1dTU5PuueceHXPMMbLZbD1ek8YIAADpm65yUmCWSPpmUdbcDLsWrXm/07nMHwKAxBCVxVIXL16suXPnasKECZo4caJWrFihQ4cOaf78+ZKkOXPmaMiQIaqoqFBaWpqOO+64gPNzcnIkqdN2AAB60lWWSJJaHG6t31Evq0U6uiBT1XUHA87taf4QWSIASB5hB0GzZs3S/v37tWzZMu3bt09jxozR2rVrfc0SampqZLH0ag1WAADC0rGpQoY9Rc1tLi367lFhzR86YnCGFk8dIcNoTxNl2FM0rmwQQREAJKiwy+GigXI4AEAovOVyXZXKdRcUrThvjOwpFjk9Hn3d7FCG7Zugh9I5AIgdUVksNRoIggAA4Qpl/lCGLUW/eOqDHj/LP1OUYU/RKUfnEQgBQJREZU4QAADxoLv5Q96g6FCrU0fmDdCn9Ye6/axdXzbLNA2ZMnWo1ammVhettwEgjpEJAgAkJW+mqLnNpdc/rlOq1SK7tT2YsVoMpaZY1Oby6JJHNwWc112XuY4IkACg75EJAgCgl7zBSYrF0KABdjW3ueT8z1p2Da0u5Q6wK9VidOo0112XOUmyWS0BDRYonQOA2EMmCACQ9EKZP5STYdOd/+/jTg0VOirLzdB1M74lh9stQ9Lko/OVbvsm4CIgAoDDQ2MEAAD6QVdBkTcgKs5KV2qKRTf9fat2fdl1UNRT621/BEgAEBrK4QAA6AddNVXwLsjqNk2lmNKyM4+V22Mq9T9BTcegyNtQwWZtb71d19iitz5xBb0mpXMAEDkEQQAA9MB//pB3QVanu33+0CGHd/6QxRcUeSRfQ4Wrntji+xxvqZzR4fPb3G66zgFABBEEAQAQorRUa9BW281tLrXJLak9KBqUYevUUEGSar5q1mWPbQ762UcMzpCkLkvnCIoAoO8QBAEAEIZQ1h9qbnNp0XePUkOLU4MybEqxWHTb2m3dNlXoqXTOPygiIAKAw0NjBAAA+pC3qUJXXeYGZdiUamnP7lgtRkDpnD//0jmnx6ODbU5l2lMlMX8IQHKjMQIAADHGF5h0kyXyX48o1NI5/9bbHecPdUSmCAC6RyYIAIAI6a/W2x1ROgcgkZEJAgAgjvRH621JsqVYfAGR0+PR/qZWvfXJfkk0WACAYMgEAQAQZa1Ot96qrvfNH5Lau8yVZGfIlmKRaZpqc3nU5vIEnT90xOAM3XTWt30/O10euT1mp7lEEkERgPjXF7EBQRAAADHAv1TOmxlKtVpkT2kPUKwWQ6lWQzf//SNtr20K+XNHFGS2N1gwDDk9Hn11qE0DbN8UgtBkAUC8oRwOAIAE4R+EdLco6y+nj+y2VK6jT+oOyukxZU9pL58bnGGX+z/BVrBFWv2RJQKQqMgEAQAQg7pqoiAFL5XrqKvSuY66a7JA6RyAWEQmCACABNVTE4Vmh0tuT/CAxGoxlJWWopGFA3ssndv1ZbNsVqvsHYKbjg0WJErnACQOgiAAAOKAN/AIVirXUVelc/78M0WGxVDHRJDNalFxVrq8VXJtLrea21y+0jmyQgDiGUEQAABxJC3VGrAIa0f+pXNtCiyd60pXZXP+XeeshqGv25xav6NeEqVyAOIbc4IAAEgw3vlEwbrMeZmmqYq121RddzDkz/V2mnOZJl3mAEQNc4IAAEAnoZbOLfruUWpocao4K71TyVywrnPfdJrrvlSuI7JEAGINmSAAABKYf5e5jjpmiqwWw1fe5t91LlinOf9SOafLo/pDrQGLsvqjdA5AXyITBAAAutVdsNExU+RtqJBqaQ9WvEGRPcXSqdPcri+bNf/hd30/+y/K6q+rLnP+QVHHMREgAehvBEEAACQp/yYLgQ0V3JIUEBT5d5rrqlTOEiSASZdVaSlW3wKtwYIif2SNAEQCQRAAAEnMF2D4rUUkdewy901QVJKdoYofHR+0VC7Yoq1e3gRRx9bb/libCECkEAQBAABJXS/QKilgkdaO84e8umq13dHIwoG68axjO5XOdcwaBWu4QGYIQF8gCAIAAEH5BxvB5g+VZGcEnS/Uk+21TWpsdckeZE6QPcXiC66sFkN7DjT71iaSup9P1B2CJwD+6A4HAABC0tX6Q6Zp+uYLdSdYl7mO/LvOSZIh+UrnnB5Pp/WJQkVZHZA46A4HAAAiprv1h7yZoe4yNKFkjTp2nfMvnetYLhcqyuoAdEQQBAAAwuLfVU4KnC/k9rQHFsHmDBmGoRvPOrbLBgrBus51LJ3zL5cL1eGW1REwAYmHcjgAAHBYWp1uvVVdr+Y2l29bxzWH/AULkKSeF2iVOpfL+bOnWDo1W/ByuDwBbbrDKatjXSMgtvRFbEAQBAAADpt3vpAU2F47mFBK50zT1M1//yishgvhBEj+QVF3egqYWNcIiDyCIAAAEJP8gyJ/HZsqdOSfJfLPDEnBy+VC1VVb7lB0FTAFC5BowAD0PxojAACAmNRVEBCsqYK/jmV0/kGR/yKtHfUUIAWbWxRqQNRVxiqUdY26Q9YIiB4yQQAAIKK6yhIFK6MLpXRO6pw18urN3KKOQg2YHC6P9hxoDmuuEVkjIHxkggAAQNzp8qXfrqBd50KZu2MYwbMqXbXl7tiKuzsdA6augiJbikUl2RkhjTfcrFE4yDABPSMTBAAAYtLBNpde/XdtwPyhrjrLdacv5xZJgUFROGV1/sLNGoWDDBMSHY0RAABAwuqr1tsddVU6F0xPAVOoWaJgQu1QF442l1tOt0ffG1WoTDsFP0hMBEEAACChhdt6+3ADpI7CzSIdThe6vtDicOtgm5MgCAmNOUEAACChBZR0dZgz5M8/QGqTu9P+UBssdNRxrpF/h7pgAdH22ia1uTxRL0VrcXxzD5gjBHRGEAQAAOJGqE0V/HkbLDQ7XHJ7ej+3SAoMivwDIv8udKGW2vV2PlF3rBZDhxwurd9R79vGHCGgM4IgAACQEMJZm6i3mSF/XXWkC9aSO5j+KJ3r2KGuYxc6skJAO4IgAACQ0NJSrUFbb/tnhroTStaoq1bc3emv0jn/sVothvYcaPZlhsgKAe0IggAAQMLzf+kPlhnqTseGC8GCIsMwdONZx4ZUCteb0rlw+JfZ+WeGQlmbiEwRkgVBEAAASCodM0PdCdZwwT8o8g+IuiqP606opXPh6Fhm5x1fx6xQMBn2FI0rGxRSmSABE+IZQRAAAEg6Ib+8d2i40DEoCiVL1Okje1E6F46uyuw6zhfqyOnxaH9Tq976ZH9I16G0DvGMIAgAAKAbXbXp7ipL1FPDhXBK58LhX2bXle7GlS6r0lKsIS3g6i2tCyWbBsQigiAAAIAw+IKiDlkib8OFUIKI3pTORUI43fKcbk/AekT9gZI79BeCIAAAgF4K9oLe5gotMOjtWkWxINh6RP2Bkjv0F4IgAACAPtCbrnOHu1ZRV/xL7fpjUdae5hf1hVC62SFyEi0rRxAEAADQB8LpOhdO6Vxv+M8N6o9FWaXwSud6I5RudoicRMvK9SoIWrlypZYvX659+/Zp9OjRuvfeezVx4sSgx/7pT3/S//7v/+pf//qXJGn8+PG69dZbuzweAAAgXkXzBbGrrnPba5vU2OqSPcXSL1mh/hKJbBNCk4iNMMIOgh5//HEtXrxYq1atUnl5uVasWKHp06dr+/btKigo6HR8VVWVzj//fE2ePFlpaWn6/e9/r2nTpmnr1q0aMmRIn3wJAACAeBTq/KFQ/XL6SLk9plJTLAHd4rz/t7+yQv0lXudMJaJQSjzjiWGaZlghXXl5uU488UTdd999kiSPx6PS0lItWrRI1113XY/nu91uDRo0SPfdd5/mzJkT0jUbGxuVnZ2tAwcOKCsrK5zhAgAAxJxWp1tvVderuc3V55/tnWuUajV0898/6pQZWvWT8bJ3EVzEU6YIkdPicOtgm1PfG1WoTHv0Z9P0RWwQ1rdwOBzatGmTli5d6ttmsVg0depUrV+/PqTPaG5ultPpVG5ubpfHtLW1qa2tzfdzY2NjOMMEAACIaeHMHwqH/1wjW4rFtx5RsKxQMPGWKQJ6K6wgqL6+Xm63W4WFhQHbCwsLtW3btpA+Y8mSJSopKdHUqVO7PKaiokI333xzOEMDAACIK5GYP+Rdj6ir+UIdba9tUpvLkzCT34GuRDSfddttt2nNmjWqqqpSWlpal8ctXbpUixcv9v3c2Nio0tLSSAwRAAAg4RiG4csKBeOfKerqmI4onUM8CysIysvLk9VqVW1tbcD22tpaFRUVdXvuHXfcodtuu02vvPKKTjjhhG6Ptdvtstvt4QwNAAAA3fBmhXrSXbmcP0rnEM/Carlhs9k0fvx4VVZW+rZ5PB5VVlZq0qRJXZ53++236ze/+Y3Wrl2rCRMm9H60AAAA6HPecrlweEvngHgUdjnc4sWLNXfuXE2YMEETJ07UihUrdOjQIc2fP1+SNGfOHA0ZMkQVFRWSpN///vdatmyZHnvsMQ0bNkz79u2TJGVmZiozM7MPvwoAAACkwNbbVovRY6vpnsrlAj87/NK53qLkDv0l7CBo1qxZ2r9/v5YtW6Z9+/ZpzJgxWrt2ra9ZQk1NjSyWb/5De+CBB+RwOPTjH/844HNuvPFG3XTTTYc3egAAAPikWAxl2FPU3ObyrevibZkdSiAUbkOEUEvneouSO/SXsNcJigbWCQIAAAhNq9Pta73tbZmdaU9Vuq1vOr6Zphl0/aH+snreiXSri7KkXycIAAAAsS1YwOAtjwulNK4n4ZTO9ZZ/yR3QHwiCAAAAElTH8rhQS+N60pvSOSCWEAQBAAAkqLRUq045Ok8uj+krjXN7Yn4mRAA60EVfm9OtNpdbcTCLJmQEQQAAAAmsY8bGv3NcR31RLtfXKIuLHaeNLNDAtNRoD6NPEAQBAAAkgWCd4zrqq3K5w+VdtyhSzReQfAiCAAAAkoB/aVwwsVQuF4nmCwhdq8Otgw6n0hNoHhhBEAAAQJIIpZlBd+Vy/vq7dI7mC7HDNCWnx5NQ6zURBAEAACCkcjl/sVI6B/QGQRAAAAB6LJfzF0ulc0BvEAQBAABAUmjlckAiIAgCAABAr4Q6f6i3YrFlNxIDQRAAAADCEu78od5i3hH6C0EQAAAAwhLO/KHeYt4R+hNBEAAAAMLG/CHEM3KLAAAAAJIKQRAAAACApEIQBAAAACCpEAQBAAAASCo0RgAAAEDM6u+1iNCzRPzfgCAIAAAAMSdSaxEhNBn2FKVYjGgPo88QBAEAACDmRGItIoQuxWIkVFt0giAAAADEpER66UZsoTECAAAAgKRCEAQAAAAgqRAEAQAAAEgqBEEAAAAAkgpBEAAAAICkQhAEAAAAIKkQBAEAAABIKgRBAAAAAJIKQRAAAACApEIQBAAAACCppER7AKEwTVOS1NjYGOWRAAAAAIgmb0zgjRF6Iy6CoKamJklSaWlplEcCAAAAIBY0NTUpOzu7V+ca5uGEUBHi8Xi0Z88eDRw4UIZhRHUsjY2NKi0t1e7du5WVlRXVsSQD7nfkcK8ji/sdWdzvyOJ+Rw73OrK435HV1f02TVNNTU0qKSmRxdK72T1xkQmyWCwaOnRotIcRICsri4c/grjfkcO9jizud2RxvyOL+x053OvI4n5HVrD73dsMkBeNEQAAAAAkFYIgAAAAAEmFIChMdrtdN954o+x2e7SHkhS435HDvY4s7ndkcb8ji/sdOdzryOJ+R1Z/3u+4aIwAAAAAAH2FTBAAAACApEIQBAAAACCpEAQBAAAASCoEQQAAAACSCkFQGFauXKlhw4YpLS1N5eXl2rhxY7SHlBAqKip04oknauDAgSooKNDMmTO1ffv2gGNOP/10GYYR8OeSSy6J0ojj20033dTpXn7rW9/y7W9tbdXChQs1ePBgZWZm6txzz1VtbW0URxzfhg0b1ul+G4ahhQsXSuLZPhxvvPGGzjrrLJWUlMgwDD377LMB+03T1LJly1RcXKz09HRNnTpVn3zyScAxX331lWbPnq2srCzl5OTooosu0sGDByP4LeJHd/fb6XRqyZIlOv744zVgwACVlJRozpw52rNnT8BnBPvv4bbbbovwN4kPPT3f8+bN63QvZ8yYEXAMz3doerrXwX6HG4ah5cuX+47h2Q5dKO99obyL1NTU6Mwzz1RGRoYKCgr0i1/8Qi6XK+RxEASF6PHHH9fixYt14403avPmzRo9erSmT5+uurq6aA8t7r3++utauHCh/vGPf2jdunVyOp2aNm2aDh06FHDcggULtHfvXt+f22+/PUojjn/f/va3A+7lW2+95dt39dVX6+9//7uefPJJvf7669qzZ4/OOeecKI42vr377rsB93rdunWSpP/6r//yHcOz3TuHDh3S6NGjtXLlyqD7b7/9dv3hD3/QqlWrtGHDBg0YMEDTp09Xa2ur75jZs2dr69atWrdunZ5//nm98cYbuvjiiyP1FeJKd/e7ublZmzdv1g033KDNmzfr6aef1vbt2/XDH/6w07G33HJLwPO+aNGiSAw/7vT0fEvSjBkzAu7lX//614D9PN+h6ele+9/jvXv36qGHHpJhGDr33HMDjuPZDk0o7309vYu43W6deeaZcjgceuedd/TII4/o4Ycf1rJly0IfiImQTJw40Vy4cKHvZ7fbbZaUlJgVFRVRHFViqqurMyWZr7/+um/baaedZl555ZXRG1QCufHGG83Ro0cH3dfQ0GCmpqaaTz75pG/bv//9b1OSuX79+giNMLFdeeWV5lFHHWV6PB7TNHm2+4ok85lnnvH97PF4zKKiInP58uW+bQ0NDabdbjf/+te/mqZpmh999JEpyXz33Xd9x7z00kumYRjmF198EbGxx6OO9zuYjRs3mpLMXbt2+bYdccQR5t13392/g0tAwe733LlzzbPPPrvLc3i+eyeUZ/vss882v/e97wVs49nuvY7vfaG8i7z44oumxWIx9+3b5zvmgQceMLOyssy2traQrksmKAQOh0ObNm3S1KlTfdssFoumTp2q9evXR3FkienAgQOSpNzc3IDtf/nLX5SXl6fjjjtOS5cuVXNzczSGlxA++eQTlZSU6Mgjj9Ts2bNVU1MjSdq0aZOcTmfAs/6tb31LZWVlPOt9wOFw6NFHH9WFF14owzB823m2+97OnTu1b9++gGc5Oztb5eXlvmd5/fr1ysnJ0YQJE3zHTJ06VRaLRRs2bIj4mBPNgQMHZBiGcnJyArbfdtttGjx4sMaOHavly5eHVb6CQFVVVSooKNDIkSN16aWX6ssvv/Tt4/nuH7W1tXrhhRd00UUXddrHs907Hd/7QnkXWb9+vY4//ngVFhb6jpk+fboaGxu1devWkK6b0ldfIJHV19fL7XYH3GhJKiws1LZt26I0qsTk8Xh01VVX6eSTT9Zxxx3n237BBRfoiCOOUElJiT744AMtWbJE27dv19NPPx3F0can8vJyPfzwwxo5cqT27t2rm2++Wd/5znf0r3/9S/v27ZPNZuv00lJYWKh9+/ZFZ8AJ5Nlnn1VDQ4PmzZvn28az3T+8z2uw39veffv27VNBQUHA/pSUFOXm5vK8H6bW1lYtWbJE559/vrKysnzbr7jiCo0bN065ubl65513tHTpUu3du1d33XVXFEcbn2bMmKFzzjlHw4cP144dO/SrX/1KZ5xxhtavXy+r1crz3U8eeeQRDRw4sFOZOM927wR77wvlXWTfvn1Bf79794WCIAgxZeHChfrXv/4VMEdFUkAN8/HHH6/i4mJNmTJFO3bs0FFHHRXpYca1M844w/f3E044QeXl5TriiCP0xBNPKD09PYojS3x//vOfdcYZZ6ikpMS3jWcbicbpdOq8886TaZp64IEHAvYtXrzY9/cTTjhBNptNP//5z1VRUSG73R7poca1//7v//b9/fjjj9cJJ5ygo446SlVVVZoyZUoUR5bYHnroIc2ePVtpaWkB23m2e6er975IoBwuBHl5ebJarZ26UtTW1qqoqChKo0o8l19+uZ5//nm99tprGjp0aLfHlpeXS5Kqq6sjMbSElpOTo2OOOUbV1dUqKiqSw+FQQ0NDwDE864dv165deuWVV/Szn/2s2+N4tvuG93nt7vd2UVFRp+Y2LpdLX331Fc97L3kDoF27dmndunUBWaBgysvL5XK59Nlnn0VmgAnsyCOPVF5enu93B89333vzzTe1ffv2Hn+PSzzboejqvS+Ud5GioqKgv9+9+0JBEBQCm82m8ePHq7Ky0rfN4/GosrJSkyZNiuLIEoNpmrr88sv1zDPP6NVXX9Xw4cN7PGfLli2SpOLi4n4eXeI7ePCgduzYoeLiYo0fP16pqakBz/r27dtVU1PDs36YVq9erYKCAp155pndHsez3TeGDx+uoqKigGe5sbFRGzZs8D3LkyZNUkNDgzZt2uQ75tVXX5XH4/EFowidNwD65JNP9Morr2jw4ME9nrNlyxZZLJZOZVsI3+eff64vv/zS97uD57vv/fnPf9b48eM1evToHo/l2e5aT+99obyLTJo0SR9++GFAoO/9h5djjz025IEgBGvWrDHtdrv58MMPmx999JF58cUXmzk5OQFdKdA7l156qZmdnW1WVVWZe/fu9f1pbm42TdM0q6urzVtuucV87733zJ07d5rPPfeceeSRR5qnnnpqlEcen6655hqzqqrK3Llzp/n222+bU6dONfPy8sy6ujrTNE3zkksuMcvKysxXX33VfO+998xJkyaZkyZNivKo45vb7TbLysrMJUuWBGzn2T48TU1N5vvvv2++//77piTzrrvuMt9//31fN7LbbrvNzMnJMZ977jnzgw8+MM8++2xz+PDhZktLi+8zZsyYYY4dO9bcsGGD+dZbb5kjRowwzz///Gh9pZjW3f12OBzmD3/4Q3Po0KHmli1bAn6Xezs1vfPOO+bdd99tbtmyxdyxY4f56KOPmvn5+eacOXOi/M1iU3f3u6mpybz22mvN9evXmzt37jRfeeUVc9y4ceaIESPM1tZW32fwfIemp98lpmmaBw4cMDMyMswHHnig0/k82+Hp6b3PNHt+F3G5XOZxxx1nTps2zdyyZYu5du1aMz8/31y6dGnI4yAICsO9995rlpWVmTabzZw4caL5j3/8I9pDSgiSgv5ZvXq1aZqmWVNTY5566qlmbm6uabfbzaOPPtr8xS9+YR44cCC6A49Ts2bNMouLi02bzWYOGTLEnDVrllldXe3b39LSYl522WXmoEGDzIyMDPNHP/qRuXfv3iiOOP69/PLLpiRz+/btAdt5tg/Pa6+9FvR3x9y5c03TbG+TfcMNN5iFhYWm3W43p0yZ0ul/gy+//NI8//zzzczMTDMrK8ucP3++2dTUFIVvE/u6u987d+7s8nf5a6+9ZpqmaW7atMksLy83s7OzzbS0NHPUqFHmrbfeGvDSjm90d7+bm5vNadOmmfn5+WZqaqp5xBFHmAsWLOj0D7M836Hp6XeJaZrmH//4RzM9Pd1saGjodD7Pdnh6eu8zzdDeRT777DPzjDPOMNPT0828vDzzmmuuMZ1OZ8jjMP4zGAAAAABICswJAgAAAJBUCIIAAAAAJBWCIAAAAABJhSAIAAAAQFIhCAIAAACQVAiCAAAAACQVgiAAAAAASYUgCADQp6qqqmQYhhoaGvr1Og8//LBycnJ8P990000aM2ZMv14TAJAYCIIAAIfl9NNP11VXXeX7efLkydq7d6+ys7MjOo5rr71WlZWVEb0mACA+pUR7AACAxGKz2VRUVBTx62ZmZiozMzPi1wUAxB8yQQCAXps3b55ef/113XPPPTIMQ4Zh6OGHHw4oh/OWrT3//PMaOXKkMjIy9OMf/1jNzc165JFHNGzYMA0aNEhXXHGF3G6377Pb2tp07bXXasiQIRowYIDKy8tVVVXV5Vg6lsPNmzdPM2fO1B133KHi4mINHjxYCxculNPp7PU1AACJgUwQAKDX7rnnHn388cc67rjjdMstt0iStm7d2um45uZm/eEPf9CaNWvU1NSkc845Rz/60Y+Uk5OjF198UZ9++qnOPfdcnXzyyZo1a5Yk6fLLL9dHH32kNWvWqKSkRM8884xmzJihDz/8UCNGjAhpfK+99pqKi4v12muvqbq6WrNmzdKYMWO0YMGCPrsGACD+EAQBAHotOztbNptNGRkZvhK4bdu2dTrO6XTqgQce0FFHHSVJ+vGPf6z/+7//U21trTIzM3Xsscfqu9/9rl577TXNmjVLNTU1Wr16tWpqalRSUiKpfc7P2rVrtXr1at16660hjW/QoEG67777ZLVa9a1vfUtnnnmmKisrtWDBgj67BgAg/hAEAQD6XUZGhi8AkqTCwkINGzYsYA5PYWGh6urqJEkffvih3G63jjnmmIDPaWtr0+DBg0O+7re//W1ZrVbfz8XFxfrwww/79BoAgPhDEAQA6HepqakBPxuGEXSbx+ORJB08eFBWq1WbNm0KCGIkhdX8IBLXAADEH4IgAMBhsdlsAQ0N+sLYsWPldrtVV1en73znO3362ZG8BgAgNtEdDgBwWIYNG6YNGzbos88+U319vS/TcjiOOeYYzZ49W3PmzNHTTz+tnTt3auPGjaqoqNALL7zQB6OOzDUAALGJIAgAcFiuvfZaWa1WHXvsscrPz1dNTU2ffO7q1as1Z84cXXPNNRo5cqRmzpypd999V2VlZX3y+ZG6BgAg9himaZrRHgQAAAAARAqZIAAAAABJhSAIAAAAQFIhCAIAAACQVAiCAAAAACQVgiAAAAAASYUgCAAAAEBSIQgCAAAAkFQIggAAAAAkFYIgAAAAAEmFIAgAAABAUiEIAgAAAJBUCIIAAAAAJJX/D3BHCyGq18moAAAAAElFTkSuQmCC",
"text/plain": [
""
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy\n",
"import matplotlib.pyplot as plt\n",
"from lifelines import KaplanMeierFitter\n",
"\n",
"fig, ax = plt.subplots(1, 1, figsize=(10, 4))\n",
"kmf = KaplanMeierFitter()\n",
"kmf.fit(duree, deces)\n",
"kmf.plot(ax=ax)\n",
"ax.legend();"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Régression de Cox\n",
"\n",
"On reprend les données artificiellement générées et on ajoute une variable identique à la durée plus un bruit mais quasi nul "
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" duree \n",
" deces \n",
" X1 \n",
" X2 \n",
" \n",
" \n",
" \n",
" \n",
" 1905678 \n",
" 151 \n",
" 0 \n",
" 0.650961 \n",
" -1.128843 \n",
" \n",
" \n",
" 577877 \n",
" 187 \n",
" 0 \n",
" -1.956525 \n",
" 0.108041 \n",
" \n",
" \n",
" 1126578 \n",
" 146 \n",
" 0 \n",
" 0.026987 \n",
" -0.130392 \n",
" \n",
" \n",
" 1140232 \n",
" 151 \n",
" 0 \n",
" 1.149385 \n",
" 0.280224 \n",
" \n",
" \n",
" 1205621 \n",
" 157 \n",
" 0 \n",
" -0.032398 \n",
" 0.400499 \n",
" \n",
" \n",
"
\n",
"
"
],
"text/plain": [
" duree deces X1 X2\n",
"1905678 151 0 0.650961 -1.128843\n",
"577877 187 0 -1.956525 0.108041\n",
"1126578 146 0 0.026987 -0.130392\n",
"1140232 151 0 1.149385 0.280224\n",
"1205621 157 0 -0.032398 0.400499"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas\n",
"\n",
"data_simple = pandas.DataFrame(\n",
" {\n",
" \"duree\": duree,\n",
" \"deces\": deces,\n",
" \"X1\": duree * 0.57 * deces + numpy.random.randn(duree.shape[0]),\n",
" \"X2\": duree * (-0.57) * deces + numpy.random.randn(duree.shape[0]),\n",
" }\n",
")\n",
"data_simple.head()"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"data_train, data_test = train_test_split(data_simple, test_size=0.8)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration 1: norm_delta = 5.01e-01, step_size = 0.9500, log_lik = -647954.57157, newton_decrement = 1.86e+04, seconds_since_start = 2.0\n",
"Iteration 2: norm_delta = 1.29e-01, step_size = 0.9500, log_lik = -668348.17665, newton_decrement = 2.19e+04, seconds_since_start = 4.2\n",
"Iteration 3: norm_delta = 8.30e-02, step_size = 0.9500, log_lik = -642917.75741, newton_decrement = 4.33e+03, seconds_since_start = 6.2\n",
"Iteration 4: norm_delta = 3.36e-02, step_size = 1.0000, log_lik = -637879.13496, newton_decrement = 4.09e+02, seconds_since_start = 8.5\n",
"Iteration 5: norm_delta = 3.94e-03, step_size = 1.0000, log_lik = -637443.76633, newton_decrement = 4.61e+00, seconds_since_start = 10.7\n",
"Iteration 6: norm_delta = 4.65e-05, step_size = 1.0000, log_lik = -637439.12353, newton_decrement = 6.25e-04, seconds_since_start = 13.0\n",
"Iteration 7: norm_delta = 6.33e-09, step_size = 1.0000, log_lik = -637439.12291, newton_decrement = 1.16e-11, seconds_since_start = 15.1\n",
"Convergence success after 7 iterations.\n"
]
},
{
"data": {
"text/plain": [
""
]
},
"execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from lifelines.fitters.coxph_fitter import CoxPHFitter\n",
"\n",
"cox = CoxPHFitter()\n",
"cox.fit(\n",
" data_train[[\"duree\", \"deces\", \"X1\"]],\n",
" duration_col=\"duree\",\n",
" event_col=\"deces\",\n",
" show_progress=True,\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" model \n",
" lifelines.CoxPHFitter \n",
" \n",
" \n",
" duration col \n",
" 'duree' \n",
" \n",
" \n",
" event col \n",
" 'deces' \n",
" \n",
" \n",
" baseline estimation \n",
" breslow \n",
" \n",
" \n",
" number of observations \n",
" 398777 \n",
" \n",
" \n",
" number of events observed \n",
" 54338 \n",
" \n",
" \n",
" partial log-likelihood \n",
" -637439.12 \n",
" \n",
" \n",
" time fit was run \n",
" 2024-10-07 10:42:15 UTC \n",
" \n",
" \n",
"
\n",
"
\n",
" \n",
" \n",
" \n",
" coef \n",
" exp(coef) \n",
" se(coef) \n",
" coef lower 95% \n",
" coef upper 95% \n",
" exp(coef) lower 95% \n",
" exp(coef) upper 95% \n",
" cmp to \n",
" z \n",
" p \n",
" -log2(p) \n",
" \n",
" \n",
" \n",
" \n",
" X1 \n",
" 0.06 \n",
" 1.06 \n",
" 0.00 \n",
" 0.06 \n",
" 0.06 \n",
" 1.06 \n",
" 1.06 \n",
" 0.00 \n",
" 176.66 \n",
" <0.005 \n",
" inf \n",
" \n",
" \n",
"
\n",
"\n",
"
\n",
" \n",
" \n",
" Concordance \n",
" 0.75 \n",
" \n",
" \n",
" Partial AIC \n",
" 1274880.25 \n",
" \n",
" \n",
" log-likelihood ratio test \n",
" 21030.90 on 1 df \n",
" \n",
" \n",
" -log2(p) of ll-ratio test \n",
" inf \n",
" \n",
" \n",
"
\n",
"
"
],
"text/latex": [
"\\begin{tabular}{lrrrrrrrrrrr}\n",
" & coef & exp(coef) & se(coef) & coef lower 95% & coef upper 95% & exp(coef) lower 95% & exp(coef) upper 95% & cmp to & z & p & -log2(p) \\\\\n",
"covariate & & & & & & & & & & & \\\\\n",
"X1 & 0.06 & 1.06 & 0.00 & 0.06 & 0.06 & 1.06 & 1.06 & 0.00 & 176.66 & 0.00 & inf \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"\n",
" duration col = 'duree'\n",
" event col = 'deces'\n",
" baseline estimation = breslow\n",
" number of observations = 398777\n",
"number of events observed = 54338\n",
" partial log-likelihood = -637439.12\n",
" time fit was run = 2024-10-07 10:42:15 UTC\n",
"\n",
"---\n",
" coef exp(coef) se(coef) coef lower 95% coef upper 95% exp(coef) lower 95% exp(coef) upper 95%\n",
"covariate \n",
"X1 0.06 1.06 0.00 0.06 0.06 1.06 1.06\n",
"\n",
" cmp to z p -log2(p)\n",
"covariate \n",
"X1 0.00 176.66 <0.005 inf\n",
"---\n",
"Concordance = 0.75\n",
"Partial AIC = 1274880.25\n",
"log-likelihood ratio test = 21030.90 on 1 df\n",
"-log2(p) of ll-ratio test = inf"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cox.print_summary()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Iteration 1: norm_delta = 5.01e-01, step_size = 0.9500, log_lik = -647954.57157, newton_decrement = 1.86e+04, seconds_since_start = 2.4\n",
"Iteration 2: norm_delta = 1.31e-01, step_size = 0.9500, log_lik = -668036.09368, newton_decrement = 2.18e+04, seconds_since_start = 5.0\n",
"Iteration 3: norm_delta = 8.29e-02, step_size = 0.9500, log_lik = -642745.26291, newton_decrement = 4.23e+03, seconds_since_start = 7.2\n",
"Iteration 4: norm_delta = 3.27e-02, step_size = 1.0000, log_lik = -637838.96866, newton_decrement = 3.84e+02, seconds_since_start = 9.4\n",
"Iteration 5: norm_delta = 3.70e-03, step_size = 1.0000, log_lik = -637430.64477, newton_decrement = 4.03e+00, seconds_since_start = 11.5\n",
"Iteration 6: norm_delta = 4.05e-05, step_size = 1.0000, log_lik = -637426.59011, newton_decrement = 4.72e-04, seconds_since_start = 13.6\n",
"Iteration 7: norm_delta = 4.77e-09, step_size = 1.0000, log_lik = -637426.58963, newton_decrement = 6.55e-12, seconds_since_start = 15.7\n",
"Convergence success after 7 iterations.\n"
]
},
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" model \n",
" lifelines.CoxPHFitter \n",
" \n",
" \n",
" duration col \n",
" 'duree' \n",
" \n",
" \n",
" event col \n",
" 'deces' \n",
" \n",
" \n",
" baseline estimation \n",
" breslow \n",
" \n",
" \n",
" number of observations \n",
" 398777 \n",
" \n",
" \n",
" number of events observed \n",
" 54338 \n",
" \n",
" \n",
" partial log-likelihood \n",
" -637426.59 \n",
" \n",
" \n",
" time fit was run \n",
" 2024-10-07 10:42:35 UTC \n",
" \n",
" \n",
"
\n",
"
\n",
" \n",
" \n",
" \n",
" coef \n",
" exp(coef) \n",
" se(coef) \n",
" coef lower 95% \n",
" coef upper 95% \n",
" exp(coef) lower 95% \n",
" exp(coef) upper 95% \n",
" cmp to \n",
" z \n",
" p \n",
" -log2(p) \n",
" \n",
" \n",
" \n",
" \n",
" X2 \n",
" -0.06 \n",
" 0.94 \n",
" 0.00 \n",
" -0.06 \n",
" -0.06 \n",
" 0.94 \n",
" 0.95 \n",
" 0.00 \n",
" -176.68 \n",
" <0.005 \n",
" inf \n",
" \n",
" \n",
"
\n",
"\n",
"
\n",
" \n",
" \n",
" Concordance \n",
" 0.75 \n",
" \n",
" \n",
" Partial AIC \n",
" 1274855.18 \n",
" \n",
" \n",
" log-likelihood ratio test \n",
" 21055.96 on 1 df \n",
" \n",
" \n",
" -log2(p) of ll-ratio test \n",
" inf \n",
" \n",
" \n",
"
\n",
"
"
],
"text/latex": [
"\\begin{tabular}{lrrrrrrrrrrr}\n",
" & coef & exp(coef) & se(coef) & coef lower 95% & coef upper 95% & exp(coef) lower 95% & exp(coef) upper 95% & cmp to & z & p & -log2(p) \\\\\n",
"covariate & & & & & & & & & & & \\\\\n",
"X2 & -0.06 & 0.94 & 0.00 & -0.06 & -0.06 & 0.94 & 0.95 & 0.00 & -176.68 & 0.00 & inf \\\\\n",
"\\end{tabular}\n"
],
"text/plain": [
"\n",
" duration col = 'duree'\n",
" event col = 'deces'\n",
" baseline estimation = breslow\n",
" number of observations = 398777\n",
"number of events observed = 54338\n",
" partial log-likelihood = -637426.59\n",
" time fit was run = 2024-10-07 10:42:35 UTC\n",
"\n",
"---\n",
" coef exp(coef) se(coef) coef lower 95% coef upper 95% exp(coef) lower 95% exp(coef) upper 95%\n",
"covariate \n",
"X2 -0.06 0.94 0.00 -0.06 -0.06 0.94 0.95\n",
"\n",
" cmp to z p -log2(p)\n",
"covariate \n",
"X2 0.00 -176.68 <0.005 inf\n",
"---\n",
"Concordance = 0.75\n",
"Partial AIC = 1274855.18\n",
"log-likelihood ratio test = 21055.96 on 1 df\n",
"-log2(p) of ll-ratio test = inf"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"cox2 = CoxPHFitter()\n",
"cox2.fit(\n",
" data_train[[\"duree\", \"deces\", \"X2\"]],\n",
" duration_col=\"duree\",\n",
" event_col=\"deces\",\n",
" show_progress=True,\n",
")\n",
"cox2.print_summary()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 1369970 \n",
" 834048 \n",
" 1217055 \n",
" 1119706 \n",
" 1444869 \n",
" \n",
" \n",
" \n",
" \n",
" 0.0 \n",
" 0.008909 \n",
" 0.008111 \n",
" 0.020118 \n",
" 0.008601 \n",
" 0.008080 \n",
" \n",
" \n",
" 1.0 \n",
" 0.017592 \n",
" 0.016017 \n",
" 0.039727 \n",
" 0.016985 \n",
" 0.015956 \n",
" \n",
" \n",
" 2.0 \n",
" 0.026273 \n",
" 0.023921 \n",
" 0.059330 \n",
" 0.025366 \n",
" 0.023830 \n",
" \n",
" \n",
" 3.0 \n",
" 0.035119 \n",
" 0.031975 \n",
" 0.079308 \n",
" 0.033908 \n",
" 0.031854 \n",
" \n",
" \n",
" 4.0 \n",
" 0.043795 \n",
" 0.039875 \n",
" 0.098901 \n",
" 0.042284 \n",
" 0.039724 \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 156.0 \n",
" 0.532402 \n",
" 0.484742 \n",
" 1.202293 \n",
" 0.514034 \n",
" 0.482903 \n",
" \n",
" \n",
" 158.0 \n",
" 0.538375 \n",
" 0.490181 \n",
" 1.215783 \n",
" 0.519801 \n",
" 0.488322 \n",
" \n",
" \n",
" 163.0 \n",
" 0.538375 \n",
" 0.490181 \n",
" 1.215783 \n",
" 0.519801 \n",
" 0.488322 \n",
" \n",
" \n",
" 170.0 \n",
" 0.538375 \n",
" 0.490181 \n",
" 1.215783 \n",
" 0.519801 \n",
" 0.488322 \n",
" \n",
" \n",
" 186.0 \n",
" 0.538375 \n",
" 0.490181 \n",
" 1.215783 \n",
" 0.519801 \n",
" 0.488322 \n",
" \n",
" \n",
"
\n",
"
151 rows × 5 columns
\n",
"
"
],
"text/plain": [
" 1369970 834048 1217055 1119706 1444869\n",
"0.0 0.008909 0.008111 0.020118 0.008601 0.008080\n",
"1.0 0.017592 0.016017 0.039727 0.016985 0.015956\n",
"2.0 0.026273 0.023921 0.059330 0.025366 0.023830\n",
"3.0 0.035119 0.031975 0.079308 0.033908 0.031854\n",
"4.0 0.043795 0.039875 0.098901 0.042284 0.039724\n",
"... ... ... ... ... ...\n",
"156.0 0.532402 0.484742 1.202293 0.514034 0.482903\n",
"158.0 0.538375 0.490181 1.215783 0.519801 0.488322\n",
"163.0 0.538375 0.490181 1.215783 0.519801 0.488322\n",
"170.0 0.538375 0.490181 1.215783 0.519801 0.488322\n",
"186.0 0.538375 0.490181 1.215783 0.519801 0.488322\n",
"\n",
"[151 rows x 5 columns]"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cox.predict_cumulative_hazard(data_test[:5])"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"\n",
"\n",
"
\n",
" \n",
" \n",
" \n",
" 1369970 \n",
" 834048 \n",
" 1217055 \n",
" 1119706 \n",
" 1444869 \n",
" \n",
" \n",
" \n",
" \n",
" 0.0 \n",
" 0.991131 \n",
" 0.991922 \n",
" 0.980083 \n",
" 0.991435 \n",
" 0.991952 \n",
" \n",
" \n",
" 1.0 \n",
" 0.982562 \n",
" 0.984111 \n",
" 0.961052 \n",
" 0.983159 \n",
" 0.984170 \n",
" \n",
" \n",
" 2.0 \n",
" 0.974069 \n",
" 0.976363 \n",
" 0.942396 \n",
" 0.974953 \n",
" 0.976452 \n",
" \n",
" \n",
" 3.0 \n",
" 0.965490 \n",
" 0.968530 \n",
" 0.923755 \n",
" 0.966661 \n",
" 0.968648 \n",
" \n",
" \n",
" 4.0 \n",
" 0.957150 \n",
" 0.960910 \n",
" 0.905833 \n",
" 0.958597 \n",
" 0.961055 \n",
" \n",
" \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" ... \n",
" \n",
" \n",
" 156.0 \n",
" 0.587193 \n",
" 0.615856 \n",
" 0.300504 \n",
" 0.598078 \n",
" 0.616989 \n",
" \n",
" \n",
" 158.0 \n",
" 0.583696 \n",
" 0.612516 \n",
" 0.296478 \n",
" 0.594639 \n",
" 0.613656 \n",
" \n",
" \n",
" 163.0 \n",
" 0.583696 \n",
" 0.612516 \n",
" 0.296478 \n",
" 0.594639 \n",
" 0.613656 \n",
" \n",
" \n",
" 170.0 \n",
" 0.583696 \n",
" 0.612516 \n",
" 0.296478 \n",
" 0.594639 \n",
" 0.613656 \n",
" \n",
" \n",
" 186.0 \n",
" 0.583696 \n",
" 0.612516 \n",
" 0.296478 \n",
" 0.594639 \n",
" 0.613656 \n",
" \n",
" \n",
"
\n",
"
151 rows × 5 columns
\n",
"
"
],
"text/plain": [
" 1369970 834048 1217055 1119706 1444869\n",
"0.0 0.991131 0.991922 0.980083 0.991435 0.991952\n",
"1.0 0.982562 0.984111 0.961052 0.983159 0.984170\n",
"2.0 0.974069 0.976363 0.942396 0.974953 0.976452\n",
"3.0 0.965490 0.968530 0.923755 0.966661 0.968648\n",
"4.0 0.957150 0.960910 0.905833 0.958597 0.961055\n",
"... ... ... ... ... ...\n",
"156.0 0.587193 0.615856 0.300504 0.598078 0.616989\n",
"158.0 0.583696 0.612516 0.296478 0.594639 0.613656\n",
"163.0 0.583696 0.612516 0.296478 0.594639 0.613656\n",
"170.0 0.583696 0.612516 0.296478 0.594639 0.613656\n",
"186.0 0.583696 0.612516 0.296478 0.594639 0.613656\n",
"\n",
"[151 rows x 5 columns]"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cox.predict_survival_function(data_test[:5])"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.12"
}
},
"nbformat": 4,
"nbformat_minor": 4
}