Proportional-Hazards Models — 비례 가정의 기하와 검증 (McCullagh §13.2)

\(h(t;x) = \lambda(t)\exp(\beta^T x)\) · 일반화 \(G(x;\beta)\) · log-log 플롯 · Schoenfeld 잔차 · 계층화와 AFT

McCullagh & Nelder (1989) §13.2 의 비례 위험 모형을 심화한다. 일반 형식 \(h(t;x) = \lambda(t) \exp\{G(x;\beta)\}\) 에서 공변량 효과의 곱셈성 (multiplicativity) 이 관례이지 필연이 아니라는 Oakes (1981) 의 관찰, 그리고 이 관례가 \(\beta^T x\) 형 선형 예측자 (13.1) 로 이어지는 논리를 따라간다. 비례 가정의 기하적 의미 — 두 생존 곡선이 로그-로그 스케일에서 평행한 수직 이동 — 을 \(\log(-\log S(t;x))\) 등식으로 유도. 비례 가정 검증의 세 공식 도구: log-log 생존 플롯, Schoenfeld 잔차 · cumulative Schoenfeld, 시간 의존 계수 검정. 가정 위배 시 처방: 계층화 Cox (stratified), 시간 의존 \(\beta(t)\), 가속 고장 시간 (accelerated failure time, AFT) 대안. 마지막으로 Cox 모형과 모수적 \(\lambda(t)\) 선택 사이의 trade-off 를 실무 관점에서 정리.

Statistics
GLM
저자

Kwangmin Kim

공개

2026년 04월 21일

1 서론 — 왜 “비례” 가정이 중요한가

Ch.13 개관 (12-1) 에서 비례 위험 모형의 형식 은 이미 소개했다.

\[h(t; x) = \lambda(t) \exp(\beta^T x). \tag{13.1}\]

이 한 줄의 가정 뒤에는 강력한 구조적 제약 이 있다. 그 제약의 성격을 이해하는 것이 §13.2 의 핵심 목적이다.

비례 위험 모형이 부과하는 제약:

  1. 공변량 효과가 시간에 무관 — 치료 효과가 첫 달이나 다섯 해 후나 같은 위험비.
  2. 공변량 효과가 곱셈적 — 두 공변량 값의 이 위험의 을 만든다.
  3. 기저 위험이 분리 가능\(\lambda(t)\) 는 모든 개체가 공유하는 “시간의 모양”.

이 세 가정이 함께 깨지면 모형이 데이터를 체계적으로 편향시킨다. 따라서 가정의 기하적 의미 · 검증 방법 · 위배 시 대안 을 명확히 해야 한다.

이 포스트는 Ch.13 overview (12-1) 에서 간략히 언급한 비례 가정을 수학적 정밀도 로 해부하고, 실무에서 가정을 확인하고 대응하는 도구를 제공한다.

2 일반 형식과 Oakes 의 관찰

2.1 가장 일반적인 비례 위험

McCullagh-Nelder 가 §13.2 에서 먼저 제시하는 일반 형식:

\[h(t; x) = \lambda(t) \exp\{G(x; \beta)\}.\]

여기서 \(G(x; \beta)\) 는 공변량과 모수의 임의 함수 — 선형이 아니어도 된다. 지수 함수 \(\exp\{\cdot\}\) 로 감싼 이유는 위험이 양수 여야 하기 때문.

2.2 비례성의 정의

두 개체 \(A, B\) 의 위험비:

\[ \frac{h(t; x_A)}{h(t; x_B)} = \frac{\lambda(t) \exp\{G(x_A; \beta)\}}{\lambda(t) \exp\{G(x_B; \beta)\}} = \exp\{G(x_A; \beta) - G(x_B; \beta)\}. \]

\(\lambda(t)\)상쇄 되어 시간 무관 상수 — 이것이 “비례” 의 의미. \(G\) 가 무슨 형태이든 비례성은 유지.

2.3 Oakes (1981) 의 관찰 — 곱셈성은 선택이지 필연이 아님

\(G(x; \beta) = \beta^T x\) (선형) 이라고 추가 가정하면 (13.1) 이 된다. 이 가정의 함의:

\[\frac{h(t; x_A)}{h(t; x_B)} = \exp\{\beta^T (x_A - x_B)\} = \prod_j \exp\{\beta_j (x_{A,j} - x_{B,j})\}.\]

