1 왜 모형 진단인가
Cox PH 의 핵심 가정 — proportional hazards — 가 깨지면:
- HR 의 시간 평균 보고 → 진성 패턴 가림.
- 두 군의 차이가 시간 따라 변하는 경우 (예: 약 효과의 단기 우월 → 장기 동등) 단일 HR 이 부정확.
- 검정력 ↓ (Wald, LR test).
3 단계 직관:
- 추상 정의: \(h_1(t)/h_2(t) = \exp(\beta)\) 가정. \(t\) 의 함수이면 모형 misspecified.
- 일상어 비유: 두 약의 효과 비가 시간 무관 — 1 개월 시점이나 1 년 시점이나 같은 ratio. 진성은 다를 수 있음.
- 반사실 시나리오: 가정 검증 없이 단일 HR 만 보고 → 의료 의사 결정 오류 가능.
2 진단 도구 1 — Schoenfeld Residuals
각 사건 시점 \(t_i\) 에서 관찰된 covariate 와 risk set 의 가중 평균 차이:
\[r_i^S(\beta) = X_i - \bar X(t_i, \beta)\]
여기서 \(\bar X(t_i, \beta) = \sum_{j \in R(t_i)} X_j w_j\), \(w_j = \exp(\beta^T X_j) / \sum_k \exp(\beta^T X_k)\).
PH 가정 충족 시 잔차가 시간 무관 → plot 이 0 주위 무작위.
2.1 직관 — Schoenfeld 의 의미
- 추상 정의: PH 충족 시 \(E[r_i^S(\beta_0)] = 0\) 모든 \(t_i\). 시간 추세 보이면 PH 위반.
- 일상어 비유: 두 학생의 성적 차이의 시간 추세 — 일정하면 안정, 변하면 학습 패턴 변화.
- 반사실 시나리오: 잔차가 시간 따라 ↑ 또는 ↓ → 효과가 시간 따라 변함 → 시간 의존 공변량 필요.
2.2 검정 — Grambsch-Therneau Test
\[H_0: \rho(t, r^S) = 0 \quad \text{vs} \quad H_1: \rho \ne 0\]
(시간과 잔차의 상관). 기각 → PH 위반.
R: cox.zph(model). Python: lifelines 의 check_assumptions().
- 추상 정의: 통계 검정 (객관) + plot 시각 (해석) 결합 → 가정 검증 신뢰성 ↑.
- 일상어 비유: 시험 점수 + 답안 검토 — 점수만 보면 패턴 못 보고, 답안만 보면 객관성 ↓.
- 반사실 시나리오: 큰 표본에서 검정이 사소한 위반도 유의 → plot 으로 임상 의의 판단.
3 진단 도구 2 — Log-Log Survival Plot
PH 가정 + Cox 모형:
\[\log(-\log S(t \mid X)) = \log H_0(t) + \beta^T X\]
두 군 (X = 0 vs X = 1) plot: \[\log(-\log S(t \mid X = 1)) - \log(-\log S(t \mid X = 0)) = \beta\]
→ 시간 무관 일정 차이 = 두 곡선이 평행.
3.1 직관 — 평행 곡선의 의미
- 추상 정의: 두 group 의 log-log 곡선의 거리가 일정하면 PH OK.
- 일상어 비유: 두 학교의 평균 점수 시계열 — 차이가 일정하면 학교 효과 안정.
- 반사실 시나리오: 곡선 교차 (crossing) 또는 거리 변화 → PH 위반. 두 군의 효과가 시간 따라 변함.
시각 패턴:
log(-log S)
↑
│ ╱╱╱ group 1 (smoker)
│ ╱╱╱
│ ╱╱╱
│ ╱╱╱──── group 0 (nonsmoker)
│ ╱╱╱
│╱╱╱
└─────────→ log t
평행 + 일정 거리 → PH OK.
3.2 Crossing Hazards — PH 의 가장 명확한 위반
만약 두 group 의 log-log 곡선 교차:
- 초기에는 group 1 이 더 위험.
- 후기에는 group 0 이 더 위험.
→ 단일 HR 부적절. 시간 분할 분석 (early vs late) 또는 시간 의존 모형.
3 단계 직관:
- 추상 정의: \(\beta(t)\) 가 부호 변경 — 단일 \(\beta\) 가 평균 0 으로 평탄화.
- 일상어 비유: 두 약 — 약 A 가 단기 우월, 약 B 가 장기 우월. 임상 의사 결정 시점에 따라 다른 약 추천.
- 반사실 시나리오: 교차 hazards 자료에 Cox 적용 시 HR ≈ 1 (효과 없음) — 진성 효과 가림.
4 진단 도구 3 — Time-Interaction Test
\(\beta(t) = \beta_0 + \beta_1 g(t)\) 가설 모형 (예: \(g(t) = t\) 또는 \(\log t\)).
검정 \(H_0: \beta_1 = 0\) — 기각 시 PH 위반.
4.1 시간 함수 \(g(t)\) 의 선택
| \(g(t)\) | 활용 |
|---|---|
| \(t\) | 선형 시간 추세 |
| \(\log t\) | 로그 추세 |
| \(K(t)\) (KM 변환) | 변동 분포 추적 |
| Step function | 시간 분할 |
- 추상 정의: \(g(t)\) 가 PH 위반의 방향 가정. 진성 패턴과 일치하면 검정력 ↑.
- 일상어 비유: 추세 검증의 함수 형태 — 선형 vs 로그 vs 비선형. 자료 패턴에 적합.
- 반사실 시나리오: \(g(t)\) 가 misspecified → 검정 비효율. Schoenfeld plot 의 시각이 \(g(t)\) 선정 도움.
5 PH 위반 시 4 가지 대응
1. Time-varying coefficients: \[h(t \mid X) = h_0(t) \exp(\beta_1 X + \beta_2 X g(t))\]
X 의 효과가 시간 함수.
2. Stratified Cox: \[h(t \mid X, Z) = h_{0Z}(t) \exp(\beta^T X)\]
각 stratum (예: 성별) 의 baseline 자유. PH 가정은 stratum 안에서만 적용.
3. Time intervals: 시간 분할 (예: 0~1 yr, 1~5 yr) → 각 구간별 별도 Cox.
4. RMST (Restricted Mean Survival Time): PH 무관 — 평균 생존 시간 자체 비교.
5.1 Time-varying Coefficients 의 활용
가설: 새 약이 초기 6 개월 강한 효과, 이후 효과 소멸.
# Time-varying interaction
df["t_x_drug"] = df["drug"] * np.log(df["T"] + 1)
cph = CoxPHFitter()
cph.fit(df, "T", "event",
formula="drug + t_x_drug + age + sex")t_x_drug 의 \(\beta\) 가 유의 + 음수 → 효과가 시간 따라 ↓.
3 단계 직관:
- 추상 정의: Interaction term 으로 시간 의존성 명시.
- 일상어 비유: 약 효과의 “유효기간” 모형화.
- 반사실 시나리오: 단일 HR 만 보고하면 평균 효과 — 임상 의사 결정에 부족.
5.2 Stratified Cox — 비교적 간단한 대안
- 추상 정의: 각 stratum 의 baseline hazard 자유 → stratum 변수의 효과 자동 통제 + PH 가정 stratum 안에서만.
- 일상어 비유: 학교별 별도 점수 분석 — 학교 효과 자동 통제.
- 반사실 시나리오: Stratum 변수의 효과 추정 불가. 단 효과 통제만 목적이면 충분.
활용: - 성별이 PH 위반 → strata = sex. - 다중 센터 시험 → strata = center. - 시간 의존 변수 → time-period strata.
5.3 RMST — 비-PH 대안
특정 시점 \(\tau\) 까지의 평균 생존 시간:
\[\text{RMST}(\tau) = \int_0^\tau S(t)\, dt\]
두 군의 RMST 차이로 효과 비교.
- 추상 정의: \(S(t)\) 자체의 면적 비교 — PH 가정 무관.
- 일상어 비유: 두 학생의 1 학기 동안 누적 점수 비교 — 매주 차이 일정 가정 불필요.
- 반사실 시나리오: PH 위반 자료에 Cox 무리하게 적용 vs RMST 의 정직 비교. RMST 가 임상 해석 직관적 (평균 생존 시간 차이 = “month gained”).
6 코드 예시 — PH 진단
import numpy as np
import pandas as pd
from lifelines import CoxPHFitter
from lifelines.statistics import proportional_hazard_test
import matplotlib.pyplot as plt
np.random.seed(42)
n = 500
df = pd.DataFrame({
"treatment": np.random.binomial(1, 0.5, n),
"age": np.random.normal(60, 10, n),
})
# PH 위반 시뮬레이션 — treatment 효과가 시간 따라 ↓
true_hazard = lambda t, X: 0.05 * np.exp(np.where(t < 5, 0.8, -0.5) * X[0] + 0.04 * (X[1] - 60))
# (간단한 가상 자료)
df["T"] = np.random.exponential(scale=1.0/0.05, size=n)
df["event"] = np.random.binomial(1, 0.7, n)
# Cox 적합
cph = CoxPHFitter()
cph.fit(df, duration_col="T", event_col="event", formula="treatment + age")
# Schoenfeld 검정
print("=== Schoenfeld Test (Grambsch-Therneau) ===")
results = proportional_hazard_test(cph, df, time_transform="rank")
print(results.summary)
# Plot Schoenfeld residuals
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
cph.check_assumptions(df, p_value_threshold=0.05, show_plots=True)
plt.tight_layout()해석: P < 0.05 시 PH 위반 — 시간 의존 또는 stratified 대안.
7 진단 결과별 행동
| 검정 결과 | 행동 |
|---|---|
| 모두 PH 충족 | Cox 사용 |
| 한 변수만 위반 | Stratified Cox (그 변수 strata) |
| 위반 변수가 핵심 | Time-varying interaction |
| 광범위 위반 | RMST 또는 분포별 모형 |
8 A/B 테스트의 PH 진단
A/B 테스트의 retention 분석:
- 단기 (< 30 일): Treatment 가 onboarding 우월 → HR < 1.
- 장기 (> 6 개월): Treatment 효과 약화 → HR ≈ 1.
진단: - Schoenfeld plot of treatment → 시간 따라 ↑ 추세. - Log-log plot 의 두 곡선이 시간 따라 거리 ↓.
대응: 시간 분할 분석 또는 time-interaction.
3 단계 직관:
- 추상 정의: 단기·장기 효과 다름 — 단일 HR 부적절.
- 일상어 비유: novelty effect — 새 기능 출시 직후 강한 효과 → 적응 후 약화.
- 반사실 시나리오: 단순 Cox 만 보고 → “treatment 효과 약함” 결론 (평균 평탄화). 시간 분할로 진성 단기 효과 발견.
9 Martingale Residual — 함수 형태 진단
\[M_i = \delta_i - \hat H(t_i \mid X_i)\]
각 개인의 sample-counterpart 잔차.
활용: - \(M_i\) vs \(X_j\) plot → covariate 의 함수 형태. - 비선형 패턴이면 spline 또는 변환.
- 추상 정의: \(M_i\) = “관찰 사건 - 기대 사건”. 기대보다 더/덜 발생.
- 일상어 비유: 학생 점수 - 예측 점수.
- 반사실 시나리오: \(M_i\) 의 패턴이 misspecification 신호.
10 DFBETA — 영향력 분석
각 개인 제거 시 \(\hat\beta\) 변화:
\[\text{DFBETA}_i = \hat\beta - \hat\beta_{(-i)}\]
큰 |DFBETA| → 영향력 큰 관측.
- 추상 정의: 영향력 큰 관측 식별. Outlier 진단.
- 일상어 비유: 한 학생 제거 시 평균 큰 변화 — 이상 학생.
- 반사실 시나리오: DFBETA 큰 관측 = 자료 오류 또는 진성 outlier. 점검 필수.
11 결론
Cox PH 모형의 핵심 가정 (PH) 검증은 Schoenfeld residual + log-log plot + time-interaction test 세 도구. 위반 시 stratified Cox, time-varying coefficients, 또는 RMST 로 대응. Martingale residual 이 함수 형태 진단, DFBETA 가 영향력 분석. A/B 테스트의 novelty effect 가 PH 위반의 흔한 IT 사례.
다음 글 (H-WOO11-7) 에서 경쟁 위험과 joint modeling 을 본다.
12 관련 주제
- Cox PH 와 Weibull PH
- 1111-11-11, 경쟁 위험
Statistics 크로스링크