§ 12.1 ~ 12.2 — Poisson Regression 의 깊이와 Modified Poisson Models 의 분류

Poisson 분포의 exponential family 도출 · Mean-variance 동등 (식 12.2) 의 수학적 증명 · Score (식 12.5) = ‘잔차 × 공변량’ · IRLS 알고리즘 · Cohen (1954) → Mullahy (1986) hurdle → Heilbron (1989) ZAP → Lambert (1992) ZIP → Greene (1994) ZINB 의 발전사 · 4 가지 modified Poisson 의 분류와 비교

Hedeker & Gibbons (2006) Ch.12 §12.1 + §12.2 의 깊이 있는 풀이. Ch.12 Overview (12-0) 가 큰 그림을 다뤘다면, 본 sub-post 는 식의 수학적 도출 + 발전사 + 모형 family 의 분류. (1) §12.1 Poisson regression 의 깊이: 식 (12.1) 의 exponential family 도출, mean-variance 동등 (식 12.2) 의 moment 증명, 식 (12.4) log-likelihood 의 단순한 형태, 식 (12.5) score 가 ‘잔차 × 공변량’ (canonical link 의 결과), Newton-Raphson vs Fisher scoring 동일 (canonical link), IRLS 알고리즘으로의 변환. (2) §12.2 Modified Poisson 의 분류: Cohen (1954) 의 covariate-free 모형, Mullahy (1986)·King (1989) 의 hurdle 모형 (truncated Poisson), Heilbron (1989) 의 ZAP (zero-altered Poisson), Lambert (1992) 의 ZIP/ZIP(τ), Greene (1994) 의 zero-inflated negative binomial (ZINB) 까지. 각 모형의 mixture 구조, hurdle vs ZAP vs ZIP 의 결정적 차이 (truncation vs mixture), 모형 선택 절차 (vuong test 등), Zorn (1996) 의 통합 framework.

Statistics
저자

Kwangmin Kim

공개

2026년 05월 06일

1 들어가며 — 12-0 Overview 의 깊이

Ch.12 Overview (12-0) 에서 Poisson + ZIP + Mixed-effects 의 큰 그림을 제시했다. 본 sub-post 는 § 12.1 (표준 Poisson) 과 § 12.2 (Modified Poisson family) 의 수학적 깊이 + 모형 분류 를 다룬다.

한 줄 요약

“§ 12.1 = Poisson 분포가 exponential family 의 자연스러운 멤버, log link 가 canonical link → score (식 12.5) 가 ‘잔차 × 공변량’ 의 단순 형태, Newton-Raphson = Fisher scoring (canonical link 결과), IRLS 로 변환 가능. § 12.2 = Excess zeros 처리의 4 가지 modified Poisson family — Cohen 1954 (covariate-free) → Mullahy/King 1986/89 (hurdle, truncated Poisson) → Heilbron 1989/94 (ZAP) → Lambert 1992 (ZIP/ZIP(τ)) → Greene 1994 (ZINB). 결정적 차이: Hurdle 은 zero/positive 두 단계 (positive 는 truncated Poisson), ZAP/ZIP 은 mixture (Poisson 자체가 zero 가능). 모형 선택은 Vuong test, AIC/BIC + 임상적 해석.”

2 § 12.1 — Poisson Regression 의 깊이

2.1 Poisson 분포의 정의와 도출

식 (12.1) — Poisson density

\[ f(y; \lambda) = \frac{e^{-\lambda} \lambda^y}{y!}, \quad y = 0, 1, 2, \ldots \tag{12.1} \]

회귀 모형: \(\lambda_i = \exp(x_i^\top \beta)\).

직관 — Poisson 분포의 자연스러운 출처

Poisson 분포의 두 가지 자연 출처:

1. Bernoulli 시행의 limit (Law of rare events):

  • \(n\) 개 독립 Bernoulli 시행, 각 성공 확률 \(p\).
  • 성공 횟수 \(\sim \text{Binomial}(n, p)\).
  • \(n \to \infty\), \(p \to 0\), \(np = \lambda\) 고정.
  • → Poisson 분포 (\(\lambda\)).

해석: “단위 시간 안의 매우 많은 작은 기회들 중 일부만 성공”. 의료 이용, 사고, 자살 등이 이 frame.

2. Poisson process 의 결과:

  • 사건이 독립적·균등 rate 로 발생.
  • 단위 시간/공간 안의 사건 수 \(\sim \text{Poisson}(\lambda)\).

이 두 출처가 같은 분포에 도달 — Poisson 의 robustness.

