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\) 까지 살아남았을 때, 바로 다음 순간 사건이 발생할 조건부 강도) — 를 정의·성질·예제 차원에서 정밀하게 다룬다.
“\(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 정의
생존 분석의 뼈대가 되는 첫 번째 함수.
비음수 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\) 에 대하여:
- 경계 조건: \(S(0) = 1\), \(\lim_{x \to \infty} S(x) = 0\).
- 단조성: \(S\) 는 비증가 (사건이 발생하면 다시 살아 돌아오지 않으므로 — 단조 감소). \(X\) 가 연속이면 strictly decreasing.
- 연속성: \(X\) 가 연속이면 \(S\) 는 연속.
- 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 정의 — 두 가지 형태
비음수 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 가지 관점
- Limit 관점 — \(h(x) \Delta x\) 는 시점 \(x\) 까지 살아남은 개체가 다음 작은 구간 \((x, x+\Delta x)\) 에서 사건을 경험할 근사 확률.
- 조건부 관점 — \(f(x)\) 는 무조건부 (시점 0 에서 본 분포), \(h(x)\) 는 “\(x\) 까지 살았다 (조건)” 라는 정보를 반영한 강도.
- 순간 관점 — \(f(x)\) 가 “시점 \(x\) 에서 사건이 일어날 무조건부 확률밀도” 라면, \(h(x)\) 는 “현재 살아있는 개체 1 명이 단위 시간 안에 사건을 경험할 비율”.
- 역학 관점 — 모집단의 \(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} \]
이 한 줄은 생존 분석의 거의 모든 추론을 떠받친다.
- \(h\) 로 모델링하면 \(S\) 가 자동 도출 — Cox PH 의 추론은 \(h\) 에 모형을 두지만 예측은 \(S\) 로 한다. 식 (2.3.4) 가 다리 역할.
- 데이터로 \(H\) 추정 (Nelson-Aalen) → \(S\) 추정 가능 — Nelson-Aalen 추정량 \(\hat{H}_{NA}(t)\) 으로부터 \(\hat{S}(t) = \exp(-\hat{H}_{NA}(t))\). KM 과 비교 가능 (Klein Ch.4).
- 모형 적합 진단 — 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 형태 — 임상 사례 매핑
- Constant — \(h(x) = \lambda\). memoryless. Exponential 분포. 자연 발생 무관 사건 (방사능 붕괴).
- Increasing (IFR) — wear-out, aging. Weibull \((\alpha > 1)\). 노화 관련 사망, 기계 마모.
- Decreasing (DFR) — burn-in. Weibull \((\alpha < 1)\). 장기 이식 직후, 신생아 (조산 부작용 통과 후 안정).
- Bathtub — 영아 사망 (DFR) → 안정 (constant) → 노화 (IFR). 인구 사망률 의 표준 형태.
- 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} \]
식 (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 가 더 정보적인가?
“\(S\) 와 \(h\) 는 수학적으로 동등하지만, \(h\) 가 분포의 본질을 더 명료하게 드러낸다.”
이유:
- 모양의 다양성: 동일한 \(S\) 라도 (median, 평균이 같아도) hazard 모양은 매우 다를 수 있음. Weibull \(\alpha=0.5\) vs \(\alpha=3\) 예제.
- 메커니즘 식별: bathtub vs hump-shaped 등 hazard 의 모양 자체가 사건 발생의 생물학적/공학적 메커니즘을 시사.
- 모형 비교: \(\ln \hat{H}(x)\) vs \(\ln x\) 의 직선성 으로 Weibull 적합 즉시 진단.
- 회귀 모형: 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))- 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
생존함수
- \(S(x) = \Pr(X > x)\) 정의 + monotone 성질 + \(S(0)=1\), \(S(\infty)=0\).
- 연속/이산 표현 차이.
- \(f(x), F(x)\) 와의 등가관계 (\(S = 1-F\), \(f = -dS/dx\)).
- KM curve 가 \(S\) 의 비모수 추정량.
위험함수
- limit 정의 (조건부 + 순간) → continuous 에서 \(h = f/S = -d\ln S / dx\).
- 6 가지 별칭 (force of mortality, intensity, conditional failure rate, …).
- 단위 = [사건/시간], 확률 아님.
- Hazard 모양 5 가지 (constant·IFR·DFR·bathtub·hump) + 각 임상 사례.
누적위험
- \(H(x) = \int_0^x h\,du = -\ln S(x)\).
- \(S(x) = \exp(-H(x))\).
- Nelson-Aalen 이 \(H\) 의 비모수 추정량.
연결
- 이산 hazard \(h(x_j) = p(x_j)/S(x_{j-1})\).
- Product limit \(S(x) = \prod[1-h(x_j)]\) (KM 의 출생 식).
- IFR / DFR / IFRA 성질.
- Weibull plot (\(\ln \hat{H}\) vs \(\ln x\)) 직선성 → Weibull 적합 진단.
실무 검증
- § 1.2 Leukemia 데이터로 R + Python 모두 KM, NA, smoothed hazard 추정 + \(-\log S \approx H\) 일치 검증 완료.
7 관련 주제
Klein 시리즈
- (이전) Ch.2 overview — Basic Quantities and Models — 7 절 조망
- (다음) § 2.4 심화 — MRL · Median Life (예정)
- (다음) § 2.5 심화 — 9 parametric models (예정)
- (다음) § 2.6~2.7 심화 — Regression + Competing Risks (예정)
Ch.1 시리즈
- Ch.1 시리즈 (overview + 10 deep-dive) — 19 데이터 catalog
- § 1.2 Leukemia (본 편 데이터 출처)
관련 개념 (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.