Klein § 3.7 — Exercises (9 문제 완전 풀이)

Group A 식별 (Ex 3.1 § 1.2 Leukemia·§ 1.5 Breast의 censoring 분류·Ex 3.2 30년 breast cohort 4 개체의 left/interval/right censoring·Ex 3.3 DMBA rat 실험 4 rats) / Group B Likelihood (Ex 3.4 6-MP Exponential MLE λ̂ = r/Σt·Ex 3.5 Log-logistic + left censored·Ex 3.6 BMT relapse + death 두 분포 결합·Ex 3.7 Breast cancer interval censored Weibull) / Group C Theoretical (Ex 3.8 Exp X + Exp C marginal P(δ=1) = λ/(λ+θ)·T 와 δ 독립성 증명·Ex 3.9 Poisson process M(t) = N(t) - λt 의 martingale 성질 증명)

Klein & Moeschberger Ch.3 § 3.7 의 9 개 연습문제를 한 편으로 정독한다. § 3.2~3.6 의 모든 개념 (5 censoring + 3 truncation + likelihood master 식 + counting process martingale) 을 실제 임상 사례와 정전 수학 문제로 검증. Group A 식별 (3 문제): 임상 시나리오에서 censoring/truncation 형태 분류 — § 1.2 Leukemia · § 1.5 Breast cancer (Ex 3.1) / 30 년 breast cancer cohort 의 4 가지 환자 시나리오 (right censoring · interval censoring · 사고사 · loss to follow-up) (Ex 3.2) / Sprague-Dawley rat DMBA 실험 의 4 rats (left censoring · right censoring · interval censoring · random censoring) (Ex 3.3). Group B Likelihood (4 문제): § 1.2 6-MP 그룹 의 Exponential MLE r/Σt 직접 도출 (Ex 3.4) / Log-logistic + left censored data 의 likelihood (Ex 3.5) / BMT 의 두 사건 (relapse → death) 의 결합 likelihood — Exponential relapse + Weibull death + truncation 비교 (Ex 3.6) / 8 명 50 세 여성 의 10 년 mammogram 추적 — Weibull interval censored likelihood (Ex 3.7). Group C Theoretical (2 문제): Exp(λ) X + Exp(θ) C 의 minimum 분포 — P(δ=1) = λ/(λ+θ), T 와 δ 의 독립성 증명, MLE 의 mean/variance 도출 (Ex 3.8) / Poisson process N(t) 의 M(t) = N(t) - λt 가 martingale 임 증명 — counting process martingale 의 정전 예제 (Ex 3.9). Ch.3 통합 6 가지 교훈 + 12 항 체크리스트.

Statistics
Survival Analysis
Klein-Moeschberger
Exercises
저자

Kwangmin Kim

공개

2026년 04월 27일

1 들어가며 — Ch.3 의 종합 연습

Ch.3 의 모든 개념 — 5 censoring 형태 + 3 truncation + likelihood master 식 + counting process martingale — 가 § 3.7 의 9 문제로 검증된다. 본 편은 모든 문제를 — 분류 + 식 적용 + 해석 — 의 3 단계로 풀이한다.

풀이 전략

각 문제는 다음 단계로 환원:

  1. 시나리오 식별 → 어느 censoring/truncation 형태?
  2. 개체별 기여 결정\(f\), \(S(C_r)\), \(1-S(C_l)\), \(S(L)-S(R)\) 중?
  3. 식 (3.5.1) 또는 (3.5.2) 적용 → 전체 likelihood.
  4. MLE / 점근 성질 → 모수 추론.
그룹 문제 주제
A 3.1~3.3 (3) 임상 시나리오의 censoring 식별
B 3.4~3.7 (4) Likelihood 구성 (parametric MLE)
C 3.8~3.9 (2) Theoretical (분포론, martingale)

2 Group A — Censoring 식별

2.1 Ex 3.1 — § 1.2 Leukemia + § 1.5 Breast 의 Censoring 분석

2.1.1 (a) § 1.2 Leukemia (Freireich 1963)

분류
  • Generalized Type I right censoring + non-informative random censoring 결합.
  • 환자 입학 시점이 분산 → generalized.
  • 종료일 (1969 년) 공통 → 일부 환자가 fixed cutoff 에서 censoring.
  • 일부 환자는 dropout → random censoring (가정상 non-informative).

식별 항목:

