Klein § 7.1~7.2 — One-Sample Log-Rank Test

§ 7.1 NA 기반 가중 차이 framework — 모든 검정의 통일 (관측 사건수 - 기대 사건수 의 가중 합) / § 7.2 One-Sample Test — H_0: h(t) = h_0(t) (사전 지정 hazard) / 핵심 식 7.2.1 Z(τ) = ∑ W(t_i) d_i/Y(t_i) - ∫ W(s) h_0(s) ds + 분산 식 7.2.2 / Log-rank weight W = Y(t) → 식 7.2.3·7.2.4 의 단순 형태 — Z = O - E, V = E = ∑[H_0(T_j) - H_0(L_j)] / Harrington-Fleming family W_HF = Y(t) S_0(t)^p [1-S_0(t)]^q (W_HF 가 W=Y S_0 면 Wilcoxon, p=q=0 면 log-rank) / Klein Example 7.1 Iowa psychiatric 26명 (Klein § 1.15) Table 7.1 모든 행 손풀이 — 1959-1961 Iowa state mortality 와 비교 + age at entry/exit 좌절단 + sex-specific λ + O = 15 사건 + E = 4.474 기대 → χ² = 24.76 (p ≈ 0) — § 6.3 의 β ≈ 25 추정과 통계적 검정 일치 / SMR = O/E 의 시간 변동 일반화 / Counting process 도출 (Aalen 1975, Theoretical Note 2)

Klein & Moeschberger Ch.7 의 § 7.1 (Introduction) + § 7.2 (One-Sample Tests) 를 정전 깊이로 풀어낸다. Ch.7 첫 번째 deep-dive — Ch.4·5·6 의 NA framework 를 검정으로 확장하는 첫 단계. § 7.1 — Introduction: NA 기반 가중 차이 framework. 모든 hypothesis testing 이 “관측 사건수 - 기대 사건수 의 가중 합” 의 동일 구조 — Ch.7 의 7 절 모두 (one-sample, K-sample, trend, stratified, Renyi, CvM, fixed-time) 가 같은 출발점. § 7.2 — One-Sample Test: \(H_0\): 표본의 hazard \(h(t) = h_0(t)\) for all \(t \leq \tau\), 사전 지정된 \(h_0(t)\) (보통 표준 인구 mortality table). 식 7.2.1 의 일반 통계량 \(Z(\tau) = \sum W(t_i) d_i/Y(t_i) - \int W(s) h_0(s) ds\) + 분산 식 7.2.2 \(V = \int W^2 h_0/Y \, ds\). 큰 표본에서 \(Z^2/V \sim \chi^2_1\) (양측), \(Z/\sqrt{V} \sim N(0,1)\) (단측). Log-rank weight \(W = Y(t)\) 의 단순 형태 (식 7.2.3·7.2.4): \(Z(\tau) = O(\tau) - E(\tau)\) where \(O\) = 관측 사건수, \(E = V = \sum_{j=1}^n [H_0(T_j) - H_0(L_j)]\) (좌절단 + 우측 censoring 모두 처리). → “관측 - 기대” 의 단순 z-test. Harrington-Fleming family: \(W_{HF}(t) = Y(t) S_0(t)^p [1-S_0(t)]^q\). \(p = q = 0\) → log-rank, \(p = 1, q = 0\) → 초기 차이 강조 (Wilcoxon-like), \(p = 0, q = 1\) → 후기 차이 강조, \(p = q > 0\) → 중간 강조. \(W = Y S_0\) 가 logistic shift alternative 의 LMP test (Theoretical Note 1). Klein Example 7.1 Iowa psychiatric 26 명 (§ 1.15) 의 손풀이: 1959-1961 Iowa state mortality table 의 sex-specific \(\lambda\) 사용. \(\theta_j(t) = \lambda_S(a_j + t)\), age at entry \(L_j\), age at exit \(T_j\). Klein Table 7.1 의 26 행 \(H_0(L_j)\) + \(H_0(T_j)\) + 차이 \(H_0(T_j) - H_0(L_j)\) 직접 계산. 합 \(E(71) = 4.4740\). 관측 사건수 \(O = 15\). \(\chi^2 = (15 - 4.474)^2/4.474 = 24.76\), \(p \approx 0\). → § 6.3 의 excess mortality (B̂(2) ≈ 25) 와 통계적 검정으로 정확히 일치. 추정-검정 의 자연 연결. SMR = O/E 의 시간-변동 일반화 (Practical Note 2): Breslow 1975 의 단일 SMR 이 시간 일정 가정. Z(τ) 가 자연스럽게 시간 변동 처리. Gatsonis et al. (1985) 의 weight 대안 (Practical Note 3): \(W = (1 + \log[1-S_0]/S_0) Y(t)\). Counting process 도출 (Theoretical Note 2, Aalen 1975): \(\int [J/Y] dN - \int J h_0 du\) 가 martingale + \(Z(\tau)\) 가 stochastic integral + martingale CLT 로 점근 정규성 도출. § 3.6 framework 의 직접 적용. Hyde (1977) 와 Woolson (1981) 의 좌절단 일반화 (Theoretical Note 3): 식 7.2.4 의 \(H_0(L_j)\) 항이 좌절단 처리.