왜 Poisson 이 카운트의 표준 모형인가:

  • 비음 정수 응답 — 카운트와 자연.
  • 평균만 모형화 (한 모수) — 절약.
  • Exponential family 의 멤버 — GLM framework 직접 적용.

대안 모형:

  • Negative Binomial (NB): \(V > E\) overdispersion 처리.
  • Zero-inflated Poisson (ZIP): Excess zeros 처리.
  • Hurdle: Two-part (zero or positive).

§ 12.2 가 이 대안들을 분류.

2.2 Exponential Family 로서의 Poisson

Exponential Family 표현

Poisson density 를 exponential family form \(f(y) = h(y) \exp[T(y) \eta - A(\eta)]\) 으로 변환:

\[ f(y; \lambda) = \frac{1}{y!} \exp[y \log \lambda - \lambda] \]

표기:

  • Sufficient statistic \(T(y) = y\).
  • Natural parameter \(\eta = \log \lambda\).
  • Cumulant function \(A(\eta) = \lambda = e^\eta\).
  • Base measure \(h(y) = 1/y!\).
직관 — Canonical Link 의 의미

Natural parameter \(\eta = \log \lambda\) 가 회귀의 link 함수와 일치:

  • 식 (12.1) 의 \(\log \lambda_i = x_i^\top \beta\) — 정확히 natural parameter 를 covariate 의 선형 예측자에 직접 연결.
  • Log link 가 Poisson 의 canonical link.

Canonical link 의 결정적 결과:

  1. Score 의 단순한 형태: 식 (12.5) 의 \(\sum (y_i - \lambda_i) x_i\) — “잔차 × 공변량” 의 합.
  2. Newton-Raphson = Fisher scoring: Hessian 과 Fisher information 이 동일.
  3. Sufficient statistic 직접 활용: \(T(y) \cdot x\) 형태가 score.

비교 (다른 분포의 canonical link):

  • Bernoulli: logit (§ 9.2 의 식 9.7 의 \(\sum (y_i - p_i) x_i\) score 형태).
  • Normal: identity link.
  • Gamma: 1/\(\mu\) link (실제로는 log 가 더 흔함).

Canonical link 사용이 GLM 추정의 표준 — 단순함 + 안정성.

2.3 Mean-Variance 동등의 증명

식 (12.2) — \(E(y) = V(y) = \lambda\)