위험비가 각 공변량 차이의 기여로 분해 된다. 공변량 \(j\) 의 기여는 \(\exp(\beta_j \Delta x_j)\). 이 분해가 “곱셈적 (multiplicative)” 이라는 의미.

Oakes (1981) 가 지적: 곱셈성은 관례 일 뿐, 비례 위험성 자체와 무관. 비선형 \(G\) (예: \(G(x; \beta) = \beta_0 + \beta_1 x_1 + \beta_2 x_1^2 + \beta_3 \log x_2\)) 를 써도 비례성은 유지된다.

직관: “비례” 와 “곱셈” 은 별개 가정

비례 (proportionality): 시간에 따른 위험의 모양 이 모든 개체에서 같다. \(\lambda(t)\) 는 공유되고 개체별 차이는 수평 이동 (로그 스케일에서).

곱셈 (multiplicativity): 서로 다른 공변량들의 결합 효과 가 개별 효과의 이다. 즉 교호작용 없음.

(13.1) 은 두 가정을 함께 부과한다. 실무에서 “비례 위험 모형이 깨진다” 고 할 때 보통 비례 가정을 의심하지만, 사실 곱셈성 도 동시에 의심할 여지가 있다. 두 가정을 분리해서 검증하는 것이 엄밀한 진단.

2.4 왜 선형 (13.1) 이 표준이 되었는가

  1. 해석 용이성: \(\beta_j\) 가 “\(x_j\) 1 단위 증가가 위험을 \(e^{\beta_j}\) 배 증가” 로 번역된다.
  2. 수치 안정성: 선형 예측자는 IRLS 수렴이 일반적으로 좋다.
  3. GLM 틀 통합: Aitkin-Clayton 환원 (12-1) 이 선형 가정 하에서 가장 깔끔.
  4. Cox 의 편의: 부분 우도 유도가 선형 가정 하에서 표준.

비선형 \(G\) 는 필요하면 쓸 수 있지만, 해석·구현의 비용이 크므로 실무에서는 선형 + 변환 으로 충분한 경우가 많다 (§11.4 Box-Tidwell 정신).

3 비례 가정의 기하적 의미

3.1 log-log 변환으로의 이동

비례 위험 모형의 생존 함수 (§12-1 에서 유도):

\[S(t; x) = \exp\{-\Lambda(t) e^{\beta^T x}\}.\]

양변에 \(-\log\) 두 번 취하면

\[\log(-\log S(t; x)) = \log \Lambda(t) + \beta^T x. \tag{A}\]

좌변을 complementary log-log 변환 이라고 부른다. 이 변환 스케일에서 공변량 효과가 선형 이동 — 수직 평행이동.

3.2 두 공변량 수준의 log-log 생존 곡선

두 공변량 값 \(x_A, x_B\) 의 생존 곡선을 \(\log(-\log S)\) 스케일에 그리면:

\[\log(-\log S(t; x_A)) - \log(-\log S(t; x_B)) = \beta^T (x_A - x_B).\]

우변은 \(t\) 에 무관한 상수. 즉 두 곡선은 평행 수직 이동 관계.

시각 검증 도구 — log-log 생존 플롯

비례 가정이 옳으면 각 공변량 그룹 (예: 치료군 vs 대조군) 의 Kaplan-Meier 생존 함수를 \(\log(-\log \widehat S(t))\) 스케일로 플롯했을 때 평행 곡선 이 나와야 한다.

실제 데이터에서는 완전한 평행은 드물지만 시간 축에서 유지되는 수직 간격 이 핵심 기준. 만약:

  • 두 곡선이 교차 한다 → 비례 가정 명백히 깨짐 (효과 방향이 시간에 따라 반전).
  • 두 곡선의 간격이 시간에 따라 벌어지거나 좁혀진다 → 비례 가정 약함 (효과 크기가 시간 변화).
  • 두 곡선이 서로 수렴한다 → 효과가 장기적으로 사라지는 패턴.

이것이 비례 가정의 가장 단순한 비공식 진단. 데이터 탐색 초기에 반드시 확인.

3.3 위험비의 시간 무관성 재확인

  1. 식에서 시간 무관 상수 \(\beta^T(x_A - x_B)\)로그 위험비 로 해석할 수 있다.

\[\log \text{HR}(t) = \log \frac{h(t; x_A)}{h(t; x_B)} = \beta^T (x_A - x_B).\]

실제 데이터에서 \(\log \text{HR}(t)\) 를 추정해 시간에 따라 플롯하면 수평선 이 나와야 한다. 이것이 Schoenfeld 잔차 기반 검정의 근간.

