1 왜 GLM 의 잔차는 한 가지로 부족한가
정규 선형모형에서 잔차는 단순하다. 관측값을 적합값과 편차로 분해한다.
\[ y_i \;=\; \hat\mu_i \;+\; (y_i - \hat\mu_i),\qquad r_i = y_i - \hat\mu_i \]
이 “원시 잔차 (raw residual)” 하나로 적합의 타당성, 분산 구조, 링크 함수의 적절성, 이상치 진단을 모두 해 낼 수 있다. 그 전제는 두 가지다.
- 등분산성: 모든 관측의 분산이 \(\sigma^2\) 으로 동일하므로 \(r_i\) 크기끼리 직접 비교 가능.
- 정규성: \(r_i \sim \mathcal N(0,\sigma^2)\) 로 근사되므로 Q-Q plot·표준화 기준이 명확.
GLM 에서는 둘 다 깨진다. Poisson 이면 \(\mathrm{Var}(Y_i)=\mu_i\) 로 평균에 따라 분산이 달라지고, 이항이면 \(\mu_i(1-\mu_i/m)\) 로 끝단에서 분산이 0 에 수렴한다. 감마·역가우스는 분포 자체가 비대칭이다. 원시 잔차 \(y_i - \hat\mu_i\) 를 그대로 그리면 큰 \(\hat\mu\) 지점에서만 잔차가 크게 보이는 겉보기 이분산 이 나타난다. 이 패턴이 모형의 결함인지 단순히 분포 특성인지 구분이 안 된다.
따라서 GLM 에는 “정규 잔차가 해 주던 일” 을 대신할 일반화된 잔차 가 필요하다. McCullagh & Nelder 는 §2.4 에서 세 종류를 제안한다.
| 잔차 | 한 줄 요약 | 주목적 |
|---|---|---|
| Pearson \(r_P\) | 원시 잔차를 분산으로 표준화 | 분산 이질성 제거, \(X^2\) 분해 |
| Anscombe \(r_A\) | 분포를 정규에 가깝게 변환 후 잔차 | Q-Q plot·정규 가정 진단 |
| Deviance \(r_D\) | 이탈도 \(D\) 의 관측 단위 기여분 | 적합도 분해, 종합 진단 도구 |
직관: Pearson 은 “분산 맞춤”, Anscombe 는 “모양 맞춤”, Deviance 는 “우도 기반 종합”. 정규분포에서는 셋이 모두 원시 잔차로 수렴하므로 GLM 의 잔차 이론은 OLS 잔차의 세 가지 결을 자연스럽게 일반화한 셈이다.
2 Pearson Residual — 분산으로 표준화된 원시 잔차
\[ r_P \;=\; \frac{y - \mu}{\sqrt{V(\mu)}} \]
여기서 \(V(\mu)\) 는 분포의 분산함수 (variance function) 다 (Poisson: \(\mu\), Binomial: \(\mu(1-\mu/m)\), Gamma: \(\mu^2\), Normal: \(1\)).
실무에서는 \(\mu\) 대신 추정치 \(\hat\mu\) 를 대입한 \(\hat r_P = (y-\hat\mu)/\sqrt{V(\hat\mu)}\) 를 사용한다.
2.1 왜 Pearson 이라는 이름인가
이름의 유래는 일반화 Pearson \(X^2\) 통계량과의 관계에서 온다. Pearson 잔차를 제곱해 전부 합하면 Pearson \(X^2\) 가 된다.
\[ \sum_{i=1}^n r_{P,i}^2 \;=\; \sum_{i=1}^n \frac{(y_i-\hat\mu_i)^2}{V(\hat\mu_i)} \;=\; X^2 \]
즉 Pearson 잔차는 \(X^2\) 통계량의 “부호 있는 제곱근(signed square root) 성분” 이다. 한 관측이 \(X^2\) 에 얼마나 기여했는지, 그 방향이 어느 쪽인지를 동시에 보여 준다.
Poisson 에 대입하면 \(r_P = (y-\mu)/\sqrt\mu\) 로 교과서의 전통적 “표준화된 편차” 형태가 나온다. 이항이면 \(r_P = (y-m\hat\pi)/\sqrt{m\hat\pi(1-\hat\pi)}\) — 성공·실패 2×2 표의 Pearson 카이제곱 기여분과 같다.
2.2 한계 — 왜 Pearson 하나로는 부족한가
Pearson 잔차는 평균 0, 분산 1 로 만들어 주지만 분포 모양(특히 왜도·첨도)은 보존하지 않는다. Poisson 에서 \(\mu\) 가 작으면 \(r_P\) 의 분포는 오른쪽으로 크게 치우친다 (작은 \(\mu\) 일수록 \(y\) 가 0 이 아니면 편차가 급격히 커짐). 이 상태로 Q-Q plot 을 그리면 “모형 이상” 과 “분포 이상” 을 구분할 수 없다.
직관: Pearson 은 자를 맞췄을 뿐, 자 위에 찍힌 점들의 모양은 여전히 분포 고유의 비대칭성을 반영한다. 정규성 기반 진단 기법을 쓰려면 한 단계 더 필요하다.
3 Anscombe Residual — 분포를 정규에 가깝게 변환
Anscombe (1953) 의 아이디어는 단순하다. “어차피 \(y\) 자체는 비대칭이라면, \(y\) 에 변환 \(A(\cdot)\) 을 걸어 \(A(Y)\) 가 대략 정규가 되도록 만든 후 그 스케일에서 잔차를 정의하자.”
3.1 변환 함수의 선택
어떤 변환 \(A(\cdot)\) 이 지수족에서 “가장 정규에 가깝게” 만드는가? Wedderburn (미공개; Barndorff-Nielsen, 1978 에 수록) 의 결과는 다음이다.
\[ A(\mu) \;=\; \int \frac{d\mu}{V^{1/3}(\mu)} \]
즉 분산함수 \(V\) 의 세제곱근으로 나눈 양을 적분한 함수다. 이 선택은 우도함수의 3차 cumulant (왜도) 를 일차적으로 제거한다 — 지수족에서 정규성에 가장 큰 방해가 되는 성분을 체계적으로 지우는 변환이다.
3.2 Pearson 처럼 분산으로도 표준화
\(A(Y)\) 는 “모양” 은 정규에 가까워져도 분산은 여전히 \(\mu\) 에 의존한다. 1차 델타 방법으로
\[ \mathrm{Var}\{A(Y)\} \;\approx\; \{A'(\mu)\}^2 V(\mu) \;=\; V^{1/3}(\mu) \]
가 되므로 \(A'(\mu)\sqrt{V(\mu)} = V^{1/3}(\mu)\cdot V^{1/2}(\mu)/V^{1/3}(\mu)\) 같은 대응이 필요하다 (교재는 “first-order variance” 로 \(A'(\mu)\sqrt{V(\mu)}\) 를 쓴다). 결국 Anscombe 잔차는
\[ r_A \;=\; \frac{A(y) - A(\mu)}{A'(\mu)\sqrt{V(\mu)}} \]
로 정의한다. 형태만 보면 \((y-\mu)/\sqrt{V(\mu)}\) 의 Pearson 잔차를 “변환된 척도 \(A\)” 로 옮긴 버전이다.
3.3 분포별 Anscombe 잔차
\(V(\mu)\) 를 대입해 적분하면 분포별 공식이 나온다.
| 분포 | \(V(\mu)\) | \(A(\mu)\) | \(r_A\) |
|---|---|---|---|
| Poisson | \(\mu\) | \(\tfrac{3}{2}\mu^{2/3}\) | \(\dfrac{\tfrac{3}{2}(y^{2/3}-\mu^{2/3})}{\mu^{1/6}}\) |
| Gamma | \(\mu^2\) | \(3\mu^{1/3}\) | \(\dfrac{3(y^{1/3}-\mu^{1/3})}{\mu^{1/3}}\) |
| Inverse Gaussian | \(\mu^3\) | \(\log\mu\) | \(\dfrac{\log y - \log\mu}{\mu^{1/2}}\) |
Poisson 의 “2/3 승 변환” 은 Anscombe 가 직접 제안한 고전 결과이며, 감마의 “세제곱근 변환” 은 Wilson & Hilferty (1931) 가 \(\chi^2\) 분포를 정규화하기 위해 썼던 변환과 같다. 이항 분포의 Anscombe 잔차 형태는 Anscombe (1953), Cox & Snell (1968) 에 자세히 있다.
직관: Poisson 값을 세 등분점에서 찍어 보면, \(y^{2/3}\) 은 원본 \(y\) 보다 훨씬 대칭적이다. Anscombe 잔차는 이 사실을 활용해 “변환 후 비교” 를 표준화한다.
3.4 한계
Anscombe 잔차는 이론적으로 가장 정규에 가깝다 는 장점이 있지만, 수식이 분포별로 다르고 적분이 필요하다는 계산·표기의 번잡성 이 단점이다. 소프트웨어에서 기본 제공되지 않는 경우가 많아, 실무에서는 Deviance 잔차가 더 자주 쓰인다.
4 Deviance Residual — 이탈도의 관측 단위 기여분
이탈도 \(D = \sum d_i\) 는 각 관측이 \(d_i \ge 0\) 으로 기여한다 (이탈도 자체가 음이 아닌 성분들의 합이다). Deviance 잔차는 이 기여분의 부호 있는 제곱근이다.
\[ r_D \;=\; \mathrm{sign}(y-\mu)\sqrt{d_i} \]
여기서 \(d_i\) 는 \(i\) 번째 관측의 이탈도 기여분이며, \(\sum r_{D,i}^2 = D\) 가 성립한다.
분포별 형태.
| 분포 | \(r_D\) |
|---|---|
| Normal | \(y - \mu\) (원시 잔차와 일치) |
| Poisson | \(\mathrm{sign}(y-\mu)\sqrt{2\{y\log(y/\mu) - (y-\mu)\}}\) |
| Binomial | \(\mathrm{sign}(y-\mu)\sqrt{2\{y\log(y/\mu) + (m-y)\log[(m-y)/(m-\mu)]\}}\) |
| Gamma | \(\mathrm{sign}(y-\mu)\sqrt{2\{-\log(y/\mu) + (y-\mu)/\mu\}}\) |
4.1 왜 가장 자주 쓰이는가
Deviance 잔차는 세 가지 실무적 장점으로 기본값으로 자리 잡았다.
- 분해성: \(\sum r_D^2 = D\) — 관측별로 어떤 점이 이탈도에 얼마나 기여했는지 곧바로 읽힌다. Pearson 이 \(X^2\) 를 분해하듯, Deviance 잔차는 \(D\) 를 분해한다.
- 정규 근사 품질: Anscombe 만큼은 아니지만 Pearson 보다 상당히 정규에 가깝다. 테일러 전개를 하면 \(r_D\) 와 \(r_A\) 가 거의 수치적으로 일치한다는 결과가 나온다 (§2.4.3, 아래 수치 비교 표).
- 계산 편의: 이탈도를 이미 계산하므로 \(d_i\) 를 재활용만 하면 된다. 별도 적분·변환 불필요.
직관: Deviance 잔차는 “적합도 그 자체의 현미경” 이다. 전체 이탈도가 어느 관측에서 쌓였는지 한 장의 그림으로 보여 준다.
5 세 잔차의 수치 비교 — Poisson 예시
\(y=c\mu\) (즉 관측/기대 비율 \(c\)) 로 두면 세 잔차가 \(\mu\) 의 함수로 단순화된다. McCullagh & Nelder Table 2.2 의 결과를 요약한다.
\[ \begin{aligned} r_A &= \tfrac{3}{2}\mu^{1/2}(c^{2/3}-1) \\ r_D &= \mathrm{sign}(c-1)\,\mu^{1/2}\sqrt{2(c\log c - c + 1)} \\ r_P &= \mu^{1/2}(c-1) \end{aligned} \]
\(\mu\) 공통 요소를 제거한 비율만 보면 다음과 같다 (\(c=1\) 기준 대칭성 확인).
| \(c\) | \(r_A\) 성분 \(\tfrac{3}{2}(c^{2/3}-1)\) | \(r_D\) 성분 \(\sqrt{2(c\log c - c+1)}\) (부호 포함) | \(r_P\) 성분 \(c-1\) |
|---|---|---|---|
| 0.0 | \(-1.500\) | \(-1.414\) | \(-1.000\) |
| 0.2 | \(-0.987\) | \(-0.956\) | \(-0.800\) |
| 0.4 | \(-0.686\) | \(-0.683\) | \(-0.600\) |
| 0.6 | \(-0.433\) | \(-0.432\) | \(-0.400\) |
| 1.0 | \(0.000\) | \(0.000\) | \(0.000\) |
| 1.5 | \(0.466\) | \(0.465\) | \(0.500\) |
| 2.0 | \(0.881\) | \(0.879\) | \(1.000\) |
| 3.0 | \(1.620\) | \(1.610\) | \(2.000\) |
| 5.0 | \(2.886\) | \(2.845\) | \(4.000\) |
| 10.0 | \(5.462\) | \(5.296\) | \(9.000\) |
해석:
- \(r_A\) 와 \(r_D\) 는 매우 가깝다. \(c=10\) 극단에서도 \(5.462\) vs \(5.296\). 실무에서 둘을 구분할 필요가 크지 않음을 수치로 보여 준다.
- \(r_P\) 는 큰 \(c\) 에서 급격히 커진다. \(c=10\) 에서 \(r_P = 9\) 로 \(r_D\) 의 두 배에 가깝다. 이는 Pearson 이 큰 편차·대규모 관측에서 과대평가되기 쉽다는 뜻이다.
- \(c=0\) 에서 \(r_P = -1\) 은 고정 하한 이지만 \(r_D, r_A\) 는 더 큰 절댓값을 가진다. 영(zero) 관측이 많은 데이터에서 Pearson 은 이상 신호를 과소 감지하고, Deviance·Anscombe 는 제대로 잡아낸다.
직관: “극단 관측이 있는 데이터” 에서는 Deviance·Anscombe 가 더 합리적으로 작동하고, “평균 주변의 미세 편차” 에서는 세 잔차가 사실상 구분이 없다.
6 잔차의 표준화 — Studentized Variants
세 잔차 모두 \(\hat\mu\) 추정 오차를 반영하면 분산이 약간 줄어든다. 선형 회귀의 “studentized residual” 과 같은 보정을 GLM 에도 한다.
\[ r_{P}^{\text{std}} \;=\; \frac{r_P}{\sqrt{1-h_{ii}}},\qquad r_{D}^{\text{std}} \;=\; \frac{r_D}{\sqrt{1-h_{ii}}} \]
\(h_{ii}\) 는 GLM 의 hat matrix \(\mathbf{H} = \mathbf{W}^{1/2}\mathbf{X}(\mathbf{X}^\top \mathbf{W}\mathbf{X})^{-1}\mathbf{X}^\top\mathbf{W}^{1/2}\) 의 대각 성분 (leverage) 이다. \(\mathbf{W}\) 는 IRLS 의 작업 가중치 행렬.
직관: 적합이 특정 관측에 크게 의존(leverage 높음) 할수록 그 관측의 잔차는 \((y-\hat\mu)\) 가 작아 보이게 편향된다. \(\sqrt{1-h_{ii}}\) 로 나눠 그 편향을 제거한다. 이상치 진단에는 항상 studentized 잔차를 사용한다.
7 실무 사용 가이드
7.1 언제 어떤 잔차를 쓰는가
| 목적 | 권장 잔차 | 이유 |
|---|---|---|
| 적합도 분해 (\(X^2\) 기여도) | Pearson | \(\sum r_P^2 = X^2\) |
| 적합도 분해 (\(D\) 기여도, 이상치 탐지) | Deviance | \(\sum r_D^2 = D\), 정규 근사 양호 |
| Q-Q plot, 정규성 기반 진단 | Anscombe 또는 Deviance | 분포 대칭성 확보 |
| 공변량 vs 잔차 산점도 (link·선형성 진단) | Deviance (표준) | 소프트웨어 기본값, 정규 근사 양호 |
| 과산포(overdispersion) 추정 | Pearson | \(\hat\phi = \sum r_P^2 / (n-p)\) 관행 |
7.2 진단 플롯 4종
GLM 에서 관행적으로 그리는 잔차 진단 플롯은 OLS 와 동일한 4종이다.
- \(r_D\) vs 적합값 \(\hat\mu\) (또는 링크 척도 \(\hat\eta\)): 무작위 산포가 기대되며, 패턴 발견 시 링크·분산함수 재점검.
- Q-Q plot (Anscombe 또는 Deviance): 정규 분위수와 비교. 양끝 이탈은 분포 오식별·이상치 신호.
- \(|r_D|^{1/2}\) vs \(\hat\mu\): 추세가 있으면 분산함수 오식별 또는 과산포.
- Cook’s distance / leverage plot: 개별 관측의 영향력 진단.
8 코드 예시 — Poisson 회귀 잔차 3종 계산
8.1 Step 1: numpy 로 세 잔차 직접 계산
import numpy as np
rng = np.random.default_rng(0)
n = 200
x = rng.normal(size=n)
mu_true = np.exp(0.5 + 0.8 * x)
y = rng.poisson(mu_true)
# 가상의 적합 결과
beta_hat = np.array([0.48, 0.82])
X = np.column_stack([np.ones(n), x])
mu_hat = np.exp(X @ beta_hat)
# Pearson 잔차: (y - mu)/sqrt(mu)
r_P = (y - mu_hat) / np.sqrt(mu_hat)
# Anscombe 잔차 (Poisson): 1.5(y^{2/3} - mu^{2/3}) / mu^{1/6}
r_A = 1.5 * (np.power(y, 2/3) - np.power(mu_hat, 2/3)) / np.power(mu_hat, 1/6)
# Deviance 잔차: sign(y - mu) * sqrt(2{y log(y/mu) - (y - mu)})
mask = y > 0
core = np.zeros(n)
core[mask] = y[mask] * np.log(y[mask] / mu_hat[mask]) - (y[mask] - mu_hat[mask])
core[~mask] = -(0 - mu_hat[~mask]) # y=0 이면 y log(y/mu)=0, 남은 항은 -(0 - mu) = mu
r_D = np.sign(y - mu_hat) * np.sqrt(np.maximum(2 * core, 0))
print(f"sum r_P^2 = {np.sum(r_P**2):.2f} (= Pearson X^2)")
print(f"sum r_D^2 = {np.sum(r_D**2):.2f} (= Deviance D)")
print(f"r_A, r_D 상관계수 = {np.corrcoef(r_A, r_D)[0,1]:.4f}")실무 포인트: np.corrcoef(r_A, r_D) 는 거의 1 에 가깝다. 수치적으로 두 잔차는 서로 대체 가능하다.
8.2 Step 2: statsmodels 에서 세 잔차 추출
import numpy as np
import pandas as pd
import statsmodels.api as sm
df = pd.DataFrame({"y": y, "x": x})
m = sm.GLM.from_formula("y ~ x", data=df, family=sm.families.Poisson()).fit()
r_P_pkg = m.resid_pearson # Pearson
r_D_pkg = m.resid_deviance # Deviance
r_R_pkg = m.resid_response # 원시 잔차 y - mu_hat
r_W_pkg = m.resid_working # IRLS 작업 잔차 (z - eta)/g'(mu)
print(pd.DataFrame({"pearson": r_P_pkg, "deviance": r_D_pkg,
"response": r_R_pkg}).describe())statsmodels 는 Anscombe 를 기본 제공하지 않는다. 필요하면 Step 1 의 수식으로 직접 계산한다. 소프트웨어 기본값이 Deviance 가 된 것은 “분해성 + 계산 편의 + 적절한 정규 근사” 의 세 장점이 합쳐진 결과다.
8.3 Step 3: R 에서 동일 기능
m <- glm(y ~ x, data = d, family = poisson)
rP <- residuals(m, type = "pearson")
rD <- residuals(m, type = "deviance") # R 기본값
rW <- residuals(m, type = "working")
rR <- residuals(m, type = "response")
plot(m) # 4종 진단 플롯 (Deviance 잔차 기반)R 의 plot(m) 이 내부적으로 쓰는 것이 Deviance 잔차다. Anscombe 는 statmod::qresid 계열의 randomized quantile 잔차로 대체되는 경우가 많다.
9 흔한 실수
| 실수 | 처방 |
|---|---|
| 원시 잔차 \(y-\hat\mu\) 로 바로 Q-Q plot | GLM 에서는 분산이 평균에 의존하므로 원시 잔차로는 이상 판정 불가. Deviance 잔차 사용 |
| Pearson 잔차로 Q-Q plot 을 해석 | Pearson 은 분산은 맞춰도 비대칭성은 그대로. 큰 \(c\) 에서 과장됨. Anscombe 또는 Deviance 로 |
| Studentization 생략 | leverage 큰 관측은 잔차가 작아 보인다. 이상치 판정 전에 \(\sqrt{1-h_{ii}}\) 로 반드시 보정 |
| 이항에서 \(y\in\{0,1\}\) 잔차로 정규성 검정 | 이진 반응은 잔차 자체가 두 점 분포. 분위수 잔차(randomized quantile residual) 또는 집계 후 진단 |
10 요약
- Pearson \(r_P = (y-\mu)/\sqrt{V(\mu)}\): 분산으로 표준화. \(\sum r_P^2 = X^2\). 과산포 진단·\(X^2\) 분해에 쓰고, 정규성 기반 진단에는 부적합.
- Anscombe \(r_A\): 분포를 정규에 가깝게 변환(\(A(\mu)=\int d\mu/V^{1/3}\)) 한 후 표준화. 이론적으로 가장 정규에 가깝지만 분포별 수식이 복잡해 실무 사용은 제한적.
- Deviance \(r_D = \mathrm{sign}(y-\mu)\sqrt{d_i}\): 이탈도의 단위별 기여. \(\sum r_D^2 = D\). 정규 근사 품질이 Anscombe 에 수치적으로 매우 근접하며, 분해성과 계산 편의를 갖춰 소프트웨어 기본값.
- 수치 비교: Poisson 에서 \(r_A \approx r_D\), \(r_P\) 는 큰 편차에서 과대·영 관측에서 과소.
- Studentization: 이상치 진단 전에는 \(\sqrt{1-h_{ii}}\) 보정 필수.
11 관련 주제
선행 지식
관련 개념
후속 주제
- Model Checking for GLM — 잔차 플롯·링크 진단·영향력 분석 (McCullagh Ch.12)
- Quasi-likelihood 와 과산포 — Pearson 잔차 기반 분산 추정 (McCullagh Ch.9)