Statistics
Survival Analysis
Klein-Moeschberger
Log-Rank-Test
One-Sample-Test
SMR
Hypothesis-Testing
저자

Kwangmin Kim

공개

2026년 04월 28일

1 들어가며 — Ch.7 첫 번째 deep-dive

주제
Ch.7 Overview 9 절 조망
§ 7.1~7.2 (본 편) NA 기반 framework + One-Sample Log-Rank
§ 7.3 (예정) K-sample tests (6 weight 가족)
§ 7.4~7.5 (예정) Trend + Stratified
§ 7.6~7.8 (예정) Renyi · CvM · 그 외
§ 7.9 (예정) Exercises
§ 7.1~7.2 의 한 줄 요약

“§ 7.1 의 NA 기반 가중 차이 framework — 관측 사건수 \(O\) - 기대 사건수 \(E\) 의 가중 합 — 이 Ch.7 의 모든 검정의 통일 출발점. § 7.2 의 one-sample log-rank (\(W = Y(t)\)) 가 가장 단순한 형태: \(Z(\tau) = O(\tau) - E(\tau)\), \(V = E\), \(\chi^2 = (O-E)^2/E\). Klein Example 7.1 의 Iowa psychiatric 26 명 → \(O = 15\), \(E = 4.47\)\(\chi^2 = 24.76\), \(p \approx 0\) — § 6.3 의 추정 (β ≈ 25) 과 통계적 검정으로 일치. 추정과 검정의 자연스러운 연결.”

2 § 7.1 — Introduction

2.1 NA 기반 가중 차이 Framework

직관 — 모든 검정의 통일된 구조

Ch.4·5·6 의 NA 추정량 \(\widetilde{H}(t) = \sum d_i/Y_i\)모든 검정의 출발점.

검정의 핵심 idea:

  • 데이터에서 직접 추정한 hazard: \(\Delta\widetilde{H}(t_i) = d_i/Y_i\) (관측).
  • \(H_0\) 가정 하 기대 hazard: \(h_0(t_i)\) 또는 다른 군의 hazard 평균.
  • 둘의 차이 \(\Delta\widetilde{H}(t_i) - h_0(t_i)\) 를 가중 합산 → 검정 통계량.

Ch.7 의 통일 framework:

\[ Z(\tau) = \sum_i W(t_i) [\text{관측 hazard 추정} - \text{기대 hazard}] \]

  • \(W(t)\): weight function — 시점별 검정력 분배.
  • “관측 - 기대” 는 모든 검정 공통.
  • 차이는 weight 와 비교 대상 (one-sample vs K-sample).