4 비례 가정의 공식 검정

4.1 Schoenfeld 잔차 (Schoenfeld, 1982)

Cox 부분 우도 (§13.5) 에서 각 사망 시점 \(t_j\) 의 스코어 기여:

\[U_j = x_j - \bar x(t_j), \qquad \bar x(t_j) = \frac{\sum_{l \in R(t_j)} x_l e^{\beta^T x_l}}{\sum_{l \in R(t_j)} e^{\beta^T x_l}}.\]

Schoenfeld 잔차 = 사망자의 공변량에서 위험집합의 가중 평균 을 뺀 값. 비례 가정 하에서 \(E[U_j] = 0\) 모든 \(j\).

검정: \(U_j\)시간 순 으로 나열됐을 때 체계적 추세가 있는가. 추세가 있으면 비례 가정 위배.

구체적으로 Grambsch & Therneau (1994) 의 스케일된 Schoenfeld 잔차 \(U_j^*\) 와 시간의 변환 \(g(t_j)\) 사이의 상관을 검정:

\[H_0: \text{corr}(U_j^*, g(t_j)) = 0 \quad \forall j.\]

\(g(t)\) = 항등, 로그, Kaplan-Meier 변환 등 선택. R survival::cox.zph(), Python lifelines.CoxPHFitter.check_assumptions() 이 표준 구현.

4.2 시간 의존 \(\beta\) 검정

더 엄격한 검정: 확장 모형

\[\log h(t; x) = \log \lambda(t) + \beta^T x + \gamma (x \cdot g(t))\]

에서 \(\gamma = 0\) 검정. \(g(t)\) 는 시간 변환 (로그, 제곱, etc.). \(\gamma\) 가 유의하게 0 아니면 효과가 시간에 따라 변함 — 비례 위배.

4.3 로그-로그 생존 플롯 공식화

앞서 본 시각 검증의 공식 버전: 두 그룹의 KM 추정 \(\widehat S_A(t), \widehat S_B(t)\)\(\log(-\log)\) 차이 \(\widehat D(t)\) 가 상수인지 검정. \(\widehat D(t)\) 의 기울기를 선형 회귀 로 적합하고 기울기 0 검정.

4.4 세 검정의 비교

검정 강점 약점
log-log 플롯 시각적, 누락 방향 잡음 연속 공변량에는 부적절 (그룹화 필요)
Schoenfeld 잔차 연속 공변량 지원, 표준 구현 작은 효과는 놓칠 수 있음
시간 의존 \(\beta\) 검정 엄격, 특정 시간 함수 검정 \(g(t)\) 선택이 자의적

실무 권고: 세 도구 모두 를 순차 적용. 시각 → 표준 Schoenfeld → 의심되면 시간 의존 \(\beta\).

5 가정 위배 시 처방

5.1 처방 1 — 계층화 Cox 모형 (Stratified Cox)

공변량 \(z\) 가 비례 가정을 깨는 주범이면, \(z\)각 수준마다 다른 \(\lambda(t)\) 를 허용:

\[h(t; x, z = k) = \lambda_k(t) \exp(\beta^T x), \quad k = 1, \ldots, K.\]

\(z\) 는 모형에서 빠지고 계층 변수 로 사용. 각 계층의 위험집합 이 독립적으로 구성되어 부분 우도가 계층별로 계산되고 곱해진다.

장점: 비례 가정이 깨지는 방향의 효과를 숨긴다 (영향 배제). 단점: \(z\) 자체의 효과는 추정 못 함. 계층 내 공변량 \(x\) 의 효과만 추정.

전형적 사용: 연령을 범주화해 계층으로, 관심 공변량 (치료) 을 모형에.

5.2 처방 2 — 시간 의존 계수

공변량 \(x\) 의 효과가 시간에 따라 변하면:

\[\log h(t; x) = \log \lambda(t) + \beta(t) x, \qquad \beta(t) = \beta_0 + \beta_1 g(t).\]

\(g(t)\) = 선형, 로그 등. 선형 예측자에 \(x\)\(x \cdot g(t)\) 두 항 포함.

계산 주의: 이 모형은 시간 의존 공변량으로 분류되므로 counting process 형식 으로 데이터를 재구성해야 한다. 각 개체가 시간 구간마다 별도 행 으로 들어가고, 구간 안에서 위험집합에 속한다.

