Parameters in the Variance Function — 음이항의 \(k\) 와 반올림 오차 분산

McCullagh & Nelder §11.2 — 분산함수 속에 숨어 있는 구조 모수의 체계적 처리

분산함수 \(V(\mu)\) 내부에 미지의 비-산포(non-dispersion) 모수가 있을 때의 추정 체계를 음이항의 \(k\) 와 반올림 오차 분산 \(V = \tau^2 + \sigma^2 \mu^2\) 를 중심으로 전개한다. Poisson-Gamma 혼합의 유도, canonical link 문제, profile likelihood, Exercise 11.1 의 누율 전개까지 하나의 논리로 정리한다.

Statistics
GLM
저자

Kwangmin Kim

공개

2026년 04월 19일

1 서론 — 분산함수 속 모수가 왜 까다로운가

표준 GLM 의 분산 구조는

\[ \mathrm{var}(Y_i) = \phi \, V(\mu_i) \]

에서 두 역할 을 엄격히 분리한다.

  • \(\phi\)산포 모수(dispersion): 전역 상수. \(\hat\beta\) 의 정규 방정식에서 소거 되므로 \(\phi\) 를 몰라도 \(\hat\beta\) 를 구할 수 있다. 추정은 사후에 Pearson \(X^2/(n-p)\) 등으로 한다
  • \(V(\mu)\)분산함수 형태: 분포족이 정하는 고정 함수. 포아송은 \(V = \mu\), 감마는 \(V = \mu^2\), 이항은 \(V = \pi(1-\pi)/m\)

이 관습이 깨지는 두 상황이 있다.

  1. 음이항(Negative Binomial): \(V(\mu; k) = \mu + \mu^2/k\). 여기서 \(k\)\(\phi\) 처럼 \(\hat\beta\) 에서 분리되지 않는다. \(k\) 가 바뀌면 가중치 \(W = \text{diag}(1/V(\mu_i))\) 가 바뀌어 모든 \(\hat\beta_j\) 가 움직인다.

  2. 반올림 오차: \(V(\mu; \tau^2, \sigma^2) = \tau^2 + \sigma^2 \mu^2\). 두 분산 성분의 비율 \(\sigma^2/\tau^2\) 이 미지. 이 비율이 바뀌면 작은 \(\mu\) 와 큰 \(\mu\)상대 가중치 자체가 변한다.

두 경우 모두 산포가 아닌 구조 모수 가 분산함수에 들어간다. McCullagh & Nelder (1989, §11.2) 는 이들을 GLM 프레임워크 안에서 처리하는 체계를 제시한다.

1.1 직관: \(\phi\)\(k\) 의 기하학적 차이

\(\mathrm{var}(Y_i) = \phi \cdot V(\mu_i)\) 를 그래프로 그리면, \(\phi\)분산 곡선 전체를 위아래로 평행이동 시킨다 (수직 스케일). 모든 관측치의 상대적 가중치 \(1/V(\mu_i)\) 는 불변이다. 따라서 \(\phi\)\(\hat\beta\) 에 영향을 주지 않는다.

반면 \(V(\mu; k) = \mu + \mu^2/k\)\(k\)분산 곡선의 모양 자체를 바꾼다. \(k\) 가 작으면 큰 \(\mu\) 의 분산이 이차적으로 폭발 — 큰 관측치의 가중치가 크게 줄어든다. \(k\) 가 크면 포아송에 가까워져 \(V \propto \mu\). 상대 가중치가 \(k\) 에 의존 하므로 \(\hat\beta\)\(k\) 와 얽힌다.

2 음이항 — Poisson-Gamma 혼합으로부터의 유도

2.1 생성 메커니즘

포아송 모형의 한계: 실제 count 데이터는 종종 \(\mathrm{var}(Y) > E(Y)\)과산포. 포아송 평균 \(\Lambda_i\) 자체가 개체별로 무작위로 변동한다고 가정하자.

\[ \Lambda_i \sim \text{Gamma}(k, \alpha), \qquad Y_i \mid \Lambda_i \sim \text{Poisson}(\Lambda_i) \]