환자 유형 종류 \(\delta\)
사건 (relapse) 발생 exact 1
종료일 도달 (alive in remission) right cens 0
Dropout (다른 사유) right cens (random) 0

2.1.2 (b) § 1.5 Sedmak 1989 Breast Cancer

분류
  • Generalized Type I right censoring (1955~1980 입학, 1985-12-31 종료).
  • 사건 = 사망. censoring = 마지막 추적 시점 (alive).
  • 작은 sample (45 명) 으로 인해 사건 수 (16) 가 정밀도 결정.

2.2 Ex 3.2 — 30 년 Breast Cancer Cohort (4 개체 분석)

Setup: 1970-01-01 시작, 30 년 추적. 3 년 간격 임상 검진. 사건 = breast cancer 발병.

2.2.1 (a) 30 세 입학, 사건 미발생 — Right Censoring

  • 입학 = 1970-01-01 at age 30 → 추적 끝 시점 (2000) 에 60 세.
  • 30 년 동안 미발병 → right censored at age 60.
  • 식 (3.5.1) 기여: \(S(60)\).

2.2.2 (b) 40 세 입학, 5 번째 검진에서 진단 — Interval Censoring

  • 4 번째 검진 (12 년 후, 52 세) 에서 음성 → 5 번째 검진 (15 년 후, 55 세) 에서 양성.
  • “발병이 (52, 55] 사이 어딘가” — interval censored.
  • 식 (3.5.1) 기여: \(S(52) - S(55)\).

2.2.3 (c) 50 세 입학, 61 세에 사고사 — Random / Competing Risks Censoring

  • breast cancer 와 무관한 사망 → random right censoring (50~61 세 추적, 미발병).
  • 만약 사망과 breast cancer 가 독립이면 — non-informative.
  • 식 (3.5.1) 기여: \(S(61)\).

2.2.4 (d) 42 세 입학, 55 세 이주 (loss to follow-up) — Random Censoring

  • 13 년 동안 미발병 → random right censoring at age 55.
  • 이주 사유가 breast cancer 와 무관 가정 → non-informative.
  • 식 (3.5.1) 기여: \(S(55)\).

2.2.5 (e) 4 개체의 결합 Likelihood

Likelihood

\[ L = S(60) \cdot [S(52) - S(55)] \cdot S(61) \cdot S(55) \]

    1. right cens at 60: \(S(60)\).
    1. interval cens (52, 55]: \(S(52) - S(55)\).
    1. right cens at 61: \(S(61)\).
    1. right cens at 55: \(S(55)\).

모두 \(S\)\(S\) 차이 의 곱 — 식 (3.5.1) 의 4 종 기여 중 right + interval 만 사용.

의의

이 문제가 — Ch.1 19 예제의 4 가지 censoring 패턴을 한 데이터에 모은 마이크로 사례. 실제 임상 데이터는 거의 항상 이런 혼합.

2.3 Ex 3.3 — Sprague-Dawley DMBA Rat 실험 (4 rats)

Setup: DMBA 투여 (시점 0). 6 주 ~ 14 주 (즉, 42~98 일) 매주 검진. 사건 = first palpable tumor.

2.3.1 (a) 6 주째 첫 검진에 이미 종양 — Left Censoring

  • 첫 검진 (42 일) 에서 양성 → 종양은 (0, 42] 어딘가 발생.
  • Left censored at \(C_l = 42\).
  • 식 (3.5.1) 기여: \(1 - S(42) = F(42)\).

2.3.2 (b) 종양 없이 14 주 (98 일) 종료 — Right Censoring

  • 98 일 동안 미발병 → right censored at \(C_r = 98\).
  • 식 (3.5.1) 기여: \(S(98)\).

2.3.3 (c) 12 주 음성 → 13 주 양성 — Interval Censoring

  • 84 일 (12 주) 검진 음성 → 91 일 (13 주) 양성.
  • 종양 발생이 (84, 91] — interval censored.
  • 식 (3.5.1) 기여: \(S(84) - S(91)\).

2.3.4 (d) 37 일 (5 주째) 사고사 — Random Censoring

  • 첫 검진 (42 일) 전 사망. 사망이 종양과 무관.
  • “사망 시점 37 일 까지 종양 미발생” 정보만 → random right censoring at \(C_r = 37\).
  • 식 (3.5.1) 기여: \(S(37)\).

2.3.5 (e) 4 rats 의 Likelihood

