인-년 방법과 기간-코호트 분석

Woodward Ch.5.7~5.8 — Person-Years Approach & Period-Cohort Analyses

가변 추적 코호트의 표준 분석 단위인 person-year (인-년) 방법을 정의·수식·직관으로 풀어내고, 발생률·발생률 비(IRR)·신뢰구간을 산출하는 절차를 본다. 그 다음 Age-Period-Cohort (APC) 모형의 식별 문제와 부분 식별 전략을 추상 → 일상어 → 반사실 3 단계로 정리한다.

Experimentation
Epidemiology
저자

Kwangmin Kim

공개

2026년 05월 08일

1 5.7 — Person-Years Approach

가변 추적의 일반화된 분석 단위. 각 개인이 위험 상태에 있던 시간을 합산하여 분모로 사용 (Woodward, 2014, Ch.5.7).

정의: Person-Year (PY)

각 개인 \(i\) 의 위험 노출 기간: \[ \text{PY}_i = T_{\text{end}, i} - T_{\text{start}, i} \]

총 인-년: \[ \text{Total PY} = \sum_{i=1}^{N} \text{PY}_i \]

발생률 (Incidence Rate, IR): \[ \text{IR} = \frac{\text{사건 수}}{\text{Total PY}} \]

1.1 수식의 의미 — 시간 단위의 표준화

직관 3 단계: Person-Year 가 변동 추적을 흡수하는 방식
  • 추상: 한 사람을 1 년 추적 = 두 사람을 6 개월씩 추적 = 1 person-year. 분모를 person-year 로 두면 추적 길이 차이가 자동 흡수.
  • 일상어 비유: 직원 5 명을 6 개월 = 1 명을 30 개월 = 30 person-month. 임금이 같다.
  • 반사실: 분모를 단순 인 단위로 두면 6 개월 추적자도 30 개월 추적자도 같은 분모 1 → 짧은 추적자의 위험률이 부풀려 보임. PY 분모가 이 왜곡 흡수.

1.2 발생률의 가정

가정 위반: 시간에 따른 위험률 일정성

가설: 한 사람의 위험률이 추적 기간 내내 일정. 즉 \(h(t) = \lambda\) (Poisson 분포 가정).

3 단계 직관:

  • 추상: 사건 수 \(D \sim \text{Poisson}(\lambda \cdot \text{PY})\).
  • 일상어 비유: 일정한 비율로 빗방울이 떨어지는 우산 — 시간 단위당 일정한 빗방울 수.
  • 반사실: 만약 위험률이 시간에 따라 변하면 (예: 건강 인자가 개선되면서 ↓), 평균 IR 은 시간 평균을 보지 진성 hazard 패턴은 가린다. 시간 의존 분석(KM, Cox) 이 더 정확.

1.3 95% 신뢰구간 — Poisson 정확 CI

발생률의 신뢰구간은 사건 수의 Poisson 분포에서 직접 산출 (Woodward, 2014, Ch.5.7).

대표본 근사: \[ \text{IR} \pm 1.96 \sqrt{\frac{\text{IR}}{\text{Total PY}}} \]

소표본 정확 CI (사건 수 \(D\) 가 작을 때): \[ \text{IR}_{\text{lo}} = \frac{\chi^2_{2D, 0.025}/2}{\text{Total PY}}, \quad \text{IR}_{\text{hi}} = \frac{\chi^2_{2(D+1), 0.975}/2}{\text{Total PY}} \]

여기서 \(\chi^2_{k, \alpha}\) 는 자유도 \(k\) 의 카이제곱 분포의 \(\alpha\) 분위수.

1.4 Incidence Rate Ratio (IRR)

두 군의 발생률 비: \[ \text{IRR} = \frac{\text{IR}_1}{\text{IR}_0} = \frac{D_1 / \text{PY}_1}{D_0 / \text{PY}_0} \]

\(\log(\text{IRR})\) 의 분산 (대표본): \[ \text{Var}(\log \text{IRR}) = \frac{1}{D_1} + \frac{1}{D_0} \]

95% CI: \[ \exp\left( \log \text{IRR} \pm 1.96 \sqrt{\frac{1}{D_1} + \frac{1}{D_0}} \right) \]

직관 3 단계: IRR vs RR vs HR
  • 추상: 모두 두 군의 위험을 비교하는 비율 지표. 차이는 분모 시간 단위.
  • 일상어 비유:
    • RR = “10 년 안에 사건 발생할 누적 확률 비”.
    • IRR = “단위 시간(연·월) 당 사건 발생 비율 비 (시간 일정 가정)”.
    • HR = “현 시점에서의 순간 위험률 비 (시간 변동 허용)”.
  • 반사실: 사건이 희귀하면 IRR ≈ HR ≈ RR. 사건이 흔하거나 위험률이 시간에 따라 변하면 세 값이 갈라짐. 정확한 비교는 hazard 모형(Cox).