5.3 처방 3 — 가속 고장 시간 (AFT) 모형

완전히 다른 모수화: 시간 스케일 자체 를 공변량으로 이동.

\[\log T = \beta^T x + \sigma \epsilon, \qquad \epsilon \sim F_0.\]

\(F_0\) = 표준 오차 분포 (로그 정규, Weibull, 로지스틱 등). 공변량이 생존 시간의 스케일 에 곱셈적 영향:

\[S(t; x) = S_0(t / e^{\beta^T x}).\]

해석: 치료가 생존 시간을 \(e^{\beta_{\text{treat}}}\) 배 연장 (또는 단축).

비례 위험 vs AFT 비교: - PH: 위험비가 일정. 해석 = “얼마나 빠르게 죽을 위험이 오르는가”. - AFT: 시간 배수가 일정. 해석 = “평균 수명이 얼마나 연장되는가”.

Weibull 은 두 모형의 교집합: Weibull PH 와 Weibull AFT 가 같은 모형이다 (다른 모수화).

해석 차이: 임상에서 PH 는 “단기 위험 감소” 를 강조, AFT 는 “장기 수명 연장” 을 강조. 도메인 맥락에 따라 선택.

5.4 언제 어떤 처방을 쓰나

상황 처방
연속 공변량이 비례 위배 시간 의존 \(\beta\)
범주형 공변량이 비례 위배 · 그 공변량은 관심 아님 계층화 Cox
공변량 효과 방향이 시간에 따라 역전 시간 의존 \(\beta\) 또는 교차 항
비례 자체가 생물학적으로 맞지 않음 AFT 전환 고려
효과가 특정 시점 이후 사라짐 시간 의존 \(\beta\) 또는 piecewise 모형

6 \(\lambda(t)\) 의 처리 — 모수적 vs Cox

6.1 모수적 접근 (§13.3)

\(\lambda(t)\) 를 명시적 함수 형태로 가정:

  • 지수: \(\lambda(t) = \lambda\)
  • Weibull: \(\lambda(t) = \alpha t^{\alpha-1}\)
  • 극치값: \(\lambda(t) = \alpha e^{\alpha t}\)
  • 일반 감마, 역 가우시안 등

장점: - 완전한 분포 모형 — 밀도·생존·위험 모두 명시. - 외삽 가능 — 관측 범위 밖 예측. - Aitkin-Clayton 환원 으로 GLM 소프트웨어에서 추정. - 효율 높음 (올바른 분포일 때).

단점: 분포 선택이 틀리면 편향.

6.2 Cox 비모수 접근 (§13.5)

\(\lambda(t)\)아예 추정하지 않고 \(\beta\) 만 추정. 부분 우도 \(L_P(\beta) = \prod \frac{e^{\beta^T x_j}}{\sum_{l \in R(t_j)} e^{\beta^T x_l}}\).

장점: - 분포 가정 불필요\(\lambda(t)\) 가 어떤 형태든 상관없이 \(\beta\) 일치 추정. - 강건 — 분포 오명세에 덜 민감. - 공변량 효과 해석이 명확.

단점: - \(\lambda(t)\)추정 못 함 — 생존 시간의 절대값 예측 어려움. - 외삽 제한. - 사망 시점 개수가 적으면 일부 효율 손실.

6.3 McCullagh-Nelder 의 관찰

실무에서 모수적 \(\lambda(t)\) 와 Cox 의 추정·추론 결과 차이가 놀랍도록 작다” (Ch.13 §13.2 마지막 문장).

이유는 Ch.13 overview (12-1) 에서 언급한 점근 직교성: \(\lambda(t)\) 의 형태 선택이 \(\beta\) 추정에 거의 영향을 주지 않는다. 따라서 Cox 의 \(\lambda(t)\) 포기가 큰 비용이 아니다.

실무 권고:

  1. 예측·외삽이 목적 이면 모수적 (Weibull 이 범용).
  2. 인과 추론·처치 효과 추정 이 목적이면 Cox.
  3. 강건성 확인 을 위해 두 방법 모두 돌려 \(\widehat\beta\) 일치 여부 확인.

7 Python 실전 — 비례 가정 검증

7.1 백혈병 데이터로 log-log 플롯과 Schoenfeld

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Freireich (1963) 백혈병 — 12-1 에서 사용한 데이터
t1 = [6, 6, 6, 6, 7, 9, 10, 10, 11, 13, 16, 17, 19, 20, 22, 23, 25, 32, 32, 34, 35]
w1 = [1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0]
t2 = [1, 1, 2, 2, 3, 4, 4, 5, 5, 8, 8, 8, 8, 11, 11, 12, 12, 15, 17, 22, 23]
w2 = [1] * 21