\[ L = [1 - S(42)] \cdot S(98) \cdot [S(84) - S(91)] \cdot S(37) \]

의의

DMBA 실험은 — 5 censoring 형태 (Type I, generalized, progressive, Type II, random) 가 모두 자연스럽게 결합 되는 정전 사례. 동물 실험 design 의 표준.

3 Group B — Likelihood 구성

3.1 Ex 3.4 — § 1.2 6-MP Exponential MLE

Data: 6-MP 그룹의 21 명 (sub-group of § 1.2 Leukemia).

  • 사건 (relapse): 9 건 — 6, 6, 6, 7, 10, 13, 16, 22, 23 weeks.
  • Censored: 12 건 — 6+, 9+, 10+, 11+, 17+, 19+, 20+, 25+, 32+, 32+, 34+, 35+ weeks.

3.1.1 Likelihood 구성

식 (3.5.4):

\[ L(\lambda) = \prod_{i=1}^{21} (\lambda e^{-\lambda t_i})^{\delta_i} (e^{-\lambda t_i})^{1-\delta_i} = \lambda^r \exp[-\lambda S_T] \]

여기서:

  • \(r = 9\) (사건 수).
  • \(S_T = \sum_{i=1}^{21} t_i = 6+6+6+7+10+13+16+22+23+6+9+10+11+17+19+20+25+32+32+34+35 = 359\) weeks.

3.1.2 MLE 도출

\(\ell(\lambda) = r \log \lambda - \lambda S_T\).

\(\partial \ell / \partial \lambda = r/\lambda - S_T = 0\):

\[ \hat{\lambda}_{MLE} = \frac{r}{S_T} = \frac{9}{359} \approx 0.0251 \text{ /week} \]

해석

6-MP 그룹의 weekly relapse hazard ≈ 2.5% — 매주 살아남은 환자 100 명 중 약 2.5 명이 relapse.

  • Mean relapse time: \(1/\hat{\lambda} \approx 39.9\) weeks.
  • Median relapse time: \(\ln 2 / \hat{\lambda} \approx 27.6\) weeks.

(Note: 진짜 데이터는 exponential 적합도 부족 — Weibull 또는 log-logistic 이 더 잘 맞음. 이 문제는 likelihood 도출 연습 목적.)

3.2 Ex 3.5 — Log-logistic + Left Censored

Data: 0.5, 1, 0.75, 0.25-, 1.25- (- denotes left censored).

  • Exact: \(\{0.5, 1, 0.75\}\)\(D\) 집합.
  • Left censored: \(\{0.25, 1.25\}\)\(L\) 집합.

Log-logistic: \(S(x) = 1/(1 + \lambda x^\alpha)\), \(f(x) = \alpha\lambda x^{\alpha-1}/(1 + \lambda x^\alpha)^2\).

3.2.1 Likelihood

식 (3.5.1) 의 right + left 항:

\[ L(\lambda, \alpha) = \prod_{i \in D} f(x_i) \cdot \prod_{i \in L} [1 - S(C_{l,i})] \]

대입:

\[ L = \prod_{x \in \{0.5, 1, 0.75\}} \frac{\alpha\lambda x^{\alpha-1}}{(1 + \lambda x^\alpha)^2} \cdot \prod_{c \in \{0.25, 1.25\}} \frac{\lambda c^\alpha}{1 + \lambda c^\alpha} \]

(left censored 기여: \(1 - S(c) = 1 - 1/(1 + \lambda c^\alpha) = \lambda c^\alpha / (1 + \lambda c^\alpha)\).)

MLE 는 수치적으로

이 likelihood 는 closed form MLE 없음 → 수치 최적화 (Newton-Raphson 또는 optim).

R: flexsurv::flexsurvreg 의 left-censored 지원 또는 직접 optim 사용.

3.3 Ex 3.6 — BMT Relapse + Death (두 분포 결합)

Data: 10 BMT 환자, 두 사건 — relapse (rate \(\lambda\), exponential) + death after relapse (Weibull \(\theta, \alpha\)).

Patient Relapse (mo) Death (mo)
1 5 11
2 8 12
3 12 15
4 24 33+
5 32 45
6 17 28+
7 16+ 16+
8 17+ 17+
9 19+ 19+
10 30+ 30+

3.3.1 (a) Relapse Rate \(\lambda\) 의 Likelihood

Relapse 만 분리: 6 relapse (1~6) + 4 censored (7~10).

식 (3.5.4):