감마 분포의 파라미터화: 형태 \(k\), 척도 \(\alpha\), 따라서 \(E(\Lambda_i) = k\alpha\), \(\mathrm{var}(\Lambda_i) = k\alpha^2\).

주변분포를 구하면:

\[ \Pr(Y = y) = \int_0^\infty \frac{e^{-\lambda} \lambda^y}{y!} \cdot \frac{\lambda^{k-1} e^{-\lambda/\alpha}}{\alpha^k \Gamma(k)} d\lambda \]

이 적분은 감마 함수의 정의로 정리되어

\[ \Pr(Y = y; \alpha, k) = \frac{(y+k-1)!}{y!(k-1)!} \frac{\alpha^y}{(1+\alpha)^{y+k}}, \quad y = 0, 1, 2, \ldots \tag{11.2} \]

2.2 평균과 분산 — 조건부 기댓값 공식

\[ E(Y) = E\!\left[ E(Y | \Lambda) \right] = E(\Lambda) = k\alpha = \mu \]

\[ \mathrm{var}(Y) = E[\mathrm{var}(Y | \Lambda)] + \mathrm{var}[E(Y | \Lambda)] = E(\Lambda) + \mathrm{var}(\Lambda) = k\alpha + k\alpha^2 \]

\(\mu = k\alpha\) 로 치환하면 \(\alpha = \mu/k\), 따라서

\[ \mathrm{var}(Y) = \mu + \mu^2/k \tag{11.3} \]

2.3 직관: 과산포의 두 원천 분해

\(V(\mu) = \mu + \mu^2/k\) 의 두 항은 서로 다른 출처를 가진다.

  • \(\mu\) — 포아송 자체의 분산. \(\Lambda\) 가 고정되었을 때의 conditional variance
  • \(\mu^2/k\) — 개체 간 \(\Lambda\) 의 변동성. \(k\) 가 혼합의 “집중도” 를 결정

\(k \to \infty\) 이면 감마 분포가 \(\mu\) 에 집중 (분산 \(\to 0\)) → 순수 포아송. \(k\) 가 작으면 \(\Lambda\) 가 크게 들쭉날쭉해 마지널 분산이 이차적으로 커진다. \(k\) 는 “과산포 강도의 역수” 로 읽으면 직관이 맞다.

2.5 실무적 선택: 로그 링크 + 음이항 분산함수

실전에서는 canonical link 를 버리고 로그 링크 를 쓴다.

\[ \log \mu_i = \mathbf x_i^T \boldsymbol\beta, \qquad V(\mu_i; k) = \mu_i + \mu_i^2/k \]

  • 장점 1: 링크가 \(k\)분리되어 해석·알고리즘이 단순
  • 장점 2: 포아송 회귀와 동일한 링크라 계수 해석 일관 — \(\beta_j\)로그 rate ratio
  • 장점 3: 로그 링크는 모든 계수 조합에서 \(\mu > 0\) 보장

이 결합이 glm.nb (R), statsmodels.NegativeBinomial (Python) 의 기본 동작이다.

3 \(k\) 의 추정 — 네 가지 경로

3.1 ML 추정: digamma 방정식

\(\boldsymbol\beta\) 를 고정한 상태에서 \(k\) 의 스코어:

\[ \frac{\partial \ell}{\partial k} = \sum_i \left[ \psi(y_i + k) - \psi(k) + \log\!\left(\frac{k}{\mu_i + k}\right) + \frac{y_i - \mu_i}{\mu_i + k} \right] \]

여기서 \(\psi(\cdot)\) 는 digamma 함수. 이 식 \(= 0\)비선형 방정식 — 해석해가 없다. Newton-Raphson 또는 Brent 법으로 푼다.

문제점: digamma 함수 호출로 계산이 느리고, \(\beta\)\(k\) 가 얽혀 이중 반복(외부 \(k\), 내부 IRLS)이 필요.

3.2 Moment matching — Anscombe (1949)

\(\mathrm{var}(Y) = \mu + \mu^2/k\) 를 표본분산과 맞춘다. 단일 표본(공변량 없음)에서

\[ \hat k_{\text{mom}} = \frac{\bar y^2}{s^2 - \bar y} \]

