Cox PH 모형 진단 — Schoenfeld·Log-log·Time-interaction

Woodward Ch.11.8 — Model Checking

Cox PH 모형의 핵심 가정 (proportional hazards) 의 진단 도구를 추상 → 일상어 → 반사실 3 단계 직관으로 풀어낸다. Schoenfeld residual 의 시간 plot, log-log survival plot, time-interaction test, 그리고 가정 위반 시 대응 (시간 의존 공변량, stratified Cox, RMST) 까지 정리한다.

Experimentation
Modeling
저자

Kwangmin Kim

공개

2026년 05월 08일

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

정의: 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 의 의미

직관 3 단계: 시간 추세 = PH 위반
  • 추상 정의: 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: lifelinescheck_assumptions().

직관: 검정 + 시각의 결합
  • 추상 정의: 통계 검정 (객관) + plot 시각 (해석) 결합 → 가정 검증 신뢰성 ↑.
  • 일상어 비유: 시험 점수 + 답안 검토 — 점수만 보면 패턴 못 보고, 답안만 보면 객관성 ↓.
  • 반사실 시나리오: 큰 표본에서 검정이 사소한 위반도 유의 → plot 으로 임상 의의 판단.

3 진단 도구 2 — Log-Log Survival Plot

정의: \(\log(-\log \hat S(t))\) vs \(\log t\) 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 직관 — 평행 곡선의 의미

직관 3 단계: 평행성 검증
  • 추상 정의: 두 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 의 가장 명확한 위반

가정 위반: Crossing Curves

만약 두 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

정의: Time-Varying Coefficient 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 시간 분할
직관 3 단계: \(g(t)\) 의 선택
  • 추상 정의: \(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 — 비교적 간단한 대안

직관 3 단계: Stratification 의 의미
  • 추상 정의: 각 stratum 의 baseline hazard 자유 → stratum 변수의 효과 자동 통제 + PH 가정 stratum 안에서만.
  • 일상어 비유: 학교별 별도 점수 분석 — 학교 효과 자동 통제.
  • 반사실 시나리오: Stratum 변수의 효과 추정 불가. 단 효과 통제만 목적이면 충분.

활용: - 성별이 PH 위반 → strata = sex. - 다중 센터 시험 → strata = center. - 시간 의존 변수 → time-period strata.

5.3 RMST — 비-PH 대안

정의: Restricted Mean Survival Time

특정 시점 \(\tau\) 까지의 평균 생존 시간:

\[\text{RMST}(\tau) = \int_0^\tau S(t)\, dt\]

두 군의 RMST 차이로 효과 비교.

직관: RMST 의 PH 무관성
  • 추상 정의: \(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 진단

사례: Treatment 효과의 시간 의존

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 — 함수 형태 진단

정의: Martingale Residual

\[M_i = \delta_i - \hat H(t_i \mid X_i)\]

각 개인의 sample-counterpart 잔차.

활용: - \(M_i\) vs \(X_j\) plot → covariate 의 함수 형태. - 비선형 패턴이면 spline 또는 변환.

직관 3 단계: Martingale 의 의미
  • 추상 정의: \(M_i\) = “관찰 사건 - 기대 사건”. 기대보다 더/덜 발생.
  • 일상어 비유: 학생 점수 - 예측 점수.
  • 반사실 시나리오: \(M_i\) 의 패턴이 misspecification 신호.

10 DFBETA — 영향력 분석

정의: DFBETA

각 개인 제거 시 \(\hat\beta\) 변화:

\[\text{DFBETA}_i = \hat\beta - \hat\beta_{(-i)}\]

큰 |DFBETA| → 영향력 큰 관측.

직관: 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 관련 주제

Statistics 크로스링크

Subscribe

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