\[ L_R(\lambda) = \lambda^6 \exp[-\lambda \cdot S_R] \]

\(S_R = 5+8+12+24+32+17 + 16+17+19+30 = 180\) months.

\(\hat{\lambda} = 6/180 \approx 0.0333\) /month.

3.3.2 (b) Death Time Likelihood (Weibull)

Relapse 후 death (또는 censoring): 환자 1~6 만 해당.

  • Death exact (1, 2, 3, 5): 11, 12, 15, 45.
  • Death censored (4, 6): 33, 28.

Death 시간을 relapse 시점 부터 측정 ($t_d = $ death - relapse):

  • 1: 11-5=6 (event).
  • 2: 12-8=4 (event).
  • 3: 15-12=3 (event).
  • 4: 33-24=9 (cens).
  • 5: 45-32=13 (event).
  • 6: 28-17=11 (cens).

Weibull \(f(t) = \alpha\theta t^{\alpha-1} e^{-\theta t^\alpha}\), \(S(t) = e^{-\theta t^\alpha}\).

식 (3.5.1):

\[ L_D(\theta, \alpha) = \prod_{i=1}^4 f(t_{d,i}) \prod_{i=5}^6 S(t_{d,i}) \]

3.3.3 (c) Truncated Sample (Death 만 관측 가능)

만약 death 가 — relapse 가 발생한 환자만 관측 가능 (right truncation 의 한 형태):

각 사건 (death 시간 \(t_{d,i}\)) 의 기여 = \(f(t_{d,i}) / [1 - S_X(\infty)]\) — 그러나 \(X\) 가 모든 환자에게 결국 발생하면 분모 = 1.

문제의 의도: relapse 가 발생한 환자만 표본 → death 분포는 — “relapse 가 일어난 조건부” 분포. relapse 와 death 가 독립이면 문제 (b) 와 동일.

의의

이 문제가 — multistate model (Klein Ch.13) 의 출생. relapse + death 의 두 사건을 — 시간에 따른 transition 으로 모델링하면 — Aalen-Johansen estimator (Ch.4) 와 multi-state Cox (Ch.13) 의 framework 로 일반화.

3.4 Ex 3.7 — Breast Cancer Interval Censored (8 명 Weibull)

Setup: 8 명 50 세 여성, 10 년간 매년 mammogram. interval = (last negative, first positive].

Data (age intervals):

Subject Interval
1 (55, 56]
2 (58, 59]
3 (52, 53]
4 (59, 60]
5 \(\geq 60\)
6 \(\geq 60\)
7 \(\geq 60\)
8 \(\geq 60\)

3.4.1 (a) Censoring/Truncation 형태

  • Subjects 1~4: interval censored (각 1 년 구간).
  • Subjects 5~8: right censored at age 60.

3.4.2 (b) Likelihood (Weibull)

Weibull \(S(x) = e^{-\lambda x^\alpha}\).

식 (3.5.1):

\[ \begin{aligned} L(\lambda, \alpha) &= \prod_{i=1}^4 [S(L_i) - S(R_i)] \cdot \prod_{i=5}^8 S(60) \\ &= [S(55) - S(56)] \cdot [S(58) - S(59)] \cdot [S(52) - S(53)] \cdot [S(59) - S(60)] \cdot [S(60)]^4 \end{aligned} \]

대입:

\[ L = \prod_{(L,R) \in \{(55,56), (58,59), (52,53), (59,60)\}} [e^{-\lambda L^\alpha} - e^{-\lambda R^\alpha}] \cdot e^{-4\lambda 60^\alpha} \]

MLE

수치 최적화 필수 — closed form 없음.

  • R: survival::survreg(... ~ 1, dist="weibull") 또는 flexsurv::flexsurvregSurv(L, R, type="interval2").
  • Python: lifelinesWeibullFitter 의 interval 지원 제한적 — 직접 likelihood 구현 권장.

4 Group C — Theoretical

4.1 Ex 3.8 — Exp X + Exp C

Setup: \(X \sim \text{Exp}(\lambda)\), \(C \sim \text{Exp}(\theta)\), \(X \perp C\).

4.1.1 (a) \(P(\delta = 1)\)

\(\delta = 1\)\(X \leq C\):

\[ P(\delta = 1) = P(X \leq C) = \int_0^\infty P(X \leq c) g(c)\, dc = \int_0^\infty (1 - e^{-\lambda c}) \theta e^{-\theta c}\, dc \]

