Risque cumulé
Risque cumulé de Nelson–Aalen de quitter le pouvoir, avec bandes à 95 %, pour quatre régimes politiques.

Le risque cumulé H(t) additionne le risque instantané de l'événement au fil du temps ; c'est le « risque accumulé jusqu'ici », relié à la survie par S(t) = exp(−H(t)). Contrairement à une courbe de survie, il n'est pas borné par 1, et sa pente est le risque instantané lui-même — une droite indique un risque constant, une courbe qui s'infléchit vers le haut un risque qui augmente avec le temps.
Les données sont la base Democracy and Dictatorship de Cheibub, Gandhi et Vreeland fournie avec lifelines (lifelines.datasets.load_dd) : années au pouvoir des chefs de gouvernement, 1946–2008, pour les quatre principaux types de régime (1 478 des 1 808 mandats ; démocraties mixtes et monarchies sont écartées). Les courbes proviennent de lifelines.NelsonAalenFitter, et le sous-titre rapporte un test du log-rank entre les quatre régimes (multivariate_logrank_test). Les courbes démocratiques montent fortement, la présidentielle par grandes marches — l'empreinte des mandats fixes et de leur limitation —, tandis que les courbes des dictatures restent basses et presque droites : un risque plus faible et à peu près constant. L'axe des abscisses s'arrête à dix ans, au-delà desquels seule une poignée de présidents reste à risque.
Le code et le texte à l'intérieur des figures sont en anglais.
import matplotlib.pyplot as plt
from lifelines import NelsonAalenFitter
from lifelines.datasets import load_dd
from lifelines.statistics import multivariate_logrank_test
# Data: years in office of political leaders, four regime types
regimes = {"Presidential Dem": "Presidential democracy", "Parliamentary Dem": "Parliamentary democracy",
"Civilian Dict": "Civilian dictatorship", "Military Dict": "Military dictatorship"}
df = load_dd()
df = df[df.regime.isin(regimes)]
colors = ["#007AFF", "#34C759", "#FF9500", "#FF3B30"]
fig, ax = plt.subplots(figsize=(8, 5))
# Nelson–Aalen estimate with 95% CI, one curve per regime
for g, c in zip(regimes, colors):
d = df[df.regime == g]
naf = NelsonAalenFitter().fit(d.duration, d.observed, label=g)
# Show the first 10 years only: beyond that only a handful of presidents remain at risk
H, ci = naf.cumulative_hazard_[g].loc[:10], naf.confidence_interval_.loc[:10]
H.loc[10], ci.loc[10] = H.iloc[-1], ci.iloc[-1]
ax.step(H.index, H, where="post", color=c, lw=2,
label=f"{regimes[g]} (n = {len(d)}, {d.observed.sum()} exits)")
ax.fill_between(ci.index, ci.iloc[:, 0], ci.iloc[:, 1], step="post", color=c, alpha=0.13, lw=0)
# Log-rank test across grades
lr = multivariate_logrank_test(df.duration, df.regime, df.observed)
p_txt = "p < .001" if lr.p_value < 0.001 else f"p = {lr.p_value:.3f}"
ax.legend(loc="upper left")
ax.set(xlabel="Years in office", ylabel="Cumulative hazard of leaving office H(t)", xlim=(0, 10),
xticks=range(11), ylim=(0, None))
ax.set_title("Democratic leaders accumulate the risk of losing office fastest", pad=26)
ax.text(0, 1.02, f"Nelson–Aalen with 95% CI · log-rank χ²({lr.degrees_of_freedom}) = "
f"{lr.test_statistic:.1f}, {p_txt} · n = {len(df):,} leaders, {df.observed.sum():,} exits",
transform=ax.transAxes, fontsize=9.5, color="#6E6E73")
plt.show()
Les figures utilisent le style PyStatlas (facultatif) : ajoutez plt.style.use("pystatlas.mplstyle") pour obtenir exactement le même rendu.
Source des données
- Democracy and Dictatorship: leader spells, 1946–2008. Cheibub, J. A., Gandhi, J., & Vreeland, J. R. (2010). Democracy and dictatorship revisited. Public Choice, 143(1–2), 67–101. https://doi.org/10.1007/s11127-009-9491-2
202 countries; distributed with lifelines (lifelines.datasets.load_dd).
Les exemples illustrent des méthodes statistiques. Leurs titres décrivent ce que chaque figure montre dans ces données précises — souvent un échantillon restreint, daté ou partiel —, et non la position de l'auteur sur la question de fond. Pour l'interprétation, le contexte et la qualité des données, reportez-vous aux sources originales citées ici.
Comment citer
PyStatlas est créé et maintenu par Thierry Warin. S'il vous a été utile dans vos travaux, merci de le citer.
Warin, T. (2026). Cumulative hazard. In PyStatlas: A Python Gallery of Statistical Graphics for the Social Sciences. https://warint.github.io/pystatlas/survival/cumulative-hazard/
@misc{warin2026statlas,
author = {Warin, Thierry},
title = {PyStatlas: A Python Gallery of Statistical Graphics for the Social Sciences},
year = {2026},
howpublished = {\url{https://warint.github.io/pystatlas/}},
note = {Source code: https://github.com/warint/pystatlas}
}Plus dans Analyse de survie
Courbes de Kaplan–Meier
Combien de temps les dirigeants politiques restent au pouvoir, démocraties et non-démocraties — courbes de survie avec bandes de confiance, marques de censure, test du log-rank et tableau des effectifs à risque.
survminer::ggsurvplot(risk.table = TRUE)Rapports de risques de Cox
Graphique en forêt d'un modèle à risques proportionnels de Cox avec rapports de risques (HR), IC à 95 % et valeurs p.
survminer::ggforest()Courbes de survie ajustées
Survie prédite par un modèle de Cox pour plusieurs âges, les autres covariables étant fixées à leur moyenne.
survminer::ggadjustedcurves()