Klein § 2.2~2.3 — Survival Function and Hazard Function

생존함수 S(x) = P(X > x) 의 정의·성질·이산/연속 표현·Weibull 예제·미국 1989 mortality life table / 위험함수 h(x) = lim P(x ≤ X < x+Δx | X ≥ x) / Δx 의 직관적 의미·6 가지 별칭 (force of mortality·intensity·conditional failure rate)·누적위험 H(x) = -log S(x)·5 가지 hazard 형태 (constant·IFR·DFR·bathtub·hump)·IFR/DFR/IFRA 성질

Klein & Moeschberger Ch.2 의 첫 두 절을 한 편으로 정독한다. 생존 분석의 모든 추정·검정·회귀의 추론 대상이 되는 두 핵심 함수, 생존함수 S(x) 와 위험함수 h(x) 의 수학적 정의·직관·관계. § 2.2 Survival Function: \(S(x) = P(X > x)\) 의 정의와 4 가지 성질 (continuous·monotone decreasing·S(0)=1·S(∞)=0), F(x)·f(x) 와의 등가관계, Weibull \(S(x) = \exp(-\lambda x^\alpha)\) 의 모양, 미국 1989 인종/성별 life table 의 생존곡선, 이산 변수 \(S(x) = \sum_{x_j > x} p(x_j)\). § 2.3 Hazard Function: \(h(x)\) 의 두 가지 정의 (limit form vs \(f/S\)), 누적위험 \(H(x) = -\ln S(x)\)\(S(x) = \exp(-H(x))\) 의 동등 표현, hazard 의 임상적·생물학적 의미 (“환자 의 나이를 알았을 때 다음 순간 사망 확률”), 5 가지 hazard 형태와 임상 사례 (post-transplant DFR·population bathtub·post-surgery hump), Weibull 의 단조 hazard \(h(x) = \alpha\lambda x^{\alpha-1}\), 이산 hazard 와 product limit 표현, IFR/DFR/IFRA 성질, hazard plot 을 이용한 모형 적합 진단. 4 가지 직관 (limit·conditional·instantaneous rate·failure mechanism) + § 1.2 Leukemia 데이터로 R + Python 추정.

Statistics
Survival Analysis
Klein-Moeschberger
Hazard-Function
Cumulative-Hazard
저자

Kwangmin Kim

공개

2026년 04월 27일

1 들어가며 — 두 함수의 위치

Ch.1 시리즈 (overview + 10 deep-dive) 와 Ch.2 overview 에서 4 함수 \(\{S(x), h(x), H(x), m(x)\}\) 의 동등성을 살폈다. 이 편은 그중 가장 본질적인 두 함수 — 생존함수 \(S(x)\) (사건이 시점 \(x\) 이후에 발생할 확률) 와 위험함수 \(h(x)\) (시점 \(x\) 까지 살아남았을 때, 바로 다음 순간 사건이 발생할 조건부 강도) — 를 정의·성질·예제 차원에서 정밀하게 다룬다.

§ 2.2~2.3 의 한 줄 요약

\(S(x)\)\(h(x)\) 는 같은 분포의 두 얼굴이다. \(S\) 는 ’아직 발생하지 않은 비율’을, \(h\) 는 ’바로 지금 발생하는 강도’를 본다. 둘은 \(H(x) = -\ln S(x)\) 라는 한 줄로 연결되며, 어느 한 쪽을 알면 나머지가 자동으로 결정된다.”

항목 \(S(x)\) 생존함수 \(h(x)\) 위험함수
시점 누적 (시점 \(x\) 까지 살아남은 비율) 순간 (시점 \(x\) 의 즉각 강도)
차원 확률 (단위 없음, 0~1) 비율 (단위: 사건/시간)
형태 단조 감소, 1 → 0 비음수, 다양한 모양
직관 “얼마나 살았는가?” “지금 죽을 확률은?”
임상 활용 KM curve, log-rank, group 비교 상대위험 (HR), Cox PH, 메커니즘 추정
추정 (Ch.4~) Kaplan-Meier Nelson-Aalen → kernel smoothing

본 편은 Ch.2 overview 에서 이미 7 절을 한 번 훑은 독자를 대상으로, 그중 § 2.2~2.3 을 수식 한 줄 한 줄의 의미까지 풀어쓰는 deep-dive 다.

2 § 2.2 — 생존함수 \(S(x)\)

2.1 정의

