Cliquez ici pour l'article précédent Analyse du temps de survie apprise avec Python 1-Qu'est-ce que les données de temps de survie? https://qiita.com/Goriwaku/items/8d00696d853da73505bd
Pour les données utilisées cette fois, veuillez vous référer à l'article précédent ou télécharger (whas500.csv) depuis mon git (https://github.com/goriwaku/survival_analysis).
J'expliquerai la fonction de survie en utilisant WHAS500, qui a été discutée dans l'article précédent. Pour le temps t comme variable continue, nous définissons le temps de survie comme une variable stochastique comme T. A ce moment, la fonction de distribution cumulative de T indique que les sujets extraits aléatoirement sont inférieurs ou égaux à un certain temps t, et sont définis comme suit.
F(t)=Pr(T \leq t)
Ici, la fonction de survie peut être exprimée par la probabilité d'obtenir un temps de survie T supérieur à un certain temps t.
S(t)=Pr(T > t)
Ce sera. A ce moment, à tout moment t, en considérant la survie comme un événement résiduel de décès, l'équation suivante tient par l'axiome de probabilité.
S(t)=1-F(t)
Regardons maintenant cette estimation de la fonction de survie, en particulier l'estimation de Kaplan-Meier, qui est une estimation de la fonction de temps de survie en présence de troncatures du côté droit.
Nous allons en fait estimer la fonction de survie. À titre d'exemple, envisagez d'estimer la fonction de survie à partir du temps de survie et du statut de survie de 5 personnes, comme indiqué ci-dessous.
Numéro du sujet | temps | Arrêt pour cause de décès |
---|---|---|
1 | 6 | 1 |
2 | 44 | 1 |
3 | 21 | 0 |
4 | 14 | 1 |
5 | 62 | 1 |
Au temps 0, les 5 sont vivants, donc $ \ hat {S} (t) = 1,0 $. Puisque le sujet numéro 1 meurt le 6e jour, la condition de décès dans cette petite section est considérée, en considérant la petite section $ (6- \ delta, 6] $ qui commence peu avant le 6e jour et se termine le 6e jour. La probabilité d'attachement estimée est de 1/5 $ et la probabilité de survie est de 4/5 $. Les sujets qui sont en vie à un moment donné sont des ** ensembles de risques ** à risque de décès. Le nombre de personnes est exprimé en nombre à risque. La durée de survie estimée peut être exprimée par ** (probabilité de vivre jusqu'à ce point) x (probabilité conditionnelle de survivre dans la section minute ci-dessus) **. L'intervalle $ I_i $ est divisé par le temps dans le tableau ci-dessus dans l'ordre croissant (ex: $ I_0 = [0, 6) $), $ n_i $ est le nombre à risque à ce moment, et $ d_i $ est à ce moment. Le nombre de personnes décédées. À ce stade, la probabilité de mortalité estimée peut être exprimée en $ d_1 / n_1 $ et la probabilité de survie peut être exprimée en $ (n_1 --d_1) / n_1 $ dans un petit intervalle proche du jour où un événement se produit. Par conséquent, lors de l'estimation de la probabilité de survie aux 6e et 14e jours,
\hat{S}(6)=1 \times \frac{4}{5}=\frac{4}{5}\\
\hat{S}(14)=1 \times \frac{4}{5} \times \frac{3}{4} = \frac{3}{5}
Ce sera. Dans le cas suivant, le sujet numéro 3 abandonnera le groupe à risque le jour 21 avec une résiliation non indépendante du décès. Dans cet intervalle de minutes, $ n_3 = 3 $ et $ d_3 = 0 $, donc la valeur estimée de la fonction de survie est
\hat{S}(21)=1 \times \frac{4}{5} \times \frac{3}{4} \times \frac{3}{3} = \frac{3}{5}
Sans surprise, les estimations de la fonction de survie ne changent pas car aucun décès n'est survenu dans l'intervalle $ I_3 $. L'intervalle suivant peut également être utilisé pour obtenir la valeur estimée de la fonction de survie. La valeur estimée de la fonction de survie obtenue par cette méthode est appelée ** valeur estimée de Kaplan-Meier **.
Tracons maintenant l'estimation de Kaplan-Meier comme une fonction d'étape.
test_data = [[6, 1],[44, 1],[21, 0],[14, 1],[62, 1]]
test_data = sorted(test_data, key=lambda x: x[0], reverse=False)
s = 1
n = 5
pre = 0
for t, censor in test_data:
plt.plot((pre, t), (s, s), color='blue')
if censor == 1:
plt.plot((t, t), (s, s * (n - 1) / n), color='blue')
s = s * (n - 1) / n
n -= 1
pre = t
plt.show()
J'ai stocké le tableau sous forme de tableau bidimensionnel et l'ai trié par ordre croissant de t pour en faciliter l'utilisation. Si vous souhaitez trier un tableau à deux dimensions, spécifiez les éléments à trier par argument de mot clé tel que key = lambda x: x [0]. Si vous souhaitez trier par censure, vous pouvez saisir x [1]. Après cela, la probabilité de survie est calculée avec l'instruction for, et le tracé de celle-ci est montré dans la figure ci-dessous. Ainsi, la courbe Kaplan = Meier est sortie en tant que fonction échelonnée. Elle diminue lorsque la mortalité est observée et reste constante pendant cette période. A $ t = 62 $, il n'y a pas de survivants, donc la fin est $ \ hat {S} (62) = 0 $. Dans cet exemple, plusieurs décès ne se sont pas produits dans le même t (cela s'appelle ** égalité **), mais même en cas d'égalité, un nombre aléatoire est généré et l'ordre est attribué au hasard. Vous pouvez développer une discussion. De plus, même si les données d'égalité sont traitées uniformément dans l'estimation du KM, l'estimation finale est la même, il n'est donc fondamentalement pas nécessaire de faire des ajustements. En pratique, c'est rare, mais si vous avez un très grand nombre de liens, vous devriez envisager d'utiliser un modèle temporel discret au lieu d'une estimation KM. Il convient également de noter que si le temps d'observation final est coupé du côté droit, le temps de survie estimé après cela ne peut pas être défini.
Les estimations de Kaplan-Meier sont si couramment utilisées dans l'analyse de survie que nous en donnons ici une formulation générale. Lorsque t est fini, le tri ne perd pas sa généralité, donc triez t par ordre croissant et les variables binaires $ c_i $, à risque à $ t_i $, qu'il s'agisse ou non d'un capteur par décès à $ t_i $. Sous $ n_1 $, le nombre de décès observés $ d_i $, l'estimation de Kaplan-Meier de la fonction de survie au point temporel t est:
\hat{S}(t)=\prod_{t_i \leq t}\frac{n_i - d_i}{n_i}
Cependant, quand $ t \ leq t_1 $, $ \ hat {S} (t) = 1 $.
J'ai tracé la courbe de Kaplan-Meier par moi-même plus tôt, mais python dispose d'une bibliothèque pour l'analyse du temps de survie appelée lifelines sans avoir à l'implémenter moi-même. Dans cette section, nous utiliserons ces lignes de vie pour dessiner la courbe de Kaplan-Meier du WHAS500 précédent. Lifelines n'est pas inclus par défaut, donc si vous ne l'avez jamais utilisé, procédez d'abord comme suit dans un terminal ou une invite de commande:
pip install lifelines
Maintenant, voici le code python.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import lifelines as ll
from lifelines import KaplanMeierFitter
whas = pd.read_csv('whas500.csv')
kmf = KaplanMeierFitter()
kmf.fit(whas.LENFOL, event_observed=whas.FSTAT)
kmf.plot_survival_function()
print(kmf.survival_function_)
plt.show()
Mettez le temps t dans le premier argument d'ajustement de KaplanMeierFitter des lignes de vie, et mettez la variable binaire indiquant si l'événement (la mort) que vous voulez observer s'est produit dans l'argument mot-clé event_observed, et laissez-le s'adapter. Ensuite, vous pouvez facilement tracer la courbe KM avec la fonction .plot_survival_fuction () du modèle. Utilisez également survival_function_ pour obtenir la fonction de survie estimée. Il s'agit d'un type de pandas DataFrame et renvoie une paire de points temporels et une valeur estimée. Il est également possible d'obtenir la fonction de distribution cumulative $ F (t) $ mentionnée ci-dessus en remplaçant fonction_survie par densité_cumulative. Le tracé réel de la courbe KM est illustré ci-dessous. La largeur du bleu clair sur la figure est l'intervalle de confiance.
Ceci conclut l'explication des estimations de Kaplan-Meier et leur mise en œuvre. La prochaine fois, j'aimerais interpréter l'estimation de Kaplan-Meier et comparer les deux groupes, j'espère donc que vous continuerez à lire.
Introduction à l'analyse du temps de survie Hosmer DW, Lemeshow S, May S LIFELINES https://lifelines.readthedocs.io/en/latest/index.html Université de Kyoto OCW Cours d'audit de l'École supérieure de médecine de l'Université de Kyoto Biostatistique pour les chercheurs cliniques "Bases de l'analyse du temps de survie" https://www.youtube.com/watch?v=NmZaY2tDKSA&feature=emb_title
Recommended Posts