1.5 Direct Standardization with Person-Years

여러 연령대 또는 calendar period 가 섞인 코호트의 IR 비교 시, 표준 인구의 weight 로 가중 평균.

\[ \text{IR}_{\text{standardized}} = \sum_a w_a \cdot \text{IR}_a \]

여기서 \(w_a\) 는 표준 인구의 연령군 \(a\) 의 비율, \(\text{IR}_a\) 는 자료의 연령군 \(a\) 의 발생률.

자세한 표준화 분석은 WOO Ch.4.5~4.6 (Phase B B43~B46) 에서 본격 다룸.

1.6 IT 대응 — User-Time

Person-Year IT 대응
\(\sum_i \text{PY}_i\) Total user-month, total session-time
IR = 사건/PY Churn rate per user-month
IRR A/B 테스트의 lift 의 시간 단위 표현

A/B 테스트의 funnel 분석에서, 사용자가 실험에 머문 기간이 다를 때 person-day 가중 분석이 person-year 의 IT 판이다.

1.7 코드 예시 — Person-Year 분석

import numpy as np
import pandas as pd
from scipy import stats

np.random.seed(42)
n = 2000

# 두 군의 추적 기간 (uniform 1~10 년)
factor = np.random.binomial(1, 0.5, n)
T_max = np.random.uniform(1, 10, n)

# 진성 IR: factor=0 일 때 0.05/yr, factor=1 일 때 0.075/yr (IRR=1.5)
true_lambda = np.where(factor == 1, 0.075, 0.05)
event_time = np.random.exponential(scale=1/true_lambda)
event = (event_time <= T_max).astype(int)
PY_i = np.minimum(event_time, T_max)

# 군별 합계
df = pd.DataFrame({
    "factor": factor, "PY": PY_i, "event": event,
})
agg = df.groupby("factor").agg(D=("event", "sum"), PY_total=("PY", "sum"))
agg["IR"] = agg["D"] / agg["PY_total"]
print(agg)

# IRR 와 95% CI
D1, PY1 = agg.loc[1, "D"], agg.loc[1, "PY_total"]
D0, PY0 = agg.loc[0, "D"], agg.loc[0, "PY_total"]
IRR = (D1 / PY1) / (D0 / PY0)
log_IRR_se = np.sqrt(1/D1 + 1/D0)
lo = np.exp(np.log(IRR) - 1.96 * log_IRR_se)
hi = np.exp(np.log(IRR) + 1.96 * log_IRR_se)
print(f"IRR = {IRR:.2f} (95% CI: {lo:.2f} ~ {hi:.2f})")

# Wald z 검정 (귀무: IRR=1)
z = np.log(IRR) / log_IRR_se
p = 2 * (1 - stats.norm.cdf(abs(z)))
print(f"Wald z = {z:.2f}, p = {p:.4f}")

해석: 진성 IRR 1.5 에 가까운 추정과 작은 p-값. Person-year 분모가 추적 기간 차이를 정확히 반영.

2 5.8 — Period-Cohort Analyses

긴 추적 코호트는 calendar period 와 cohort age 의 두 시간 차원을 동시에 갖는다.

정의: 세 시간 변수 (Age-Period-Cohort, APC)
  • Age (A): 개인의 나이 (또는 baseline 후 elapsed time).
  • Period (P): 달력 시점 (calendar year).
  • Cohort (C): 출생 연도 (또는 등록 연도).

핵심 항등식: \[ A + C = P \]

세 변수가 선형 종속.

2.1 APC 모형의 식별 문제

가정 위반: Perfect Collinearity

APC 모형: \[ \log h(t) = \alpha_A + \beta_P + \gamma_C \]

\(A + C = P\) 이므로 \(A, P, C\) 의 선형 효과를 동시 추정 불가 — 식별 안 됨.

3 단계 직관:

  • 추상: 디자인 행렬 \(X\) 에 세 컬럼을 동시 넣으면 \(X\) 가 rank deficient. 일반 OLS·MLE 가 unique 해 없음.
  • 일상어 비유: 누군가의 학년·연도·생년월일 중 두 개를 알면 나머지 결정. “첫 두 개의 효과 + 마지막의 효과” 로 모형이 분해되지 않음.
  • 반사실: 세 효과 중 하나가 비선형이라면 (예: \(\alpha_A = f(A)\), \(f\) 가 비선형) 식별 가능. 또는 한 효과를 0 으로 가정하거나, 외부 정보로 제약 부여.

2.2 부분 식별 전략

전략 가정 한계
연령 효과 0 일정 연령 범위에서 효과 없음 강한 가정
Smoothed APC 한 효과를 평활화하여 비선형으로 만듦 임의성
2-차원 분석 세 중 하나 고정 (예: cohort × period) 정보 일부 손실
Intrinsic Estimator Penrose-Moore pseudo-inverse 해석 까다로움
외부 정보 Hierarchical Bayes 로 prior 부여 Prior 의존

