{ "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
jourraddc
02020-03-18NaNNaN
12020-03-19695.0207.0
22020-03-20806.0248.0
32020-03-21452.0151.0
42020-03-22608.0210.0
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
entreesortieissue
1905678-14831
577877-147401
1126578-14061
1140232-140111
1205621-131261
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
entreesortieissue
count1.993886e+061.993886e+061.993886e+06
mean1.481621e+021.616597e+028.642781e-01
std1.152239e+021.143726e+023.424931e-01
min-1.480000e+021.000000e+000.000000e+00
25%5.100000e+016.400000e+011.000000e+00
50%1.130000e+021.250000e+021.000000e+00
75%2.600000e+022.750000e+021.000000e+00
max3.660000e+023.660000e+021.000000e+00
\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++Wo888oh27NihzZs3695779UjjzwiqX2uznPPPafq6mpt3bpV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pEIQBAAAACCpEAQBAAAASCoEQQAAAACSCkFQGFauXKlhw4YpLS1N5eXl2rhxY7SHlBAqKip04oknauDAgSooKNDMmTO1ffv2gGNOP/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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
dureedecesX1X2
190567815100.650961-1.128843
5778771870-1.9565250.108041
112657814600.026987-0.130392
114023215101.1493850.280224
12056211570-0.0323980.400499
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
modellifelines.CoxPHFitter
duration col'duree'
event col'deces'
baseline estimationbreslow
number of observations398777
number of events observed54338
partial log-likelihood-637439.12
time fit was run2024-10-07 10:42:15 UTC
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
coefexp(coef)se(coef)coef lower 95%coef upper 95%exp(coef) lower 95%exp(coef) upper 95%cmp tozp-log2(p)
X10.061.060.000.060.061.061.060.00176.66<0.005inf

\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Concordance0.75
Partial AIC1274880.25
log-likelihood ratio test21030.90 on 1 df
-log2(p) of ll-ratio testinf
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
modellifelines.CoxPHFitter
duration col'duree'
event col'deces'
baseline estimationbreslow
number of observations398777
number of events observed54338
partial log-likelihood-637426.59
time fit was run2024-10-07 10:42:35 UTC
\n", "
\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
coefexp(coef)se(coef)coef lower 95%coef upper 95%exp(coef) lower 95%exp(coef) upper 95%cmp tozp-log2(p)
X2-0.060.940.00-0.06-0.060.940.950.00-176.68<0.005inf

\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Concordance0.75
Partial AIC1274855.18
log-likelihood ratio test21055.96 on 1 df
-log2(p) of ll-ratio testinf
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
1369970834048121705511197061444869
0.00.0089090.0081110.0201180.0086010.008080
1.00.0175920.0160170.0397270.0169850.015956
2.00.0262730.0239210.0593300.0253660.023830
3.00.0351190.0319750.0793080.0339080.031854
4.00.0437950.0398750.0989010.0422840.039724
..................
156.00.5324020.4847421.2022930.5140340.482903
158.00.5383750.4901811.2157830.5198010.488322
163.00.5383750.4901811.2157830.5198010.488322
170.00.5383750.4901811.2157830.5198010.488322
186.00.5383750.4901811.2157830.5198010.488322
\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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
1369970834048121705511197061444869
0.00.9911310.9919220.9800830.9914350.991952
1.00.9825620.9841110.9610520.9831590.984170
2.00.9740690.9763630.9423960.9749530.976452
3.00.9654900.9685300.9237550.9666610.968648
4.00.9571500.9609100.9058330.9585970.961055
..................
156.00.5871930.6158560.3005040.5980780.616989
158.00.5836960.6125160.2964780.5946390.613656
163.00.5836960.6125160.2964780.5946390.613656
170.00.5836960.6125160.2964780.5946390.613656
186.00.5836960.6125160.2964780.5946390.613656
\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 }