생존 분석의 뼈대가 되는 첫 번째 함수.

정의: 생존함수 (Survival Function)

비음수 random variable \(X\) (사건 시점) 에 대하여,

\[ S(x) = \Pr(X > x) \tag{2.2.1} \]

개체가 시점 \(x\) 를 초과하여 생존할 확률 이다. 신뢰성 공학에서는 동일한 함수를 reliability function 으로 부른다.

2.2 직관 — 누적적 관점

\(S(x)\) 는 “시점 \(x\) 까지 살아남은 비율” 이다. 시간의 함수로 해석하면 — 시간이 흐를수록 일부는 사건을 경험하므로 — 단조 비증가 이다.

일상 비유

\(N=1{,}000\) 명의 환자가 시점 0 에 동시에 임상시험에 등록되었다고 하자.

시점 \(x\) 살아있는 인원 \(S(x)\)
0 1,000 1.000
1 년 850 0.850
5 년 400 0.400
10 년 100 0.100

이 곡선이 KM curve 의 모집단 (true) 버전이다. 표본의 KM 추정량은 이 모집단 곡선의 비모수 추정이다 (Ch.4 에서 본격 다룸).

2.3 4 가지 성질

연속 random variable \(X \geq 0\) 에 대하여:

  1. 경계 조건: \(S(0) = 1\), \(\lim_{x \to \infty} S(x) = 0\).
  2. 단조성: \(S\) 는 비증가 (사건이 발생하면 다시 살아 돌아오지 않으므로 — 단조 감소). \(X\) 가 연속이면 strictly decreasing.
  3. 연속성: \(X\) 가 연속이면 \(S\) 는 연속.
  4. CDF 와의 관계: \(S(x) = 1 - F(x)\), 여기서 \(F(x) = \Pr(X \leq x)\) 는 누적분포함수.
“비증가” 와 “감소” 의 차이

엄밀히 말하면 \(S\)non-increasing 이지 strictly decreasing 이 아니다. 어떤 구간에서 사건이 발생하지 않으면 그 구간에서 \(S\) 는 평탄 (flat) 하다. 연속 분포에서는 모든 점에서 사건이 발생할 가능성이 있으므로 strictly decreasing 이지만, 이산 분포 (또는 KM 추정량) 에서는 사건이 일어난 시점에서만 jump 가 있고 사이는 flat 이다.

2.4 확률밀도함수 와의 관계

생존함수는 PDF 의 적분으로 표현된다.

\[ S(x) = \Pr(X > x) = \int_x^\infty f(t)\, dt \tag{2.2.2} \]

따라서

\[ f(x) = -\frac{dS(x)}{dx} \]

의미

\(f(x)\, dx\) 는 시점 \(x\) 근방의 작은 구간 \((x, x+dx)\) 에서 사건이 발생할 “근사” 확률.

\(S(x)\) 의 기울기 (음 (\(-\)) 부호 포함) 가 \(f(x)\) 라는 점은 KM curve 를 볼 때 직관적으로 와닿는다 — KM 이 가파르게 떨어지는 시점이 사건이 집중되는 시점.

2.5 예제 1 — Weibull 분포

Weibull 분포의 생존함수는 (Klein § 2.5 와 Example 2.1 에서 자세히 다룸):

\[ S(x) = \exp(-\lambda x^\alpha), \quad \lambda > 0,\ \alpha > 0 \]

\(\alpha\) hazard 형태 의미
\(\alpha < 1\) 감소 (DFR) 초기 위험 후 안정화 (post-transplant)
\(\alpha = 1\) 일정 (Exponential 특수 경우) memoryless
\(\alpha > 1\) 증가 (IFR) aging, wear-out

중앙 생존시간이 같지만 \(\alpha\) 가 다른 세 곡선 비교 (Klein Figure 2.1):

  • \(\alpha=0.5,\ \lambda=0.26328\)
  • \(\alpha=1.0,\ \lambda=0.1\)
  • \(\alpha=3.0,\ \lambda=0.00208\)

세 곡선 모두 median 이 6.93 이지만 모양은 매우 다르다. 이 사실은 § 2.3 에서 hazard 형태 차이로 명확히 드러난다.

2.6 예제 2 — 미국 1989 인구 mortality life table

Klein Table 2.1 은 미국 1989 인종 (white/black) × 성별 (male/female) 별 연령 0 ~ 110 세의 \(S(x)\) 값을 제시. 출생 시 \(S(0)=1\) 에서 시작하여 65 세에 다음 정도 (대략):