정의: Ch.7 의 통일 framework
비교 대상 Weight 선택
§ 7.2 \(h_0(t)\) (사전 지정) \(W = Y(t)\) (log-rank) 또는 HF
§ 7.3 다른 군 (K-sample) 6 weight 가족
§ 7.4 다른 군 (ordered) 점수 \(a_j\)
§ 7.5 다른 군 (stratified) 동일 + strata 합산
§ 7.6 다른 군 (sup) \(\sup_t |Z(t)|\)
§ 7.7 다른 군 (적분) CvM, KM-based, median
§ 7.8 다른 군 (단일 시점) \(S_1(t_0) - S_2(t_0)\)

모두 NA framework 의 변형. § 7.2 가 가장 단순한 출발점.

직관 — Cox PH (Ch.8) 와의 연결

Ch.8 의 Cox PH partial likelihood 의 score test 는 log-rank 검정과 동등.

\[ \frac{\partial \log L_{\text{partial}}}{\partial \beta}\bigg|_{\beta=0} = Z_{\text{log-rank}}(\tau) \]

→ Ch.7 의 비모수 검정이 Ch.8 의 모수적 회귀의 자연스러운 연장. 두 framework 의 동일 출발점.

3 § 7.2 — One-Sample Test

3.1 일반 검정 통계량

정의: One-Sample Weighted Test (식 7.2.1)

표본 크기 \(n\) 의 right-censored (또는 left-truncated) 데이터.

\(H_0\): 표본의 hazard \(h(t) = h_0(t)\) for all \(t \leq \tau\), 사전 지정된 \(h_0(t)\).

검정 통계량:

\[ Z(\tau) = \sum_{i=1}^D W(t_i) \frac{d_i}{Y(t_i)} - \int_0^\tau W(s) h_0(s) ds \]

분산 (식 7.2.2):

\[ V[Z(\tau)] = \int_0^\tau W^2(s) \frac{h_0(s)}{Y(s)} ds \]

  • 양측 검정: \(Z^2/V \sim \chi^2_1\) (큰 표본).
  • 단측 검정 (\(H_A\): \(h(t) > h_0(t)\)): \(Z/\sqrt{V} \sim N(0, 1)\).
직관 — 식 7.2.1 의 의미

첫 항 \(\sum W(t_i) d_i/Y(t_i)\):

  • \(d_i/Y(t_i)\): \(t_i\) 시점 hazard 의 거친 추정 (NA 점프).
  • \(W(t_i)\): 시점 가중.
  • 합산: 데이터가 보여주는 가중 cumulative hazard.

두 번째 항 \(\int W h_0 ds\):

  • \(H_0\) 가정 하 \(h_0(s)\) 의 가중 적분.
  • “표준 인구 가정 시 기대되는 가중 cumulative hazard”.

차이 \(Z(\tau)\) = 관측 - 기대 (가중 cumulative hazard 의 차이).

\(Z = 0\) 이면 \(H_0\) 와 일치, \(Z \neq 0\) 이면 \(H_0\) 와 차이 있음.

3.2 Log-Rank Weight (W = Y(t))

정의: One-Sample Log-Rank (식 7.2.3·7.2.4)

\(W(t) = Y(t)\) 선택, \(\tau\) = 마지막 관측 시점.

  • 관측 사건수: \(O(\tau) = \sum_i d_i\) = 전체 사건 수 (data 직접).
  • 기대 사건수 = 분산: \(E(\tau) = V[Z(\tau)] = \sum_{j=1}^n [H_0(T_j) - H_0(L_j)]\).

여기서 \(T_j\) = 개체 \(j\) 의 study time, \(L_j\) = 좌절단 entry time (없으면 0).

검정 통계량:

\[ \chi^2 = \frac{(O - E)^2}{E} \]

→ 큰 표본에서 \(\chi^2_1\).

직관 — 식 7.2.3·7.2.4 도출

첫 항 \(\sum W d_i/Y\) with \(W = Y\):

\[ \sum Y(t_i) \cdot \frac{d_i}{Y(t_i)} = \sum d_i = \text{전체 사건 수} = O(\tau) \]