이 단순하고 설명가능하지만, 구조화된 공변량 데이터에서는 일반화가 애매하다.

3.3 Mean deviance = 1

이항·포아송 GLM 에서 \(\phi\) 추정에 쓰는 관습을 \(k\) 에 적용:

\[ \hat k \text{ s.t. } \frac{D(\hat\beta(k); k)}{n - p} = 1 \]

\(k\) 를 격자로 움직이며 각 \(k\) 에서 GLM 을 적합해 이탈도를 계산, 1 에 가장 가까운 \(k\) 선택. 음이항의 saddlepoint 근사에서는 이 조건이 ML 과 유사한 추정을 준다.

3.4 Pearson \(X^2 = n - p\)

\[ \hat k \text{ s.t. } \sum_i \frac{(y_i - \hat\mu_i)^2}{V(\hat\mu_i; k)} = n - p \]

이쪽이 계산적으로 더 안정적이다. Pearson 통계량은 이탈도보다 \(k\) 에 대한 감도가 크고 단조 — 격자 탐색에서 \(k\) 를 유일하게 결정한다.

3.5 직관: 네 추정량이 왜 다른가

같은 \(V\) 를 다른 목적함수 로 접근한다.

방법 무엇을 최적화 언제 쓰나
ML 정확 로그우도 원리적 최적, 표본이 크면 SE 도 최적
Moment 처음 두 모멘트 빠른 초기값, 단일 표본
Deviance = 1 분포의 “올바름” 기준 과산포 정도의 보정용
Pearson = \(n-p\) 분산함수의 경험적 적합 수렴 안정, \(V\) 가 맞는지 감각적 판단

일반적으로 ML 이 효율적이지만, 표본 크기가 작거나 분포 가정이 불확실할 때는 Pearson 매칭이 더 robust 하다.

4 음이항 적합 알고리즘 — Profile + IRLS

4.1 이중 반복 구조

외부 루프: k 갱신
  ├── 내부 루프: k 고정, 로그 링크로 GLM 적합 (IRLS)
  │       → hat_beta, hat_mu_i
  └── k 업데이트: 스코어 방정식 or moment 매칭
수렴: |k_new - k_old| < tolerance

4.2 왜 이 구조가 필요한가

\(V(\mu; k)\)\(k\) 에 의존하므로 가중치 \(W = \text{diag}(1/V(\mu_i; k))\)\(k\) 와 얽힌다. \(\boldsymbol\beta\)\(k\) 를 동시에 풀면 연립 비선형 방정식이 되지만 — 이를 변수 분리(variable splitting) 로 접근하면 각 하위 문제가 단순해진다.

  • \(k\) 고정 시 \(\boldsymbol\beta\): 표준 IRLS (닫힌형 반복)
  • \(\boldsymbol\beta\) 고정 시 \(k\): 일변수 비선형 방정식 (Brent or Newton)

이 전략은 coordinate descent 의 예시로, mixed model 의 \((\boldsymbol\beta, \boldsymbol\sigma)\) 분리 적합과 같은 철학이다.

4.3 Profile likelihood 로 신뢰구간 구성

\(k\) 의 프로파일 로그우도:

\[ \ell_p(k) = \max_{\boldsymbol\beta} \ell(\boldsymbol\beta, k) \]

95% 신뢰구간:

\[ \left\{ k : 2(\ell_p(\hat k) - \ell_p(k)) < \chi^2_{1, 0.05} \right\} \]

Wald 구간보다 profile 이 나은 이유: \(k\) 의 로그우도는 보통 비대칭(오른쪽 꼬리가 길다). \(\hat k\) 의 표준오차로 만든 대칭 구간은 상한을 과소, 하한을 음수 까지 보낼 위험이 있다 (\(k > 0\) 이어야 함에도). Profile 은 이 경계를 자연스럽게 존중한다.

5 Manton et al. (1981) — \(\alpha\)\(k\) 모두 공변량 의존

기본 음이항 GLM: \(\alpha\) 만 공변량에 따라 변하고 \(k\) 는 전역 상수. 이는 “과산포 강도가 모든 관측치에서 동일” 이라는 제약.

Manton et al. 은 둘 다 공변량에 의존:

