1 들어가며 — Ch.3 의 종합 연습
Ch.3 의 모든 개념 — 5 censoring 형태 + 3 truncation + likelihood master 식 + counting process martingale — 가 § 3.7 의 9 문제로 검증된다. 본 편은 모든 문제를 — 분류 + 식 적용 + 해석 — 의 3 단계로 풀이한다.
각 문제는 다음 단계로 환원:
- 시나리오 식별 → 어느 censoring/truncation 형태?
- 개체별 기여 결정 → \(f\), \(S(C_r)\), \(1-S(C_l)\), \(S(L)-S(R)\) 중?
- 식 (3.5.1) 또는 (3.5.2) 적용 → 전체 likelihood.
- 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
\[ L = S(60) \cdot [S(52) - S(55)] \cdot S(61) \cdot S(55) \]
- right cens at 60: \(S(60)\).
- interval cens (52, 55]: \(S(52) - S(55)\).
- right cens at 61: \(S(61)\).
- 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)\).)
이 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} \]
수치 최적화 필수 — closed form 없음.
- R:
survival::survreg(... ~ 1, dist="weibull")또는flexsurv::flexsurvreg의Surv(L, R, type="interval2"). - Python:
lifelines의WeibullFitter의 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 가지 교훈
Censoring 형태 분류가 첫 단계: 임상 시나리오 → exact / right / left / interval / random / truncation 식별.
Likelihood 의 4 종 기여: \(f\) (exact), \(S\) (right), \(1-S\) (left), \(S(L)-S(R)\) (interval). 식 (3.5.1) 의 통일 표현.
Exponential MLE 의 직관: \(\hat{\lambda} = r/S_T\) — “사건 수 / 총 시간”. 가장 직관적인 hazard 추정.
\(T \perp \delta\) for Exp/Exp: 두 변수가 모두 exponential 이면 — 깔끔한 독립성. 일반 분포에서는 성립 안 함.
Poisson martingale 의 정전: \(M(t) = N(t) - \lambda t\) 가 가장 단순한 counting process martingale. 일반 censored 데이터는 이의 일반화.
7 실전 체크리스트 — Ch.3 § 3.7
Censoring 식별 (3.1~3.3)
- § 1.2 Leukemia, § 1.5 Breast 의 censoring 분류.
- 30 년 cohort 의 4 가지 시나리오 (right · interval · 사고사 · loss).
- DMBA rat 실험의 4 rats (left · right · interval · random).
Likelihood 구성 (3.4~3.7)
- 6-MP Exp MLE: \(\hat{\lambda} = r/S_T = 9/359 \approx 0.025\).
- Log-logistic + left censored: 식 (3.5.1) 직접 적용.
- BMT 두 사건 (relapse + death): multistate model 의 출생.
- Weibull interval censored: \(S(L) - S(R)\) 기여 + right \(S(60)\).
Theoretical (3.8~3.9)
- Exp X + Exp C: \(P(\delta=1) = \lambda/(\lambda+\theta)\).
- \(T \sim \text{Exp}(\lambda+\theta)\), \(T \perp \delta\).
- MLE \(\text{Var}(\hat{\lambda}) \approx \lambda(\lambda+\theta)/n\).
- Poisson \(M(t) = N(t) - \lambda t\) martingale 증명.
- \(\Lambda(t) = \lambda t\) 가 compensator — Klein § 3.6 의 정전.
8 관련 주제
Klein 시리즈
- (이전) Ch.3 overview
- (이전) § 3.1~3.2 심화 — Right Censoring 6 형태
- (이전) § 3.3~3.4 심화 — Left/Interval Censoring + Truncation
- (이전) § 3.5~3.6 심화 — Likelihood + Counting Process
- (다음 chapter) Ch.4 — Nonparametric Estimation (KM, NA, 신뢰구간/신뢰대) — Ch.3 의 도구가 직접 응용
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 의 일반화)