\(= \int_0^\infty \theta e^{-\theta c}\, dc - \int_0^\infty \theta e^{-(\lambda+\theta) c}\, dc = 1 - \frac{\theta}{\lambda + \theta} = \frac{\lambda}{\lambda + \theta}\)

직관

\(P(\delta=1) = \lambda/(\lambda+\theta)\) = “사건 hazard 비율”. 두 hazard 의 비율 — competing 의 자연스러운 표현.

만약 \(\lambda = \theta\) (사건과 censoring 의 강도가 같다면) → \(P(\delta=1) = 0.5\).

4.1.2 (b) \(T = \min(X, C)\) 의 분포

\[ P(T > t) = P(X > t, C > t) = e^{-\lambda t} \cdot e^{-\theta t} = e^{-(\lambda+\theta) t} \]

따라서 \(T \sim \text{Exp}(\lambda + \theta)\) — 두 hazard 의 합.

4.1.3 (c) \(T\)\(\delta\) 의 독립성

\[ P(T > t, \delta = 1) = P(X > t, X \leq C, X) = \int_t^\infty f_X(x) [1 - F_C(x)]\, dx \]

(나, 잠깐. \(\delta = 1 \Leftrightarrow X \leq C\).)

\[ \begin{aligned} P(T > t, \delta = 1) &= P(X \leq C, X > t) = \int_t^\infty \lambda e^{-\lambda x} e^{-\theta x}\, dx \\ &= \lambda \int_t^\infty e^{-(\lambda+\theta) x}\, dx = \frac{\lambda}{\lambda+\theta} e^{-(\lambda+\theta) t} \end{aligned} \]

비교:

\[ P(T > t) \cdot P(\delta = 1) = e^{-(\lambda+\theta) t} \cdot \frac{\lambda}{\lambda+\theta} = \frac{\lambda}{\lambda+\theta} e^{-(\lambda+\theta) t} \]

일치\(T \perp \delta\).

신기한 사실

\(T\)\(\delta\) 가 독립 — 두 변수가 서로 정보를 주지 않음. 이는 Exponential 의 특수 성질 (memoryless 의 결과).

일반적으로 \(T \not\perp \delta\) — 이 사실 이 informative censoring 의 한 가지 원천. 그러나 두 변수가 모두 exponential 이면 — 깔끔한 독립성.

4.1.4 (d) MLE 의 mean/variance

식 (3.5.4): \(\hat{\lambda} = \sum \delta_i / \sum T_i\).

\(T \perp \delta\) 이므로:

\[ E[\hat{\lambda}] = E\!\left[\frac{\sum \delta_i}{\sum T_i}\right] \]

대용량 표본에서 — \(\sum \delta_i \approx n \cdot P(\delta=1) = n\lambda/(\lambda+\theta)\), \(\sum T_i \approx n/(\lambda+\theta)\).

따라서 \(\hat{\lambda} \approx \lambda\) (consistent).

점근 분산: Fisher information \(I(\lambda) = E[r/\lambda^2] = n\lambda/((\lambda+\theta)\lambda^2) = n/[\lambda(\lambda+\theta)]\).

따라서:

\[ \text{Var}(\hat{\lambda}) \approx \frac{\lambda(\lambda+\theta)}{n} \]

의의
  • Censoring 이 없으면 (\(\theta = 0\)): \(\text{Var}(\hat{\lambda}) = \lambda^2/n\) — 표준 result.
  • Censoring 가 강하면 (\(\theta\) 크다): 분산 증가 — censoring 이 정밀도 손실.
  • \(n\) 이 아닌 사건 수 \(r \approx n\lambda/(\lambda+\theta)\) 가 정밀도 결정.

4.2 Ex 3.9 — Poisson Process Martingale 증명

Setup: \(N(t)\) 가 rate \(\lambda\) Poisson process. \(M(t) = N(t) - \lambda t\).

4.2.1 (i) \(E|M(t)| < \infty\)

\(N(t) \sim \text{Poisson}(\lambda t)\), \(E[N(t)] = \lambda t\), \(E[N(t)^2] = \lambda t + (\lambda t)^2\).

\(E[M(t)] = E[N(t)] - \lambda t = 0\).

\(E[M(t)^2] = E[(N(t) - \lambda t)^2] = \text{Var}(N(t)) = \lambda t < \infty\).

따라서 \(E|M(t)| \leq \sqrt{E[M(t)^2]} = \sqrt{\lambda t} < \infty\).