df = pd.DataFrame({
    'time': t1 + t2,
    'event': w1 + w2,
    'group': ['drug']*21 + ['placebo']*21
})

7.1.1 log-log 생존 플롯

from lifelines import KaplanMeierFitter

fig, ax = plt.subplots(figsize=(8, 5))
kmf = KaplanMeierFitter()

for grp in ['drug', 'placebo']:
    mask = df['group'] == grp
    kmf.fit(df.loc[mask, 'time'], df.loc[mask, 'event'], label=grp)
    S = kmf.survival_function_.iloc[:, 0]
    # log(-log S) 플롯 (S = 0 이나 1 은 제외)
    S_valid = S[(S > 0) & (S < 1)]
    log_log_S = np.log(-np.log(S_valid))
    ax.plot(np.log(S_valid.index), log_log_S, marker='o', label=grp)

ax.set_xlabel(r'$\log t$')
ax.set_ylabel(r'$\log(-\log \hat S(t))$')
ax.set_title('log-log 생존 플롯 — 평행하면 비례 가정 OK')
ax.legend(); ax.grid(alpha=0.3)
plt.show()

해석: 두 곡선이 대략 평행 하면 비례 가정 유효. 교차하거나 확연히 벌어지면 의심.

7.1.2 Schoenfeld 잔차 검정

from lifelines import CoxPHFitter
from lifelines.statistics import proportional_hazard_test

cph = CoxPHFitter()
df_fit = df.copy()
df_fit['group_num'] = (df_fit['group'] == 'placebo').astype(int)
cph.fit(df_fit[['time', 'event', 'group_num']], 'time', 'event')

# Schoenfeld 검정
result = proportional_hazard_test(cph, df_fit[['time', 'event', 'group_num']],
                                   time_transform='rank')
print(result.summary)
# p-value 가 크면 (>0.05) 비례 가정 유지

기대: Freireich 데이터는 PH 가정을 대체로 만족하는 것으로 알려져 있다 (p > 0.1).

7.1.3 시간 의존 \(\beta\) 검정 (수동)

# 확장 모형: β(t) = β_0 + β_1 log(t)
# Counting process 형식으로 데이터 재구성
# (lifelines 의 TimeVaryingCoxFitter 필요)

from lifelines import CoxTimeVaryingFitter
from lifelines.utils import to_long_format, add_covariate_to_timeline

# 원본 데이터를 long format 으로
df_long = to_long_format(df_fit, duration_col='time', event_col='event')
# 시간 의존 공변량 group × log(t) 추가는 복잡 — 생략하고 간단한 확인만

실무에서는 lifelines.CoxTimeVaryingFitter 또는 R survival::coxph(Surv(time, event) ~ group + tt(group), tt=function(x,t,...) x*log(t)) 사용.

8 요약

§13.2 의 핵심 메시지:

8.1 비례 가정의 세 층위

  1. 형식: \(h(t;x) = \lambda(t) \exp\{G(x;\beta)\}\) — 시간과 공변량의 곱셈적 분리.
  2. 기하: \(\log(-\log S)\) 스케일에서 평행 이동 관계.
  3. 추정: \(\widehat\beta\)\(\lambda(t)\) 선택과 점근 직교 — Cox 모수적 동등성.

8.2 실무 체크리스트

[1] 데이터 적합 전: log-log 생존 플롯으로 시각 진단
    │
[2] Cox 적합 후: Schoenfeld 잔차 검정 (cox.zph)
    │
[3] 의심되면: 시간 의존 β 검정 또는 stratified Cox
    │
[4] 일반 의심: AFT 모형과 비교, 추정치 비슷하면 PH 유지

8.3 두 가정의 분리 점검

비례: \(\lambda(t)\) 가 공유되는가? — log-log 평행 검정. 곱셈: \(G\) 가 선형인가? — 교호작용 항 유의성 검정, 비선형 변환 (§11.4).

많은 분석가가 “비례 위배” 라고 할 때 사실 곱셈성 위배 일 수 있다. 두 가정을 분리해서 점검하는 것이 엄밀한 실무.

9 관련 주제

선행 지식

직접 관련 — 진단

관련 개념

후속 주제 — Ch.13 심화

Subscribe

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