그룹 \(S(65)\) 해석
White Female 0.85 가장 높은 생존
White Male 0.76
Black Female 0.78
Black Male 0.62 가장 낮은

이 곡선의 기울기 (= \(-f(x)\)) 가 가파른 구간이 사망이 집중되는 구간이지만, 생존곡선만 보고는 “왜 그 구간에 사망이 집중되는가?” 의 메커니즘 (영아 사망 vs 노화) 을 식별하기 어렵다. 이것이 § 2.3 에서 hazard 가 더 정보적이라고 말하는 핵심 이유.

2.7 이산 random variable 의 생존함수

\(X\) 가 이산 (취하는 값 \(x_1 < x_2 < \cdots\)) 이면 PMF \(p(x_j) = \Pr(X = x_j)\) 로부터

\[ S(x) = \Pr(X > x) = \sum_{x_j > x} p(x_j) \]

이산 \(S\)계단함수 (step function) — \(x_j\) 에서 \(p(x_j)\) 만큼 jump down. KM 추정량이 step function 인 이유가 여기서 자연스럽게 도출된다.

3 § 2.3 — 위험함수 \(h(x)\) 와 누적위험 \(H(x)\)

3.1\(S\) 만으로는 부족한가

생존함수는 “얼마나 살았는가” 의 누적적 측면만 보여준다. 그러나 임상에서 진짜 중요한 질문은:

“이미 \(x\) 시점까지 살아온 환자가, 바로 다음 순간 사망할 확률은 얼마인가?”

이는 조건부 (conditional) · 순간적 (instantaneous) 측면이다. 이 정보를 담는 함수가 hazard.

3.2 정의 — 두 가지 형태

정의: 위험함수 (Hazard Function)

비음수 random variable \(X\) 에 대하여 위험함수는 다음과 같이 정의된다 (limit form):

\[ h(x) = \lim_{\Delta x \to 0} \frac{\Pr[x \leq X < x + \Delta x \mid X \geq x]}{\Delta x} \tag{2.3.1} \]

\(X\) 가 연속 random variable 이면

\[ h(x) = \frac{f(x)}{S(x)} = -\frac{d\ln S(x)}{dx} \tag{2.3.2} \]

3.3 별칭 6 가지

같은 함수 가 분야마다 다른 이름으로 불린다.

분야 이름
신뢰성 공학 (reliability) conditional failure rate
인구학 (demography) force of mortality
확률과정 (stochastic process) intensity function
역학 (epidemiology) age-specific failure rate
경제학 (economics) inverse of Mill’s ratio
통계학 일반 hazard rate
학제 간 통일 의의

생존 분석의 진짜 힘은 — 암 임상시험·기계 고장·실업 기간·결혼 지속·고객 이탈·금융 부도 가 모두 동일한 수학적 framework (즉 hazard rate 모델링) 으로 다뤄진다는 데 있다. Cox 1972 PH 모델이 단일 paper 로 50 년간 거의 모든 응용을 통일한 이유.

3.4 직관 — 4 가지 관점

  1. Limit 관점\(h(x) \Delta x\) 는 시점 \(x\) 까지 살아남은 개체가 다음 작은 구간 \((x, x+\Delta x)\) 에서 사건을 경험할 근사 확률.
  2. 조건부 관점\(f(x)\) 는 무조건부 (시점 0 에서 본 분포), \(h(x)\) 는 “\(x\) 까지 살았다 (조건)” 라는 정보를 반영한 강도.
  3. 순간 관점\(f(x)\) 가 “시점 \(x\) 에서 사건이 일어날 무조건부 확률밀도” 라면, \(h(x)\) 는 “현재 살아있는 개체 1 명이 단위 시간 안에 사건을 경험할 비율”.
  4. 역학 관점 — 모집단의 \(h(x)\) 는 시점 \(x\) 의 “단위 시간당 사건 발생률” — 100,000 명 × 시간당 발병 건수 같은 단위.
자동차 비유

\(f(x)\) = 자동차 100 만 대의 출고 후 시점 \(x\) 의 사고 발생 (절대) 비율.

\(h(x)\) = 시점 \(x\) 까지 사고 없이 운행 중인 자동차의 사고 발생 비율 (조건부).