4.2.2 (ii) Martingale 증명

힌트: \(M(t) = M(t) - M(s) + M(s)\).

\[ E[M(t) \mid N(s)] = E[M(t) - M(s) \mid N(s)] + E[M(s) \mid N(s)] \]

  • \(M(s) = N(s) - \lambda s\)\(N(s)\) 의 함수, 따라서 \(\mathcal{F}_s\)-measurable. \(E[M(s) \mid \mathcal{F}_s] = M(s)\).

  • 첫째 항: \[ E[M(t) - M(s) \mid \mathcal{F}_s] = E[(N(t) - N(s)) - \lambda(t-s) \mid \mathcal{F}_s] \]

Poisson process 의 independent increments: \(N(t) - N(s) \perp \mathcal{F}_s\), 그리고 \(N(t) - N(s) \sim \text{Poisson}(\lambda(t-s))\).

\[ E[N(t) - N(s) \mid \mathcal{F}_s] = E[N(t) - N(s)] = \lambda(t-s) \]

따라서:

\[ E[M(t) - M(s) \mid \mathcal{F}_s] = \lambda(t-s) - \lambda(t-s) = 0 \]

결론:

\[ E[M(t) \mid \mathcal{F}_s] = 0 + M(s) = M(s) \]

\(M(t)\) 는 martingale, \(\Lambda(t) = \lambda t\)\(N(t)\) 의 compensator — Klein § 3.6 의 정전 예제.

의의

이 문제가 — counting process martingale 의 가장 단순하고 깔끔한 instantiation. Poisson process 의 noise = \(N(t) - \lambda t\) 가 mean 0 random walk.

일반 right-censored 데이터는 — Poisson process 의 random sample size 일반화. 같은 martingale 성질을 보존.

식 (3.6.5) 의 Nelson-Aalen 도출 → 이 문제의 직접 일반화. counting process framework 의 진정한 출발점.

5 R + Python — 핵심 문제 검증

5.1 R — Ex 3.4 (6-MP MLE) + Ex 3.7 (Weibull interval)

library(survival)

# Ex 3.4 — 6-MP Exponential MLE
six_mp_times <- c(6, 6, 6, 7, 10, 13, 16, 22, 23,    # events
                  6, 9, 10, 11, 17, 19, 20, 25, 32, 32, 34, 35)  # censored
six_mp_status <- c(rep(1, 9), rep(0, 12))

r <- sum(six_mp_status)
S_T <- sum(six_mp_times)
lambda_mle <- r / S_T
cat(sprintf("Ex 3.4: r=%d, S_T=%d, λ̂=%.4f /week\n", r, S_T, lambda_mle))
cat(sprintf("Mean=%.1f weeks, Median=%.1f weeks\n",
            1/lambda_mle, log(2)/lambda_mle))

# 검증 — survreg
fit <- survreg(Surv(six_mp_times, six_mp_status) ~ 1, dist = "exponential")
cat(sprintf("survreg: λ̂=%.4f\n", 1/exp(fit$coefficients)))

# Ex 3.7 — Weibull interval censored
# 4 interval + 4 right censored at 60
breast_data <- data.frame(
  L = c(55, 58, 52, 59, 60, 60, 60, 60),
  R = c(56, 59, 53, 60, NA, NA, NA, NA),  # NA = right censored
  type = c("int", "int", "int", "int", "right", "right", "right", "right")
)

# survreg interval format: time1=L, time2=R, type=3 for interval
breast_data$time1 <- breast_data$L
breast_data$time2 <- ifelse(is.na(breast_data$R), breast_data$L, breast_data$R)
breast_data$status <- ifelse(is.na(breast_data$R), 0, 3)  # 0=right, 3=interval

# Weibull fit
fit_int <- survreg(Surv(time1, time2, status, type = "interval") ~ 1,
                    data = breast_data, dist = "weibull")
cat(sprintf("Ex 3.7: scale=%.2f, shape=%.2f\n",
            exp(fit_int$coefficients), 1/fit_int$scale))

# Direct likelihood implementation
neg_loglik_weib <- function(par, data) {
  lambda <- exp(par[1])
  alpha <- exp(par[2])
  S <- function(x) exp(-lambda * x^alpha)

  loglik <- 0
  for (i in 1:nrow(data)) {
    if (data$type[i] == "int") {
      loglik <- loglik + log(S(data$L[i]) - S(data$R[i]))
    } else {
      loglik <- loglik + log(S(data$L[i]))
    }
  }
  -loglik
}

