20 · Konkurrierende Risiken und zeitabhängige Cox-Modelle
cif_vs_naive_km.png
Abbildung · Quellcode

Erzeugt von fig_cif_vs_naive_km() in module/20-competing-risks-timevariant/code/figures.py, Zeile 26–46.
Python
Python-Code: in eine Datei mit Endung
.py schreiben und mit dem ▶-Knopf in VS Code ausführen – oder Zeile für Zeile in die Python-Konsole. Setzt die in Modul 02 eingerichtete Umgebung voraus.def fig_cif_vs_naive_km(df) -> None: # Exact Aalen-Johansen (no tie-jitter), starting at 0 on day 0. cif = aalen_johansen_cif(df["event_time"], df["event_state"], cause=1) cif = pd.concat([pd.Series({0.0: 0.0}), cif]).loc[:ADMIN_HORIZON] kmf = KaplanMeierFitter() kmf.fit(df["event_time"], event_observed=(df["event_state"] == 1)) naive_cif = (1 - kmf.survival_function_).loc[:ADMIN_HORIZON] fig, ax = plt.subplots(figsize=(7.5, 4.5)) ax.step(naive_cif.index, naive_cif.values.ravel(), where="post", color=EVENT, lw=2, label="1 − Kaplan-Meier (ignoriert Entlassung als Konkurrenzrisiko)") ax.step(cif.index, cif.values, where="post", color=PRIMARY, lw=2.4, label="Cumulative Incidence Function (korrekt, Aalen-Johansen)") ax.set_xlabel("Tage seit Aufnahme") ax.set_ylabel("Kumulative Inzidenz Tod") ax.set_ylim(0, 0.40) ax.set_title("1 − Kaplan-Meier überschätzt das Sterberisiko bei konkurrierenden Risiken") ax.legend(loc="upper left", fontsize=9.5) save(fig, ASSETS / "cif_vs_naive_km.png")