새 차일수록 절대 사고 수는 많지만 (\(f\) 大), 살아남은 차들 사이에서 보면 노후 차일수록 사고율이 더 높다 (\(h\) 증가). 두 함수는 다른 정보를 준다.

3.5 \(h(x) = f(x)/S(x)\) 유도

\(\Pr[A \mid B] = \Pr[A \cap B] / \Pr[B]\) 적용:

\[ \begin{aligned} \Pr[x \leq X < x+\Delta x \mid X \geq x] &= \frac{\Pr[x \leq X < x+\Delta x \cap X \geq x]}{\Pr[X \geq x]} \\ &= \frac{\Pr[x \leq X < x+\Delta x]}{S(x^-)} \end{aligned} \]

연속 변수에서 \(S(x^-) = S(x)\) 이고 \(\Pr[x \leq X < x + \Delta x] = f(x) \Delta x + o(\Delta x)\). 양변을 \(\Delta x\) 로 나누고 \(\Delta x \to 0\):

\[ h(x) = \frac{f(x)}{S(x)} \]

추가로 \(f(x) = -dS(x)/dx\) 를 대입하면

\[ h(x) = -\frac{1}{S(x)} \cdot \frac{dS(x)}{dx} = -\frac{d\ln S(x)}{dx} \]

3.6 누적위험 \(H(x)\)\(S(x)\) 의 표현

누적위험함수 (cumulative hazard function)

\[ H(x) = \int_0^x h(u)\, du \tag{2.3.3} \]

\(h(x) = -d\ln S(x)/dx\) 의 양변을 적분 (그리고 \(\ln S(0) = 0\) 사용):

\[ H(x) = -\int_0^x \frac{d\ln S(u)}{du}\, du = -\ln S(x) + \ln S(0) = -\ln S(x) \]

따라서

\[ \boxed{S(x) = \exp(-H(x)) = \exp\!\left[-\int_0^x h(u)\, du\right]} \tag{2.3.4} \]

식 (2.3.4) 의 의의

이 한 줄은 생존 분석의 거의 모든 추론을 떠받친다.

  1. \(h\) 로 모델링하면 \(S\) 가 자동 도출 — Cox PH 의 추론은 \(h\) 에 모형을 두지만 예측은 \(S\) 로 한다. 식 (2.3.4) 가 다리 역할.
  2. 데이터로 \(H\) 추정 (Nelson-Aalen) → \(S\) 추정 가능 — Nelson-Aalen 추정량 \(\hat{H}_{NA}(t)\) 으로부터 \(\hat{S}(t) = \exp(-\hat{H}_{NA}(t))\). KM 과 비교 가능 (Klein Ch.4).
  3. 모형 적합 진단 — Weibull 이면 \(H(x) = \lambda x^\alpha\), 따라서 \(\ln H(x)\) vs \(\ln x\) 가 직선 (slope \(\alpha\), intercept \(\ln \lambda\)). 데이터의 \(\hat{H}\) 으로 plot 그려 직선성 검증 (Klein § 12.5).

3.7 Hazard 의 단위와 임상적 해석

\(h(x)\) 의 단위는 [사건 / 시간]. 예를 들어 \(h(x) = 0.05\) /year 라면 — 시점 \(x\) 까지 살아남은 환자 100 명 중 다음 1 년 동안 약 5 명이 사건을 경험.

실무 환산 예제
  • 모집단 hazard \(h = 0.02\)/month
  • 6 개월 동안 시점 \(t=12\) 에서의 누적 사건 발생: \(1 - \exp(-0.02 \times 6) \approx 0.114 \to 11.4\%\)
  • “1 년 안에 11% 가 사건을 경험”

이 숫자가 임상 의사가 환자에게 “1 년 안에 11% 정도 재발 가능성이 있습니다” 라고 설명하는 근거.

3.8 5 가지 hazard 형태 — 임상 사례 매핑

Klein Figure 2.4 의 5 형태
  1. Constant\(h(x) = \lambda\). memoryless. Exponential 분포. 자연 발생 무관 사건 (방사능 붕괴).
  2. Increasing (IFR) — wear-out, aging. Weibull \((\alpha > 1)\). 노화 관련 사망, 기계 마모.
  3. Decreasing (DFR) — burn-in. Weibull \((\alpha < 1)\). 장기 이식 직후, 신생아 (조산 부작용 통과 후 안정).
  4. Bathtub — 영아 사망 (DFR) → 안정 (constant) → 노화 (IFR). 인구 사망률 의 표준 형태.
  5. Hump-shaped — 수술 직후 (감염·출혈 위험 증가) → 회복 (위험 감소). post-surgery survival, transplant rejection.