\[ \log \alpha_i = \mathbf x_i^T \boldsymbol\beta, \qquad \log k_i = \mathbf u_i^T \boldsymbol\gamma \]

언제 필요한가: 집단별로 과산포 정도가 다른 것이 실질적 관심사일 때.

  • 보험: 운전자 유형별 claim 평균과산포 모두 다를 수 있음
  • 질병 지도: 지역별 발생 rate 와 개인 간 변동 모두 추정 대상
  • 생태: 서식지별 개체수 평균과 집락(clustering) 강도 분리

이 모형은 McCullagh-Nelder 의 표준 GLM 프레임워크를 벗어난다 — Ch.10 의 joint mean-dispersion 과 구조적으로 유사하나, \(k\) 가 dispersion parameter 가 아니라는 점에서 다르다.

5.1 왜 Ch.10 의 이중 GLM 으로 부족한가

Ch.10 의 이중 GLM 은 평균·산포 두 선형 예측자 를 병렬로 두고 두 루프를 교대로 적합한다. 이것이 가능한 이유는 Fisher 정보 행렬이 \((\boldsymbol\beta, \boldsymbol\gamma)\) 에 대해 블록 대각 이기 때문 — \(\phi\) 변화가 \(\hat\beta\) 를 “평행 이동” 시키지 않는다 (§09-1 의 기하학적 직관).

그러나 음이항의 \(k\) 는 산포 모수가 아니라 분산함수 \(V(\mu; k) = \mu + \mu^2/k\) 의 형태 모수 다. \(\log k_i = \mathbf u_i^T \boldsymbol\gamma\) 로 놓으면 \(V\) 자체가 관측치마다 곡선 모양을 바꾸고, \(\hat\beta\) 의 정규 방정식에서 \(\gamma\) 를 깨끗이 분리할 수 없다. 블록 대각 구조가 깨지므로 이중 IRLS 대신 \((\beta, \gamma)\) 결합 Newton-Raphson 또는 Laplace/AGQ 근사가 필요하다.

5.2 현대적 구현

  • NBMM (Negative Binomial Mixed Model): 개체별 무작위 효과 \(b_i\) 를 도입해 \(Y_i \mid b_i \sim \text{NB}(\mu_i, k)\) 로 조건부 음이항. R glmmTMB::glmmTMB(..., family = nbinom2) 가 표준이며, Python 은 statsmodelsGLMM 확장이 제한적으로 지원한다
  • GAMLSS (Generalized Additive Models for Location, Scale and Shape): 분포의 모든 모수 (\(\mu\), \(\sigma\), \(\nu\), \(\tau\)) 를 각각 독립된 공변량 선형 예측자로 설명하는 일반 프레임워크. R gamlss 패키지가 NB 의 \(k\) 공변량 의존을 표준 지원하며, Box-Cox-t·Box-Cox-Cole-Green 등 다중 모수 분포까지 확장 가능

실무 지침: \(k\) 가 공변량에 의존한다는 구체적 근거 (예: 집단별 \(\hat k\) 추정치의 체계적 차이) 가 있을 때만 이 확장을 고려한다. 근거 없이 도입하면 식별성 붕괴로 \(\hat\gamma\) 의 표준오차가 폭발하고 수렴이 실패하는 경우가 흔하다.

6 반올림 오차 분산함수 — \(V = \tau^2 + \sigma^2 \mu^2\)

6.1 동기 — 기록 관행이 만드는 이분산성

감마 오차를 가진 양의 연속 측정값 (예: 반응 시간, 수명, 소득)을 고정 소수점 으로 기록하면 분산 구조가 어떻게 바뀌는가.

순수 감마: \(\mathrm{var}(Z) = \sigma^2 \mu^2\) (\(\sigma = 1/\sqrt{\text{shape}}\), 비례 오차) 기록 단위 \(\epsilon = 10^{-d}\): \(Y = \epsilon \lfloor Z/\epsilon \rceil\) (가장 가까운 정수 배로 반올림)

6.2 Exercise 11.1 의 핵심 결과

Kolassa & McCullagh (1987) 증명: \(\epsilon\) 이 작을 때 \(R = (Z - Y)/\epsilon\)\([-1/2, 1/2]\) 의 균등분포 에 점근적으로 독립이다. 정확하게는