2.3 Cohort Effects 의 의미

같은 코호트 (예: 1950 년 출생) 가 평생에 걸쳐 공유하는 노출. 즉 출생 시점의 사회·환경 조건이 만든 효과.

직관: Cohort Effect 의 예
  • 흡연 코호트 효과: 1940 년대에 태어난 남성이 청년기에 군 복무를 통해 흡연 시작 → 평생 흡연 누적.
  • 출생 시 영양 코호트 효과: 1944~1945 네덜란드 기근 출생자의 평생 만성질환 위험 (Dutch Famine cohort).
  • 백신 코호트 효과: 풍진 백신 도입 후 출생 코호트의 풍진 회복 패턴.

이런 효과는 calendar period 만으로 잡히지 않고, 출생 코호트 변수가 필요하다.

2.4 Period Effects 의 의미

특정 달력 시점에 모든 코호트가 공유하는 노출. 의료 표준 변화, 진단 기준 개정, 새 약 도입 등.

직관: Period Effect 의 예
  • 항생제 도입 (1940 년대): 모든 출생 코호트의 감염병 사망률이 동시에 감소.
  • 암 진단 도구 향상: 진단율 자체가 시간에 따라 증가하여 발생률 증가가 진성 변화인지 진단 변화인지 모호.
  • HIV 진단 기준 변경 (CDC 1993): 정의 변경으로 모든 코호트의 보고 발생률이 동시에 점프.

2.5 도구로서의 Lexis Diagram

각 개인의 인생 궤적을 age vs calendar 평면의 대각선으로 표현. APC 의 시간 차원을 시각화.

Age
 80 │                            ╱
 70 │                       ╱
 60 │                  ╱
 50 │             ╱
 40 │        ╱
 30 │   ╱  Cohort 1970
 20 │
   0 └──────────────────────────→ Calendar
     1990  2000  2010  2020

대각선 = 한 사람의 인생. 수직선 = 한 시점에 모든 연령. 수평선 = 한 연령에 모든 시점. 정사각형 셀이 PY 가중 분석의 단위가 됨.

2.6 Period-Cohort Analyses (Woodward 의 단순화)

Woodward 는 APC 의 식별 문제를 우회하기 위해 period 와 cohort 두 차원만 다루는 분석을 자주 사용한다 (2014, Ch.5.8). Calendar year 별로 코호트 PY 를 계산하고, 발생률 추세를 cohort × period 표로 시각화.

            Period
            1990  2000  2010
Cohort
 1950       0.08  0.10  0.12
 1960       0.06  0.08  0.10
 1970       0.04  0.06  0.08
 1980       0.03  0.04  0.06

이 표에서 같은 cohort 의 행을 따라가면 age effect (시간에 따라 ↑), 같은 period 의 열을 따라가면 cohort effect (오래된 cohort 가 ↑), 대각선이 같은 age 에서의 period effect.

3 SHHS APC 분석 사례

예시: SHHS 의 흡연 효과를 APC 로 분리

SHHS 코호트 (1984~1987 등록, 추적 ~12 년) 에서 흡연-CHD RR 분석.

  • Age effect: 연령 ↑ 와 함께 CHD 위험 ↑ (생물학적 효과).
  • Period effect: 1990 년대 statin 처방 확산으로 CHD 위험 전반 ↓ (의료 표준 변화).
  • Cohort effect: 1930 년대 출생 남성의 청년기 군 복무 흡연 누적 — 평생 위험 ↑.

이 세 효과를 분리하지 못하면 흡연 효과의 진성 크기가 흐려진다. APC 분석은 통계적 식별 한계 안에서 효과 분해를 시도.

4 결론 — Ch.5.7~5.8 의 메시지

도구 적합 상황 핵심 가정
Person-year 가변 추적 시간 일정 hazard
IR / IRR 발생률 비교 Poisson
Direct standardization 인구 구성 차이 통제 표준 인구 정의
APC 모형 긴 추적 비선형성 또는 외부 제약

Person-year 는 가변 코호트의 가장 단순하고 강력한 분석 단위. APC 는 식별 한계가 명확하지만, period × cohort 단순화로 시간 차원을 분리할 수 있다.

이로써 Woodward Ch.5 시리즈 (B10~B14) 가 마무리된다. 다음 묶음 (Phase B Ch.5: Case-Control) 에서는 cohort 의 반대편 — 결과부터 시작하여 노출을 회고하는 설계 — 를 본다.

5 관련 주제

Phase B WOO Ch.5 시리즈 (완성)

Phase B 다음 묶음 (SCH Ch.5: Case-Control)

다른 카테고리

Subscribe

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