형태 해석 임상/공학 사례 적합 분포
Constant 시점 무관 강도 방사능 붕괴 Exponential
IFR 노화 가속 기계 마모, 노년 사망 Weibull (\(\alpha > 1\)), Gompertz
DFR 초기 고위험 후 회복 post-transplant 첫 6 개월 Weibull (\(\alpha < 1\))
Bathtub 출생 → 안정 → 노화 인구 mortality (US 1989) piecewise / Generalized gamma
Hump 수술 → 회복 post-surgery, GVHD 첫 100 일 Log-normal, Log-logistic

3.9 Weibull hazard — 직접 계산

Weibull \(S(x) = \exp(-\lambda x^\alpha)\) 에서 \(h(x)\) 도출:

\[ h(x) = -\frac{d\ln S(x)}{dx} = -\frac{d}{dx}(-\lambda x^\alpha) = \alpha \lambda x^{\alpha-1} \]

\(\alpha\) \(h(x)\) 형태 sketch
\(\alpha = 0.5\) \(0.5 \lambda x^{-0.5}\) — 감소 \(1/\sqrt{x}\) 모양, \(x \to 0\) 에서 \(\infty\)
\(\alpha = 1\) \(\lambda\) — 일정 수평선
\(\alpha = 3\) \(3\lambda x^2\) — 증가 포물선처럼 가파르게 상승

세 곡선 모두 동일한 median 6.93 을 갖지만, hazard 의 모양은 완전히 다르다. 이 사실이 “\(S\) 만 보면 분포의 본질적 차이를 놓친다” 는 hazard 의 첫 정당화.

3.10 미국 1989 mortality hazard (bathtub 의 정전 예시)

Klein Figure 2.6:

  • 0~5 세: 영아·유아 감염병으로 인한 높은 hazard, 그 후 빠르게 감소.
  • 5~30 세: 매우 낮은 안정적 hazard (사고·자살 외의 자연 사망 거의 없음).
  • 30~80 세: 노화에 따라 점진적으로 증가 (지수적 — Gompertz 와 잘 일치).
  • 그룹 차이: white female < white male < black female < black male — 인종/성별 격차 가 hazard 형태에서 명확히 보임.

3.11 이산 random variable 의 hazard

\(X\) 가 이산 (가능 값 \(x_1 < x_2 < \cdots\)) 이면 limit 정의가 적용 불가. 대신:

\[ h(x_j) = \Pr(X = x_j \mid X \geq x_j) = \frac{p(x_j)}{S(x_{j-1})}, \quad j=1,2,\ldots \tag{2.3.5} \]

여기서 \(S(x_0) = 1\) 약속. \(p(x_j) = S(x_{j-1}) - S(x_j)\) 를 대입하면:

\[ h(x_j) = 1 - \frac{S(x_j)}{S(x_{j-1})} \]

조건부 확률 (각 시점에서 죽을 확률) 로 재해석된다. 이로부터 product limit 표현:

\[ S(x) = \prod_{x_j \leq x} \frac{S(x_j)}{S(x_{j-1})} = \prod_{x_j \leq x}\bigl[1 - h(x_j)\bigr] \tag{2.3.7} \]

Kaplan-Meier 의 출생 식

식 (2.3.7) 이 바로 Kaplan-Meier estimator 의 모집단 (true) 형태:

\[ \hat{S}_{KM}(t) = \prod_{t_i \leq t}\left(1 - \frac{d_i}{n_i}\right) \]

여기서 \(\hat{h}(t_i) = d_i / n_i\) 는 시점 \(t_i\) 의 비모수 hazard 추정 (사건 수 / 위험 집합 크기). KM 은 식 (2.3.7) 의 표본 버전 — Ch.4 에서 본격 다룬다.

3.12 이산 H — 두 가지 정의

연속 변수에서 \(H(x) = -\ln S(x)\) 가 자연스럽지만, 이산 변수에서는 두 정의가 서로 다른 결과를 준다.

정의 추정
Klein 채택 (식 2.3.8) \(H(x) = \sum_{x_j \leq x} h(x_j)\) Nelson-Aalen 의 자연 형태
Cox-Oakes 채택 (식 2.3.9) \(H(x) = -\sum_{x_j \leq x} \ln[1 - h(x_j)]\) \(S(x) = \exp(-H(x))\) 보존