→ Weight \(Y\) 가 분모 \(Y\) 를 cancel — 매우 단순한 형태.

두 번째 항 \(\int Y h_0 ds\):

\[ \int_0^\tau Y(s) h_0(s) ds = \int_0^\tau \sum_{j=1}^n I(L_j < s \leq T_j) h_0(s) ds = \sum_{j=1}^n \int_{L_j}^{T_j} h_0(s) ds = \sum_{j=1}^n [H_0(T_j) - H_0(L_j)] \]

→ “각 개체의 study 기간 내 표준 cumulative hazard 의 합” = 각 개체별 기대 사건 수의 합.

해석: \(H_0(T_j) - H_0(L_j)\) = “\(j\) 가 표준 인구 hazard 를 따르면 \(L_j\) 부터 \(T_j\) 까지 기대되는 사건 수” (cumulative hazard 의 차이).

분산 = 기대값: Poisson 의 성질 (counting process 의 martingale 분산).

직관 — SMR 와의 관계 (Practical Note 2)

전통 SMR (Standardized Mortality Ratio):

\[ \text{SMR} = \frac{O}{E} = \frac{\text{관측 사건 수}}{\text{기대 사건 수}} \]

  • SMR > 1: 표본이 표준 인구보다 빠른 사망.
  • SMR = 1: 동일.
  • SMR < 1: 표본이 더 좋음.

식 7.2.4 의 \(E(\tau)\) 가 정확히 SMR 의 분모 → One-sample log-rank 가 SMR 의 시간-변동 검정.

§ 6.3 의 B̂(t) (relative mortality) 의 검정 = one-sample log-rank.

3.3 Harrington-Fleming Family

정의: Harrington-Fleming Weight Family

\[ W_{HF}(t) = Y(t) S_0(t)^p [1 - S_0(t)]^q, \quad p \geq 0, q \geq 0 \]

여기서 \(S_0(t) = \exp[-H_0(t)]\) (가설 생존함수).

\(p\) \(q\) 검정 강조 시점
0 0 Log-rank 모든 시점 균등
1 0 Wilcoxon-like 초기 (큰 \(S_0\))
0 1 Late-departure 후기 (큰 \(1-S_0\))
1 1 Mid-departure 중간
2 0 More early 초기 강조
직관 — p, q 선택의 의미

\(S_0(t)\) 의 값 변화:

  • \(t = 0\): \(S_0(0) = 1\).
  • \(t \to \infty\): \(S_0(t) \to 0\).

\(S_0^p (1-S_0)^q\) 의 시간 분포:

  • \(p > 0\) 면 작은 \(t\) 에서 큰 가중 (큰 \(S_0\)).
  • \(q > 0\) 면 큰 \(t\) 에서 큰 가중 (큰 \(1-S_0\)).
  • \(p = q\) 면 중간 시점에 peak.

임상적 활용:

  • 면역치료 (delayed effect): \(p = 0, q > 0\) — 후기 차이 강조.
  • 초기 부작용 (early failure): \(p > 0, q = 0\) — 초기 차이 강조.
  • 장기 효과: \(p < q\) — 후기 가중.

검정의 검정력을 의도된 방향으로 분배 — Cox PH 가정이 위반된 데이터에 유용.

Theoretical Note 1 — LMP (Locally Most Powerful)
  • Log-rank (\(W_{HF}\) with \(p=q=0\)): extreme value distribution shift alternative 의 LMP.
  • Wilcoxon (\(W = Y S_0\), 즉 \(p=1, q=0\)): logistic distribution shift alternative 의 LMP.

→ 두 weight 가 각각 다른 가설 분포에 최적. 임상에서 분포 가정이 명확하지 않으면 두 검정 모두 보고 권장.

4 Klein Example 7.1 — Iowa Psychiatric 손풀이

4.1 데이터

Klein § 1.15 데이터

