Klein § 4.5~4.6 — Mean · Median · Left-Truncated Estimation

Restricted Mean Survival Time μ̂_τ = ∫_0^τ Ŝ(t)dt (식 4.5.1) · 분산 식 4.5.2 (Greenwood-style 누적 면적²) · μ의 적분 = S(t)dt 의 직관 / Median 점추정 x̂_p = inf{t : Ŝ(t) ≤ 1-p} · Brookmeyer-Crowley 1982a CI 3 종 (식 4.5.4 linear · 4.5.5 log · 4.5.6 arcsine) — density f̂(x_p) 추정 우회 트릭 / Klein Example 4.1 6-MP 손풀이 μ̂_35 = 23.286 주, SE 2.827 + Example 4.2 BMT 137명 ALL 1-yr CI · ALL median 무한 (heavy censoring) / § 4.6 좌절단: Y_i 재정의 (L_j < t_i ≤ T_j) 만으로 KM·NA·CI·Band 모두 적용·conditional survival S(t|X≥L_min) = S(t)/S(L_min) 추정 / Channing house 97 males + 365 females 위험집합 도형·early instability (3명 만의 위험집합에서 KM=0 함정)·식 4.6.1 conditional from age a / Tsai 1990 independent truncation 검정 + Lai-Ying 1991 small-risk-set 정규화 I[Y_i ≥ c n^α]

Klein & Moeschberger Ch.4 의 § 4.5 (Mean·Median Estimation) + § 4.6 (Left-Truncated Data) 를 정전 깊이로 풀어낸다. 04-1·04-2 가 KM·NA 점추정과 신뢰구간/대를 다뤘다면, 본 편은 그 위에 (1) summary statistics — 평균과 중앙값 — 와 (2) 좌절단 데이터로의 확장을 쌓는다. § 4.5 — Restricted Mean Survival Time (RMST): μ̂_τ = ∫_0^τ Ŝ(t)dt (식 4.5.1) 의 면적 해석·∫_0^∞ S(t)dt = E[X] 도출 (∫_0^∞ tf(t)dt 부분적분)·tail 처리 함정 (마지막 censoring 시 정의 안됨 → τ 사전 지정 또는 Efron tail). 분산 식 4.5.2: ∑ [∫_t_i^τ Ŝ(t)dt]² · d_i/[Y_i(Y_i-d_i)] — Greenwood 의 면적 가중 형태. PH 위반 시대 RMST 가 hazard ratio 의 직관적 대체로 부각되는 현대적 의의. 6-MP 군 μ̂_35 = 23.286 주 (SE 2.827) + BMT 3 그룹 비교 (ALL 899·AML low 1549·AML high 792 days). Median estimation: x̂_p = inf{t : Ŝ(t) ≤ 1-p} 자명. 그러나 분산은 density f(x_p) 추정 필요 → 비모수에서 어려움. Brookmeyer-Crowley 1982a 의 트릭: “Ŝ(t) 의 95% CI 가 1-p 를 포함하는 모든 t” — 시간축 CI 를 생존확률축 CI 로 우회. 식 4.5.4 linear / 4.5.5 log / 4.5.6 arcsine 3 종. BMT ALL median 손풀이: x̂_0.5 = 418 days, 95% linear CI x_0.5 > 194 days (heavy censoring 으로 상한 미정). AML high (115, 363) days. Klein Practical Note 3 의 density-based 분산 대안. § 4.6 — Left-Truncated Data: Y_i 재정의 만으로 KM·NA·CI·Band 모두 동일하게 적용 — “\(Y_i = \#\{j : L_j < t_i \leq T_j\}\)” (entry time L_j 가 t_i 직전이고 study time T_j 가 t_i 이상). 단 추정 대상이 conditional survival S(t|X≥L_min) = S(t)/S(L_min) 으로 변경. Length-biased sampling 의 본질적 함정 (오래 산 사람만 표본에 포함될 가능성 높음). Channing house 정전 예제: 97 males + 365 females retirement community, 위험집합이 entry 와 함께 증가 → 사망/censoring 으로 감소 (Figure 4.10). 작은 위험집합에서 Y_i = d_i 시 KM = 0 함정 — 식 4.6.1 의 conditional from age a 트릭 (a 이전은 사용 안 함). 68세/80세 conditional 생존 비교 (남녀별 4 곡선). Tsai 1990 independent truncation 검정 (P[X=x|L=l, X>L]/P[X≥x|L=l, X>L] = h(x)). Lai-Ying 1991 small-risk-set 수정 ~S = ∏(1 - d_i/Y_i · I[Y_i ≥ c n^α]) — 점근적 동치 + finite sample 안정. 대표 응용: 임상시험 PH 위반 시 RMST · 의료기록 retrospective study (좌절단) · cohort life table · 의료기 수명 retrospective cohort.

Statistics
Survival Analysis
Klein-Moeschberger
RMST
Median-Survival
Left-Truncation
Channing-House
저자

Kwangmin Kim

공개

2026년 04월 28일

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~4.6 의 한 줄 요약

“§ 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 정의와 직관

정의: Restricted Mean Survival Time (식 4.5.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\) 이하의 마지막 사건 시점.

함정 — 마지막 관측이 censoring 일 때

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 분산 식의 의미

직관 — 식 4.5.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) 필요.
현대적 의의 — RMST 와 PH 가정

