1 들어가며 — 점추정·신뢰구간에서 summary statistics 와 좌절단 확장으로
| 편 | 주제 |
|---|---|
| Ch.4 Overview | 7 개 절 조망 |
| § 4.1~4.2 | KM·NA 점추정 + 분산 |
| § 4.3~4.4 | Pointwise CI + Confidence Bands |
| § 4.5~4.6 (본 편) | Mean · Median + Left-Truncation 의 단순 확장 |
| § 4.7 (예정) | Competing Risks (1-KM · CIF · CP) |
“§ 4.5 의 평균과 중앙값은 KM 곡선의 적분과 역변환으로 자명히 유도되지만, 평균은 마지막 censoring 의 tail 처리에 의존하고 (RMST 의 등장), 중앙값의 신뢰구간은 density 추정을 우회하는 Brookmeyer-Crowley 트릭이 필요하다. § 4.6 의 좌절단은 위험집합 \(Y_i\) 의 정의만 바꾸면 모든 KM·NA·CI·Band 가 동일하게 작동하지만, 추정 대상이 conditional survival 로 변경되고 작은 위험집합에서 KM 이 0 으로 떨어지는 함정을 식 4.6.1 의 ‘conditional from age \(a\)’ 로 처리한다.”
2 § 4.5 — Mean and Median Survival Time
2.1 Restricted Mean Survival Time (RMST)
2.1.1 정의와 직관
\[ \widehat{\mu}_\tau = \int_0^\tau \widehat{S}(t) \, dt \]
분산 (식 4.5.2): \[ \widehat{V}[\widehat{\mu}_\tau] = \sum_{i=1}^D \left[\int_{t_i}^\tau \widehat{S}(t) \, dt\right]^2 \cdot \frac{d_i}{Y_i (Y_i - d_i)} \]
95% CI (식 4.5.3): \[ \widehat{\mu}_\tau \pm Z_{1-\alpha/2} \sqrt{\widehat{V}[\widehat{\mu}_\tau]} \]
\(\tau\) 는 (a) 마지막 사건 시점, 또는 (b) 사전 지정된 임상적 의미가 있는 시점.
\(X \geq 0\) 의 평균 도출:
\[ \mu = E[X] = \int_0^\infty t \, f(t) \, dt \]
\(f(t) = -S'(t)\) 를 대입하고 부분적분:
\[ \begin{aligned} \int_0^\infty t f(t) \, dt &= \int_0^\infty t \cdot (-S'(t)) \, dt \\ &= [-tS(t)]_0^\infty + \int_0^\infty S(t) \, dt \\ &= 0 + \int_0^\infty S(t) \, dt \end{aligned} \]
(끝항: \(tS(t) \to 0\) as \(t \to \infty\) if \(E[X] < \infty\), 시작항: \(0 \cdot S(0) = 0\)).
→ \(\mu = \int_0^\infty S(t) dt\). 즉 survival 곡선 아래 면적.
KM 에 적용: \(S\) 자리에 \(\widehat{S}\) 대입. KM 은 step function 이므로 면적 = 직사각형들의 합:
\[ \widehat{\mu}_\tau = \sum_{i: t_i < \tau} \widehat{S}(t_{i-1}) \cdot (t_i - t_{i-1}) + \widehat{S}(t_{D'}) \cdot (\tau - t_{D'}) \]
여기서 \(t_{D'}\) 는 \(\tau\) 이하의 마지막 사건 시점.
KM 은 마지막 censoring 시점 \(t_{\max}\) 너머로 정의되지 않는다. 따라서:
- \(\tau \leq t_{\max}\): 면적 계산 가능, 단 “\(\tau\) 까지의 RMST” 라는 제한적 의미.
- \(\tau > t_{\max}\): § 4.2 Practical Note 2 의 tail 처리 (Efron 0 / Gill constant / BHK exponential) 후 면적 계산.
→ 진짜 무조건적 평균 \(\mu = \int_0^\infty S \, dt\) 는 모든 환자가 사건을 겪었을 때만 추정 가능. 실무에서는 거의 항상 RMST.
2.1.2 분산 식의 의미
분산 식을 다시 보자:
\[ \widehat{V}[\widehat{\mu}_\tau] = \sum_{i} \left[\underbrace{\int_{t_i}^\tau \widehat{S}(t) \, dt}_{\text{잔여 면적}}\right]^2 \cdot \underbrace{\frac{d_i}{Y_i (Y_i - d_i)}}_{\text{Greenwood term}} \]
해석:
- 각 사건 시점 \(t_i\) 가 평균에 미치는 영향력은 “그 이후의 면적” 에 비례 (사건이 일찍 발생하면 그 이후 곡선 전체가 떨어짐 → 면적 손실 큼).
- 그 영향력의 제곱에 Greenwood 의 항을 곱한 것이 분산 기여.
→ 이른 시점의 사건이 평균 추정에 더 큰 불확실성을 준다. 잔여 면적이 크기 때문.
2.1.3 6-MP 군 RMST 손풀이 (Klein Example 4.1)
ALL 환자 \(\widehat{S}(t)\) (Klein Table 4.1B):
| 구간 | \(\widehat{S}\) | 길이 | 면적 |
|---|---|---|---|
| [0, 6) | 1.000 | 6 | 6.000 |
| [6, 7) | 0.857 | 1 | 0.857 |
| [7, 10) | 0.807 | 3 | 2.421 |
| [10, 13) | 0.753 | 3 | 2.259 |
| [13, 16) | 0.690 | 3 | 2.070 |
| [16, 22) | 0.628 | 6 | 3.768 |
| [22, 23) | 0.538 | 1 | 0.538 |
| [23, 35) | 0.448 | 12 | 5.376 |
| 합 | 23.289 |
→ \(\widehat{\mu}_{35} = 23.286\) 주 (반올림 차이).
분산 계산: 각 사건 시점에서의 잔여 면적² × Greenwood term:
| \(t_i\) | 잔여 면적 \(\int_{t_i}^{35} \widehat{S} dt\) | \(\frac{d_i}{Y_i(Y_i-d_i)}\) | 기여 |
|---|---|---|---|
| 6 | 17.286 | \(3/(21 \cdot 18) = 0.00794\) | \(17.286^2 \cdot 0.00794 = 2.372\) |
| 7 | 16.429 | \(1/(17 \cdot 16) = 0.00368\) | \(0.992\) |
| 10 | 14.011 | \(1/(15 \cdot 14) = 0.00476\) | \(0.935\) |
| 13 | 11.752 | \(1/(12 \cdot 11) = 0.00758\) | \(1.046\) |
| 16 | 9.682 | \(1/(11 \cdot 10) = 0.00909\) | \(0.852\) |
| 22 | 5.914 | \(1/(7 \cdot 6) = 0.02381\) | \(0.833\) |
| 23 | 5.376 | \(1/(6 \cdot 5) = 0.03333\) | \(0.964\) |
| 합 | 7.993 |
→ SE \(= \sqrt{7.993} = 2.827\) 주.
결과: 6-MP 군의 35 주 한정 평균 무재발 시간 = 23.29 주, 95% CI = (17.7, 28.8) 주.
2.1.4 3 그룹 BMT 비교 (Klein Example 4.2)
ALL/AML low/AML high 의 RMST. 마지막 관측 시점 (2081·2569·2640 days) 이 다르므로 직접 비교 불가 → 공통 \(\tau = 2081\) 일로 제한:
| Group | \(\widehat{\mu}_{2081}\) | SE | 95% CI |
|---|---|---|---|
| ALL | 899.3 days | 150.3 | (606.6, 1193.9) |
| AML low risk | 1315.2 days | 118.8 | (1082.4, 1548.0) |
| AML high risk | 655.7 days | 122.9 | (414.8, 896.5) |
해석:
- AML low > ALL > AML high — KM 곡선의 시각적 인상과 일치.
- AML low 와 AML high 의 CI 가 명확히 분리 (\(\geq 1082\) vs \(\leq 897\)).
- ALL 의 CI 는 양쪽 AML 군과 겹쳐 — 공식 비교는 검정 (Ch.7) 필요.
전통적으로 두 군의 생존 비교는 hazard ratio (HR) 로 한다:
\[ \text{HR} = \frac{h_1(t)}{h_2(t)} \]
PH 가정 (\(\text{HR}\) 시간 불변) 이 성립하면 단일 숫자로 효과 요약 가능. 하지만:
- 면역치료 (cancer immunotherapy) 시대에 PH 위반 흔함 — 초기 효과 없다가 후기 효과 등장 (delayed effect).
- HR 의 시간 가변성 → 단일 HR 보고가 무의미.
RMST 의 부각 (Royston-Parmar 2013, Uno 2014):
- HR 가정 불필요 — 두 곡선 면적의 직접 차이 비교.
- “\(\tau\) 시점까지의 평균 생존 일수” 라는 절대 척도로 직접 해석.
- 두 군의 RMST 차이 = “평균적으로 며칠 더 살았는가”.
→ 임상 의사결정에서 “5 년 RMST 차이 6 개월” 같은 해석이 “HR 0.85” 보다 직관적. 최근 임상시험 보고에 RMST 가 점점 표준화.
2.2 Median (and Other Quantiles)
2.2.1 점추정
확률변수 \(X\) 의 \(p\)th percentile:
\[ x_p = \inf\{t : S(t) \leq 1 - p\} \]
\(p = 0.5\) 면 median.
비모수 추정:
\[ \widehat{x}_p = \inf\{t : \widehat{S}(t) \leq 1 - p\} \]
= “KM 곡선이 \(1-p\) 에 도달하는 가장 빠른 시점” — 시각적으로 자명.
KM 그래프 그리고 \(y = 0.5\) 수평선 그어 만나는 곳. 그 \(t\) 값.
KM 은 step function 이라 정확한 0.5 가 아니라 0.5 직전과 직후의 점프가 있을 수 있음 → “처음으로 0.5 이하로 떨어지는 시점” 이 정의.
6-MP 군 median: \(\widehat{S}(22) = 0.538 > 0.5\), \(\widehat{S}(23) = 0.448 \leq 0.5\) → \(\widehat{x}_{0.5} = 23\) 주.
BMT ALL median (Klein Table 4.3): \(\widehat{S}(383) = 0.5217\), \(\widehat{S}(418) = 0.4943\) → \(\widehat{x}_{0.5} = 418\) 일.
2.2.2 Median 의 신뢰구간 — Brookmeyer-Crowley (1982a) 의 트릭
Quantile 의 표본 분산:
\[ \widehat{V}[\widehat{x}_p] = \frac{\widehat{V}[\widehat{S}(x_p)]}{\widehat{f}(x_p)^2} \]
(delta method: \(\widehat{x}_p\) 의 변동을 \(\widehat{S}\) 의 변동으로 환원, 단 변환의 미분 = \(1/f\)).
문제: 비모수에서 density \(f\) 를 추정하기 어려움 — kernel smoothing (Ch.6) 필요. 그리고 bandwidth 선택의 임의성.
→ density 추정을 우회하는 방법이 필요 → Brookmeyer-Crowley.
100(1-α)% CI for \(x_p\) = “다음을 만족하는 모든 \(t\) 의 집합”:
Linear (식 4.5.4): \[ -Z_{1-\alpha/2} \leq \frac{\widehat{S}(t) - (1-p)}{\sqrt{\widehat{V}[\widehat{S}(t)]}} \leq Z_{1-\alpha/2} \]
Log-transformed (식 4.5.5): \[ -Z_{1-\alpha/2} \leq \frac{\{\ln[-\ln \widehat{S}(t)] - \ln[-\ln(1-p)]\} \cdot \widehat{S}(t) \ln \widehat{S}(t)}{\sqrt{\widehat{V}[\widehat{S}(t)]}} \leq Z_{1-\alpha/2} \]
Arcsine-sqrt (식 4.5.6): \[ -Z_{1-\alpha/2} \leq \frac{2\{\arcsin\sqrt{\widehat{S}(t)} - \arcsin\sqrt{1-p}\} \sqrt{\widehat{S}(t)(1-\widehat{S}(t))}}{\sqrt{\widehat{V}[\widehat{S}(t)]}} \leq Z_{1-\alpha/2} \]
핵심 아이디어:
“특정 \(t\) 가 \(\widehat{x}_p\) 의 95% CI 안에 있다” \(\Leftrightarrow\) “그 \(t\) 의 \(\widehat{S}(t)\) 가 \(1-p = 0.5\) 의 95% pointwise CI 안에 있다”
왜 동치인가:
\(x_p\) 의 정의에 의해 \(S(x_p) = 1 - p\). 만약 우리가 \(S\) 의 신뢰구간 (§ 4.3) 을 알면, “\(S(t)\) 의 CI 가 \(1-p\) 를 포함하는 모든 \(t\)” 가 \(x_p\) 의 CI 가 된다.
- \(\widehat{S}(t) - (1-p)\) 가 0 에 가까우면 → \(t\) 가 \(\widehat{x}_p\) 의 후보.
- 표준화 (\(/\sqrt{\widehat{V}[\widehat{S}]}\)) → \(|Z|\) 통계량.
- \(|Z| \leq Z_{1-\alpha/2}\) 만족하는 모든 \(t\) → CI.
식 4.5.4 가 가장 단순한 (linear) 형태. 4.5.5 는 log-log 변환, 4.5.6 은 arcsine 변환 — § 4.3 의 pointwise CI 변환을 그대로 적용.
density 추정 불필요 — 이것이 Brookmeyer-Crowley 의 핵심 기여. quantile 분산을 시간 영역이 아닌 생존확률 영역에서 처리.
2.2.3 BMT ALL Median CI 손계산 (Klein Table 4.7)
식 4.5.4 의 linear test statistic 을 모든 \(t_i\) 에서 계산:
| \(t_i\) | \(\widehat{S}\) | \(\sqrt{\widehat{V}}\) | \(\frac{\widehat{S}-0.5}{\sqrt{\widehat{V}}}\) | \(|Z|<1.96\)? |
|---|---|---|---|---|
| 1 | 0.9737 | 0.0260 | 18.242 | 안 들어감 |
| 55 | 0.9474 | 0.0362 | 12.350 | 안 들어감 |
| 74 | 0.9211 | 0.0437 | 9.625 | 안 들어감 |
| … | … | … | … | … |
| 192 | 0.6579 | 0.0770 | 2.052 | 안 들어감 |
| 194 | 0.6316 | 0.0783 | 1.681 | 들어감 |
| 230 | 0.6041 | 0.0795 | 1.309 | 들어감 |
| … | … | … | … | … |
| 418 | 0.4943 | 0.0819 | -0.070 | 들어감 |
| … | … | … | … | … |
| 662 | 0.3531 | 0.0793 | -1.853 | 들어감 |
| 2081 | 0.3531 | 0.0793 | -1.853 | 들어감 |
\(t_1 = 1\) 일에서:
- \(\widehat{S}(1) = 0.9737\).
- \(\sqrt{\widehat{V}[\widehat{S}(1)]} = 0.0260\).
- test statistic (식 4.5.4 의 중간 항):
\[ \frac{0.9737 - 0.5}{0.0260} = \frac{0.4737}{0.0260} = 18.219 \approx 18.242 \]
(차이는 반올림). \(|18.242| > 1.96\) → 1 일은 CI 에 들어가지 않음.
해석: \(\widehat{S}(1) = 0.97\) 인데 0.5 와 너무 멀어 (18 표준오차 차이) — 1 일이 median 일 가능성 0%.
전체 표를 통과하면:
- Linear (식 4.5.4): \(|Z| < 1.96\) 인 시점 = \(194 \leq t \leq 2081\). 그러나 \(t = 2081\) 의 \(|Z| = 1.853\) 이므로 그 이후도 1.96 보다 작아질 가능성 있음 → 상한 미정. 따라서 95% CI: \(x_{0.5} > 194\) 일.
- Log (식 4.5.5): 동일 패턴, \(x_{0.5} > 192\) 일.
- Arcsine (식 4.5.6): \(x_{0.5} > 194\) 일.
왜 상한이 미정인가: BMT ALL 데이터는 23 사건 + 15 censored = 38 명. 마지막 사건 662 일 후 단 1 명만 2081 일까지 생존 → KM 이 0.3531 에서 멈춤. 실제 median 의 상한을 결정하기에 정보 부족 — heavy censoring 의 본질.
→ 실무 보고: “Median DFS = 418 days, 95% CI: \(> 194\) days (lower bound only)”.
AML low risk: median = 2204 일, lower 95% CI = 704 (linear) or 641 (log/arcsine). AML high risk: median = 183 일, 95% CI = (115, 363) — 정상 양쪽 bound.
Brookmeyer-Crowley 외에 직접 식:
\[ \widetilde{\widehat{V}}[\widehat{x}_p] = \frac{\widehat{V}[\widehat{S}(x_p)]}{\widehat{f}(x_p)^2} \]
with crude density estimate (uniform kernel):
\[ \widehat{f}(t) = \frac{\widehat{S}(t-b) - \widehat{S}(t+b)}{2b} \]
- \(b\) : bandwidth (작은 양수).
- 단점: \(b\) 선택의 임의성.
- 장점: standard symmetric CI \(\widehat{x}_p \pm Z \sqrt{\widehat{V}[\widehat{x}_p]}\) 형태.
→ Brookmeyer-Crowley 가 더 자연스러움 (variance stabilizing 변환 직접 활용).
2.3 Practical Notes (4 개)
모든 \(\delta_i = 1\) 이면:
- \(\widehat{\mu}_\tau\) 가 사건 시점들의 평균 = sample mean.
- \(\widehat{V}[\widehat{\mu}_\tau]\) 가 sample variance / n.
→ KM-based RMST 는 sample mean 의 censoring 일반화.
마지막 관측이 censored 일 때 § 4.2 의 tail 처리 (Efron 0 / Gill / BHK exponential) 을 적용한 KM 의 면적을 RMST 로.
비교 (BMT ALL):
- Efron tail (마지막 censored = 사건): RMST 더 작음 (낮은 추정).
- Gill tail (constant beyond): \(\tau = t_{\max}\) 까지의 RMST = Efron 와 동일.
- BHK exponential tail: \(\tau = \infty\) 까지 적분 가능, 그러나 모수 가정 추가.
→ default 는 Gill (Klein 1991), \(\tau\) 를 명시적으로 보고.
| 도구 | RMST | Median + CI |
|---|---|---|
R survival |
print(survfit(...), rmean=tau) |
summary 의 median 행 (Brookmeyer-Crowley default) |
R survRM2 |
rmst2(...) 두 군 비교 |
— |
R quantile.survfit |
— | 모든 quantile + CI |
Python lifelines |
restricted_mean_survival_time(kmf, t=tau) |
median_survival_times(kmf) + kmf.confidence_interval_ |
SAS LIFETEST |
MEAN option |
MEDIAN + CL option |
Stata stsum |
mean 출력 | median + CI |
R survRM2::rmst2(time, status, arm, tau) 가 두 군 RMST 차이의 검정까지 제공 — 임상시험 표준 도구.
2.4 Theoretical Notes (2 개)
\(\sqrt{n}(\widehat{\mu}_\tau - \mu_\tau)\) 가 점근적으로 정규 (Andersen et al. 1993). KM 의 weak convergence (§ 4.4 Theoretical Note 1) 에서 직접 도출.
→ 식 4.5.3 의 ± Z·SE 형태 CI 가 점근적으로 valid.
Brookmeyer & Crowley (1982a) 가 linear/log/arcsine 3 종의 finite-sample coverage 를 시뮬레이션:
- Linear (식 4.5.4): 가장 단순, 큰 표본에서 적정.
- Log (식 4.5.5): 비대칭성 반영, 소표본 우수.
- Arcsine (식 4.5.6): 약간 보수적, 매우 안정.
→ 권장: 소표본 시 log 또는 arcsine. 큰 표본 시 셋 다 동치.
3 § 4.6 — Estimators for Left-Truncated Data
3.1 좌절단 데이터의 구조
각 개체 \(j\) 에 대해 다음 3 가지 정보:
- \(L_j\) : entry time (개체가 study 에 들어온 시점, age 단위).
- \(T_j\) : study time (사건 또는 censoring 시점).
- \(\delta_j\) : 사건 indicator (1 = 사건, 0 = right-censoring).
조건: \(X_j \geq L_j\) 인 개체만 표본에 포함 (즉 entry 이전에 사건 발생한 사람은 표본에서 제외).
3.2 위험집합 \(Y_i\) 의 재정의 — 모든 변화의 핵심
우측 censoring 만: \(Y_i = \#\{j : T_j \geq t_i\}\) — “\(t_i\) 직전까지 추적 중이고 사건 안 한 개체 수”.
좌절단 + 우측 censoring: \(Y_i = \#\{j : L_j < t_i \leq T_j\}\) — 두 조건 모두 만족.
- \(L_j < t_i\) : 개체 \(j\) 가 \(t_i\) 이전에 entry 했음.
- \(t_i \leq T_j\) : 개체 \(j\) 가 \(t_i\) 직전까지 사건도 censoring 도 안 했음.
핵심 차이: 우측 censoring 만의 경우 모든 개체가 \(L_j = 0\) 으로 고정 (study 시작 시점부터 추적). 좌절단은 \(L_j\) 가 개체별로 다름.
좌절단 데이터의 특이한 성질:
- 우측 censoring 만: \(Y_i\) 는 시간 흐름에 따라 단조 감소 (사건과 censoring 으로만 빠짐).
- 좌절단 추가: \(Y_i\) 가 증가했다가 감소 할 수 있음 — 새 개체가 entry 하면 \(Y\) 증가.
Channing house 예 (Figure 4.10):
- 가장 어린 entry age (예: 60 세) 부터 위험집합 0 → 점점 증가.
- 약 80 세에 최고점 (~140 명, 여성 기준).
- 그 이후 사망/censoring 으로 감소.
- 100 세 이후 거의 0.
이 “산 모양” 위험집합이 좌절단 데이터의 시각적 특징.
3.3 동일한 KM·NA 식 적용
식 4.2.1 의 KM, 식 4.2.3 의 NA, 식 4.2.2 의 Greenwood, 식 4.2.4 의 Aalen — 모두 그대로 적용. 단지 \(Y_i\) 의 값이 새 정의에 따라 달라질 뿐.
§ 4.3 의 pointwise CI 와 § 4.4 의 EP/HW band 도 동일하게 작동. 이것이 좌절단 처리의 우아함.
3.4 추정 대상의 변경 — Conditional Survival
좌절단 데이터에서 KM 식 4.2.1 은 무조건부 \(S(t) = P(X > t)\) 가 아닌, 조건부
\[ S(t \mid X \geq L_{\min}) = \frac{S(t)}{S(L_{\min})} \]
을 추정한다. 여기서 \(L_{\min}\) = 표본 내 최소 entry time.
왜 조건부인가:
- \(L_{\min}\) 이전에 사건 발생한 사람은 표본 자체에 없음.
- 따라서 KM 이 추정할 수 있는 것은 “\(X \geq L_{\min}\) 라는 조건 하의 생존”.
Channing 예:
- \(L_{\min} = 60\) 세 입소.
- KM 은 “60 세까지 생존했다는 조건 하의 t 시점 생존확률”.
- 60 세 이전 사망률은 추정 불가 (정보 없음).
Length-biased sampling 의 본질: 오래 산 사람일수록 입소시설에서 만나기 쉬움. KM 의 conditional 추정이 이 bias 를 자연스럽게 보정.
KM 은 conditional 이지만, NA 는 다르다:
\[ \widetilde{H}(t) = \sum_{t_i \leq t} \frac{d_i}{Y_i} \]
이 식의 각 항 \(d_i/Y_i\) 는 “\(t_i\) 시점에 risk 인 사람 중 사건 발생 비율” — 무조건적 hazard rate \(h(t_i) \cdot dt\) 의 추정.
→ NA 의 기울기 = unconditional hazard rate (조건부 아님). \(L_{\min}\) 이전의 hazard 는 추정 안 되지만, \(L_{\min}\) 이후의 hazard 는 진짜 모집단 hazard.
이 차이는 임상에서 중요. “60~80 세 hazard 가 어떻게 변하는가” 를 묻는다면 NA 가 답을 준다 (KM 의 변화율이 아닌 NA 의 기울기로).
3.5 작은 위험집합의 함정
좌절단 데이터에서 흔한 문제:
위험집합이 작은 시점 (entry 가 막 시작된 초기) 에 사건이 발생하면 \(d_i / Y_i\) 가 1 또는 1 에 가까워짐 → \(1 - d_i/Y_i\) 가 0 또는 매우 작음 → KM 이 0 또는 거의 0 으로 떨어짐.
Channing male 예 (Klein § 4.6):
- 751 개월 (62.6 세): 1 명 entry, \(Y = 1\).
- 759 개월 (63.3 세): 2 명째 entry, \(Y = 2\).
- 777 개월 (64.8 세): 1 명 사망, \(Y = 2\), \(d = 1\) → \(\widehat{S}(777) = 1 \cdot (1 - 1/2) = 0.5\).
- 781 개월 (65.1 세): 또 1 명 사망, \(Y = 1\), \(d = 1\) → \(\widehat{S}(781) = 0.5 \cdot 0 = 0\).
문제: KM 이 65 세에 이미 0 으로 떨어짐 — 그러나 표본에는 100 세 가까운 사람도 있음. 명백히 무의미.
3.6 식 4.6.1 — Conditional from Age \(a\)
특정 age \(a\) 부터의 conditional survival \(S_a(t) = P(X > t | X \geq a)\):
\[ \widehat{S}_a(t) = \prod_{a \leq t_i \leq t} \left[1 - \frac{d_i}{Y_i}\right], \quad t \geq a \]
\(a\) 이전 의 사건 시점은 무시하고 곱.
Greenwood, NA 도 동일하게 \(a\) 이전 무시.
문제: 위험집합이 작은 초기 시점의 사건이 KM 을 무의미하게 떨어뜨림.
해결: 위험집합이 충분히 커지는 시점 \(a\) 부터만 계산. \(a\) 이전 정보는 무시.
- “60~\(a\) 세까지 산 사람들의 그 이후 생존확률” 을 추정.
- \(a\) 가 클수록 더 많은 정보 buffer, 안정적인 추정.
Channing male 예 (\(a = 68\) 년 = 816 개월):
- 816 개월 시점에 위험집합 약 30 명 (Figure 4.10 추정).
- 그 이후 KM 계산 → 안정.
손실: \(a\) 이전의 생존 정보 사용 안 함. 그러나 그 정보가 너무 적어 사용 시 KM 이 망가지므로 trade-off 합리적.
보고 시: “68 세 conditional 5 년 생존률 = X%” — \(a\) 를 명시.
3.7 Channing House 정전 예제
연구 설계 (Hyde 1980):
- 462 명 retirement community 거주자.
- 97 males + 365 females.
- Entry time: 입소 연령 (개월).
- Event: 사망 또는 1975 년 7 월 1 일 censoring.
좌절단의 본질: 입소 자격 = 65 세 이상 + 일정 자산. 이 조건 만족할 때까지 생존한 사람만 표본에 포함 → length-biased sampling.
남성 vs 여성 conditional survival (Klein Figure 4.11):
| Age \(a\) | 남성 5-yr conditional survival | 여성 5-yr conditional survival |
|---|---|---|
| 68 세 | 약 0.85 | 약 0.93 |
| 80 세 | 약 0.55 | 약 0.70 |
해석:
- 68 세에서 80 세로 갈수록 5-yr survival 감소 — 자연스러운 aging.
- 모든 연령에서 여성 > 남성 — 인구통계학적 사실 일치.
- \(a\) 가 진입점이므로 \(\widehat{S}_a(a) = 1\).
3.8 Practical Notes (2 개)
좌절단 KM 의 MLE 정당성은 다음 가정에 의존:
\[ \frac{P[X = x \mid L = l, X > L]}{P[X \geq x \mid L = l, X > L]} = \frac{P[X = x]}{P[X \geq x]} = h(x) \]
(L 와 X 의 cause-specific hazard 가 같음 — entry time 이 모집단 hazard 와 무관).
위반 사례:
- 입소 시점이 건강 상태와 관련 (일찍 입소 = 건강 나쁨) → 가정 위반.
- 이때 KM 이 다른 함수 추정.
검정: Tsai (1990) 의 정형 검정 (independent censoring 하에서 valid). Keiding (1992) 의 추가 논의.
실무 점검: 입소 이유가 무작위인지 확인 — 자산 도달 시점 기반 입소 (Channing) 는 보통 OK, 의료적 이유 입소는 위반 가능.
작은 \(Y_i\) 에서 KM 의 대안:
\[ \widetilde{S}(t) = \prod_{t_i \leq t}\left\{1 - \frac{d_i}{Y_i} \cdot I[Y_i \geq c n^\alpha]\right\} \]
where \(I\) = indicator, \(c > 0\), \(0 < \alpha < 1\) 상수.
의미: \(Y_i\) 가 임계값 \(c n^\alpha\) 미만이면 그 시점 사건을 무시 (KM 점프 안 함).
효과:
- finite sample 에서 안정 — 작은 \(Y_i\) 에서의 wild fluctuation 방지.
- 점근적으로 표준 KM 과 동치 (\(n \to \infty\) 면 임계값도 증가하지만 모든 진짜 사건이 결국 포함).
식 4.6.1 과의 차이:
- 식 4.6.1: 한 시점 \(a\) 부터 시작 (사용자 지정).
- Lai-Ying: 자동 — 모든 작은 \(Y_i\) 점프를 무시 (데이터-driven 임계값).
실무: 식 4.6.1 이 더 단순하고 보고 가능 (“\(a = 68\) 세부터”). Lai-Ying 은 자동화에 적합.
3.9 Theoretical Note
좌절단 KM·NA 의 점근 성질은 § 3.6 의 counting process 이론에서 직접 도출. 단지 \(Y(t)\) 의 정의가 다음으로 변경:
\[ Y(t) = \sum_j I[L_j < t \leq T_j] \]
(우측 censoring 만의 \(\sum_j I[T_j \geq t]\) 와 다름).
이 수정된 \(Y(t)\) 로 § 3.6 의 모든 결과 (martingale CLT, Brownian bridge weak convergence) 가 그대로 작동. → § 4.4 의 EP/HW band 도 좌절단에 동일 적용.
4 응용 분야
| 분야 | 활용 | 구체적 예시 |
|---|---|---|
| 임상시험 | RMST 두 군 비교 | PH 위반 시 hazard ratio 대신 RMST 차이 보고 |
| 면역치료 | Delayed effect 정량화 | KM 후기 분리 → RMST 6 개월 차이 |
| 의료기록 retrospective | 좌절단 보정 | Diagnosis 이후 추적 — entry = diagnosis time |
| 인구통계 | Cohort life table | Channing 식의 retirement community 코호트 |
| 신뢰성 공학 | Field data | 가동 시점 다른 부품의 좌절단 + 우측 censored |
| 보험 | 가입 시점 다른 보험 | 가입 = entry, claim = event |
5 코드 예시
5.1 Step 1 — RMST 직접 구현
import numpy as np
def rmst(times, events, tau):
"""KM 의 면적 = restricted mean survival time"""
order = np.argsort(times)
t_sorted = times[order]
e_sorted = events[order]
unique_event_times = np.unique(t_sorted[e_sorted == 1])
S = 1.0
var_S_term = 0.0
rmst_value = 0.0
var_rmst = 0.0
prev_t = 0.0
# 각 사건 시점에서 step 면적 계산
rows = []
for ti in unique_event_times:
if ti > tau:
# 마지막 step 은 tau 까지만
rmst_value += S * (tau - prev_t)
break
Y = int(np.sum(t_sorted >= ti))
d = int(np.sum((t_sorted == ti) & (e_sorted == 1)))
rmst_value += S * (ti - prev_t)
rows.append((prev_t, ti, S, ti - prev_t, S * (ti - prev_t)))
# KM 업데이트
S *= (1 - d / Y)
# Greenwood 누적
var_S_term += d / (Y * (Y - d)) if (Y - d) > 0 else 0
prev_t = ti
else:
# 마지막 사건 시점에서 tau 까지
rmst_value += S * (tau - prev_t)
# 분산 식 4.5.2 (잔여 면적² × Greenwood term)
# 간단히 sum_var 만 별도 구현 필요 — 여기서는 점추정만
return rmst_value, rows
# Klein Example 4.1: 6-MP RMST_35
times = np.array([6, 6, 6, 6, 7, 9, 10, 10, 11, 13, 16,
17, 19, 20, 22, 23, 25, 32, 32, 34, 35])
events = np.array([1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1,
0, 0, 0, 1, 1, 0, 0, 0, 0, 0])
mu_35, rows = rmst(times, events, 35)
print(f"μ̂_35 = {mu_35:.3f} 주") # 23.286
for prev, ti, S, dt, area in rows:
print(f" [{prev:5.1f}, {ti:5.1f}): S={S:.3f}, len={dt}, area={area:.3f}")5.2 Step 2 — Brookmeyer-Crowley Median CI
from scipy.stats import norm
def brookmeyer_crowley_ci(times, events, p=0.5, alpha=0.05):
"""식 4.5.4: linear test statistic 으로 quantile CI 구성"""
order = np.argsort(times)
t_sorted = times[order]
e_sorted = events[order]
unique_event_times = np.unique(t_sorted[e_sorted == 1])
z = norm.ppf(1 - alpha/2)
target = 1 - p
S = 1.0
var_S_term = 0.0
in_ci = [] # CI 에 포함된 t_i 목록
for ti in unique_event_times:
Y = int(np.sum(t_sorted >= ti))
d = int(np.sum((t_sorted == ti) & (e_sorted == 1)))
S *= (1 - d / Y)
var_S_term += d / (Y * (Y - d)) if (Y - d) > 0 else 0
var_S = (S ** 2) * var_S_term
# test statistic
if var_S > 0:
stat = (S - target) / np.sqrt(var_S)
if abs(stat) <= z:
in_ci.append((ti, S, stat))
return in_ci
# BMT ALL 1 년 시점은 별도 데이터로 시뮬레이션 가정
# 실제 호출 시 적절한 데이터 필요5.3 Step 3 — lifelines + R survRM2
# lifelines 의 RMST
from lifelines import KaplanMeierFitter
from lifelines.utils import restricted_mean_survival_time
kmf = KaplanMeierFitter().fit(times, events, label="6-MP")
mu = restricted_mean_survival_time(kmf, t=35)
print(f"6-MP RMST_35 = {mu:.3f} 주")
# Median + CI
from lifelines.utils import median_survival_times
median = kmf.median_survival_time_
median_ci = median_survival_times(kmf.confidence_interval_)
print(f"Median = {median}, CI = {median_ci}")# R: survRM2 의 두 군 RMST 비교
library(survRM2)
library(survival)
# BMT 데이터에서 ALL vs AML high
result <- rmst2(time = bmt$time,
status = bmt$event,
arm = (bmt$group == 1), # ALL = 1, AML high = 0
tau = 2081)
print(result)
# RMST estimates, difference, ratio + 95% CIs
# 좌절단 KM (Channing house)
library(KMsurv)
data(channing)
# 좌절단 + 우측 censored 의 KM
fit <- survfit(Surv(time = ageentry, time2 = age, event = death) ~ gender,
data = channing, type = "kaplan-meier",
conf.type = "log-log")
# Conditional from age 68 (= 816 months)
fit_a68 <- survfit(Surv(time = ageentry, time2 = age, event = death) ~ gender,
data = subset(channing, age >= 816 & ageentry < 816),
conf.type = "log-log")
plot(fit_a68, col = c("blue", "red"),
xlab = "Age (months)", ylab = "Conditional survival",
main = "Channing — 68 세 conditional")
legend("bottomleft", c("Male", "Female"), col = c("blue", "red"), lty = 1)5.4 Step 4 — 좌절단 KM 의 Y_i 직접 시뮬레이션
def left_truncated_y(L, T, t):
"""위험집합 Y_i = #{j : L_j < t ≤ T_j}"""
return np.sum((L < t) & (t <= T))
# Channing house 시뮬레이션 (간단)
np.random.seed(42)
n = 100
L = np.random.uniform(60, 80, n) * 12 # 60~80 세 entry, 개월 단위
T = L + np.random.exponential(120, n) # 평균 10 년 후 사건
event = np.ones(n, dtype=int)
event[np.random.rand(n) < 0.3] = 0 # 30% censoring
# 위험집합 vs age plot
ages = np.linspace(L.min(), T.max(), 200)
Y_at_age = [left_truncated_y(L, T, t) for t in ages]
import matplotlib.pyplot as plt
plt.plot(ages / 12, Y_at_age)
plt.xlabel("Age (years)")
plt.ylabel("Number at Risk")
plt.title("Channing-style Risk Set (시뮬레이션)")
plt.axvline(x=68, color='red', linestyle='--', label='a = 68 세 (식 4.6.1)')
plt.legend()
plt.grid()
plt.show()6 핵심 takeaway
RMST 는 “곡선 면적” — \(\mu = \int_0^\infty S \, dt\) 의 부분적분 도출. 마지막 censoring 시 \(\tau\) 한정 필요. 분산 식 4.5.2 는 “잔여 면적²” 으로 가중된 Greenwood — 이른 시점의 사건이 평균 추정에 더 큰 불확실성.
PH 위반 시대의 RMST — Hazard ratio 의 가정 (시간 불변) 이 면역치료 등에서 흔히 위반. RMST 차이 = “평균적으로 며칠 더 살았는가” 의 절대 척도가 임상에서 부각.
Median CI 는 density 추정 우회 — Brookmeyer-Crowley (1982a) 의 트릭: “\(\widehat{S}(t)\) 의 95% CI 가 0.5 를 포함하는 모든 \(t\)” 가 median 의 95% CI. density \(f(x_p)\) 추정 불필요.
좌절단은 \(Y_i\) 정의만 바꿈 — \(Y_i = \#\{j : L_j < t_i \leq T_j\}\). KM·NA·CI·Band 식은 그대로. 단 추정 대상이 conditional \(S(t|X \geq L_{\min}) = S(t)/S(L_{\min})\). NA 의 기울기는 무조건 hazard.
위험집합이 산 모양 — 좌절단 데이터에서 \(Y_i\) 가 entry 와 함께 증가했다가 사건/censoring 으로 감소. 우측 censoring 만의 단조 감소와 다름. 이른 시점 작은 \(Y_i\) 에서 KM 폭주 가능.
Channing 함정 처리는 식 4.6.1 — 작은 \(Y_i\) 에서 KM=0 으로 떨어지는 함정. 일정 age \(a\) 이전 사건은 무시하고 conditional from \(a\) 만 추정. Lai-Ying 1991 의 small-risk-set indicator 도 자동화 대안.
7 관련 주제
선행 지식
- § 4.1~4.2 — KM·NA 점추정
- § 4.3~4.4 — Pointwise CI · Confidence Bands
- § 1.16 Channing House (left truncation 정전)
- § 2.4 — MRL · Median Life — 평균잔여수명과 RMST 의 관계
- § 3.4 — Truncation 의 정밀 정의
후속 주제
- § 4.7 — Competing Risks (1-KM · CIF · CP) — 함정과 올바른 추정
- Ch.7 — Log-rank, Wilcoxon, RMST 차이의 검정
- Ch.9 — Cox PH with Left Truncation
- Ch.5 — Right Truncation, Interval Censoring (좌절단의 mirror image)
관련 개념
- § 1.19 — AIDS Right Truncation — 좌절단의 mirror image
- 임상시험 RMST 가이드라인 (Royston-Parmar 2013, Uno 2014, ASH/FDA endpoint guidance)
- Length-biased sampling 의 일반론 (Kleinbaum & Klein, Cox & Oakes)