1 들어가며 — Ch.1 의 마지막 + 시리즈 결산
Klein 시리즈 사다리 (Ch.1 완료):
| 편 | 주제 |
|---|---|
| Ch.1 Overview (01) | 19 예제 catalog |
| § 1.1~1.2 (01-1) | Leukemia 6-MP |
| § 1.3~1.4 (01-2) | BMT + Dialysis |
| § 1.5~1.6 (01-3) | Breast + Burn |
| § 1.7~1.8 (01-4) | Kidney + Laryngeal |
| § 1.9~1.10 (01-5) | Auto/Allo + Lymphoma BMT |
| § 1.11~1.12 (01-6) | Tongue + STD |
| § 1.13~1.14 (01-7) | NLSY (causal vs predictive) |
| § 1.15~1.16 (01-8) | Psychiatric + Channing (Left Truncation) |
| § 1.17~1.18 (01-9) | Marijuana + Breast (Interval Censored) |
| § 1.19 (본 편) | AIDS (Right Truncation) + Ch.1 결산 |
- Right truncation 이 left truncation (§ 1.16 Channing) 과 어떻게 mirror image 인가?
- AIDS epidemic (1980s) 의 통계적 분석에서 right truncation 이 어떻게 자연 발생하는가?
- Reverse-time KM 이 right-truncated data 의 survival function 을 어떻게 추정하는가?
- Right truncation likelihood \(f(T_i)/F(R_i)\) 의 numerator/denominator 의미?
- Ch.1 의 19 예제 가 Klein 13 chapter 의 5 가지 censoring/truncation 형태를 어떻게 망라하는가?
2 Right Truncation — Left Truncation 의 Mirror Image
2.1 Left vs Right Truncation 비교
Left Truncation (Channing § 1.16):
실제 시작 ●────────● ✗ 표본 제외 (입주 전 사망)
실제 시작 ●─────────────● ← 표본 포함 (입주 후 사망)
↑
L_i (입주 시점) 이후 사건만 관측
Right Truncation (AIDS § 1.19):
실제 시작 ●─────────● ← 표본 포함 (관측 기간 내 발병)
실제 시작 ●─────────────● ✗ 표본 제외 (관측 기간 후 발병)
↑
R_i (관측 마감) 이전 사건만 관측
Left:
- “표본 진입 시점 (\(L\)) 이후 사건만 관측”.
- Channing: 입주 후 사망만.
- Length-biased: 오래 사는 사람이 표본에 등장 가능.
Right:
- “관측 마감 (\(R\)) 이전 사건만 관측”.
- AIDS: 1986-06-30 이전 발병만.
- Latent / asymptomatic 자가 표본 제외.
Likelihood:
- Left: \(L_i = \frac{f(T_i)^{\delta_i} S(T_i)^{1-\delta_i}}{S(L_i)}\).
- Right: \(L_i = \frac{f(T_i)}{F(R_i)}\).
Mirror image:
- Left: 분모가 \(S(L_i)\) (= \(1 - F(L_i)\)).
- Right: 분모가 \(F(R_i)\) (= \(1 - S(R_i)\)).
- 시간 방향만 반대.
Reverse-time analysis:
- Right truncation 을 \(\widetilde T = R - T\) 로 reverse 하면 left truncation 와 동등.
- 모든 left truncation 도구 적용 가능.
3 § 1.19 Time to AIDS (Lagakos 1988)
3.1 AIDS Epidemic 의 시대 배경
3.1.1 1980 년대 AIDS 발견 + 추적
1981 1983 1985 1987
│ │ │ │
│ AIDS │ HIV virus │ HIV blood test │
│ 보고 │ 발견 │ 도입 │
│ │ │ │
│ ←── HIV 잠복기 (latency) ──→ │
│ 평균 ~10 년 │
- 1981: 미국 CDC 가 첫 AIDS cluster 보고.
- 1983-84: HIV 바이러스 발견 (Montagnier·Gallo).
- 1985: HIV blood antibody test 도입.
- 1985 이전: blood transfusion 으로 감염 가능 (검사 부재).
3.1.2 Lagakos 1988 의 데이터 출처
- n: 295 (258 adults + 37 children).
- 감염 경로:
- Adults: contaminated blood transfusion (1985 이전).
- Children: in utero 또는 birth 시 (mother → child).
- 시점 측정:
- Time origin: 1978-04-01 (HIV 가 미국 blood supply 에 진입한 추정 시점).
- Infection time: time origin 부터 감염까지의 years.
- Induction time: 감염부터 AIDS 발병까지의 years.
- 추적: 1986-06-30 까지의 AIDS 발병.
Infection time (\(X_i\)):
- Time origin (1978-04-01) 부터 감염까지의 시간.
- 예: \(X_i = 4.25\) → 1982 년 7 월에 감염.
Induction time (\(T_i\)):
- 감염 후 AIDS 발병까지의 시간 — 본 연구의 관심.
- 예: \(T_i = 5\) → 감염 후 5 년 만에 AIDS.
관측 마감:
- Calendar date 1986-06-30.
- 즉, \(X_i + T_i \leq R_i\) (where \(R_i = 1986\text{-}06\text{-}30 - 1978\text{-}04\text{-}01 = 8.25\) years).
- Adult: \(R_i = 8.25 - X_i\).
- 즉, AIDS 가 최대 \(R_i\) 안에 발병해야 표본 포함.
→ Right truncation: 실제 induction time \(T_i > R_i\) 인 사람은 표본 제외.
임상적 의미:
- “1986 년까지 발병 안 한 latent 환자” = 표본에 없음.
- 표본은 빨리 발병 한 사람에 편향.
- → 진짜 induction time 분포의 left tail 만 관측.
3.2 데이터 구조 — Table 1.10
| Infection Time | Adult Induction | Child Induction |
|---|---|---|
| 0.00 | 5 | |
| 0.25 | 6.75 | |
| 0.75 | 5, 5, 7.25 | |
| 1.00 | 4.25, 5.75, 6.25, 6.5 | 5.5 |
| … | … | … |
- 각 row: 같은 infection time 에 감염된 환자들의 induction time 들.
- Adult row 가 더 풍부 (n=258).
Infection time 0.00 (1978-04-01):
- 매우 일찍 감염 → induction 5 년 (1983 발병).
- \(X + T = 5 < R = 8.25\) → 표본 포함.
Infection time 1.00 (1979-04-01):
- Induction 4.25, 5.75, 6.25, 6.5 — 모두 \(X + T < 8.25\).
- 그러나 \(T = 7.5\) 인 사람 (1979 감염, 1986-10 발병)? — 표본 제외 (\(X + T = 8.5 > 8.25\)).
→ Right truncation 의 자연 발생: 짧은 induction 만 관측.
Long induction 자 (예: 10 년):
- \(X + T = 11\) → \(R = 8.25\) 이전 발병 안 함.
- HIV+ 로 표본에 들어올 자격 없음.
- → 추정된 induction 분포가 진짜보다 shorter.
3.3 Right Truncation 의 likelihood
3.3.1 일반 right truncation
\[ L = \prod_i \frac{f(T_i)}{F(R_i)} \]
- \(f(T_i)\): induction time 의 unconditional density.
- \(F(R_i) = \Pr(T \leq R_i)\): \(R_i\) 까지 발병 확률 (truncation probability).
- 분모가 conditional 표본 추출 보정.
3.3.2 AIDS 에서 \(R_i\)
각 환자의 right truncation 시점:
\[ R_i = (1986\text{-}06\text{-}30 - \text{infection date}_i) = 8.25 - X_i \]
→ Infection time \(X_i\) 가 클수록 \(R_i\) 가 작음 → late infection 자가 더 strong selection 받음.
1985 년 감염자 (\(X_i = 7\)):
- \(R_i = 8.25 - 7 = 1.25\) years.
- 이 사람이 표본에 포함되려면 \(T_i \leq 1.25\) — 1.25 년 안에 AIDS 발병.
- Long induction (10 년) 은 절대 표본 제외.
1979 년 감염자 (\(X_i = 1\)):
- \(R_i = 7.25\) years.
- 거의 모든 induction time 표본 포함 가능.
→ 표본은 early infection + short induction 또는 late infection + very short induction 으로 편향.
무시 시 bias:
- 진짜 mean induction = 10 년.
- 관측된 mean induction = 5 년 (selection bias).
- → 매우 different conclusion.
3.4 Klein 사용
- Ch.3.4: Right truncation 정의 + likelihood 유도.
- Ch.5.3: Right-truncated data 의 reverse-time survival 추정.
3.5 Reverse-Time KM (Ch.5.3)
3.5.1 핵심 발상
Right truncation 을 reverse 하면 left truncation 과 같음.
원래 시간: \(T\) (induction).
Reverse 시간: \(\widetilde T = R_{\max} - T\).
- \(R_{\max}\): 최대 right truncation 시점.
- \(\widetilde T\) 가 클수록 원래 \(T\) 가 작음 (early event).
→ \(\widetilde T\) 의 left truncation 분석 = 원래 \(T\) 의 right truncation 분석.
3.5.2 Algorithm
- Reverse: \(\widetilde T_i = R_{\max} - T_i\), \(\widetilde L_i = R_{\max} - R_i\).
- Left-truncated KM on \((\widetilde L_i, \widetilde T_i)\): \(\widetilde S(\widetilde t)\) 추정.
- Reverse back: \(S(t) = \widetilde S(R_{\max} - t)\).
문제: right truncation 의 직접 분석 어려움.
해결: time direction 을 뒤집음.
- Right trunc → left trunc.
- 모든 left trunc 도구 (KM with entry, Cox with start time) 적용.
비유:
- 영화를 거꾸로 재생 → 스토리는 같지만 시간 방향만 반대.
- 통계적 처리는 수학적으로 동등.
구현:
- R
survfit(Surv(R_max - T, R_max - L, status) ~ 1)후 결과 reverse. - 또는
truncated.cdfpackage 직접 처리.
4 R + Python EDA — AIDS Data
4.1 R — survival + Reverse Time
library(survival)
# Lagakos 1988 데이터 시뮬레이션 (실제는 Klein web)
# Adult 258 + Child 37
set.seed(42)
n_adult <- 258
n_child <- 37
# Time origin: 1978-04-01
# Study end: 1986-06-30 → R_max = 8.25 years
R_max <- 8.25
# Adult
adult <- data.frame(
group = "adult",
infection_time = pmin(R_max, runif(n_adult, 0, 7.5)),
induction = NA
)
# Induction time given right truncation
adult$R_i <- R_max - adult$infection_time
# Latent induction (truncated by R_i)
adult$induction <- pmin(adult$R_i, rweibull(n_adult, shape = 1.5, scale = 5))
# Child
child <- data.frame(
group = "child",
infection_time = pmin(R_max, runif(n_child, 0, 7.5)),
induction = NA
)
child$R_i <- R_max - child$infection_time
child$induction <- pmin(child$R_i, rweibull(n_child, shape = 1.5, scale = 7))
aids <- rbind(adult, child)
# Naive KM (right truncation 무시) — 잘못
naive_fit <- survfit(Surv(induction, rep(1, nrow(aids))) ~ group, data = aids)
plot(naive_fit, col = c("blue", "red"), xlab = "Years from infection",
ylab = "AIDS-free probability (NAIVE — biased)")
# Reverse-time KM (right truncation 보정)
aids$rev_time <- R_max - aids$induction
aids$rev_entry <- R_max - aids$R_i # 항상 0 (since R_i = R_max - X)
# Wait, the formulation:
# Original: T ≤ R_i = R_max - X
# Reversed: R_max - T ≥ R_max - R_i = X → entry = X
aids$rev_entry <- aids$infection_time
# Left-truncated KM on reversed time
rev_fit <- survfit(Surv(rev_entry, rev_time, rep(1, nrow(aids))) ~ group,
data = aids)
plot(rev_fit, col = c("blue", "red"))
# Then reverse back to original:
# S(t) = 1 - rev_S(R_max - t) (or 적절한 변환)
# 실제는 'truncatedSurv' 또는 'icenReg' 등 패키지 활용 권장
# library(truncatedSurv)
# fit <- truncated_KM(induction, R_i, type = "right")4.2 Python — Reverse-Time 직접 구현
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from lifelines import KaplanMeierFitter
# 데이터 (R 와 동일)
rng = np.random.default_rng(42)
R_max = 8.25
n_adult, n_child = 258, 37
adult_inf = np.minimum(R_max, rng.uniform(0, 7.5, n_adult))
adult_ind = np.minimum(R_max - adult_inf,
rng.weibull(1.5, n_adult) * 5)
child_inf = np.minimum(R_max, rng.uniform(0, 7.5, n_child))
child_ind = np.minimum(R_max - child_inf,
rng.weibull(1.5, n_child) * 7)
aids = pd.DataFrame({
"group": ["adult"] * n_adult + ["child"] * n_child,
"infection_time": np.concatenate([adult_inf, child_inf]),
"induction": np.concatenate([adult_ind, child_ind]),
})
aids["R_i"] = R_max - aids["infection_time"]
aids["status"] = 1 # all events (right truncation 는 latent 미관측)
# Naive KM
fig, axes = plt.subplots(1, 2, figsize=(14, 5))
for grp, color in [("adult", "blue"), ("child", "red")]:
sub = aids[aids["group"] == grp]
kmf = KaplanMeierFitter()
kmf.fit(sub["induction"], sub["status"], label=grp)
kmf.plot_survival_function(ax=axes[0], color=color)
axes[0].set_title("Naive (right truncation 무시)")
axes[0].set_xlabel("Years from infection")
axes[0].set_ylabel("AIDS-free probability")
# Reverse-time analysis
aids["rev_time"] = R_max - aids["induction"]
aids["rev_entry"] = aids["infection_time"] # = R_max - R_i
# Left-truncated KM on reversed time
for grp, color in [("adult", "blue"), ("child", "red")]:
sub = aids[aids["group"] == grp]
kmf = KaplanMeierFitter()
kmf.fit(durations=sub["rev_time"],
event_observed=sub["status"],
entry=sub["rev_entry"],
label=grp)
# Reverse back
rev_S = kmf.survival_function_
original_t = R_max - rev_S.index.values
original_F = 1 - rev_S.values # F(t) of original
axes[1].step(original_t, 1 - original_F.flatten(),
where="post", color=color, label=grp)
axes[1].set_title("Reverse-time KM (right truncation 보정)")
axes[1].set_xlabel("Years from infection")
axes[1].set_ylabel("AIDS-free probability")
axes[1].legend()
plt.tight_layout()
plt.savefig("aids_reverse_km.png", dpi=100)Naive (right truncation 무시):
- 관측된 induction 만으로 KM.
- Median induction ≈ 5 년 (실제 10 년 보다 짧음).
- “AIDS 가 빨리 발병한다” 는 잘못된 결론.
Corrected (reverse-time):
- 진짜 induction 분포 추정.
- Median induction ≈ 10 년.
- HIV 의 long latency 정확히 추정.
임상·공중보건 의의:
- 1988 년 시점: HIV 잠복기에 대한 정확한 추정 필요.
- Naive 분석 → 짧은 잠복기 → “곧 발병” 패닉.
- Corrected 분석 → 긴 잠복기 → 더 정확한 epidemic projection.
이 데이터가 right truncation 보정의 임상적 중요성 의 historical 증거.
5 Ch.1 시리즈 결산
5.1 19 예제 + 5 censoring/truncation 형태 통합
| 형태 | 정의 | 예제 |
|---|---|---|
| Right censoring | 사건 후 사건 시점만 부분 정보 (\(T \geq c\)) | § 1.2~1.10 (대부분), § 1.13~1.14 |
| Left censoring | 사건이 관측 시작 전 (\(T \leq c\)) | § 1.17 (Marijuana, “쓴 적 있으나 시점 모름”) |
| Interval censoring | 사건이 두 시점 사이 (\(L \leq T \leq R\)) | § 1.18 (Breast Cancer cosmetic) |
| Left truncation | 표본 진입에 사건 시점 제약 (\(T > L\)) | § 1.15 (Psychiatric admission), § 1.16 (Channing) |
| Right truncation | 표본 진입에 사건 시점 제약 (\(T < R\)) | § 1.19 (AIDS) |
Censoring (data 의 incompleteness):
- Right cens: 사건 시점이 알려진 경계 너머.
- Left cens: 사건이 관측 시작 이전에 발생.
- Interval cens: 사건이 두 검진 사이.
Truncation (sample 의 selection bias):
- Left trunc: 사건 시점이 entry 시점 이후여야 표본 포함.
- Right trunc: 사건 시점이 cutoff 시점 이전이어야 표본 포함.
Likelihood 의 통일:
\[ L_i = \begin{cases} f(T_i) & \text{exact event} \\ S(c_i) & \text{right cens} \\ 1 - S(L_i) & \text{left cens} \\ S(L_i) - S(R_i) & \text{interval cens} \end{cases} \]
Truncation 시 분모로 보정:
- Left trunc: \(/ S(L_i)\).
- Right trunc: \(/ F(R_i)\).
Counting process format (R Surv(start, stop, event)):
- 5 형태 모두 표현 가능.
- Modern survival analysis 의 표준.
Klein Ch.3.3 + Ch.3.4 가 이 통일 framework 의 정전 정리.
5.2 Ch.1 의 19 예제와 Klein 13 chapter 매핑 (확장)
| § | 데이터 | n | 핵심 (censoring/truncation) | 핵심 도구 (chapter) |
|---|---|---|---|---|
| 1.2 | Leukemia 6-MP | 42 | Right cens | KM, log-rank (4·7) |
| 1.3 | BMT (AML/ALL) | 137 | Right cens, time-dep | Multistate, competing risks (4·9) |
| 1.4 | Kidney Dialysis | 119 | Right cens | PH violation, weighted log-rank (7·9) |
| 1.5 | Breast Cancer | 45 | Right cens | Aalen additive (10) |
| 1.6 | Burn | 154 | Right cens, time-dep | Multivariate Cox, time-dep (8·9) |
| 1.7 | Kidney Transplant | 863 | Right cens | Kernel smoothing (6) |
| 1.8 | Laryngeal Cancer | 90 | Right cens | Trend test, AFT (7·12) |
| 1.9 | Auto/Allo BMT | 101 | Right cens | Cox 진단 4 도구 (11) |
| 1.10 | Lymphoma BMT | 43 | Right cens | Stratified test, functional form (7·11) |
| 1.11 | Tongue Cancer | 80 | Right cens | Crude vs adjusted |
| 1.12 | STD Reinfection | 877 | Right cens | Variable selection |
| 1.13 | Pneumonia | 3,470 | Right cens | Causal inference |
| 1.14 | Weaning | 927 | Right cens | Cohort life table, predictive (5·8) |
| 1.15 | Psychiatric | 26 | Right cens, left trunc | One-sample vs standard, excess mortality (6·7·9) |
| 1.16 | Channing | 462 | Right cens, left trunc | Conditional survival, length-biased (3·4·7·9) |
| 1.17 | Marijuana | 191 | Doubly censored | Turnbull NPMLE (5) |
| 1.18 | Breast cosmetic | 94 | Interval cens | Turnbull NPMLE, ic_sp (5) |
| 1.19 | AIDS | 295 | Right trunc | Reverse-time KM (5) |
19 예제 = Klein 13 chapter 의 모든 도구 + 5 censoring/truncation 형태.
- Standard right censoring: § 1.2~1.14 (15 예제).
- Special censoring: § 1.17 (left), § 1.18 (interval).
- Truncation: § 1.15, 1.16 (left), § 1.19 (right).
학습 자원:
- 학생이 Ch.1 의 19 예제로 Klein 13 chapter 의 모든 도구를 시연.
- 단일 데이터로 multiple chapters 의 도구 학습 (BMT 가 6 chapter 등장).
- 5 censoring/truncation 형태 모두 시연.
임상 도메인의 폭:
- 백혈병·BMT (혈액 종양).
- 유방암·후두암·설암 (고형 종양).
- 신부전 투석·이식.
- 화상.
- 정신 질환.
- 영아 건강 (NLSY).
- AIDS.
→ Klein 책이 survival analysis 의 의학 응용 catalog.
본 시리즈 (Ch.1, 10 편) 가 그 catalog 의 종합.
5.3 Ch.1 의 핵심 학습
본 시리즈를 마친 독자는:
- 시간-사건 데이터의 본질 을 이해 (vs 일반 회귀).
- 5 censoring/truncation 형태 를 구분.
- 표준 데이터 구조 \((T_i, \delta_i, Z_i)\) 와 counting process format 의 관계.
- 각 데이터의 통계적 도전 식별.
- Klein 13 chapter 의 도구 와 어느 데이터로 시연되는지 매핑.
- R + Python 양쪽에서 기본 분석 가능.
- 임상 도메인 의 다양성 을 인지.
→ Klein Ch.2 (Basic Quantities and Models) 으로 자연스럽게 진행.
6 R + Python EDA 종합 — 5 형태의 통일
library(survival)
# Right censoring (가장 흔함)
Surv(time, status)
# Left censoring
Surv(time, status, type = "left")
# Interval censoring
Surv(left, right, type = "interval2")
# Left truncation
Surv(start, stop, status) # counting process
# Right truncation (직접 지원 제한적)
# Reverse-time approach 필요7 Python lifelines 통일
from lifelines import KaplanMeierFitter
kmf = KaplanMeierFitter()
# Right censoring
kmf.fit(durations, event_observed)
# Left truncation
kmf.fit(durations, event_observed, entry=L)
# Interval censoring (제한적, R 권장)
# Right truncation (수동 reverse-time)R 의 survival 가 5 형태 모두 풍부하게 지원, Python 은 right cens + left trunc 위주.
8 핵심 직관 통합
- Right truncation = “관측 마감 이전 사건만 표본 포함” (left trunc 의 mirror).
- Reverse-time KM = right trunc 를 left trunc 로 변환 후 분석.
- AIDS data = HIV 잠복기 추정의 historical case.
- Naive vs corrected = right truncation 무시는 induction time 과소추정.
- 5 censoring/truncation 형태 = 통일 likelihood framework.
- Counting process format = modern survival analysis 의 표준.
- Ch.1 의 19 예제 = Klein 13 chapter 도구의 종합 catalog.
9 실전 체크리스트 — § 1.19 + Ch.1 결산
§ 1.19 AIDS
- HIV epidemic 1980s 배경 인지.
- Infection time vs induction time 분리.
- Right truncation 정의 (\(T < R\)).
- R_i = R_max - X_i 의 calculation.
- Likelihood: \(f(T)/F(R)\).
- Reverse-time KM 적용.
- Naive vs corrected 결과 비교.
Ch.1 결산
- 5 censoring/truncation 형태 인지.
- 19 예제 매핑 (chapter 도구).
- 임상 도메인 의 다양성 학습.
- 표준 데이터 구조 와 counting process format.
- R + Python 도구 활용.
다음 단계 (Ch.2)
- \(S(t), h(t), H(t)\) 의 정확한 정의.
- Survival function 의 4 표현 동등성.
- Parametric models (exponential, Weibull, log-logistic).
- Mean residual life function.
10 관련 주제
Klein 시리즈
- Ch.1 Overview
- (이전) § 1.17~1.18 — Marijuana · Breast Cancer (Interval)
- (다음) Ch.2 — Basic Quantities and Models (예정)
관련 개념 (cross-category)
11 참고문헌
- Klein, J. P., & Moeschberger, M. L. (2003). Survival Analysis: Techniques for Censored and Truncated Data (2nd ed.), Ch.1 § 1.19. Springer.
- Lagakos, S. W., Barraj, L. M., & De Gruttola, V. (1988). Nonparametric Analysis of Truncated Survival Data, with Application to AIDS. Biometrika, 75(3), 515-523.
- Kalbfleisch, J. D., & Lawless, J. F. (1989). Inference Based on Retrospective Ascertainment: An Analysis of the Data on Transfusion-Related AIDS. JASA, 84(406), 360-372.
- CDC (1981). Pneumocystis Pneumonia — Los Angeles. Morbidity and Mortality Weekly Report, 30(21), 250-252. (첫 AIDS 보고)
- Barré-Sinoussi, F., Chermann, J. C., Rey, F., et al. (1983). Isolation of a T-Lymphotropic Retrovirus from a Patient at Risk for AIDS. Science, 220(4599), 868-871. (HIV 발견)
- Wang, M. C. (1991). Nonparametric Estimation from Cross-Sectional Survival Data. JASA, 86(413), 130-143. (Length-biased / truncation)
- Andersen, P. K., Borgan, Ø., Gill, R. D., & Keiding, N. (1993). Statistical Models Based on Counting Processes. Springer. (Counting process 의 정전)
- Klein, J. P., & Moeschberger, M. L. (2003). Survival Analysis — 본 시리즈의 source.
- Therneau, T. M., & Grambsch, P. M. (2000). Modeling Survival Data: Extending the Cox Model. Springer.
- Davidson-Pilon, C. (2019). lifelines: Survival Analysis in Python. JOSS, 4(40), 1317.
- Pölsterl, S. (2020). scikit-survival. JMLR, 21(212), 1-6.