\[ \kappa_r(Y) \simeq \begin{cases} \kappa_r(Z) & r \text{ 홀수} \\ \kappa_r(Z) + \epsilon^r \kappa_r(R) & r \text{ 짝수} \end{cases} \]

\(R\) 의 누율: \(\kappa_2(R) = 1/12\), \(\kappa_4(R) = -1/120\), 홀수 누율은 0.

6.3 직관: 왜 짝수 누율만 증가하는가

\(R\)대칭 분포 (\([-1/2, 1/2]\) 의 uniform). 따라서 홀수 모멘트와 누율이 0. 반올림이 가하는 “무작위 노이즈” 는 평균과 비대칭을 건드리지 않고 분산·첨도만 부풀린다.

\(Z\)\(Y\) 의 첫째 누율(평균)은 같다 — 반올림이 편향을 만들지 않는다 (대칭 반올림이므로). 둘째 누율(분산)은

\[ \mathrm{var}(Y) \simeq \mathrm{var}(Z) + \epsilon^2 \kappa_2(R) = \mathrm{var}(Z) + \epsilon^2/12 \tag{11.5} \]

상수 \(\epsilon^2/12\) 가 분산에 더해진다. 이것이 \(V(\mu) = \sigma^2 \mu^2 + \epsilon^2/12\) 로 나타나는 이유다. 통상 \(\tau^2 \equiv \epsilon^2/12\) 로 쓴다.

6.4 Exercise 11.2 — 감마 분포 + \(d\) 소수점 반올림

\(Z \sim \text{Gamma}(\text{shape} = \nu, \text{mean} = \mu_Z)\), \(\mathrm{var}(Z) = \mu_Z^2/\nu\). 반올림 후

\[ \mathrm{var}(Y) \simeq \frac{\mu_Z^2}{\nu} + \frac{\epsilon^2}{12} \tag{11.6} \]

첫 항은 비례 오차, 둘째 항은 상수 반올림 오차. 유효 숫자 반올림 (scientific notation 의 유효 자릿수 \(d\)) 이면 \(\epsilon \propto \mu\) 이므로 둘째 항도 \(\mu^2\) 에 비례 — 분산 구조가 다시 \(\propto \mu^2\) 로 돌아온다.

6.5 분산 구조가 주는 실무적 함정

순수 감마 GLM 은 \(V(\mu) \propto \mu^2\) 를 가정하여 가중치 \(w_i \propto 1/\mu_i^2\) 을 쓴다. 작은 \(\mu\) 의 관측치가 큰 가중치를 받는다.

문제: 작은 \(\mu\) 에서는 반올림 오차 \(\epsilon^2/12\) 이 비례 오차를 지배 하므로 실제 분산이 모형보다 크다. 가중치가 과대평가 → 계수 추정이 작은 \(\mu\) 데이터에 과적합.

수정된 가중치:

\[ w_i = \frac{1}{\tau^2 + \sigma^2 \mu_i^2} \]

작은 \(\mu_i\) 에서 \(\tau^2\) 이 지배, 큰 \(\mu_i\) 에서 \(\sigma^2 \mu_i^2\) 이 지배. 상대 가중치가 부드럽게 전환된다.

6.6 \(\sigma^2/\tau^2\) 의 추정

음이항의 \(k\) 와 같은 방식.

  1. \(\tau^2, \sigma^2\) 초기값 설정 (예: \(\tau^2 = \epsilon^2/12\) 알려진 값, \(\sigma^2 = 1\))
  2. 로그 링크 + \(V(\mu; \tau^2, \sigma^2)\) 로 quasi-likelihood GLM 적합 → \(\hat\mu_i\)
  3. Pearson 통계량이 \(n - p\) 가 되도록 \(\sigma^2/\tau^2\) 조정
  4. 수렴까지 반복

Quasi-likelihood 체계(McCullagh §9.2) 에서 분포 가정 없이 \(V(\mu; k)\) 만 올바르면 \(\hat\beta\) 의 consistency 가 보장된다. \(\tau^2, \sigma^2\) 자체가 실무적 관심사가 아닐 때는 Pearson 매칭으로 충분.