Woolson (1981) 의 26 명 Iowa psychiatric inpatient.

  • \(L_j\): entry age (years).
  • \(T_j\): exit age (death 또는 study 종료).
  • \(\delta_j\): 사건 indicator.
  • Sex-specific (남 13 명 + 여 13 명).

참조 인구: 1960 Iowa State life table (Klein Table 6.2).

  • \(\lambda_M(a)\), \(\lambda_F(a)\): 나이 \(a\) 의 sex-specific hazard.
  • \(H_0(t) = -\ln S_0(t)\) (cumulative hazard).
손풀이 단계

Step 1: 각 개체 \(j\)\(H_0(L_j)\)\(H_0(T_j)\) 계산.

  • Sex 에 맞는 life table 사용.
  • \(H_0(a) = -\ln S_0(a)\) — Klein Table 6.2 의 \(S(a)\) 에서 직접.

Step 2: 차이 \(H_0(T_j) - H_0(L_j)\) 계산 — 각 개체의 entry 부터 exit 까지 기대 cumulative hazard.

Step 3: 합산 \(E = \sum_j [H_0(T_j) - H_0(L_j)]\).

Step 4: 관측 사건 수 \(O = \sum_j \delta_j\).

Step 5: \(\chi^2 = (O - E)^2 / E\).

4.2 Klein Table 7.1 손풀이

26 행의 손계산 (Klein Table 7.1 발췌)
\(j\) Sex \(\delta_j\) \(L_j\) \(T_j\) \(H_0(L_j)\) \(H_0(T_j)\) 차이
1 f 1 51 52 0.0752 0.0797 0.0045
2 f 1 58 59 0.1131 0.1204 0.0073
3 f 1 55 57 0.0949 0.1066 0.0117
4 f 1 28 50 0.0325 0.0711 0.0386
5 m 0 21 51 0.0417 0.1324 0.0907
6 m 1 19 47 0.0383 0.1035 0.0652
7 f 1 25 57 0.0305 0.1066 0.0761
8 f 1 48 59 0.0637 0.1204 0.0567
9 f 1 47 61 0.0606 0.1376 0.0770
10 f 1 25 61 0.0305 0.1376 0.1071
25 f 1 36 76 0.0395 0.4790 0.4395
26 m 0 32 71 0.0590 0.5913 0.5323
15 4.4740

검증 (행 1):

  • 여성 51 → 52 세, 1960 Iowa life table 의 \(S_F(51) = ?\), \(S_F(52) = ?\).
  • \(H_0(51) = -\ln S_F(51) = 0.0752\), \(H_0(52) = 0.0797\).
  • 차이 \(= 0.0797 - 0.0752 = 0.0045\).

검증 (행 4):

  • 여성 28 → 50 세, 22 년 추적.
  • \(H_0(28) = 0.0325\), \(H_0(50) = 0.0711\).
  • 차이 \(= 0.0386\) — 기대 사건 수 약 0.04. 짧은 추적이 아니지만 젊은 나이라 mortality 낮음.

검증 (행 26):

  • 남성 32 → 71 세, 39 년 추적, censored.
  • \(H_0(32) = 0.0590\), \(H_0(71) = 0.5913\).
  • 차이 \(= 0.5323\) — 기대 사건 수 약 0.53. 긴 추적 + 노년기 진입.

합산:

\[ E(71) = \sum_j [H_0(T_j) - H_0(L_j)] = 4.4740 \]

4.3 χ² 계산

검정 결과

\[ \chi^2 = \frac{(O - E)^2}{E} = \frac{(15 - 4.4740)^2}{4.4740} = \frac{(10.526)^2}{4.4740} = \frac{110.80}{4.4740} = 24.76 \]

\(p\)-value: \(P(\chi^2_1 \geq 24.76) \approx 6.5 \times 10^{-7}\)\(p \approx 0\).

결론:

  • 관측 사건 수 \(O = 15\), 기대 사건 수 \(E = 4.47\).
  • SMR \(= 15/4.47 = 3.36\) (전체 평균 — 시간 일정 가정).
  • Time-varying \(\beta(t)\) 의 추정 (§ 6.3): 첫 2 년 \(\beta(2) \approx 25\), 30 년 평균 \(\beta \approx 8 \cdot\) 등.
  • 정신질환자가 일반 인구보다 통계적으로 매우 빠른 사망.