\(h(x_j)\) 가 작으면 \(\ln(1-h) \approx -h\) 이므로 두 정의는 거의 같다. Klein 의 (2.3.8) 채택 이유: Nelson-Aalen 추정량 이 sum form 이고 통계적 성질 (consistency, asymptotic normality) 이 깔끔.

3.13 IFR / DFR / IFRA 성질

분포의 hazard 가 가지는 정성적 성질에 이름이 있다.

  • IFR (Increasing Failure Rate): \(h(x)\)\(x \geq 0\) 에서 비감소.
  • DFR (Decreasing Failure Rate): \(h(x)\)\(x \geq 0\) 에서 비증가.
  • IFRA (IFR Average): \(H(x)/x\)\(x > 0\) 에서 비감소. IFR ⇒ IFRA, 역은 일반적으로 거짓.
실용 분류
분포 성질
Exponential constant — IFR & DFR 둘 다 (경계)
Weibull \((\alpha \geq 1)\) IFR
Weibull \((\alpha \leq 1)\) DFR
Gompertz IFR
Log-normal non-monotone (먼저 증가 후 감소) — IFR/DFR 어느 쪽도 아님
Log-logistic \((\alpha > 1)\) non-monotone

이런 성질을 알면 데이터의 hazard 모양을 보고 적합 후보를 바로 좁힐 수 있다.

4 직관 통합 — 왜 hazard 가 더 정보적인가?

Klein Practical Note 의 핵심 주장

\(S\)\(h\) 는 수학적으로 동등하지만, \(h\) 가 분포의 본질을 더 명료하게 드러낸다.”