전통적으로 두 군의 생존 비교는 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 점추정

정의: \(p\)th percentile

확률변수 \(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 곡선에서 median 읽기

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 의 분산은 어렵다

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.

정의: Brookmeyer-Crowley CI 3 종 (식 4.5.4~4.5.6)

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} \]

직관 — 시간축 CI 를 생존확률축 CI 로 우회

핵심 아이디어:

“특정 \(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.

Density-based 분산 대안 (Practical Note 3)

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 개)

Practical Note 1 — censoring 없으면 sample mean

모든 \(\delta_i = 1\) 이면:

  • \(\widehat{\mu}_\tau\) 가 사건 시점들의 평균 = sample mean.
  • \(\widehat{V}[\widehat{\mu}_\tau]\) 가 sample variance / n.

→ KM-based RMST 는 sample mean 의 censoring 일반화.

Practical Note 2 — Tail-corrected RMST

마지막 관측이 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\) 를 명시적으로 보고.

Practical Note 4 — 통계 패키지
도구 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 개)

Theoretical Note 1 — RMST 점근 정규성

\(\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.

Theoretical Note 2 — Brookmeyer-Crowley 의 Monte Carlo 비교

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 좌절단 데이터의 구조

정의: 좌절단 (Left Truncation) 데이터

각 개체 \(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 vs 좌절단의 위험집합

우측 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 은 무엇을 추정하는가

좌절단 데이터에서 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 를 자연스럽게 보정.

NA 의 해석 — 무조건 hazard rate

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 작은 위험집합의 함정

함정 — \(Y_i = d_i\) 면 KM = 0 으로 떨어짐

좌절단 데이터에서 흔한 문제:

위험집합이 작은 시점 (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\)

정의: 식 4.6.1 — Age \(a\) 부터의 conditional KM

특정 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 정전 예제

Channing House 데이터 (Klein § 1.16, Klein Table D.5)

연구 설계 (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 개)

Practical Note 1 — Independent Truncation 가정

좌절단 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, 의료적 이유 입소는 위반 가능.

Practical Note 2 — Lai-Ying (1991) 의 small-risk-set 정규화

작은 \(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

Theoretical Note 1 — Counting Process 도출

좌절단 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

§ 4.5~4.6 의 6 가지 교훈
  1. RMST 는 “곡선 면적”\(\mu = \int_0^\infty S \, dt\) 의 부분적분 도출. 마지막 censoring 시 \(\tau\) 한정 필요. 분산 식 4.5.2 는 “잔여 면적²” 으로 가중된 Greenwood — 이른 시점의 사건이 평균 추정에 더 큰 불확실성.

  2. PH 위반 시대의 RMST — Hazard ratio 의 가정 (시간 불변) 이 면역치료 등에서 흔히 위반. RMST 차이 = “평균적으로 며칠 더 살았는가” 의 절대 척도가 임상에서 부각.

  3. Median CI 는 density 추정 우회 — Brookmeyer-Crowley (1982a) 의 트릭: “\(\widehat{S}(t)\) 의 95% CI 가 0.5 를 포함하는 모든 \(t\)” 가 median 의 95% CI. density \(f(x_p)\) 추정 불필요.

  4. 좌절단은 \(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.

  5. 위험집합이 산 모양 — 좌절단 데이터에서 \(Y_i\) 가 entry 와 함께 증가했다가 사건/censoring 으로 감소. 우측 censoring 만의 단조 감소와 다름. 이른 시점 작은 \(Y_i\) 에서 KM 폭주 가능.

  6. Channing 함정 처리는 식 4.6.1 — 작은 \(Y_i\) 에서 KM=0 으로 떨어지는 함정. 일정 age \(a\) 이전 사건은 무시하고 conditional from \(a\) 만 추정. Lai-Ying 1991 의 small-risk-set indicator 도 자동화 대안.

7 관련 주제

선행 지식

후속 주제

  • § 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)

Subscribe

Enjoy this blog? Get notified of new posts by email: