1 들어가며 — 본 편의 자리
Klein 시리즈 사다리:
| 편 | 주제 |
|---|---|
| Ch.1 Overview (01) | 19 예제 catalog |
| § 1.1~1.2 (01-1) | Introduction + 6-MP Leukemia |
| § 1.3~1.4 (본 편) | BMT (multistate) + Dialysis (PH 위반) |
| § 1.5~1.10 (예정) | Breast·Burn·Kidney Transplant·Laryngeal 등 |
- BMT 의 회복 과정 — transplant 후 환자가 거치는 multistate 구조를 어떻게 모델링할까?
- Competing risks (relapse vs death in remission) 가 단일 사건 분석과 본질적으로 다른 이유?
- Time-dependent covariate — aGVHD 가 t 시점에 발생하면 prognosis 가 어떻게 변경되는가?
- PH 가정 위반 — Kidney dialysis 데이터에서 percutaneous group 의 hazard 가 시간 따라 변하는 이유?
- 같은 chapter 1 의 두 예제가 어떻게 상보적 통계 도구 (multistate vs time-varying effect) 를 동기 부여하는가?
2 § 1.3 Bone Marrow Transplantation for Leukemia (Copelan 1991)
2.1 의학적 배경 — Allogeneic BMT
급성 백혈병 (AML, ALL) 의 표준 치료:
- Induction: 고용량 chemotherapy 로 백혈병 세포 파괴 (관해 유도).
- Conditioning regimen: 전신 방사선 조사 또는 고용량 chemotherapy 로 환자의 면역계 파괴.
- Allogeneic transplant: HLA-matched sibling 또는 unrelated donor 의 골수 주입.
- 회복: 새 면역계 형성 (engraftment).
본 연구의 conditioning:
- Busulfan (BU) 16 mg/kg oral
- Cyclophosphamide (Cy) 120 mg/kg IV
- 방사선 없음 (radiation-free regimen).
- Allogeneic (allo): 다른 사람 (HLA matched donor) 의 골수.
- 장점: graft-versus-leukemia 효과 (이식편 항백혈병).
- 단점: graft-versus-host disease (GVHD) 위험.
- Autologous (auto): 자기 자신의 골수 (cleansed and reinfused).
- 장점: GVHD 없음.
- 단점: graft-vs-leukemia 효과 없음, 잠재 백혈병 세포 잔존.
본 연구 (Copelan 1991) 는 allogeneic 만.
§ 1.9 의 Auto vs Allo 비교 데이터와 대조.
2.2 데이터 구조
- n: 137 명 (99 AML + 38 ALL).
- Hospitals: 4 곳 (OSU 76, HU 21, SVH 23, AH 17).
- Period: 1984-1989.
- Max follow-up: 7 년.
- Outcomes:
- 42 relapsed (재발).
- 41 died in remission (관해 중 치료 관련 사망).
- 26 had aGVHD (acute GVHD).
- 17 had platelet recovery before relapse/death.
2.3 Multistate 회복 구조
Transplant (state 0)
│
┌──────────┼──────────┐
↓ ↓ ↓
aGVHD only Platelet Direct
(state 1) recovery relapse/death
(state 2) (terminal)
│ │
↓ ↓
Both events Both events
(state 3) (state 3)
│
↓
Relapse or death
(terminal)
환자의 회복 과정 은 하나의 사건이 아닌 상태 전이 (state transition):
- Transplant 직후: depressed platelet + no aGVHD.
- 시간 경과: aGVHD 발생 또는 platelet 회복 (any order).
- 양쪽 모두: state 3.
- 어느 시점에서든: relapse 또는 death (terminal).
모델링 도구:
- Single-event Cox: 단순 “transplant failure (relapse or death)” 만.
- Competing risks (Ch.4.7): relapse vs death 분리.
- Multistate model (Ch.9.5): 모든 상태 전이 동시 모델링.
- Time-dependent covariate: aGVHD/platelet recovery 가 prognosis 변경.
본 데이터가 이 모든 도구의 표준 시연.
2.4 Risk Categories — 환자 위험 계층화
| Group | n | 설명 |
|---|---|---|
| ALL | 38 | Acute Lymphoblastic Leukemia |
| AML low-risk | 54 | 첫 관해 시 transplant |
| AML high-risk (1) | 15 | 두 번째 관해 또는 미치료 첫 재발 |
| AML high-risk (2) | 30 | 두 번째 이상 재발 또는 관해 적 없음 |
ALL vs AML: 다른 백혈병 → 다른 baseline.
AML low vs high risk: 같은 백혈병이지만 transplant 시점 disease state 가 다름.
- Low-risk: 첫 관해 (질병 부담 적음) → 좋은 예후.
- High-risk: 재발 후 (질병 부담 큼) → 나쁜 예후.
이는 Cox model 에서 stratification factor 또는 interaction 으로 다룸. § 1.8 의 laryngeal cancer stage (TNM I~IV) 와 같은 ordinal structure.
2.5 공변량 (Fixed at Transplant)
| 공변량 | 측정값 | 의미 |
|---|---|---|
| Recipient gender | 80 male, 57 female | 환자 성별 |
| Donor gender | 88 male, 49 female | 기증자 성별 |
| Recipient CMV | 68 positive, 69 negative | 사이토메갈로바이러스 면역 상태 |
| Donor CMV | 58 positive, 79 negative | 기증자 CMV |
| Recipient age | 7~52 (mean 25) | 환자 나이 |
| Donor age | 2~56 (mean 28) | 기증자 나이 |
| Waiting time | 0.8~87.2 개월 (mean 19.7) | 진단~이식 |
| FAB classification (AML) | M4/M5 = 45/99 | 형태학적 분류 |
| Prophylaxis | MTX+CSA / CSA+MP | GVHD 예방 |
Donor-recipient pair:
- Gender mismatch (sex-mismatch) → GVHD 위험 증가.
- CMV mismatch → 합병증 위험.
- Age difference → engraftment 영향.
Time effect:
- Waiting time (진단~이식): 너무 오래 걸리면 disease progression.
- Year of transplant: technique 개선 시간 효과.
이 모든 공변량을 Cox model 에 포함 → 다변량 risk analysis.
2.6 Time-Dependent Covariates
본 데이터의 핵심 특수성: aGVHD 발생 시점 과 platelet recovery 시점 이 random.
- Time 0: aGVHD = 0, platelet = depressed.
- Time t: aGVHD = 1 if 발생, platelet = 1 if 회복.
→ 공변량이 시간 함수 \(Z(t)\).
Patient A:
t = 0 t = 30 t = 60 t = 90
agvhd=0 agvhd=1 발생 agvhd=1 agvhd=1
plat=0 plat=0 plat=1 회복 plat=1
↓
relapse
Naive 한 분석:
- aGVHD 발생 여부를 baseline 0/1 로 → 잘못.
- aGVHD 가 transplant 때 알려져 있지 않음.
Time-dependent Cox:
\[ h(t \mid Z(t)) = h_0(t) \exp(\beta_1 \text{aGVHD}(t) + \beta_2 \text{platelet}(t) + \cdots) \]
- \(\text{aGVHD}(t)\) 는 시간 t 에서의 indicator.
- aGVHD 발생 후 hazard 가 \(\exp(\beta_1)\) 배 변경.
이는 Ch.9.1 의 표준 예제.
비유: 동적 risk factor 가 사건 위험을 시간 따라 변경 → “오늘 새 위험 요인이 등장했다”.
2.7 Competing Risks — Relapse vs Death in Remission
문제: BMT failure 는 두 가지로 나뉜다.
- Relapse: 백혈병 재발.
- Death in remission (TRM): 치료 관련 사망 (관해 중).
이 두 사건은 서로를 차단 (competing): 한 환자는 둘 중 하나만 발생.
Single-event 분석 (“treatment failure = relapse OR death”):
- 두 사건의 합으로 분석.
- 어느 사건이 더 빈번한지 모름.
Competing risks 분석:
- Relapse 와 death 의 cause-specific hazard 별도.
- Cumulative incidence function (CIF): 시간 t 까지 그 원인으로 사건 발생할 누적 확률.
- CIF 의 합 ≤ 1 (둘 중 하나만 발생 가능).
의학적 해석:
- 좋은 conditioning regimen: TRM 줄이지만 relapse 증가 가능.
- 강한 conditioning: relapse 줄이지만 TRM 증가.
- Trade-off 분석은 cause-specific hazard 분리 필수.
본 데이터: 42 relapse + 41 death = 83/137 (61%) failure. Competing risks 분석으로 두 cause 분리.
Klein Ch.4.7 에서 cumulative incidence function 추정.
2.8 Klein 책 사용 매핑
| Chapter | 본 데이터 사용 |
|---|---|
| Ch.4 | Kaplan-Meier·Nelson-Aalen (treatment failure) |
| Ch.4 | Cumulative incidence (competing risks: relapse vs death) |
| Ch.6 | Kernel hazard estimate (smooth hazard rate) |
| Ch.7 | K-sample test (risk groups) |
| Ch.8 | Cox PH (multivariate covariate effect) |
| Ch.9 | Time-dependent covariate, stratified Cox |
| Ch.11 | Regression diagnostics |
→ 6 chapter 에서 반복 — 책 전체의 가장 활용도 높은 데이터.
3 § 1.4 Times to Infection of Kidney Dialysis Patients (Nahman 1992)
3.1 의학적 배경
3.1.1 CAPD (Continuous Ambulatory Peritoneal Dialysis)
- 만성 신부전 환자의 가정 투석 방법.
- 복강에 catheter (도관) 삽입 → 투석액 주입/배출.
- Catheter exit-site infection 이 흔한 합병증.
3.1.2 Two Catheterization Procedures
- Group 1: Surgically placed (수술적 삽입), n = 43.
- 외과 의사가 무균 환경에서 시술.
- Tunneled (피부 아래 통로 형성).
- Group 2: Percutaneous placement (경피적 삽입), n = 76.
- 신장내과 의사가 시술실에서 시술.
- 빠르고 단순.
Surgical:
- 장점: 정밀, infection 위험 낮음 (in theory).
- 단점: 비용·자원 (수술실·외과의).
Percutaneous:
- 장점: 빠름, 비용 적음, 환자 편의.
- 단점: 무균 환경 덜 엄격.
연구 질문: 단순한 percutaneous 가 surgical 만큼 안전한가?
→ Two-sample comparison. 그러나 단순한 log-rank 이상의 분석이 필요한 이유 (PH 위반).
3.2 데이터 — Table 1.2
3.2.1 Surgically Placed (n = 43)
- Infections (15 명): 1.5, 3.5, 4.5, 4.5, 5.5, 8.5, 8.5, 9.5, 10.5, 11.5, 15.5, 16.5, 18.5, 23.5, 26.5 개월.
- Censored (28 명): 2.5, 2.5, …, 27.5 개월.
3.2.2 Percutaneous (n = 76)
- Infections (11 명): 0.5 (×6), 2.5 (×2), 3.5, 6.5, 15.5 개월.
- Censored (65 명): 0.5 (×10), 1.5 (×4), …, 28.5 개월.
Surgical:
- Infection 비율 15/43 = 35%.
- Range 1.5~26.5 (시간 분산).
Percutaneous:
- Infection 비율 11/76 = 14%.
- 6/11 infections at month 0.5 — 매우 초기 집중.
원시 비교: percutaneous 가 안전해 보임 (35% vs 14%). 그러나 구조 자세히 보면:
- Percutaneous: 초기 (1 개월 이내) infection 6 건 → acute risk.
- Surgical: infection 이 시간 따라 분산 → chronic risk.
→ 두 그룹의 hazard 가 시간 따라 다르게 변함. PH 가정 (constant hazard ratio) 위반 강하게 시사.
3.3 Proportional Hazards 가정 위반
3.3.1 PH 가정 (Cox 1972)
\[ \frac{h_1(t)}{h_2(t)} = \exp(\beta) = \text{const} \]
두 그룹의 hazard ratio 가 시간 t 에 무관.
3.3.2 본 데이터의 위반
Hazard h(t):
Percutaneous (early high)
│
● │
│\ │
│ \│
│ \
│ \● ← 두 그룹 hazard 비슷 (mid)
│ \─────────●
│ \
Surgical(─────●─────────●─────────● ← surgical 의 chronic 양상
│
└────────────────────────────→ time
0 5 10 15 20
- t < 1: \(h_{\text{perc}} \gg h_{\text{surg}}\) — early acute.
- t > 5: \(h_{\text{perc}} \approx h_{\text{surg}}\) 또는 \(h_{\text{perc}} < h_{\text{surg}}\).
→ 비례 관계 없음.
Percutaneous 의 early acute risk:
- 시술 직후 무균 손실 → 즉각적 contamination.
- 1 개월 안에 infection 발생 (6/11 = 55%).
Surgical 의 chronic pattern:
- 무균 시술 → 즉각 infection 적음.
- 그러나 long-term: tunneled catheter 의 점진적 contamination.
임상 결론:
- Percutaneous = “early failure or long survival”.
- Surgical = “less early failure, but chronic risk”.
이는 두 경쟁 가설 사이의 trade-off.
통계적 처리:
- Log-rank (PH 가정 하): 정보 손실 (시간 평균).
- Weighted log-rank (Wilcoxon, Tarone-Ware): 시점별 가중치 차이.
- Time-varying effect Cox: \(\beta(t)\) 로 시간 의존성 명시.
- RMST (restricted mean survival time): PH-free 비교.
3.4 Klein 책 사용 매핑
| Chapter | 본 데이터 사용 |
|---|---|
| Ch.7.3 | Weighted log-rank (가중치 선택의 영향 시연) |
| Ch.7.7 | Cramer-von Mises test (KM curve 자체의 차이) |
| Ch.8 | Cox PH with tied data (Breslow vs Efron 비교) |
| Ch.9.2 | PH 가정 검정 + time-varying effect |
§ 1.3 BMT (137 명):
- 복잡 구조: multistate, competing risks, time-dep covariates, K risk groups.
- 6 chapter 의 도구 시연.
- “복잡한 데이터로 광범위 도구”.
§ 1.4 Dialysis (119 명, 2 그룹):
- 단순 구조: two-sample.
- 그러나 PH 가정 위반.
- 4 chapter (모두 PH 관련) 의 도구 시연.
- “단순한 데이터로 PH 도전”.
Pedagogical 가치:
- BMT: 모델의 풍부함 시연.
- Dialysis: 모델 가정 위반 시연.
- 둘 다 필요 — 학생이 두 측면을 동시에 학습.
4 R + Python EDA — BMT 데이터
4.1 R — survival 패키지의 bmt 데이터셋
library(survival)
library(survminer)
# Klein book Appendix D.1 의 BMT 데이터
# R survival 패키지에는 'bmt' 가 없으나 KMsurv 패키지에 있음
# install.packages("KMsurv")
library(KMsurv)
data(bmt)
str(bmt)
# 주요 변수:
# - group: 1 (ALL), 2 (AML low-risk), 3 (AML high-risk)
# - t1: time to death/relapse (treatment failure)
# - t2: time to disease-free survival (death/relapse/recovery)
# - d1: relapse indicator
# - d2: death indicator
# - d3: aGVHD indicator
# - ta: time to aGVHD
# - tp: time to platelet recovery
# - dp: platelet recovery indicator
# ...
# 그룹별 KM curve
fit <- survfit(Surv(t1, d3) ~ group, data = bmt)
ggsurvplot(
fit, data = bmt,
pval = TRUE, conf.int = TRUE,
legend.labs = c("ALL", "AML low-risk", "AML high-risk"),
xlab = "Days", ylab = "Disease-free survival"
)
# Cumulative incidence (competing risks)
library(cmprsk)
# Combined cause: 1=relapse, 2=death in remission, 0=censored
bmt$cause <- ifelse(bmt$d1 == 1, 1,
ifelse(bmt$d2 == 1 & bmt$d1 == 0, 2, 0))
ci_fit <- cuminc(bmt$t1, bmt$cause, bmt$group)
plot(ci_fit, xlab = "Days", ylab = "Cumulative Incidence")4.2 Python — lifelines + pandas
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from lifelines import KaplanMeierFitter, CoxPHFitter
from lifelines.statistics import multivariate_logrank_test
# Klein BMT 데이터를 직접 입력 (Klein Appendix D.1 일부, 시뮬레이션 가능)
# 실제로는 R KMsurv 의 'bmt' 사용 후 csv export
# 여기서는 구조만 시연
# 가상 데이터 생성 (구조 시연)
rng = np.random.default_rng(42)
n_per_group = [38, 54, 45]
groups = []
times = []
events = []
for g, n in zip(["ALL", "AML-low", "AML-high"], n_per_group):
# baseline hazard 차이 (high-risk 가 더 큰 hazard)
rate = {"ALL": 0.003, "AML-low": 0.002, "AML-high": 0.005}[g]
t = rng.exponential(scale=1/rate, size=n)
cens = rng.exponential(scale=1500, size=n)
obs_t = np.minimum(t, cens)
delta = (t < cens).astype(int)
groups.extend([g] * n)
times.extend(obs_t)
events.extend(delta)
bmt = pd.DataFrame({"group": groups, "time": times, "status": events})
# KM by group
fig, ax = plt.subplots(figsize=(9, 6))
for g in ["ALL", "AML-low", "AML-high"]:
sub = bmt[bmt["group"] == g]
kmf = KaplanMeierFitter()
kmf.fit(sub["time"], sub["status"], label=g)
kmf.plot_survival_function(ax=ax)
ax.set_xlabel("Days")
ax.set_ylabel("Disease-free survival")
ax.set_title("BMT: Disease-free survival by risk group")
plt.tight_layout()
plt.savefig("bmt_km.png", dpi=100)
# K-sample log-rank
result = multivariate_logrank_test(bmt["time"], bmt["group"], bmt["status"])
print(f"K-sample log-rank: chi^2 = {result.test_statistic:.3f}, p = {result.p_value:.4e}")5 R + Python EDA — Kidney Dialysis 데이터
5.1 R 직접 입력
library(survival)
library(survminer)
# Klein Table 1.2
dialysis <- data.frame(
group = c(rep("Surgical", 43), rep("Percutaneous", 76)),
time = c(
# Surgical: 15 infections + 28 censored
1.5, 3.5, 4.5, 4.5, 5.5, 8.5, 8.5, 9.5, 10.5, 11.5,
15.5, 16.5, 18.5, 23.5, 26.5,
2.5, 2.5, 3.5, 3.5, 3.5, 4.5, 5.5, 6.5, 6.5, 7.5,
7.5, 7.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 12.5,
13.5, 14.5, 14.5, 21.5, 21.5, 22.5, 22.5, 25.5, 27.5,
# Percutaneous: 11 infections + 65 censored
0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 2.5, 2.5, 3.5, 6.5, 15.5,
0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5,
1.5, 1.5, 1.5, 1.5, 2.5, 2.5, 2.5, 2.5, 2.5,
3.5, 3.5, 3.5, 3.5, 3.5, 4.5, 4.5, 4.5, 5.5, 5.5,
5.5, 5.5, 5.5, 6.5, 7.5, 7.5, 7.5, 8.5, 8.5, 8.5,
9.5, 9.5, 10.5, 10.5, 10.5, 11.5, 11.5, 12.5, 12.5,
12.5, 12.5, 14.5, 14.5, 16.5, 16.5, 18.5, 19.5, 19.5,
19.5, 20.5, 22.5, 24.5, 25.5, 26.5, 26.5, 28.5
),
status = c(
rep(1, 15), rep(0, 28), # Surgical
rep(1, 11), rep(0, 65) # Percutaneous
)
)
# KM 추정
fit <- survfit(Surv(time, status) ~ group, data = dialysis)
ggsurvplot(
fit, data = dialysis,
pval = TRUE, conf.int = TRUE,
palette = c("red", "blue"),
xlab = "Months", ylab = "Infection-free probability",
legend.labs = c("Percutaneous", "Surgical")
)
# Standard log-rank
survdiff(Surv(time, status) ~ group, data = dialysis)
# Weighted log-rank (Wilcoxon: 초기 가중)
survdiff(Surv(time, status) ~ group, data = dialysis, rho = 1)
# rho=1 은 Peto-Prentice weight (early difference 강조)
# Cox PH model
cox_fit <- coxph(Surv(time, status) ~ group, data = dialysis)
summary(cox_fit)
# PH 가정 검정 (Schoenfeld residuals)
test_ph <- cox.zph(cox_fit)
print(test_ph)
plot(test_ph)
# p-value 작으면 PH 위반5.2 Python — lifelines
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from lifelines import KaplanMeierFitter, CoxPHFitter
from lifelines.statistics import logrank_test
# 데이터 (R 와 동일 구조)
surgical_infect = [1.5, 3.5, 4.5, 4.5, 5.5, 8.5, 8.5, 9.5, 10.5, 11.5,
15.5, 16.5, 18.5, 23.5, 26.5]
surgical_cens = [2.5, 2.5, 3.5, 3.5, 3.5, 4.5, 5.5, 6.5, 6.5, 7.5,
7.5, 7.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 12.5,
13.5, 14.5, 14.5, 21.5, 21.5, 22.5, 22.5, 25.5, 27.5]
perc_infect = [0.5]*6 + [2.5, 2.5, 3.5, 6.5, 15.5]
perc_cens = ([0.5]*10 + [1.5]*4 + [2.5]*5 + [3.5]*5 + [4.5]*3
+ [5.5]*5 + [6.5] + [7.5]*3 + [8.5]*3 + [9.5]*2
+ [10.5]*3 + [11.5]*2 + [12.5]*4 + [14.5]*2 + [16.5]*2
+ [18.5] + [19.5]*3 + [20.5] + [22.5] + [24.5]
+ [25.5] + [26.5]*2 + [28.5])
dialysis = pd.DataFrame({
"group": (["Surgical"] * (len(surgical_infect) + len(surgical_cens))
+ ["Percutaneous"] * (len(perc_infect) + len(perc_cens))),
"time": surgical_infect + surgical_cens + perc_infect + perc_cens,
"status": ([1]*len(surgical_infect) + [0]*len(surgical_cens)
+ [1]*len(perc_infect) + [0]*len(perc_cens)),
})
# KM 추정
fig, ax = plt.subplots(figsize=(9, 6))
for grp, color in [("Surgical", "blue"), ("Percutaneous", "red")]:
sub = dialysis[dialysis["group"] == grp]
kmf = KaplanMeierFitter()
kmf.fit(sub["time"], sub["status"], label=grp)
kmf.plot_survival_function(ax=ax, color=color, ci_show=True)
ax.set_xlabel("Months")
ax.set_ylabel("Infection-free probability")
ax.set_title("Kidney Dialysis: Surgical vs Percutaneous (Nahman 1992)")
plt.tight_layout()
plt.savefig("dialysis_km.png", dpi=100)
# Standard log-rank
result_lr = logrank_test(
dialysis[dialysis["group"] == "Surgical"]["time"],
dialysis[dialysis["group"] == "Percutaneous"]["time"],
dialysis[dialysis["group"] == "Surgical"]["status"],
dialysis[dialysis["group"] == "Percutaneous"]["status"]
)
print(f"Standard log-rank: chi^2 = {result_lr.test_statistic:.3f}, "
f"p = {result_lr.p_value:.4f}")
# Weighted log-rank with Tarone-Ware (sqrt(n_j) weight)
from lifelines.statistics import weighted_logrank_test
result_tw = weighted_logrank_test(
dialysis[dialysis["group"] == "Surgical"]["time"],
dialysis[dialysis["group"] == "Percutaneous"]["time"],
dialysis[dialysis["group"] == "Surgical"]["status"],
dialysis[dialysis["group"] == "Percutaneous"]["status"],
weightings="tarone-ware"
)
print(f"Tarone-Ware weighted log-rank: p = {result_tw.p_value:.4f}")
# Cox PH model
cph = CoxPHFitter()
dialysis["group_perc"] = (dialysis["group"] == "Percutaneous").astype(int)
cph.fit(dialysis[["time", "status", "group_perc"]], "time", "status")
print(cph.summary)
# PH 가정 검정
cph.check_assumptions(dialysis[["time", "status", "group_perc"]],
p_value_threshold=0.05)Standard log-rank (가중치 \(w_j = 1\)):
- 모든 시점 동등.
- PH 가정 하 최적.
Wilcoxon (Peto) (\(w_j = n_j\)):
- 초기에 가중치 큼.
- Early difference 강조.
Tarone-Ware (\(w_j = \sqrt{n_j}\)):
- 절충.
Fleming-Harrington (\(w_j = S(t_j)^\rho\)):
- \(\rho > 0\): 초기 가중.
- \(\rho < 0\): 후기 가중.
Kidney Dialysis 데이터에서:
- Standard: percutaneous 의 early acute risk 가 후기의 비슷한 hazard 와 평균화 → significant 안 됨.
- Wilcoxon: early difference 강조 → significant.
→ Weight 선택이 결과를 바꿀 수 있음. 도메인 지식 + PH 점검으로 결정.
6 두 데이터의 상보성 — 통계 도구의 두 축
| 측면 | § 1.3 BMT | § 1.4 Dialysis |
|---|---|---|
| n | 137 | 119 |
| 그룹 수 | 3 (ALL/AML-low/AML-high) | 2 (Surgical/Percutaneous) |
| 사건 종류 | Multiple (relapse·death·aGVHD·platelet) | Single (infection) |
| 공변량 | 9+ (age·sex·CMV·FAB·…) | 1 (group) |
| 도전 | Multistate·competing risks·time-dep | PH violation |
| Klein 사용 | Ch.4·6·7·8·9·11 | Ch.7·8·9 |
| 도구 군 | 모델 풍부함 | 가정 점검 |
§ 1.3 BMT:
- “현실의 의료 데이터 는 풍부하다 — multistate, competing, time-dep covariate.”
- “이 풍부함을 모두 표현할 도구가 필요하다.”
- → Ch.4 (CIF), Ch.9 (multistate), Ch.9 (time-dep), Ch.11 (diagnostics).
§ 1.4 Dialysis:
- “단순한 비교에서도 가정이 위반될 수 있다.”
- “PH 가정 점검 + 위반 시 대안 도구가 필요하다.”
- → Ch.7 (weighted log-rank), Ch.9 (PH check), Ch.9 (time-varying effect).
페다고지:
- 학생이 풍부함과 가정 점검을 동시에 학습.
- Klein 책의 chapter 별 도구 도입의 동기 제공.
7 핵심 직관 통합
- Multistate = “환자 회복은 단일 사건이 아닌 상태 전이”.
- Competing risks = “두 사건이 서로 차단” (relapse vs death).
- Time-dependent covariate = “공변량이 시간 따라 변경” (aGVHD 발생 시).
- PH 가정 = “두 그룹 hazard ratio 시간 무관” — Kidney dialysis 에서 위반.
- Weighted log-rank = “시간별 가중치 선택” — PH 위반 시 대안.
- 두 데이터의 상보성 = “풍부함 (BMT) + 가정 점검 (Dialysis)” 의 두 축.
8 실전 체크리스트 — § 1.3~1.4
§ 1.3 BMT 데이터
- Allogeneic 의 의미 — donor 의 골수, GVHD 위험.
- Risk groups — ALL vs AML low/high 의 baseline 차이.
- Multistate 구조 식별 — aGVHD·platelet·relapse·death.
- Competing risks 분리 — relapse vs death in remission.
- Time-dependent covariate — aGVHD/platelet 발생 시점.
- Klein 6 chapter 사용 매핑 인지.
§ 1.4 Dialysis 데이터
- Two-sample 단순 구조 — surgical vs percutaneous.
- 데이터 첫 인상 — percutaneous 의 0.5 month 집중.
- PH 가정 위반 직관 (early acute vs chronic).
- Weighted log-rank 권장 (early difference 강조).
- Cox PH check (Schoenfeld residuals).
- Time-varying effect 또는 stratified 대안.
EDA
- 그룹별 events·censored·n·median 요약.
- KM curve + confidence band.
- PH 검정 (Schoenfeld 잔차 plot).
- Weighted log-rank 비교 (standard vs Wilcoxon vs Tarone-Ware).
다음 단계
- § 1.5~1.10 (Breast·Burn·Kidney Transplant·Laryngeal 등) 으로 추가 도구.
- Ch.4 가 본 두 데이터의 첫 비모수 분석 (KM·NA·CIF).
9 관련 주제
Klein 시리즈
- Ch.1 Overview
- § 1.1~1.2 — Introduction · Leukemia 6-MP
- (다음) § 1.5~1.10 (예정) — Breast·Burn·Kidney Transplant·Laryngeal·Auto-Allo BMT·Lymphoma BMT
관련 개념 (cross-category)
10 참고문헌
- Klein, J. P., & Moeschberger, M. L. (2003). Survival Analysis: Techniques for Censored and Truncated Data (2nd ed.), Ch.1 § 1.3~1.4. Springer.
- Copelan, E. A., Biggs, J. C., Thompson, J. M., et al. (1991). Treatment for Acute Myelocytic Leukemia with Allogeneic Bone Marrow Transplantation Following Preparation with BuCy2. Blood, 78(3), 838-843.
- Nahman, N. S., Middendorf, D. F., Bay, W. H., et al. (1992). Modification of the Percutaneous Approach to Peritoneal Dialysis Catheter Placement under Peritoneoscopic Visualization: Clinical Results in 78 Patients. Journal of the American Society of Nephrology, 3(1), 103-107.
- Cox, D. R. (1972). Regression Models and Life-Tables. JRSS B, 34(2), 187-220.
- Andersen, P. K., Borgan, Ø., Gill, R. D., & Keiding, N. (1993). Statistical Models Based on Counting Processes. Springer. (Multistate model 정전)
- Klein, J. P., van Houwelingen, H. C., Ibrahim, J. G., & Scheike, T. H. (eds.) (2014). Handbook of Survival Analysis. CRC Press. (Multistate, competing risks 종합)
- 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.
- Fleming, T. R., & Harrington, D. P. (1991). Counting Processes and Survival Analysis. Wiley.
- Tarone, R. E., & Ware, J. (1977). On Distribution-Free Tests for Equality of Survival Distributions. Biometrika, 64(1), 156-160.
- Davidson-Pilon, C. (2019). lifelines: Survival Analysis in Python. JOSS, 4(40), 1317.