opt <- optim(c(-10, 1), neg_loglik_weib, data = breast_data)
cat(sprintf("Direct: λ=%.6f, α=%.3f\n", exp(opt$par[1]), exp(opt$par[2])))

5.2 Python — Ex 3.8 (Exp/Exp 시뮬레이션) + Ex 3.9 (Poisson martingale)

import numpy as np
import matplotlib.pyplot as plt

# Ex 3.8 — Exp X + Exp C 시뮬레이션
np.random.seed(42)
lambda_true, theta_true = 0.05, 0.03  # rates per unit time
n = 1000

X = np.random.exponential(1/lambda_true, n)
C = np.random.exponential(1/theta_true, n)
T = np.minimum(X, C)
delta = (X <= C).astype(int)

# 검증 (a) P(δ=1)
P_delta_1 = lambda_true / (lambda_true + theta_true)
print(f"Ex 3.8 (a): theoretical P(δ=1) = {P_delta_1:.4f}, sample = {delta.mean():.4f}")

# 검증 (b) T ~ Exp(λ+θ)
print(f"Ex 3.8 (b): theoretical mean T = {1/(lambda_true+theta_true):.2f}, sample = {T.mean():.2f}")

# 검증 (c) T ⊥ δ — correlation
print(f"Ex 3.8 (c): Corr(T, δ) = {np.corrcoef(T, delta)[0, 1]:.4f} (should ≈ 0)")

# (d) MLE
lambda_mle = delta.sum() / T.sum()
mle_var = lambda_true * (lambda_true + theta_true) / n
print(f"Ex 3.8 (d): λ̂ = {lambda_mle:.4f}, theoretical SE = {np.sqrt(mle_var):.4f}")
print(f"Empirical SE (1000 reps): see below")

# Bootstrap SE 검증
B = 1000
lambdas = []
for _ in range(B):
    Xb = np.random.exponential(1/lambda_true, n)
    Cb = np.random.exponential(1/theta_true, n)
    Tb = np.minimum(Xb, Cb)
    db = (Xb <= Cb).astype(int)
    lambdas.append(db.sum() / Tb.sum())
print(f"Empirical SE = {np.std(lambdas):.4f}")

# Ex 3.9 — Poisson process martingale 시각화
T_max = 50
lam = 0.3
n_paths = 10

fig, axes = plt.subplots(1, 2, figsize=(14, 5))

# Sample paths of N(t) and Λ(t) = λt
for path in range(n_paths):
    times = np.random.exponential(1/lam, 100)
    arrival_times = np.cumsum(times)
    arrival_times = arrival_times[arrival_times <= T_max]
    t_grid = np.sort(np.concatenate([[0], arrival_times, [T_max]]))
    N_t = np.searchsorted(arrival_times, t_grid, side='right')
    if path == 0:
        axes[0].step(t_grid, N_t, where='post', alpha=0.6, color="blue", label="N(t) sample")
    else:
        axes[0].step(t_grid, N_t, where='post', alpha=0.4, color="blue")

ts = np.linspace(0, T_max, 100)
axes[0].plot(ts, lam * ts, 'r--', lw=2, label="Λ(t) = λt (compensator)")
axes[0].set_title("Poisson process N(t) and compensator Λ(t)")
axes[0].set_xlabel("t")
axes[0].legend()

# Martingale M(t) = N(t) - λt
for path in range(n_paths):
    times = np.random.exponential(1/lam, 100)
    arrival_times = np.cumsum(times)
    arrival_times = arrival_times[arrival_times <= T_max]
    t_grid = np.linspace(0, T_max, 200)
    N_t = np.searchsorted(arrival_times, t_grid, side='right')
    M_t = N_t - lam * t_grid
    axes[1].plot(t_grid, M_t, alpha=0.5)

axes[1].axhline(0, color="red", lw=2)
axes[1].set_title("Martingale M(t) = N(t) - λt — mean 0 random walk")
axes[1].set_xlabel("t")
axes[1].set_ylabel("M(t)")

plt.tight_layout()
plt.savefig("klein_3_7_exercises.png", dpi=100)
결과 검증
  • Ex 3.8: \(P(\delta=1) = \lambda/(\lambda+\theta)\) — 시뮬레이션과 일치. \(T \perp \delta\) 검증 (correlation ≈ 0).
  • Ex 3.9: Poisson process 의 sample paths + compensator \(\lambda t\)\(M(t)\) 가 mean-0 random walk 임을 시각화.