§ 6.3 의 추정 (β ≈ 25) 과 § 7.2 의 검정 (χ² = 24.76) 이 같은 결론. 추정과 검정의 자연 연결.

주의 — SMR vs Time-Varying β(t)

SMR (단순):

\[ \text{SMR} = O/E = 15/4.47 = 3.36 \]

→ “전체 기간 평균 표준 인구 대비 3.36 배 사망률”.

B̂(2) ≈ 25 (시간 변동, § 6.3):

→ 첫 2 년 시점에 25 배.

두 값이 다른 이유:

  • SMR 은 모든 시간 평균 — 후반부 안정 영역 (β ≈ 0.5~1) 이 평균을 떨어뜨림.
  • B̂(2) 는 첫 2 년만 — 정점 영역.

단순 SMR 은 시간 변동 정보 손실. 검정에는 SMR 사용 가능 (전체 차이 검정), 추정에는 시간 변동 B̂(t) 사용.

5 Counting Process 도출 (Theoretical Note 2)

정의: § 3.6 framework 의 직접 적용

\(N(t)\): counting process (사건 카운트). \(Y(t)\): at-risk process. \(J(t) = I[Y(t) > 0]\): data-validity indicator.

\(H_0\) 가정 하:

\[ M(t) = \int_0^t \frac{J(u)}{Y(u)} dN(u) - \int_0^t J(u) h_0(u) du \]

mean-zero martingale.

Predictable variation:

\[ \langle M \rangle(t) = \int_0^t \frac{J(u) h_0(u)}{Y(u)} du \]

(Poisson-like 성질).

Z(τ) 도출:

\[ Z(\tau) = \int_0^\tau W(u) dM(u) \]

→ Stochastic integral. 분산:

\[ V[Z(\tau)] = \int_0^\tau W^2(u) d\langle M \rangle(u) = \int_0^\tau W^2(u) \frac{h_0(u)}{Y(u)} du \]

(martingale CLT 로 점근 정규성).

직관 — 왜 counting process 이론이 필요한가

전통적 접근: \(d_i \sim \text{Binomial}(Y_i, h_0(t_i))\) 가정 후 분산 도출.

Counting process 이론:

  • \(N(t)\) 의 점프와 compensator \(\int Y h_0 du\) 의 차이가 martingale.
  • 어떤 weight 함수의 stochastic integral 도 martingale.
  • Martingale CLT 로 점근 정규성 자동.

장점:

  • 좌절단 + 우측 censoring 모두 처리 (Y(t) 정의만 바뀜).
  • 임의 weight 함수 (log-rank, HF, Gatsonis, …) 일관 처리.
  • Cox PH (Ch.8), Aalen additive (Ch.10) 등 모든 후속 도구의 토대.

→ § 3.6 의 framework 가 Ch.7 의 모든 검정의 근본.

6 좌절단 일반화 (Theoretical Note 3)

Hyde (1977) + Woolson (1981)

식 7.2.4 의 \(E = \sum [H_0(T_j) - H_0(L_j)]\) 에서:

  • 우측 censoring 만 (\(L_j = 0\)): \(E = \sum H_0(T_j)\) (Breslow 1975 의 원래 형태).
  • 좌절단 추가: \(L_j > 0\) 처리 — Hyde (1977) + Woolson (1981) 의 일반화.

의의: Channing house 같은 좌절단 데이터에도 그대로 적용 가능. Counting process framework 의 일반성.

7 Practical Notes (3 개)

Practical Note 1 — 분산의 대안

식 7.2.2 의 \(V\) 외에 empirical 분산:

\[ V[Z(\tau)] = \sum_{i=1}^D W^2(t_i) \frac{d_i}{Y(t_i)^2} \]

\(h_0\) 대신 데이터의 추정 사용.