7 응용 분야

분야 활용 구체적 예시
공정 품질 결함 수 count 반도체 wafer 의 defect count, 과산포 음이항
보건 역학 질병 발생 rate 지역별 희귀 암 count, Poisson 대신 NB 로 overdispersion 흡수
마케팅 클릭·구매 수 광고 노출당 클릭 분포, NB regression 의 \(k\) 가 고객 이질성
운영 리서치 콜센터 호출 수 시간대·팀별 호출 count, 과산포가 작업 로드 변동을 반영
반응 시간 측정 ms 단위 기록 심리학 실험의 RT 데이터, 반올림 분산함수
금융 데이터 가격·거래량 정수 tick size 반올림, \(\tau^2\) 성분이 microstructure 노이즈
천문학 사진 측광 디지털 CCD count 의 Poisson 노이즈 + 읽기 잡음 (상수 \(\tau^2\))
생태 개체수 Count 데이터 종 분포의 과산포, NB regression 기본 도구

8 예시 — 자동차 보험 claim 수 (음이항 적용)

운전자 \(i\) 의 claim 수 \(Y_i\), 연령·경험·지역 공변량 \(\mathbf x_i\). 포아송 모형을 적합했더니 Pearson \(X^2/(n-p) = 2.4\) → 과산포.

음이항 모형:

\[ \log \mu_i = \mathbf x_i^T \boldsymbol\beta, \qquad \mathrm{var}(Y_i) = \mu_i + \mu_i^2/k \]

\(\hat k = 1.8\) 추정. 해석: \(\mu = 0.1\) 에서 포아송 분산은 0.1, 음이항 분산은 \(0.1 + 0.01/1.8 = 0.106\) (거의 포아송과 같음). \(\mu = 2\) 에서 포아송 2, 음이항 \(2 + 4/1.8 = 4.22\) (두 배 이상). 과산포가 고위험 운전자에서 집중적으로 나타난다 는 실무적 통찰을 수식이 그대로 보여준다.

9 코드 예시 — 음이항 + 반올림 분산

9.1 Step 1: Python — NB 의 \(k\) 직접 추정

import numpy as np
from scipy.special import digamma, gammaln
from scipy.optimize import brentq

rng = np.random.default_rng(7)
n = 300
x = rng.normal(size=n)
mu = np.exp(0.3 + 0.5 * x)
k_true = 2.0
# Negative binomial 샘플링: Poisson-Gamma 혼합
lam = rng.gamma(k_true, mu / k_true)
y = rng.poisson(lam)

def nb_glm_inner(x, y, k, n_iter=50, tol=1e-8):
    """k 고정하고 NB GLM (로그 링크) 적합 — IRLS."""
    X = np.column_stack([np.ones(n), x])
    beta = np.array([np.log(y.mean() + 1e-6), 0.0])
    for _ in range(n_iter):
        eta = X @ beta
        mu_hat = np.exp(eta)
        V = mu_hat + mu_hat ** 2 / k
        w = mu_hat ** 2 / V                        # 로그 링크: dmu/deta = mu
        z = eta + (y - mu_hat) / mu_hat
        WX = X * w[:, None]
        beta_new = np.linalg.solve(X.T @ WX, X.T @ (w * z))
        if np.max(np.abs(beta_new - beta)) < tol:
            beta = beta_new
            break
        beta = beta_new
    return beta, mu_hat

def nb_loglik(k, x, y):
    beta, mu_hat = nb_glm_inner(x, y, k)
    ll = np.sum(
        gammaln(y + k) - gammaln(k) - gammaln(y + 1)
        + k * np.log(k / (mu_hat + k))
        + y * np.log(mu_hat / (mu_hat + k))
    )
    return ll

# Profile likelihood 로 k 탐색
k_grid = np.linspace(0.3, 8.0, 40)
lls = np.array([nb_loglik(k, x, y) for k in k_grid])
k_hat_profile = k_grid[np.argmax(lls)]

# Brent 법으로 스코어 = 0 찾기 (정밀화)
def score_k(k):
    beta, mu_hat = nb_glm_inner(x, y, k)
    return np.sum(
        digamma(y + k) - digamma(k)
        + np.log(k / (mu_hat + k))
        + (y - mu_hat) / (mu_hat + k)
    )