Cumulant function \(A(\eta) = e^\eta\) 의 미분으로 도출:

  • First cumulant (mean): \(E(y) = A'(\eta) = e^\eta = \lambda\).
  • Second cumulant (variance): \(V(y) = A''(\eta) = e^\eta = \lambda\).

→ 평균과 분산 모두 \(\lambda\). 일치.

직관 — Cumulant Function 의 미분 trick

Exponential family 의 강력한 성질:

  • Mean = \(A'(\eta)\) (cumulant function 의 1차 도함수).
  • Variance = \(A''(\eta)\) (2차 도함수).
  • 더 높은 cumulant 도 \(A^{(n)}(\eta)\) 에서 도출.

Poisson 의 \(A(\eta) = e^\eta\) 가 자기 자신을 도함수로 가짐 → mean = variance.

다른 분포의 mean-variance:

  • Bernoulli: \(A(\eta) = \log(1 + e^\eta)\), \(A' = p\), \(A'' = p(1-p)\) → variance < mean.
  • Normal (\(\sigma^2\) fixed): \(A(\eta) = \eta^2/2\), \(A' = \mu\), \(A'' = 1\) → variance = constant.
  • NB (\(k\) fixed): \(V = \mu + \mu^2/k\) → variance > mean.

Poisson 의 mean = variance 는 매우 특수. 데이터에서 자주 위반.

Overdispersion 진단 (실무):

  • Pearson dispersion: \(\hat\phi = \sum (y_i - \hat\lambda_i)^2 / [\hat\lambda_i (n - p)]\).
  • \(\hat\phi \approx 1\): Poisson 적합.
  • \(\hat\phi > 1.5\): Overdispersion → NB 또는 quasi-Poisson 검토.
  • \(\hat\phi > 5\): Strong overdispersion → ZIP 또는 negative binomial 필수.

NIMH, MHRP 같은 임상 카운트 데이터는 보통 \(\hat\phi > 1.5\) — Poisson 단독으로는 부적절.

2.4 추정 — 식 (12.3-12.6)

Likelihood 와 Score

Likelihood (식 12.3):

\[ L = \prod_{i=1}^N \frac{e^{-\lambda_i} \lambda_i^{y_i}}{y_i!} \]

Log-likelihood (식 12.4):

\[ \log L = -\sum_i [\lambda_i - y_i \log \lambda_i + \log(y_i!)] \]

\(\log(y_i!)\) 부분은 \(\beta\) 와 무관 (constant) → 추정에 무관.

Score (식 12.5):

\[ \frac{\partial \log L}{\partial \beta} = \sum_i (y_i - \lambda_i) x_i \]

Hessian (식 12.6):

\[ \frac{\partial^2 \log L}{\partial \beta \partial \beta^\top} = -\sum_i \lambda_i x_i x_i^\top \]

직관 — Score 도출의 chain rule

식 (12.5) 도출:

\[ \frac{\partial \log L}{\partial \beta} = -\sum_i \frac{\partial \lambda_i}{\partial \beta} + \sum_i y_i \frac{\partial \log \lambda_i}{\partial \beta} \]

각 항:

  • \(\partial \lambda_i / \partial \beta = \lambda_i x_i\) (\(\lambda_i = \exp(x_i^\top \beta)\) 의 chain rule).
  • \(\partial \log \lambda_i / \partial \beta = x_i\) (log link).

대입:

\[ = -\sum_i \lambda_i x_i + \sum_i y_i x_i = \sum_i (y_i - \lambda_i) x_i \]

잔차 × 공변량 의 합. Bernoulli logistic (식 9.7) 과 정확히 같은 형태.

잔차의 의미: \(y_i - \lambda_i\) = 관측 - 예측. 음수면 모형 과예측, 양수면 과소예측. Score = 0 → 잔차의 covariate-가중 합이 0 → 균형.

해석의 강력함:

  • 회귀 계수 추정의 직관: “각 covariate 의 효과가 잔차를 균형 잡는 방향”.
  • Diagnostic: 잔차 plot 으로 모형 적합 평가.

3 § 12.2 — Modified Poisson Models 의 분류

3.1 Excess Zeros 의 통계적 진단

Excess zeros 의 인지

표준 Poisson 모형의 zero 예측:

\[ \widehat P(y = 0) = e^{-\hat\lambda} \]

데이터의 실제 zero 비율 \(\hat p_0 = \sum_i \mathbb{1}(y_i = 0) / N\).

Excess zeros 진단:

  • \(\hat p_0 \gg e^{-\hat\lambda}\): 데이터에 zero 가 모형 예측보다 많음. → Modified Poisson 검토.
직관 — Excess zeros 의 임상 예시

저자 본문 인용 — “How many times have you gone to a mental health professional this year?”:

데이터 패턴:

  • 70% 의 사람: 0 회 방문.
  • 5% 의 사람: 1 회.
  • 3% 의 사람: 2 회.
  • 평균 = 0.5.

표준 Poisson (\(\lambda = 0.5\)) 예측:

  • \(P(y = 0) = e^{-0.5} \approx 0.61\).
  • → 모형 예측 zero 비율 (61%) < 실제 zero 비율 (70%). 9%p 부족.

이 9%p 가 “excess zeros” — Poisson 모형이 설명 못하는 추가 zero.

임상적 해석:

  • 70% 중 일부는 “정신과 진료 필요 없는 사람” (perfect zero).
  • 일부는 “필요하지만 안 간 사람” (Poisson zero).
  • → Mixture 모형이 자연.

3.2 발전사 — Modified Poisson 의 4 단계

핵심 문헌 (chronological)
  1. Cohen (1954): 첫 zero-modified Poisson 모형 (covariate-free). Johnson et al. (1992) 에 자세한 설명.

  2. Mullahy (1986), King (1989): Hurdle 모형 — Poisson 분포에서 zero 와 positive 분리. Positive 는 zero-truncated Poisson.

  3. Heilbron (1989, 1994): ZAP (Zero-Altered Poisson) — zero 의 확률을 자유롭게 alter.

  4. Lambert (1992): ZIP (Zero-Inflated Poisson) + ZIP(τ) (functional 관계 모형). 가장 영향력 큰 paper.

  5. Greene (1994): Zero-inflated Negative Binomial (ZINB) — overdispersion + excess zeros 동시 처리.

  6. Zorn (1996): 통합 framework — hurdle 과 ZIP 이 같은 dual regime data generating process 의 special cases.

직관 — Modified Poisson family 의 발전 메커니즘

발전의 두 축:

축 1 — 어떤 zero 를 어떻게 처리하는가:

  • Cohen 1954: 모형 자체의 zero probability 변경 (covariate 없음).
  • Hurdle (Mullahy 1986): zero 와 positive 두 단계 분리.
  • ZAP (Heilbron 1989): zero 확률 자유 모형화.
  • ZIP (Lambert 1992): mixture 로 두 종류 zero 명시.

축 2 — Overdispersion 과 결합:

  • ZINB (Greene 1994): NB 가 overdispersion 처리 + zero inflation 추가.

이 발전이 1980s-1990s 에 집중된 이유 — 카운트 데이터 분석의 실무 수요 + 컴퓨팅 발전 (EM 알고리즘, Newton-Raphson 가능).

Hedeker (2006) 까지 mixed-effects 확장 (Hall 2000, Hur et al. 2002). 현재 (2026) 는 Bayesian 확장 (brms zero_inflated_poisson(), negbinomial()) 가 표준.

3.3 Hurdle 모형 — Mullahy (1986)

Hurdle 의 두 단계 구조

응답이 두 단계로 발생:

단계 1 — Zero vs Positive:

\[ P(y = 0) = 1 - \pi \]

\[ P(y > 0) = \pi \]

여기서 \(\pi\) 는 “hurdle 을 넘었을 확률” (positive count 발생).

단계 2 — Positive 값 (truncated Poisson):

\[ P(y = k \mid y > 0) = \frac{e^{-\lambda} \lambda^k / k!}{1 - e^{-\lambda}}, \quad k = 1, 2, \ldots \]

Zero 는 표준 Poisson 에서 제거 (truncation).

종합:

\[ P(y = 0) = 1 - \pi \]

\[ P(y = k) = \pi \cdot \frac{e^{-\lambda} \lambda^k / k!}{1 - e^{-\lambda}}, \quad k = 1, 2, \ldots \]

직관 — “Hurdle 을 넘으면 다시는 0 이 안 나온다”

Hurdle 의 핵심 발상:

  • 사람들이 두 단계를 거침: (1) 사건을 시작할지 결정 (binary), (2) 시작했으면 몇 번 할지 결정 (count, ≥ 1).
  • 첫 단계에서 “안 함” 결정 → zero. 첫 단계에서 “함” 결정 → 1 이상의 카운트 (zero 안 나옴).

예시 — 흡연 빈도:

  • 단계 1: 흡연자인가? (Yes/No).
  • 단계 2: 흡연자라면 하루 몇 갑? (1, 2, …).

흡연자가 “0 갑/day” 인 경우는 없음 — 흡연자 정의상 ≥ 1. → Hurdle 자연.

예시 — 임신:

  • 단계 1: 임신했는가? (Yes/No).
  • 단계 2: 임신했다면 몇 명? (1, 2, …).

→ Hurdle 적합.

Hurdle 이 부적절한 경우:

  • 의료 이용: 진료 필요한 사람이 안 갔다면 0 가능 → Poisson 부분에 0 허용 필요 → ZIP 적합.
  • 사고: 위험한 사람이 운 좋게 안 났다면 0 가능 → ZIP.

→ “Positive 부분에 0 가능 vs 불가능” 으로 hurdle vs ZIP 결정.

3.4 ZAP (Zero-Altered Poisson) — Heilbron (1989)

ZAP 의 표현

Lambert (1992) 의 ZIP 와 매우 비슷:

\[ P(y = 0) = \pi + (1 - \pi) e^{-\lambda} \]

\[ P(y = k) = (1 - \pi) \frac{e^{-\lambda} \lambda^k}{k!}, \quad k = 1, 2, \ldots \]

(ZIP 와 동일한 형태.)

차이는 link function 의 자유도:

  • ZAP: \(\pi\)\(\lambda\) 의 link 가 분리.
  • ZIP: 같은 covariate 사용 (또는 ZIP(τ) 의 functional 관계).
직관 — ZAP vs ZIP 의 미묘한 차이

ZAP (Heilbron 1989) 와 ZIP (Lambert 1992) 의 mathematical form 은 사실상 같음. 차이는 historical naming + 강조점:

  • ZAP: zero 확률을 변경 (alter) 하는 강조.
  • ZIP: excess zeros 의 mixture 강조.

실무에서는 두 이름이 혼용 — ZIP 가 더 흔히 사용 (Lambert 1992 의 더 큰 영향력).

저자 본문 (식 12.12) 도 같은 form 을 ZIP 으로 명명.

Johnson et al. (1992) 의 명명 “WZ (with zeros)” — 또 다른 이름. 학계의 명명 혼란 사례.

→ 본 sub-post 와 후속에서는 ZIP 으로 통일.

3.5 ZIP — Lambert (1992)

ZIP 의 정확한 정의 (12-0 와 12-2 sub-post 참조)

Lambert (1992) 의 mixture 모형:

  • 확률 \(\pi\) 로 perfect zero (구조적 zero, 항상 0).
  • 확률 \(1 - \pi\) 로 Poisson(\(\lambda\)) 분포 (0 또는 양수).

Unified probability:

\[ P(y = 0) = \pi + (1 - \pi) e^{-\lambda} \]

\[ P(y = k) = (1 - \pi) \frac{e^{-\lambda} \lambda^k}{k!}, \quad k \geq 1 \]

자세한 수학적 분석은 12-2 sub-post (계획) 에서.

ZIP 의 mental health 응용

저자 본문 인용:

“There would be two types of zero responses. The first set of zero responses would be from a group of people who are not in need of mental health treatment … The second set of zero responses would be from a group of people who are in need of mental health treatment but have not yet visited a mental health clinic.”

ZIP 의 두 component 가 정확히 이 두 그룹 표현:

  • Perfect state (구조적 zero): 진료 필요 없는 사람. 절대 안 감.
  • Poisson state: 진료 필요한 사람. 0 또는 양수.

이 분리가 정책 분석에 직접 가치:

  • “진료 필요 없는 사람의 비율” → 모집단의 의료 수요 평가.
  • “진료 필요한 사람의 평균 방문 빈도” → 의료 접근성 평가.

각각 별도 covariate (보험, 거주지, 소득 등) 의 효과 분석 가능.

ZIP(τ) (식 12.10-12.11) 는 두 부분이 같은 covariate + functional 관계 — 모수 절약, 해석 단순.

3.6 ZINB (Zero-Inflated Negative Binomial) — Greene (1994)

ZINB 의 동기

ZIP 의 한계: positive part 가 Poisson — mean-variance 동등.

데이터에서 positive 부분에도 overdispersion 흔함:

  • 사람들이 진료 필요한 그룹 안에서도 방문 횟수의 변동이 큼.
  • → Poisson 가정 (\(V = E\)) 깨짐.

해결 — Negative Binomial 로 positive part 모형화:

\[ P(y = 0) = \pi + (1 - \pi) \cdot \text{NB}(0; \mu, k) \]

\[ P(y = k) = (1 - \pi) \cdot \text{NB}(k; \mu, k_{\text{shape}}), \quad k \geq 1 \]

NB density:

\[ \text{NB}(k; \mu, k_{\text{shape}}) = \frac{\Gamma(k + k_{\text{shape}})}{\Gamma(k_{\text{shape}}) k!} \left(\frac{k_{\text{shape}}}{k_{\text{shape}} + \mu}\right)^{k_{\text{shape}}} \left(\frac{\mu}{k_{\text{shape}} + \mu}\right)^k \]

with \(V(y) = \mu + \mu^2 / k_{\text{shape}}\) — overdispersion.

직관 — ZINB 의 두 가지 추가 모수

ZIP vs ZINB:

  • ZIP: \(\pi, \lambda\) 두 부분의 모수 + 한 부분 (Poisson) 의 분포 모수.
  • ZINB: \(\pi, \mu\) + \(k_{\text{shape}}\) (NB 의 shape 모수, overdispersion 표현).

\(k_{\text{shape}} \to \infty\): NB → Poisson (overdispersion 없음). \(k_{\text{shape}}\) 작음: 강한 overdispersion.

LR 검정 — ZIP vs ZINB:

  • \(H_0\): \(1/k_{\text{shape}} = 0\) (NB → Poisson).
  • \(\chi^2_1\) 분포 (boundary 보정 필요 — 0.5 * \(\chi^2_0\) + 0.5 * \(\chi^2_1\)).
  • 유의 → ZINB 권고.

실무 빈도: 의료, 사회 카운트 데이터에서 ZINB 가 ZIP 보다 자주 적합.

Mixed-effects 확장:

  • Mixed-effects ZIP (Hedeker 2006, 식 12.30-12.33).
  • Mixed-effects ZINB — 구현 더 복잡, brms 또는 직접 코딩 필요.

3.7 Modified Poisson Family 의 분류표

4 가지 modified Poisson 의 비교
모형 Zero Positive 자유 모수 해석
Poisson \(e^{-\lambda}\) Poisson \(\lambda\) 표준
Hurdle \(1 - \pi\) Truncated Poisson \(\pi, \lambda\) Two-part (positive 부분 0 안 나옴)
ZAP / ZIP \(\pi + (1-\pi) e^{-\lambda}\) Poisson \(\pi, \lambda\) Mixture (perfect + Poisson)
ZINB \(\pi + (1-\pi) \text{NB}(0)\) NB \(\pi, \mu, k\) Mixture + overdispersion
모형 선택 절차

데이터에서 적합한 modified Poisson 선택:

  1. 표준 Poisson 적합: \(\hat\lambda\), \(\hat p_0\), \(e^{-\hat\lambda}\) 비교.
  2. Excess zeros 검정:
    • Vuong test (Vuong 1989): Poisson vs ZIP non-nested test.
    • Score test (van den Broek 1995): 단순한 검정.
  3. Overdispersion 검정:
    • Pearson dispersion (\(\hat\phi\)).
    • LR test (Poisson vs NB).
  4. 두 단계 vs Mixture 결정 (hurdle vs ZIP):
    • 임상적 의미: positive 부분에 0 가능한가?
    • AIC/BIC 비교.
  5. 결과 해석 + 검증:
    • Predicted vs observed 비교.
    • 잔차 진단.
Hurdle vs ZIP 의 결정 기준

Hurdle 적합한 경우:

  • 응답이 본질적으로 두 단계 (binary + count).
  • Positive 부분에 0 의미 없음 (예: 흡연자의 흡연량 ≥ 1).
  • 두 단계가 다른 메커니즘 (의사 결정 후 빈도).

ZIP 적합한 경우:

  • 응답에 두 종류의 0 (구조적 + 우연).
  • Positive 그룹에서 0 도 의미 있음 (예: 환자가 진료 안 받음).
  • Mixture 가 자연 (perfect state 의 비율이 추정 대상).

Mathematical 차이:

  • Hurdle: Truncated Poisson (positive part 의 zero 확률 = 0).
  • ZIP: Untruncated Poisson (positive part 에서도 zero 가능, 그러나 perfect zero 가 추가).

→ Hurdle 의 positive part 의 평균이 더 큼 (truncation 으로 zero 제거됨).

3.8 Zorn (1996) 의 통합 Framework

Dual Regime Data Generating Process

Zorn (1996) 의 통합 view:

  • 데이터가 두 regime 에서 생성:
    • Regime 1: 사건 안 일어남 (zero).
    • Regime 2: 사건 일어남 (count).
  • Regime 결정의 메커니즘이 hurdle vs ZIP 의 차이.

→ 두 모형이 같은 framework 의 special cases.

Hurdle:

  • Regime 1: Zero only (deterministic).
  • Regime 2: Positive only (truncated count).

ZIP:

  • Regime 1: Zero only (deterministic).
  • Regime 2: Untruncated count (zero 가능).
통합의 가치

Zorn 의 통합이 보여주는 것:

  • Hurdle 과 ZIP 가 본질적으로 같은 발상 — “두 메커니즘 결합”.
  • 차이는 단지 두 번째 메커니즘에 zero 허용 여부.

이 view 가 모형 선택을 단순화:

  • 임상적 메커니즘 분석 → 두 번째 부분에 zero 허용 여부 결정.
  • AIC/BIC 비교 → 데이터 적합도.

Bayesian framework 의 강점 — Hurdle, ZIP, ZINB, ZINB-hurdle 등 다양한 변형을 한 framework 에서 비교 가능 (brms 의 family 옵션).

4 응용 분야

분야 Modified Poisson 권고 이유
의료 이용 ZIP 또는 ZINB 두 종류 zero (필요 vs 미필요) + 흔한 overdispersion
흡연 빈도 Hurdle 흡연자 정의상 ≥ 1
사고 발생 ZIP 위험 vs 안전 그룹
보험 청구 Hurdle 또는 ZIP 두 단계 (청구 결정 + 횟수)
자살률 (지역별) Mixed-effects Poisson 지역 클러스터 + 카운트
소비자 구매 Hurdle 또는 ZIP 비구매자 vs 구매자
공정 결함 ZIP 정상 공정 vs 결함 발생 공정
학생 결석 ZINB 결석 안 함 그룹 + overdispersion

5 코드 예시

5.1 Step 1: Poisson 분포의 Mean-Variance 동등 검증

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


# 다양한 lambda 에서 mean-variance 검증
results = []
for lam in [0.5, 1, 2, 5, 10, 20]:
    samples = np.random.default_rng(2026).poisson(lam, size=100000)
    mean = samples.mean()
    var = samples.var()
    ratio = var / mean
    results.append({"lambda": lam, "mean": mean, "var": var, "ratio": ratio})

df_results = pd.DataFrame(results)
print(df_results.round(3))

# Pearson dispersion (overdispersion 진단)
print("\n다양한 lambda 에서 표본 dispersion (1.0 가까우면 Poisson 적합):")
for lam in [0.5, 1, 5]:
    n = 1000
    samples = np.random.default_rng(2026).poisson(lam, size=n)
    pearson_disp = np.sum((samples - lam) ** 2) / lam / (n - 1)
    print(f"  lambda = {lam}: Pearson dispersion = {pearson_disp:.3f}")
시뮬레이션 검증

표본 mean / variance ratio 가 1 에 가까우면 Poisson 의 mean-variance 동등 검증.

실제 데이터에서 Pearson dispersion 진단:

  • 1.0 근처: Poisson 적합.
  • 1.5 이상: Overdispersion 의심.
  • 2.0 이상: 명확한 overdispersion → NB 또는 ZIP 검토.

5.2 Step 2: IRLS 알고리즘 직접 구현

import numpy as np


def poisson_irls(X: np.ndarray, y: np.ndarray, max_iter: int = 50,
                  tol: float = 1e-6) -> dict:
    """Poisson regression 의 IRLS 알고리즘 직접 구현.

    각 iteration:
    1. eta = X @ beta
    2. mu = exp(eta) (= lambda)
    3. z = eta + (y - mu) / mu (working response)
    4. w = mu (weight = lambda for Poisson)
    5. beta = (X' W X)^-1 X' W z
    """
    # 초기값
    beta = np.zeros(X.shape[1])
    beta[0] = np.log(y.mean() + 0.01)  # 절편 = log mean

    for it in range(max_iter):
        eta = X @ beta
        mu = np.exp(eta)
        # Working response (식: eta + (y - mu) / d_mu/d_eta)
        # d_mu / d_eta = mu (log link)
        z = eta + (y - mu) / mu
        # Weight = (d_mu/d_eta)^2 / V(mu) = mu^2 / mu = mu
        w = mu

        # Weighted regression
        W = np.diag(w)
        XtWX = X.T @ W @ X
        XtWz = X.T @ W @ z
        beta_new = np.linalg.solve(XtWX, XtWz)

        # Convergence check
        if np.max(np.abs(beta_new - beta)) < tol:
            return {"beta": beta_new, "converged": True, "iterations": it + 1,
                    "fisher_info": XtWX}
        beta = beta_new

    return {"beta": beta, "converged": False, "iterations": max_iter,
            "fisher_info": XtWX}


# 시뮬레이션
np.random.seed(2026)
n = 1000
x = np.random.normal(size=n)
X = np.column_stack([np.ones(n), x])
beta_true = np.array([0.5, 0.8])
lam = np.exp(X @ beta_true)
y = np.random.poisson(lam)

# IRLS 적합
result = poisson_irls(X, y)
print(f"Converged: {result['converged']} in {result['iterations']} iterations")
print(f"Estimated beta: {result['beta'].round(3)}")
print(f"True beta:      {beta_true}")

# 표준오차 (information matrix 역수)
se_beta = np.sqrt(np.diag(np.linalg.inv(result['fisher_info'])))
print(f"SE: {se_beta.round(4)}")
IRLS 의 작동 원리

IRLS (Iteratively Reweighted Least Squares) 는 GLM 추정의 표준:

  1. 매 iteration 에서 가중 선형 회귀 풀이.
  2. Weight 가 모형에 따라 다름 (Poisson: \(w = \mu\)).
  3. Working response \(z\) 가 link function 의 1 차 Taylor 근사.

검증:

  • 추정 \(\hat\beta\) 가 진짜 \(\beta\) 에 가까움.
  • 표준오차가 information matrix 의 역수.
  • R glm(y ~ x, family = poisson) 와 동일한 결과.

5.3 Step 3: ZIP vs Poisson Vuong Test

import numpy as np
import pandas as pd
from scipy import stats
from scipy.optimize import minimize


def vuong_test(loglik_model1: np.ndarray, loglik_model2: np.ndarray) -> dict:
    """Vuong (1989) test for non-nested models.

    H_0: Two models are equivalent.
    H_a: One model is preferred.
    """
    n = len(loglik_model1)
    diff = loglik_model1 - loglik_model2
    mean_diff = diff.mean()
    var_diff = diff.var()

    # Test statistic ~ N(0, 1)
    z_stat = mean_diff / np.sqrt(var_diff / n)
    p_value = 2 * (1 - stats.norm.cdf(np.abs(z_stat)))

    if p_value < 0.05:
        if z_stat > 0:
            conclusion = "Model 1 (e.g., Poisson) preferred"
        else:
            conclusion = "Model 2 (e.g., ZIP) preferred"
    else:
        conclusion = "Models equivalent"

    return {"z_stat": z_stat, "p_value": p_value, "conclusion": conclusion}


# 시뮬레이션 — ZIP 데이터 (excess zeros)
def simulate_zip(n: int, beta: float, gamma: float, seed: int = 2026):
    rng = np.random.default_rng(seed)
    x = rng.normal(size=n)
    pi = 1 / (1 + np.exp(-(0 + gamma * x)))  # logit pi
    lam = np.exp(0.5 + beta * x)              # log lambda
    is_perfect = rng.binomial(1, pi)
    y = np.where(is_perfect == 1, 0, rng.poisson(lam))
    return {"x": x, "y": y}


data = simulate_zip(n=1000, beta=0.5, gamma=1.0)
y, x = data["y"], data["x"]

# 데이터에서 zero 비율
print(f"실제 zero 비율: {(y == 0).mean():.3f}")
print(f"평균: {y.mean():.3f}, 분산: {y.var():.3f}")
print(f"Variance/Mean ratio: {y.var() / y.mean():.3f} (1.0 가까우면 Poisson)")

# 표준 Poisson 적합 + 잠재적 ZIP 의 log-likelihood 비교는
# R pscl::vuong(zip_fit, poisson_fit) 으로 더 쉬움
R 의 Vuong Test
library(pscl)


# Poisson vs ZIP
fit_poisson <- glm(y ~ x, family = poisson, data = df)
fit_zip <- zeroinfl(y ~ x | x, data = df, dist = "poisson")

# Vuong test
vuong(fit_zip, fit_poisson)
# z > 0 + p < .05 → ZIP 우세

해석:

  • z > 0, p < .05: Model 1 (ZIP) 우세 — excess zeros 명확.
  • z < 0, p < .05: Model 2 (Poisson) 우세 — drop ZIP 권고.
  • |z| 작음: 두 모형 equivalent — Poisson 의 단순성 우선.

대안 진단:

  • AIC/BIC 비교.
  • Score test for excess zeros (van den Broek 1995).
  • Predicted vs observed zero count 비교.

5.4 Step 4: Hurdle vs ZIP 비교 (R)

library(pscl)


# Hurdle 적합 (positive part 는 truncated Poisson)
fit_hurdle <- hurdle(y ~ x | x, data = df, dist = "poisson", zero.dist = "binomial")

# ZIP 적합
fit_zip <- zeroinfl(y ~ x | x, data = df, dist = "poisson")

# 두 모형의 AIC/BIC 비교
cat("Hurdle:\n")
cat("  AIC:", AIC(fit_hurdle), "BIC:", BIC(fit_hurdle), "\n")
cat("ZIP:\n")
cat("  AIC:", AIC(fit_zip), "BIC:", BIC(fit_zip), "\n")

# Vuong test
vuong(fit_hurdle, fit_zip)

# 임상적 해석 — positive part 의 평균 비교
cat("\nPredicted positive mean:\n")
cat("  Hurdle:", mean(predict(fit_hurdle, type = "count")), "\n")
cat("  ZIP:   ", mean(predict(fit_zip, type = "count")), "\n")
실무 결정 — Hurdle vs ZIP

데이터에 따라 결정:

Hurdle 우세 신호:

  • AIC/BIC 가 hurdle 더 작음.
  • Positive 부분의 mean 이 ZIP 의 \(\lambda\) 보다 큼 (truncation 효과).
  • 임상적으로 “positive 에 0 의미 없음” 명확.

ZIP 우세 신호:

  • AIC/BIC 가 ZIP 더 작음.
  • Positive 부분에 0 가능 (mixture 자연).
  • 임상적으로 “두 종류 0” 명확.

둘 다 비슷한 경우:

  • 둘 다 비슷한 fit.
  • 임상적 의미가 더 명확한 모형 선택.
  • 일반적으로 ZIP 가 더 흔함 (literature 표준).

Negative Binomial 확장:

  • 두 모형 모두 NB 변형 가능 (hurdle(..., dist = "negbin"), zeroinfl(..., dist = "negbin")).
  • Overdispersion 강하면 NB 우선.

6 관련 주제

선행 지식

후속 주제 (Ch.12 sub-posts)

  • § 12.3 — ZIP 모형의 깊이 있는 분석 (식 12.7-12.18)
  • § 12.4 — Mixed-effects Poisson + ZIP (식 12.19-12.33)
  • § 12.5 — Suicide rate illustration (Gibbons et al. 2005)
  • § 12.6 — Ch.12 Summary

관련 개념

  • Cohen (1954) — 첫 zero-modified Poisson
  • Mullahy (1986), King (1989) — Hurdle 모형
  • Heilbron (1989, 1994) — ZAP 모형
  • Lambert (1992) — ZIP / ZIP(τ) 정립 (가장 영향력)
  • Greene (1994) — ZINB
  • Zorn (1996) — Hurdle/ZIP 통합 framework
  • Vuong (1989) — Non-nested model test
  • van den Broek (1995) — Score test for excess zeros
  • McCullagh & Nelder (1989) — GLM canonical link
  • Nelder & Wedderburn (1972) — IRLS 알고리즘 원전
  • Hausman et al. (1984), Cameron & Trivedi (1986) — Poisson 응용

Subscribe

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