비교:

  • \(H_A\): \(h(t) > h_0(t)\) 면 empirical 분산이 더 큼 → 검정력 약함.
  • \(H_A\): \(h(t) < h_0(t)\) 면 empirical 분산이 더 작음 → 검정력 강함.

관행: Klein 의 식 7.2.2 (model-based) 를 default 로. Empirical 은 robust 분석 시.

Practical Note 2 — SMR

\(O/E\) ratio = SMR. Practical Note 의 핵심.

해석 가이드:

SMR 해석
1 표준 인구와 동일
1.5 50% 빠른 사망
2 2 배
5+ 매우 비정상 (검토 필요)

Iowa psychiatric 의 SMR = 3.36 → 일반인의 약 3.4 배 사망률 (전체 평균).

Practical Note 3 — Gatsonis et al. (1985) Weight

대안 weight:

\[ W(t) = \left(1 + \frac{\log[1 - S_0(t)]}{S_0(t)}\right) Y(t) \]

→ 특정 분포 family 에 대한 LMP.

활용: 표준 인구가 특정 분포 (e.g., Weibull) 로 명확할 때.

8 응용 분야

분야 사용 예시
임상시험 (1군 대조) One-sample log-rank 신약 vs historical control
인구 역학 SMR 직업 노출 코호트 vs 일반 인구
정신건강 mortality Iowa psychiatric 형 정신질환자 vs 일반 인구
의료기기 PMA Reference standard 신 device vs known reference
Cancer epidemiology Relative mortality Cancer cohort vs 일반 인구

9 코드 예시

9.1 Step 1 — 직접 구현 (Python)

import numpy as np
from scipy.stats import chi2

def one_sample_logrank(times, events, entry, H0_func):
    """
    식 7.2.4 — One-sample log-rank for left-truncated + right-censored data.
    times: T_j (study time)
    events: delta_j (1 if event)
    entry: L_j (left truncation; 0 if none)
    H0_func: H_0(t) function
    """
    n = len(times)
    O = np.sum(events)                                    # 관측 사건 수
    E = np.sum([H0_func(times[j]) - H0_func(entry[j])
                 for j in range(n)])                       # 기대
    chi2_stat = (O - E) ** 2 / E
    p_value = 1 - chi2.cdf(chi2_stat, df=1)
    return O, E, chi2_stat, p_value

# Klein Example 7.1 — Iowa psychiatric (간략)
# (실제 데이터 + 1960 Iowa life table 의 H_0 함수 필요)

def H0_iowa_female(age):
    """1960 Iowa life table H_0 for female (Klein Table 6.2 기반)"""
    # (실제로는 표 lookup + interpolation)
    # 예시: log-linear approximation
    return 0.001 * age + 0.0001 * age ** 1.5

def H0_iowa_male(age):
    return 0.0015 * age + 0.0002 * age ** 1.5

# 26 명 데이터
sex = ['f', 'f', 'f', 'f', 'm', 'm', 'f', 'f', 'f', 'f',
        'f', 'm', 'm', 'f', 'f', 'm', 'm', 'f', 'f', 'f',
        'f', 'm', 'm', 'm', 'f', 'm']
delta = [1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0,
         1, 1, 1, 0, 0, 0, 1, 1, 0]
L = [51, 58, 55, 28, 21, 19, 25, 48, 47, 25, 31, 24, 25, 30,
     33, 36, 30, 41, 43, 45, 35, 29, 35, 32, 36, 32]
T = [52, 59, 57, 50, 51, 47, 57, 59, 61, 61, 62, 57, 58, 67,
     68, 61, 61, 67, 70, 69, 65, 63, 65, 67, 76, 71]

# H_0 sex-specific 적용
H0_diffs = []
for j in range(26):
    if sex[j] == 'f':
        d = H0_iowa_female(T[j]) - H0_iowa_female(L[j])
    else:
        d = H0_iowa_male(T[j]) - H0_iowa_male(L[j])
    H0_diffs.append(d)