k_hat = brentq(score_k, 0.3, 8.0)
beta_hat, _ = nb_glm_inner(x, y, k_hat)

print(f"k_hat (profile grid) = {k_hat_profile:.3f}")
print(f"k_hat (Brent)        = {k_hat:.3f}   (true = {k_true})")
print(f"beta_hat             = {beta_hat}  (true = [0.3, 0.5])")

gammaln 을 이용해 factorial 을 로그 스케일에서 안정적으로 계산한다. 내부 IRLS 는 mu_hat.var() 이 큰 값에서도 overflow 없이 동작.

9.2 Step 2: R — MASS::glm.nb 표준 적합

library(MASS)
set.seed(7)
n <- 300
x <- rnorm(n)
mu <- exp(0.3 + 0.5 * x)
k_true <- 2.0
lam <- rgamma(n, shape = k_true, scale = mu / k_true)
y <- rpois(n, lam)

fit <- glm.nb(y ~ x, link = log)
summary(fit)
cat("theta (k) =", fit$theta, "  true =", k_true, "\n")

# Profile likelihood 로 k 의 95% 신뢰구간
confint(profile(fit))               # 각 계수
# k 의 profile CI 는 fit$SE.theta 와 fit$theta 로부터 비대칭 구성
k_profile <- MASS:::profile.glm(fit, which = "theta")

glm.nbnbinomial family 의 특수화로, \(k\) (R 에서는 theta) 의 ML 추정을 digamma 방정식으로 내부 처리한다.

9.3 Step 3: 반올림 분산함수 시뮬레이션

import numpy as np
import statsmodels.api as sm

rng = np.random.default_rng(42)
n = 500
x = rng.uniform(0.5, 5.0, n)
mu_true = np.exp(1.0 + 0.3 * x)
shape = 10.0                                    # sigma^2 = 1/shape = 0.1
z = rng.gamma(shape, mu_true / shape)           # 순수 감마

eps = 0.1                                        # 소수점 1자리 반올림
y = eps * np.round(z / eps)

# 순수 감마 GLM (잘못된 모형)
X = sm.add_constant(x)
fit_gamma = sm.GLM(y, X, family=sm.families.Gamma(link=sm.families.links.log())).fit()

# Quasi-likelihood with V(mu) = tau^2 + sigma^2 mu^2
tau2 = eps ** 2 / 12
sigma2 = 1.0 / shape

def irls_with_rounding(y, X, tau2, sigma2_guess, n_iter=30):
    beta = np.array([np.log(y.mean()), 0.0])
    sigma2 = sigma2_guess
    for _ in range(n_iter):
        eta = X @ beta
        mu = np.exp(eta)
        V = tau2 + sigma2 * mu ** 2
        w = mu ** 2 / V
        z = eta + (y - mu) / mu
        WX = X * w[:, None]
        beta = np.linalg.solve(X.T @ WX, X.T @ (w * z))
        # Pearson 매칭으로 sigma2 갱신
        resid = y - np.exp(X @ beta)
        pearson = np.sum(resid ** 2 / (tau2 + sigma2 * np.exp(X @ beta) ** 2))
        sigma2 *= pearson / (n - X.shape[1])
    return beta, sigma2

beta_rob, sigma2_hat = irls_with_rounding(y, X, tau2, sigma2)
print(f"순수 감마 GLM beta  = {fit_gamma.params}")
print(f"반올림 보정 beta    = {beta_rob}  (true = [1.0, 0.3])")
print(f"sigma^2 estimate   = {sigma2_hat:.4f}  (true = {1/shape})")

반올림 보정 모형은 작은 \(\mu\) 에서 \(\tau^2\) 성분이 가중치를 안정시켜 절편 추정이 덜 왜곡된다.

10 진단과 실무 가이드

