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 분포의 정의와 도출
\[ 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 분포의 두 가지 자연 출처:
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
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!\).
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 의 결정적 결과:
- Score 의 단순한 형태: 식 (12.5) 의 \(\sum (y_i - \lambda_i) x_i\) — “잔차 × 공변량” 의 합.
- Newton-Raphson = Fisher scoring: Hessian 과 Fisher information 이 동일.
- 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 동등의 증명
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\). 일치.
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 (식 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 \]
식 (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 으로 모형 적합 평가.
2.5 Newton-Raphson = Fisher Scoring (Canonical Link)
Hessian (식 12.6):
\[ H = -\sum_i \lambda_i x_i x_i^\top \]
Information matrix:
\[ I(\beta) = E[-H] = E\left[\sum_i \lambda_i x_i x_i^\top\right] = \sum_i \lambda_i x_i x_i^\top \]
(데이터 무관 — \(\lambda_i\) 자체가 모수의 함수.)
→ Hessian 의 음수 = Information matrix. Canonical link 의 결과.
Canonical link (Poisson 의 log link, Bernoulli 의 logit) 사용 시:
- Newton-Raphson update: \(\beta^{new} = \beta^{old} - H^{-1} \nabla \log L\).
- Fisher scoring update: \(\beta^{new} = \beta^{old} + I^{-1} \nabla \log L\).
Canonical link 에서 \(-H = I\) → 두 알고리즘 동일.
비교 (non-canonical link):
- Probit (Bernoulli) 또는 inverse Gaussian — Newton-Raphson 과 Fisher scoring 다름.
- Newton-Raphson 가 더 빠르지만 unstable 가능 (Hessian 음정치).
- Fisher scoring 더 안정 (Information 항상 양정치).
IRLS (Iteratively Reweighted Least Squares) 로의 변환:
GLM 의 표준 추정 알고리즘. 각 iteration 에서:
- \(\eta_i = x_i^\top \beta^{(t)}\) 계산.
- \(\mu_i = g^{-1}(\eta_i)\) (\(g = \log\) for Poisson).
- \(z_i = \eta_i + (y_i - \mu_i) / [\partial \mu / \partial \eta]\) — working response.
- \(w_i = [\partial \mu / \partial \eta]^2 / V(\mu_i)\) — weight.
- Weighted regression: \(\beta^{(t+1)} = (X^\top W X)^{-1} X^\top W z\).
Poisson + log link 에서 \(w_i = \lambda_i\) — 단순한 weight.
R glm(family = poisson) 가 이 알고리즘 사용. SAS PROC GENMOD, Python statsmodels.GLM 동일.
3 § 12.2 — Modified Poisson Models 의 분류
3.1 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 검토.
저자 본문 인용 — “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 단계
Cohen (1954): 첫 zero-modified Poisson 모형 (covariate-free). Johnson et al. (1992) 에 자세한 설명.
Mullahy (1986), King (1989): Hurdle 모형 — Poisson 분포에서 zero 와 positive 분리. Positive 는 zero-truncated Poisson.
Heilbron (1989, 1994): ZAP (Zero-Altered Poisson) — zero 의 확률을 자유롭게 alter.
Lambert (1992): ZIP (Zero-Inflated Poisson) + ZIP(τ) (functional 관계 모형). 가장 영향력 큰 paper.
Greene (1994): Zero-inflated Negative Binomial (ZINB) — overdispersion + excess zeros 동시 처리.
Zorn (1996): 통합 framework — hurdle 과 ZIP 이 같은 dual regime data generating process 의 special cases.
발전의 두 축:
축 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)
응답이 두 단계로 발생:
단계 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 의 핵심 발상:
- 사람들이 두 단계를 거침: (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)
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 (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)
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 (계획) 에서.
저자 본문 인용:
“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)
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.
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 의 분류표
| 모형 | 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 선택:
- 표준 Poisson 적합: \(\hat\lambda\), \(\hat p_0\), \(e^{-\hat\lambda}\) 비교.
- Excess zeros 검정:
- Vuong test (Vuong 1989): Poisson vs ZIP non-nested test.
- Score test (van den Broek 1995): 단순한 검정.
- Overdispersion 검정:
- Pearson dispersion (\(\hat\phi\)).
- LR test (Poisson vs NB).
- 두 단계 vs Mixture 결정 (hurdle vs ZIP):
- 임상적 의미: positive 부분에 0 가능한가?
- AIC/BIC 비교.
- 결과 해석 + 검증:
- Predicted vs observed 비교.
- 잔차 진단.
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
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 (Iteratively Reweighted Least Squares) 는 GLM 추정의 표준:
- 매 iteration 에서 가중 선형 회귀 풀이.
- Weight 가 모형에 따라 다름 (Poisson: \(w = \mu\)).
- 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) 으로 더 쉬움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 우세 신호:
- 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 Overview — Counts GLMM 의 큰 그림 (식 12.1-12.33)
- § 9.2 Bernoulli MLE — Score 의 같은 형태 (식 9.7)
- § 9.6 추정 — GLM 추정의 일반 framework
- Statistics 포아송 분포 — Poisson 분포 기본
- Statistics 음이항 분포 — Overdispersion 처리
후속 주제 (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 응용