E = sum(H0_diffs)
O = sum(delta)
chi2_stat = (O - E) ** 2 / E
print(f"O = {O}, E = {E:.3f}, χ² = {chi2_stat:.2f}")
# (정확한 life table 로 ≈ O=15, E=4.474, χ²=24.76)

9.2 Step 2 — R survival

library(survival)

# Iowa psychiatric (가상 데이터)
# psych <- data.frame(L = ..., T = ..., delta = ..., sex = ...)

# survSplit 으로 좌절단 처리 후 survdiff 또는 직접 계산
fit <- survfit(Surv(L, T, delta) ~ 1, data = psych)
summary(fit)

# 또는 expected events 기반 직접 계산 — 1960 Iowa life table 필요
# (R 패키지 `relsurv` 또는 `survRM2` 활용)
library(relsurv)
fit_rs <- rs.surv(Surv(time = L, time2 = T, event = delta) ~ 1,
                   data = psych,
                   ratetable = iowa1960_ratetable,
                   method = "ederer1")

# Log-rank test
fit_test <- rs.diff(Surv(L, T, delta) ~ 1,
                     data = psych,
                     ratetable = iowa1960_ratetable)
print(fit_test)

9.3 Step 3 — Harrington-Fleming Family (R survival)

library(survival)

# survdiff 의 rho 옵션 = FH p (q=0 가정)
# rho = 0: log-rank
# rho = 1: Wilcoxon (Peto-Peto modification)

# 예: 6-MP 데이터의 1군 검정 (placebo 와 비교 아닌 historical control)
fit_lr <- survdiff(Surv(time, event) ~ 1, data = mp6, rho = 0)  # log-rank
fit_w <- survdiff(Surv(time, event) ~ 1, data = mp6, rho = 1)   # Wilcoxon

print(fit_lr$chisq)
print(fit_w$chisq)

10 핵심 takeaway

§ 7.1~7.2 의 5 가지 교훈
  1. NA 기반 가중 차이 framework — 모든 검정이 “관측 - 기대” 의 가중 합. § 7.2 의 one-sample 이 가장 단순한 출발점. Cox PH (Ch.8) 의 score test 와 동등.

  2. Log-rank weight (\(W = Y\)) 의 단순 형태\(Z = O - E\), \(V = E\), \(\chi^2 = (O-E)^2/E\). 식 7.2.3·7.2.4 의 직접 도출 (분모 \(Y\) cancel + counting process martingale).

  3. Harrington-Fleming family (\(W = Y S^p (1-S)^q\))\(p, q\) 선택으로 검정력 시점 분배. \(p=q=0\) log-rank, \(p=1,q=0\) Wilcoxon. 면역치료 delayed effect 등 PH 위반 시 유용.

  4. SMR = O/E 의 시간-변동 일반화 — 전통 SMR (Breslow 1975) 가 시간 일정 가정. One-sample log-rank 가 자연스러운 일반화. § 6.3 의 추정 + § 7.2 의 검정 같은 framework.

  5. Iowa psychiatric Klein Example 7.1\(O = 15\), \(E = 4.47\), \(\chi^2 = 24.76\), \(p \approx 0\). § 6.3 의 β ≈ 25 와 통계적 일치. 추정-검정의 자연 연결의 정전 사례.

11 관련 주제

선행 지식

후속 주제

  • § 7.3 — K-Sample Tests (6 weight 가족)
  • § 7.4 — Trend test
  • § 7.5 — Stratified + matched pairs
  • Ch.8 — Cox PH (score test = log-rank)

관련 개념

  • SMR (Standardized Mortality Ratio, Breslow 1975) — 인구 역학 표준
  • Ch.6 § 6.3 의 multiplicative excess mortality (one-sample log-rank 와 동일 framework)
  • Counting process martingale (Aalen 1975) — 모든 검정의 토대
  • Hyde 1977 + Woolson 1981 — 좌절단 일반화
  • Gatsonis 1985 — 대안 weight family

Subscribe

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