진단 어떤 문제를 잡는가
Pearson \(X^2/(n-p)\) 포아송 적합 후 1 초과 → 과산포, 음이항 고려
\(\hat k\) 의 profile CI Wald 구간이 0 을 포함하면 profile 로 확인 — \(k > 0\) 경계
\(\log V(\hat\mu_i)\) vs \(\log \hat\mu_i\) 기울기 2 → \(V \propto \mu^2\) (감마), 기울기 1 → 포아송, 그 사이 → NB
작은 \(\hat\mu\) 잔차의 이상 분산 반올림·검출 한계 등 상수 분산 성분 의심 → \(V = \tau^2 + \sigma^2 \mu^2\)
NB vs Poisson LRT \(H_0: 1/k = 0\) 의 경계 검정 — \(\chi^2_1\)\(1/2\) 혼합

실무 체크리스트:

  1. 포아송 GLM 부터 적합. Pearson \(X^2/(n-p) \gg 1\) 이면 과산포 진단
  2. 과산포 원인 고려: 진짜 혼합 (NB), 영 초과 (ZINB), 무작위 효과 (mixed model)? NB 는 가장 간단
  3. \(\hat k\) 가 매우 작으면 (< 0.5) NB 의 이차항이 과대 — 데이터에 극단치나 혼합 구조 재점검
  4. \(\hat k\) 가 매우 크면 (> 50) 포아송과 구분 안 됨 — NB 사용의 근거 약함
  5. 측정 반올림이 심한 continuous outcome 은 \(V = \tau^2 + \sigma^2 \mu^2\) quasi-likelihood 로 가중치 보정

11 Bibliographic Notes

  • Anscombe (1949): 음이항 \(k\) 의 모멘트·최대우도 추정. 단일 표본·다수 표본 처리
  • Cameron & Trivedi (1998): Count regression 의 현대 표준 교과서. NB1, NB2 구분 체계
  • Manton et al. (1981): \(\alpha\)\(k\) 모두 공변량 의존시키는 일반화. 지역별 사망률 데이터
  • Kolassa & McCullagh (1987): Rounding error 의 점근 누율 유도 (Exercise 11.1)
  • Hilbe (2011): Negative Binomial Regression 전용 단행본. 수렴 문제·profile likelihood 상세
  • Lawless (1987): NB regression 의 ML vs moment 추정 비교
  • Breslow (1984): quasi-likelihood 관점에서의 과산포 처리

12 정리

분산함수 속 구조 모수는 산포 모수 \(\phi\) 와 근본적으로 다르다. \(\hat\beta\) 의 정규 방정식에서 분리되지 않아 이중 반복 알고리즘이 필요하며, 분포 가정의 강도가 링크·공분산 해석에까지 영향을 미친다.

  1. 음이항의 \(k\) 는 Poisson-Gamma 혼합의 집중도로 해석되며, \(V(\mu) = \mu + \mu^2/k\) 의 이차항을 통해 과산포를 흡수한다
  2. Canonical link 는 \(k\) 에 의존하므로 실무에서는 로그 링크 + NB 분산함수 조합이 표준
  3. \(k\) 의 추정은 ML (digamma 방정식), moment, deviance=1, Pearson=\(n-p\) 의 네 경로 — 표본 크기·안정성에 따라 선택
  4. Profile likelihood 는 Wald 보다 비대칭 CI 를 정확히 반영하여 \(k\) 의 경계(\(k > 0\))를 존중
  5. 반올림 오차는 상수 분산 성분 \(\tau^2 = \epsilon^2/12\) 를 추가하여 \(V(\mu) = \tau^2 + \sigma^2 \mu^2\) 꼴로 나타나며, 작은 \(\mu\) 에서 가중치를 안정화

다음 절(§11.3) 은 연결함수 속 비선형 모수 — Box-Cox 멱 링크와 Pregibon 선형화 — 를 다룬다.

13 관련 주제

선행 지식

후속 주제

  • Parameters in the Link Function — Box-Cox \(\lambda\)·Pregibon 선형화 (McCullagh §11.3)
  • Non-linear Parameters in the Covariates — Box-Tidwell (McCullagh §11.4)
  • Zero-Inflated Count Models — NB 를 넘어선 과산포 처리 (현대 확장)
  • Negative Binomial Mixed Model — 다수준 count 데이터 (Manton 확장의 현대 버전)

관련 개념

Subscribe

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