이유:

  1. 모양의 다양성: 동일한 \(S\) 라도 (median, 평균이 같아도) hazard 모양은 매우 다를 수 있음. Weibull \(\alpha=0.5\) vs \(\alpha=3\) 예제.
  2. 메커니즘 식별: bathtub vs hump-shaped 등 hazard 의 모양 자체가 사건 발생의 생물학적/공학적 메커니즘을 시사.
  3. 모형 비교: \(\ln \hat{H}(x)\) vs \(\ln x\) 의 직선성 으로 Weibull 적합 즉시 진단.
  4. 회귀 모형: Cox PH 의 추론은 \(h\) 에 곱셈 구조 (\(h(t|Z) = h_0(t) \exp(\beta'Z)\)) 를 두는 것이 자연 (생물학적 효과는 강도의 변화로 이해됨).
의사결정 흐름
관찰: KM curve $\hat{S}(t)$ 와 Nelson-Aalen $\hat{H}(t)$ 추정
   ↓
hazard 모양 평가 (smoothing 또는 $H$ 의 미분 / Weibull plot)
   ↓
모양에 따른 분포 후보:
   constant → Exponential
   IFR (단조 증가) → Weibull (α>1) / Gompertz
   DFR (단조 감소) → Weibull (α<1)
   bathtub → piecewise / generalized gamma
   hump → log-normal / log-logistic
   ↓
parametric AFT/PH fit (Klein Ch.12) 또는 Cox PH (Ch.8) 진행

5 R + Python — § 1.2 Leukemia 데이터로 \(S\), \(H\), \(h\) 추정

Klein Ch.1 § 1.2 의 Freireich 1963 6-MP vs placebo 백혈병 임상시험 21 pair × 2 데이터로 세 함수를 추정 비교.

5.1 R — survival + muhaz

library(survival)
library(muhaz)
library(ggplot2)
library(gridExtra)

# Klein Table 1.1: Freireich 1963 6-MP vs placebo
leukemia <- data.frame(
  time = c(1, 22, 3, 12, 8, 17, 2, 11, 8, 12, 2, 5, 4, 15, 8, 23, 5, 11, 4, 1, 8,
           10, 7, 32, 23, 22, 6, 16, 34, 32, 25, 11, 20, 19, 6, 17, 35, 6, 13, 9, 6, 10),
  status = c(rep(1, 21), 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0),
  group = factor(c(rep("placebo", 21), rep("6-MP", 21)),
                 levels = c("placebo", "6-MP"))
)

# 1. 생존함수 — KM
fit_km <- survfit(Surv(time, status) ~ group, data = leukemia)

# 2. 누적위험 — Nelson-Aalen (= -log KM 의 표준 형태)
fit_na <- survfit(Surv(time, status) ~ group, data = leukemia, type = "fh")

# 3. hazard rate — kernel smoothing
haz_p <- muhaz(leukemia$time[leukemia$group == "placebo"],
               leukemia$status[leukemia$group == "placebo"],
               max.time = 25, bw.method = "global")
haz_m <- muhaz(leukemia$time[leukemia$group == "6-MP"],
               leukemia$status[leukemia$group == "6-MP"],
               max.time = 35, bw.method = "global")

# 시각화
par(mfrow = c(1, 3))
plot(fit_km, col = c("red", "blue"), lwd = 2,
     xlab = "Time (weeks)", ylab = "S(t)", main = "Survival function")
plot(fit_na, col = c("red", "blue"), lwd = 2, fun = "cumhaz",
     xlab = "Time (weeks)", ylab = "H(t)", main = "Cumulative hazard")
plot(haz_p, col = "red", lwd = 2, ylim = c(0, 0.3),
     xlab = "Time (weeks)", ylab = "h(t)", main = "Hazard rate")
lines(haz_m, col = "blue", lwd = 2)
legend("topright", legend = c("placebo", "6-MP"),
       col = c("red", "blue"), lwd = 2)

# 핵심 수식 검증
# H(t) = -log S(t) — KM 과 NA 추정량의 동등성 (대수 표본에서)
ts <- c(5, 10, 15, 20)
S_km <- summary(fit_km, times = ts)$surv
H_na <- summary(fit_na, times = ts)$cumhaz
data.frame(
  time = rep(ts, each = 2),
  group = rep(c("6-MP", "placebo"), length(ts)),
  S_KM = S_km,
  neg_log_S = -log(S_km),
  H_NA = H_na
)

5.2 Python — lifelines + scipy.stats

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from lifelines import KaplanMeierFitter, NelsonAalenFitter

# Klein Table 1.1: Freireich 1963 데이터
leukemia = pd.DataFrame({
    "time": [1, 22, 3, 12, 8, 17, 2, 11, 8, 12, 2, 5, 4, 15, 8, 23, 5, 11, 4, 1, 8,
             10, 7, 32, 23, 22, 6, 16, 34, 32, 25, 11, 20, 19, 6, 17, 35, 6, 13, 9, 6, 10],
    "status": [1]*21 + [1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0],
    "group": ["placebo"]*21 + ["6-MP"]*21,
})

fig, axes = plt.subplots(1, 3, figsize=(18, 5))

# 1. 생존함수 — KM
for grp, color in [("placebo", "red"), ("6-MP", "blue")]:
    sub = leukemia[leukemia["group"] == grp]
    kmf = KaplanMeierFitter()
    kmf.fit(sub["time"], sub["status"], label=grp)
    kmf.plot_survival_function(ax=axes[0], color=color, ci_show=True)
axes[0].set_title("S(t) — Kaplan-Meier")
axes[0].set_xlabel("Time (weeks)")
axes[0].set_ylabel("Survival probability")

# 2. 누적위험 — Nelson-Aalen
for grp, color in [("placebo", "red"), ("6-MP", "blue")]:
    sub = leukemia[leukemia["group"] == grp]
    naf = NelsonAalenFitter()
    naf.fit(sub["time"], sub["status"], label=grp)
    naf.plot_cumulative_hazard(ax=axes[1], color=color, ci_show=True)
axes[1].set_title("H(t) — Nelson-Aalen")
axes[1].set_xlabel("Time (weeks)")
axes[1].set_ylabel("Cumulative hazard")

# 3. hazard rate — Nelson-Aalen + smoothing (Epanechnikov kernel)
for grp, color in [("placebo", "red"), ("6-MP", "blue")]:
    sub = leukemia[leukemia["group"] == grp]
    naf = NelsonAalenFitter()
    naf.fit(sub["time"], sub["status"])
    naf.plot_hazard(bandwidth=2.0, ax=axes[2], color=color, label=grp)
axes[2].set_title("h(t) — smoothed hazard rate")
axes[2].set_xlabel("Time (weeks)")
axes[2].set_ylabel("Hazard rate")

plt.tight_layout()
plt.savefig("klein_2_2_3_survival_hazard.png", dpi=100)

# H(t) = -log S(t) 검증 표
times = [5, 10, 15, 20]
results = []
for grp in ["placebo", "6-MP"]:
    sub = leukemia[leukemia["group"] == grp]
    kmf = KaplanMeierFitter().fit(sub["time"], sub["status"])
    naf = NelsonAalenFitter().fit(sub["time"], sub["status"])
    for t in times:
        S_t = float(kmf.predict(t))
        H_t = float(naf.predict(t))
        results.append({
            "group": grp, "time": t,
            "S(t)": round(S_t, 4),
            "-log S(t)": round(-np.log(S_t) if S_t > 0 else np.nan, 4),
            "H_NA(t)": round(H_t, 4)
        })
print(pd.DataFrame(results).to_string(index=False))
결과 해석 — Leukemia 데이터에서 무엇이 보이나?
  • Survival: 6-MP 그룹의 \(S\) 가 placebo 보다 위에 있음 — 약효 명확.
  • Cumulative hazard: 6-MP 의 \(H\) 가 더 평탄하게 증가 — 동일한 정보의 다른 시각화.
  • Hazard rate: placebo 는 약 5~10 주에 hump (가장 위험), 6-MP 는 거의 일정하거나 약간 증가. 이 정보는 \(S\) 만 봐서는 식별 불가.
  • 검증: \(-\log S(t) \approx H_{NA}(t)\) 가 잘 일치 (작은 jump 차이는 product limit vs sum 차이).

6 실전 체크리스트 — § 2.2~2.3

생존함수

  1. \(S(x) = \Pr(X > x)\) 정의 + monotone 성질 + \(S(0)=1\), \(S(\infty)=0\).
  2. 연속/이산 표현 차이.
  3. \(f(x), F(x)\) 와의 등가관계 (\(S = 1-F\), \(f = -dS/dx\)).
  4. KM curve 가 \(S\) 의 비모수 추정량.

위험함수

  1. limit 정의 (조건부 + 순간) → continuous 에서 \(h = f/S = -d\ln S / dx\).
  2. 6 가지 별칭 (force of mortality, intensity, conditional failure rate, …).
  3. 단위 = [사건/시간], 확률 아님.
  4. Hazard 모양 5 가지 (constant·IFR·DFR·bathtub·hump) + 각 임상 사례.

누적위험

  1. \(H(x) = \int_0^x h\,du = -\ln S(x)\).
  2. \(S(x) = \exp(-H(x))\).
  3. Nelson-Aalen 이 \(H\) 의 비모수 추정량.

연결

  1. 이산 hazard \(h(x_j) = p(x_j)/S(x_{j-1})\).
  2. Product limit \(S(x) = \prod[1-h(x_j)]\) (KM 의 출생 식).
  3. IFR / DFR / IFRA 성질.
  4. Weibull plot (\(\ln \hat{H}\) vs \(\ln x\)) 직선성 → Weibull 적합 진단.

실무 검증

  1. § 1.2 Leukemia 데이터로 R + Python 모두 KM, NA, smoothed hazard 추정 + \(-\log S \approx H\) 일치 검증 완료.

7 관련 주제

Klein 시리즈

Ch.1 시리즈

관련 개념 (cross-category)

8 참고문헌

  • Klein, J. P., & Moeschberger, M. L. (2003). Survival Analysis: Techniques for Censored and Truncated Data (2nd ed.), Ch.2 § 2.2~2.3, pp. 22-32. Springer.
  • Cox, D. R., & Oakes, D. (1984). Analysis of Survival Data. Chapman & Hall.
  • Nelson, W. (1982). Applied Life Data Analysis. Wiley.
  • Aalen, O. O., Borgan, Ø., & Gjessing, H. K. (2008). Survival and Event History Analysis: A Process Point of View. Springer.
  • Kalbfleisch, J. D., & Prentice, R. L. (2002). The Statistical Analysis of Failure Time Data, 2nd ed. Wiley.
  • Lawless, J. F. (2003). Statistical Models and Methods for Lifetime Data, 2nd ed. Wiley.
  • Müller, H.-G., & Wang, J.-L. (1994). Hazard Rate Estimation Under Random Censoring with Varying Kernels and Bandwidths. Biometrics, 50(1), 61-76. (muhaz 의 이론적 기반)
  • Davidson-Pilon, C. (2019). lifelines. JOSS, 4(40), 1317.
  • Therneau, T. M., & Grambsch, P. M. (2000). Modeling Survival Data: Extending the Cox Model. Springer.

Subscribe

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