6 직관 통합 — § 3.7 의 5 가지 교훈

핵심 5 가지 교훈
  1. Censoring 형태 분류가 첫 단계: 임상 시나리오 → exact / right / left / interval / random / truncation 식별.

  2. Likelihood 의 4 종 기여: \(f\) (exact), \(S\) (right), \(1-S\) (left), \(S(L)-S(R)\) (interval). 식 (3.5.1) 의 통일 표현.

  3. Exponential MLE 의 직관: \(\hat{\lambda} = r/S_T\) — “사건 수 / 총 시간”. 가장 직관적인 hazard 추정.

  4. \(T \perp \delta\) for Exp/Exp: 두 변수가 모두 exponential 이면 — 깔끔한 독립성. 일반 분포에서는 성립 안 함.

  5. Poisson martingale 의 정전: \(M(t) = N(t) - \lambda t\) 가 가장 단순한 counting process martingale. 일반 censored 데이터는 이의 일반화.

7 실전 체크리스트 — Ch.3 § 3.7

Censoring 식별 (3.1~3.3)

  1. § 1.2 Leukemia, § 1.5 Breast 의 censoring 분류.
  2. 30 년 cohort 의 4 가지 시나리오 (right · interval · 사고사 · loss).
  3. DMBA rat 실험의 4 rats (left · right · interval · random).

Likelihood 구성 (3.4~3.7)

  1. 6-MP Exp MLE: \(\hat{\lambda} = r/S_T = 9/359 \approx 0.025\).
  2. Log-logistic + left censored: 식 (3.5.1) 직접 적용.
  3. BMT 두 사건 (relapse + death): multistate model 의 출생.
  4. Weibull interval censored: \(S(L) - S(R)\) 기여 + right \(S(60)\).

Theoretical (3.8~3.9)

  1. Exp X + Exp C: \(P(\delta=1) = \lambda/(\lambda+\theta)\).
  2. \(T \sim \text{Exp}(\lambda+\theta)\), \(T \perp \delta\).
  3. MLE \(\text{Var}(\hat{\lambda}) \approx \lambda(\lambda+\theta)/n\).
  4. Poisson \(M(t) = N(t) - \lambda t\) martingale 증명.
  5. \(\Lambda(t) = \lambda t\) 가 compensator — Klein § 3.6 의 정전.

8 관련 주제

Klein 시리즈

Ch.1 시리즈 — 본 편 정전 사례

Ch.2 시리즈 — 본 편 분포론

관련 개념 (cross-category)

9 참고문헌

  • Klein, J. P., & Moeschberger, M. L. (2003). Survival Analysis: Techniques for Censored and Truncated Data (2nd ed.), Ch.3 § 3.7 Exercises 3.1~3.9, pp. 87-90. Springer.
  • Freireich, E. J., et al. (1963). The effect of 6-mercaptopurine on the duration of steroid-induced remissions in acute leukemia. Blood, 21, 699-716. (Ex 3.4 데이터)
  • Sedmak, D. D., et al. (1989). Prognostic factors in patients with stage I breast cancer. Cancer, 64, 1517-1523. (Ex 3.1 데이터)
  • Aalen, O. O. (1978). Nonparametric inference for a family of counting processes. Annals of Statistics, 6(4), 701-726. (Ex 3.9 의 일반화)
  • Andersen, P. K., Borgan, Ø., Gill, R. D., & Keiding, N. (1993). Statistical Models Based on Counting Processes. Springer.
  • Cox, D. R., & Oakes, D. (1984). Analysis of Survival Data. Chapman & Hall.
  • Lawless, J. F. (2003). Statistical Models and Methods for Lifetime Data, 2nd ed. Wiley.
  • Kalbfleisch, J. D., & Prentice, R. L. (2002). The Statistical Analysis of Failure Time Data, 2nd ed. Wiley.
  • Therneau, T. M., & Grambsch, P. M. (2000). Modeling Survival Data: Extending the Cox Model. Springer.
  • Putter, H., Fiocco, M., & Geskus, R. B. (2007). Tutorial in Biostatistics: Competing Risks and Multi-State Models. Statistics in Medicine, 26(11), 2389-2430. (Ex 3.6 의 일반화)

Subscribe

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