1 서론 — 세 예제, 세 교훈
§12.1~§12.7 가 진단 도구 를 소개했다면 §12.8 은 그 도구들이 실제 데이터에서 어떻게 결합되는가 를 보인다. McCullagh-Nelder 는 세 예제를 신중하게 고른다 — 각각 진단의 다른 측면 을 드러낸다.
| 예제 | 반응 · 링크 | 진단 초점 | 결과 요약 |
|---|---|---|---|
| 12.8.1 당근 (Phelps) | 이항 · 로짓 | 단일 이상점 식별 | 점 14 제거로 이탈도 40.0 → 25.3 |
| 12.8.2 Minitab 나무 | 정규 · 항등 → 로그 | 링크 vs 척도 혼입 해소 | \(\widehat\eta^2\) 로 문제 감지 → 부분 잔차로 척도 문제 확인 → \(\log d, \log h\) |
| 12.8.3 보험금 (Ch.8) | 감마 · 멱 링크 | \((\zeta, \lambda)\) 동시 검정 | 2D 윤곽에서 원 선택 \((2, -1)\) 수용 |
세 예제는 진단의 다른 복잡도 레벨 을 담는다.
- 12.8.1: 한 점만 찾으면 끝나는 단순한 경우.
- 12.8.2: 여러 원인 후보 (링크, 척도, 이상점) 중에서 정확한 원인 식별.
- 12.8.3: 여러 원인을 동시 확인하는 고급 분석.
이번 글은 세 예제를 순서대로 상세히 다룬다. 각 예제에서 “무엇을 관찰했고, 어떻게 해석했고, 왜 그 선택이 정당한가” 를 수식·직관과 함께 풀어낸다.
2 예제 12.8.1 — 당근 살충제 실험
2.1 데이터와 초기 모형
Phelps (1982) 의 데이터 (Williams, 1987 재분석):
- 실험 구성: 3 블록 × 8 용량 수준 \(= 24\) 관측치.
- 반응 변수: 각 (블록, 용량) 조합에서 손상된 당근의 비율 (이항 분포).
- 설계: 8 로그 용량 수준 \(x_j \in \{1.52, 1.64, \ldots, 2.36\}\), 블록 \(j = 1, 2, 3\).
초기 모형: 로짓 링크 + 가법 선형 예측자
\[\text{logit}(\pi_{ij}) = \alpha_i + \beta x_j\]
여기서 \(\alpha_i\) 는 블록 효과, \(\beta\) 는 용량 기울기.
2.2 적합 결과
Deviance = 40.0 / 20 d.f. — 기준치 20 의 두 배다. 즉 \(p < 0.01\) 수준으로 모형이 기각된다.
두 가능성: 1. 일반 과산포 (general over-dispersion): 이항 변동보다 전체적으로 분산이 큼 → §4.5 의 처리 (산포 모수 \(\sigma^2\) 추가, 베타-이항 등). 2. 개별 이상점 (isolated discrepancy): 몇 개 점이 극단적으로 어긋남 → §12.7 의 도구.
두 가지를 감별하려면 진단이 필요 하다.
2.3 Index Plot 으로 빠른 감별
Fig.12.4 의 index plot (관측 번호 vs 1-step 삭제잔차 \(r^*\)):
- 대부분의 점이 \(|r^*| < 2\) 범위.
- 점 14 (용량 수준 6, 블록 2) 가 \(r^* \approx 4.5\) 로 고립 되어 튀어나옴.
결론: 단일 이상점 이다. 전반적 과산포가 아니라 특정 점 하나의 문제.
- 과산포 면 \(|r^*|\) 분포 전체 가 정규보다 넓게 퍼져 있다. Q-Q 플롯의 기울기가 1 보다 큼.
- 이상점 이면 대부분의 점은 정상이고 몇 개만 이탈. Q-Q 플롯에서 꼬리만 들림.
Index plot 에서는 전자가 “전반적으로 높은 들쭉날쭉함” 으로, 후자가 “한 점이 도드라짐” 으로 나타난다. 이 시각적 차이가 결정을 빠르게 만든다.
2.4 점 14 의 정체
관측치: 용량 수준 6 (log dose 2.12), 블록 2 에서 \(17/42\) 손상. 적합값: 모형 예측은 약 \(7/42 \approx 17\%\).
즉 실제 17 개 손상은 예측 7 개의 약 2.4 배. Phelps 의 원 논문에도 이 비정상을 주목했다. 전사 오류 (\(17 \to 7\) 역?) 또는 그 블록의 실험 조건 이상이 추정된다.
2.5 점 14 제거 후 재적합
Deviance = 25.3 / 19 d.f. — 기준치 19 를 약간 상회하지만 \(p \approx 0.15\) 수준. 여전히 미세한 과산포 가능성은 있지만 단일 이상점 설명만으로 대부분 해결.
2.6 \(\widehat\eta^2\) 검정 — 링크 확증
점 14 제거 후 Hinkley (1985) 의 \(\widehat\eta^2\) 검정 (§12.6.3) 으로 링크 선택을 확인.
- \(\widehat\eta^2\) 추가 시 deviance 감소 = 0.2 (자유도 1)
- \(\chi_1^2(0.05) = 3.84\) 보다 훨씬 작음 → 링크 문제 없음.
Phelps 는 complementary log-log 링크를 사용했지만, 로짓과의 차이가 미미. 결론: 로짓 링크로 충분.
2.7 교훈
이 예제의 교훈:
- 초기 과산포 징후 → index plot 으로 빠른 감별.
- 단일 극단점 이 대부분의 문제 원인일 수 있다.
- 제거 후 \(\widehat\eta^2\) 검정 으로 남은 구조적 문제가 없음을 확증.
이것이 이상점 중심 진단 의 전형적 흐름이다.
3 예제 12.8.2 — Minitab 나무 부피 데이터
3.1 데이터와 물리적 관계
Ryan 외 (1976) 의 유명한 데이터: 31 그루 흑버찌 나무의 측정값.
- 반응: 부피 \(v\) (cubic feet)
- 설명 변수: 4’6” 높이에서의 지름 \(d\) (inches), 높이 \(h\) (feet)
물리적 가설: 모든 나무가 기하학적으로 유사하다면
\[v = c \cdot d^2 \cdot h \tag{12.11}\]
즉 \(\log v = \log c + 2 \log d + \log h\) — 로그 척도의 단순 선형 관계. 이것이 “올바른” 모형으로 예상된다.
3.2 진단의 함정 — “차원 개념 없는” 시작
McCullagh-Nelder 는 고의로 잘못된 출발점 에서 진단을 시작한다. 차원 감각이 없는 분석가가 그냥
\[v \sim \beta_0 + \beta_1 d + \beta_2 h, \qquad \epsilon \sim N(0, \sigma^2)\]
으로 적합한다. 이 모형이 얼마나 틀렸고, Ch.12 도구들이 얼마나 빠르게 진단하는지 보이는 것이 이 예제의 교육 목적이다.
3.3 1 라운드 — 선형 \(v\) 의 문제 진단
적합 결과: Deviance = 421.9 / 28 d.f.
플롯 진단: - \((y, \widehat\mu)\) 플롯: 위쪽 볼록 — 링크 또는 척도 문제. - \((r, \widehat\mu)\) 플롯: 이차 곡선 — 체계적 이탈의 강한 증거.
공식 검정 (\(\widehat\eta^2\)): 이탈도 242.6 감소 (원 421.9 의 57.5%). 이것은 거의 모형 전체 설명력에 필적하는 개선이다.
\(\widehat\eta^2\) 은 “현재 선형 예측자의 제곱” 이다. 이 항 하나가 이탈도의 절반 이상을 설명한다는 것은 선형 예측자가 적합값과 2차 관계로 휘어 있다 는 뜻이다.
원인은 두 가지: 1. 링크 함수 오류: \(g(\mu)\) 가 선형이 아닌 2차 관계여야 한다. 2. 공변량 척도 오류: 어떤 \(x\) 가 선형이 아니라 다른 변환 (\(\log\), \(x^2\)) 이 필요.
두 원인은 구분되지 않는다 — §12.6.3 의 혼입. 해결은 부분 잔차 플롯 으로 공변량 척도를 먼저 검사하는 것 (§12.6.4).
3.4 2 라운드 — \(\log v\) 변환
\(v \to \log v\) 로 반응 변환 (또는 동등하게 로그 링크). 의도: 물리적 관계가 로그 척도에서 선형일 것.
적합 결과: Deviance = 0.262 / 28 d.f. — 크게 감소.
그러나 \(\widehat\eta^2\) 검정 시 이탈도 0.181 로 감소 (약 31% 추가 설명). 여전히 유의한 구조적 이탈.
3.5 3 라운드 — 부분 잔차 플롯으로 척도 확인
\(\widehat\eta^2\) 검정이 유의하지만, 이게 링크 문제인지 척도 문제인지 아직 모른다. 핵심 도구: 부분 잔차 플롯 (§12.6.4).
Fig.12.5(a) — \(d\) 의 부분 잔차 vs \(d\): 위쪽으로 볼록한 곡선 (downwards curvature).
이 형태가 뜻하는 바: “\(d\) 에 선형으로 들어가는 것보다 낮은 멱 (예: \(\log d\), \(\sqrt d\)) 이 더 적절” (§12.6.4 의 해석 규칙).
\(h\) 의 부분 잔차 플롯: 분산이 크지만 선형에서 크게 벗어나지 않음. 다만 \(d, h\) 가 같은 차원 (길이) 을 가지므로, \(d \to \log d\) 로 바꾼다면 \(h \to \log h\) 도 함께 바꾸는 것이 물리적으로 타당.
3.6 4 라운드 — \(\log d, \log h\) 모형
\(v \sim \log d + \log h\) 정규 회귀로 재적합.
결과: - Deviance = 0.185 / 28 d.f. - \(\widehat\eta^2\) 추가 시 개선 없음 → 구조적 이탈 해소 - 두 부분 잔차 플롯 모두 선형 (Fig.12.5(b))
3.7 5 라운드 — 공식 Box-Cox 프로파일
완전성을 위해 공식 동시 검정: \(d \to d^\theta\), \(h \to h^\theta\) 동시 멱 변환의 프로파일 이탈도.
Fig.12.6: \(\widehat\theta = 0.15\) 에서 최솟값 deviance = 0.1829 / 27 d.f.
95% 신뢰구간: - \(s^2 = 0.1829 / 28 = 0.00653\). - 95% 한계: \(D \leq 0.1829 + \chi_1^2(0.05) \cdot s^2 = 0.1829 + 3.84 \cdot 0.00653 \approx 0.2088\). - 대응 \(\theta\) 범위: \((-0.32, 0.63)\).
해석: - \(\theta = 1\) (원 척도): 배제됨 — 선형 모형은 잘못. - \(\theta = 0\) (로그): 포함됨 — 로그 변환이 통계적으로 수용 가능.
\(\widehat\theta = 0.15\) 가 0 에 충분히 가깝고, 물리적 해석 (로그) 이 명확하므로 \(\log\) 채택.
3.8 6 라운드 — 물리적 예측과의 비교
물리 가설 (12.11) 은 \(\log d\) 계수 = 2, \(\log h\) 계수 = 1 을 예측.
자유 적합의 추정치는 이 값에 가까움. 제약 모형 (계수 고정):
\[\log v = \log c + 2 \log d + \log h\]
Deviance = 0.1877 / 30 d.f. — 자유 적합의 0.185 / 28 d.f. 와 사실상 동일.
결론: 물리 법칙이 데이터에서 확증 됨. 계수를 자유 추정해도 물리 예측과 맞는다.
3.9 7 라운드 — 개별 이상점 점검
체계적 구조는 해결됐으므로 이제 개별 점 검사 (§12.7):
| 진단 | 의심 점 |
|---|---|
| 고레버리지 \(h_i\) | 나무 20, 31 |
| 큰 음의 삭제잔차 \(r^*\) | 나무 15, 18 |
| 큰 양의 삭제잔차 \(r^*\) | 나무 11, 17 |
| 큰 수정 Cook \(C\) | 나무 18 |
흥미로운 패턴: 나무 15-18 이 연속된 인덱스 에서 큰 잔차를 보임 — 군집 이상점 가능성.
점 18 제거 후: Deviance 가 0.154 로 감소 (개선). 그러나 절편만 크게 변함 — 다른 계수는 안정적. 즉 점 18 은 일관된 편향 을 낳지 않음.
결론: 어떤 점도 제거하지 않는다. 15-18 군집은 우연 일 가능성이 높고, 모형 결론을 바꾸지 않는다.
3.10 교훈
이 예제의 교훈:
- \(\widehat\eta^2\) 의 큰 감소 → 심각한 구조 문제, 그러나 원인 불명 (링크 vs 척도).
- 부분 잔차 플롯 → 원인을 공변량 척도로 좁혀 줌.
- 공식 Box-Cox 프로파일 → 변환 선택을 통계적으로 확증.
- 물리적 해석 과의 일관성 → 결과의 외부 정당화.
- 체계 해결 후 개별 점 검사 → 순서가 중요.
이것이 진단의 반복 루프 의 모범 예시다.
4 예제 12.8.3 — 자동차 보험금 (\((\zeta, \lambda)\) 2D 프로파일)
4.1 배경 (Ch.8.4.1 연속)
Nelder (1968) 의 자동차 보험금 청구 데이터. Ch.8 에서 감마 GLM + 역수 링크 로 적합:
- 링크: \(g(\mu) = 1/\mu\), 즉 \(\lambda_0 = -1\) (멱 링크 가족).
- 분산 함수: \(V(\mu) = \mu^2\), 즉 \(\zeta_0 = 2\).
§11.3.1 에서 \(\zeta_0 = 2\) 고정한 채 \(\lambda\) 프로파일 검정 → \(\lambda_0 = -1\) 수용. §12.6.2 에서 \(\lambda_0 = -1\) 고정한 채 \(\zeta\) 프로파일 검정 → \(\zeta_0 = 2\) 수용 (95% CI (1.87, 2.85)).
각 프로파일 개별적 으로는 원 선택이 수용됐지만, 결합 하면 어떨까? 두 모수가 서로 영향을 주는지 확인하기 위해 2D 프로파일 이 필요하다.
4.2 확장 준-이탈도 (Extended Quasi-Deviance)
두 모수를 동시에 다루려면 서로 다른 분산 함수 간 의 값을 비교해야 한다. 이는 §9.6 의 확장 준-우도 (EQL) 없이는 불가능 — 일반 이탈도는 \(V\) 에 의존하는 상수항이 있어 직접 비교 불가.
EQL 기반 기준:
\[Q^+(\zeta, \lambda) = -\tfrac{1}{2} D(\widehat\beta(\zeta,\lambda); y, \zeta) - \tfrac{1}{2} \sum_i \log\{\widehat\phi(\zeta,\lambda) V(y_i; \zeta)\}.\]
이 양을 \((\zeta, \lambda)\) 격자 위에서 계산해 2D 윤곽 을 그린다.
4.3 Fig.12.7 의 해석
McCullagh-Nelder 의 Fig.12.7: 가로축 \(\zeta\) (1.5~3.0), 세로축 \(\lambda\) (-2.0~0.5). \(\chi_2^2\) 명목 수준 50%, 80%, 95%, 99% 의 네 윤곽.
관찰 1 — 최소: \((\widehat\zeta, \widehat\lambda) = (2.4, 0.75)\).
관찰 2 — 원 선택: \((\zeta_0, \lambda_0) = (2, -1)\) 이 95% 윤곽 안 에 넉넉히 들어간다. 감마 + 역수 링크 유지.
관찰 3 — 로그 링크 대안: \((2, 0)\) (감마 + 로그 링크) 도 95% 윤곽 안. 이 대안도 데이터가 배제하지 않는다.
관찰 4 — 축 정렬: 윤곽의 주축이 \((\zeta, \lambda)\) 좌표축과 거의 평행. 이는 두 모수가 점근 직교 (asymptotically orthogonal) 라는 뜻.
4.4 축 정렬이 주는 실용적 함의
점근 직교성은 다음 세 가지를 의미한다.
- 주변 신뢰구간이 보수적: \(\lambda\) 를 \(\lambda_0\) 에 고정한 채 \(\zeta\) 만 프로파일 해서 얻은 95% CI 가 2D 공동 신뢰 영역을 \(\zeta\) 축에 사영 한 것과 근사적으로 같다.
- 개별 진단이 유효: §11.3 과 §12.6.2 의 개별 프로파일 검정이 정당화 된다. 혼입 위험이 낮음.
- 해석 독립: \(\widehat\lambda\) 의 값이 \(\widehat\zeta\) 의 값에 거의 무관. 따라서 “링크 선택” 과 “분산 함수 선택” 을 독립 결정 할 수 있다.
두 모수의 신뢰 영역이 대각선 으로 긴 타원이면, 한 모수를 결정하면 다른 모수의 불확실성이 변한다 — “우리 링크를 고정하면 분산 함수 추정이 달라진다”. 이런 혼입은 분석을 어렵게 한다.
축 정렬 타원은 이 혼입을 무력화 한다. 링크와 분산 함수를 독립 모듈 로 분리해 하나씩 결정할 수 있다. 이것은 GLM 의 두 성분 분리 철학이 현실에서도 작동함을 보여 준다.
4.5 왜 2D 프로파일이 중요한가
1D 프로파일만 돌리면 결합 효과 를 놓친다. 예: - \(\lambda = -1\) 고정에서 \(\zeta\) CI: (1.87, 2.85). - \(\zeta = 2\) 고정에서 \(\lambda\) CI: 예컨대 (-1.5, -0.5).
이 사각형 영역 안의 모든 \((\zeta, \lambda)\) 가 수용 가능한 것처럼 보이지만, 실제 2D 윤곽은 타원 이어서 사각형의 모서리 가 배제될 수 있다. 2D 플롯이 이 허용 영역의 진짜 형태 를 보여 준다.
McCullagh-Nelder 의 구체적 경우에는 축 정렬성이 강해 사각형 근사가 대체로 유효하지만, 일반적으로는 확인 해야 한다.
4.6 교훈
이 예제의 교훈:
- 2D 프로파일 로 여러 이탈 원인을 동시 검정.
- 축 정렬 은 점근 직교성의 신호 — 개별 프로파일의 정당성을 확증.
- EQL 이 서로 다른 분산 함수 비교를 가능하게 함.
- 결론: 원 선택 \((\zeta, \lambda) = (2, -1)\) 이 견고 함.
이것이 고급 진단 — 다원 이탈의 공동 검정 의 예시다.
5 세 예제의 종합 — Ch.12 진단 흐름
세 예제의 진단 경로를 비교하면 다음과 같다.
5.1 당근 (12.8.1) — “짧은 흐름”
과산포 징후 (deviance 큼)
↓
index plot of r*
↓
단일 점 14 발견
↓
제거 후 재적합 → OK
↓
η̂² 검정으로 링크 확증 → 완료
총 소요: 몇 번의 플롯 + 1 회 재적합. 단순한 사례.
5.2 나무 (12.8.2) — “긴 반복 루프”
초기 선형 모형 적합
↓
η̂² 검정 유의 (57.5% 설명)
↓
log v 변환 (1라운드)
↓
여전히 η̂² 유의
↓
부분 잔차 플롯 (d, h)
↓
d 의 곡률 → log d 시도
↓
log d, log h 적합
↓
η̂² 통과 + 부분 잔차 직선
↓
공식 Box-Cox 프로파일 확증
↓
물리 예측 비교
↓
개별 점 검사 (고레버리지, Cook)
↓
결론: log d + log h, 제거 없이
총 소요: 5~7 라운드 반복. 진단 루프의 전형.
5.3 보험금 (12.8.3) — “2D 확증”
Ch.8 적합: gamma + inverse link
↓
§11.3 의 λ 프로파일 (ζ 고정): -1 수용
↓
§12.6 의 ζ 프로파일 (λ 고정): 2 수용
↓
§12.8.3: (ζ, λ) 2D 프로파일
↓
공동 95% 윤곽 안에 원 선택 포함
↓
축 정렬 → 점근 직교성 확인
↓
결론: (2, -1) 견고 + 대안 (2, 0) 도 수용
총 소요: 이미 완성된 1D 프로파일 위에 2D 확증 1 회. 고급 확장.
5.4 세 예제가 보여 주는 진단의 세 스타일
| 스타일 | 문제 유형 | 특징 |
|---|---|---|
| 타겟 식별 (12.8.1) | 단일 원인 | 한 두 플롯으로 끝 |
| 반복 정제 (12.8.2) | 혼입된 원인 여러 개 | 부분 잔차 + Box-Cox 반복 |
| 공동 확증 (12.8.3) | 여러 모수 동시 | 2D/다차원 프로파일 |
진단 초기 스타일을 판단하고 적절한 도구를 선택하는 것이 실무 능력이다. McCullagh-Nelder 는 세 예제를 통해 이 판단력을 기르라고 권한다.
6 Python 실전 — Minitab 나무 데이터 재현
가장 교훈적인 12.8.2 를 재현한다.
import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
from statsmodels.nonparametric.smoothers_lowess import lowess
# Minitab 흑버찌 데이터 (31 그루) — Ryan et al. (1976)
d = np.array([8.3, 8.6, 8.8, 10.5, 10.7, 10.8, 11.0, 11.0, 11.1, 11.2,
11.3, 11.4, 11.4, 11.7, 12.0, 12.9, 12.9, 13.3, 13.7, 13.8,
14.0, 14.2, 14.5, 16.0, 16.3, 17.3, 17.5, 17.9, 18.0, 18.0, 20.6])
h = np.array([70, 65, 63, 72, 81, 83, 66, 75, 80, 75,
79, 76, 76, 69, 75, 74, 85, 86, 71, 64,
78, 80, 74, 72, 77, 81, 82, 80, 80, 80, 87])
v = np.array([10.3, 10.3, 10.2, 16.4, 18.8, 19.7, 15.6, 18.2, 22.6, 19.9,
24.2, 21.0, 21.4, 21.3, 19.1, 22.2, 33.8, 27.4, 25.7, 24.9,
34.5, 31.7, 36.3, 38.3, 42.6, 55.4, 55.7, 58.3, 51.5, 51.0, 77.0])
# 1라운드: 순진한 선형 모형 v ~ d + h
X = sm.add_constant(np.column_stack([d, h]))
m1 = sm.OLS(v, X).fit()
print(f"[1라운드] v ~ d + h : RSS = {m1.ssr:.2f}, df = {m1.df_resid}")
# η̂² 검정
eta_hat = m1.fittedvalues
X_aug = np.column_stack([X, eta_hat**2])
m1_aug = sm.OLS(v, X_aug).fit()
print(f" η̂² 추가 시 RSS = {m1_aug.ssr:.2f}, 감소 = {m1.ssr - m1_aug.ssr:.2f}")
print(f" 감소 비율 = {(m1.ssr - m1_aug.ssr)/m1.ssr*100:.1f}%")# 2라운드: log v ~ d + h
log_v = np.log(v)
m2 = sm.OLS(log_v, X).fit()
print(f"\n[2라운드] log(v) ~ d + h : RSS = {m2.ssr:.4f}, df = {m2.df_resid}")
eta_hat2 = m2.fittedvalues
X_aug2 = np.column_stack([X, eta_hat2**2])
m2_aug = sm.OLS(log_v, X_aug2).fit()
print(f" η̂² 추가 시 RSS = {m2_aug.ssr:.4f}, 감소 = {m2.ssr - m2_aug.ssr:.4f}")# 3라운드: 부분 잔차 플롯
z2 = log_v # 항등 링크, z = y
gamma_d = m2.params[1]
gamma_h = m2.params[2]
# d 의 부분 잔차
u_d = z2 - m2.fittedvalues + gamma_d * d
# h 의 부분 잔차
u_h = z2 - m2.fittedvalues + gamma_h * h
fig, axes = plt.subplots(1, 2, figsize=(12, 4))
smooth_d = lowess(u_d, d, frac=0.5, return_sorted=True)
axes[0].scatter(d, u_d, alpha=0.7)
axes[0].plot(smooth_d[:, 0], smooth_d[:, 1], 'r-', lw=2)
axes[0].set_xlabel('d'); axes[0].set_ylabel('partial residual')
axes[0].set_title('Fig 12.5(a): d 부분 잔차 — 아래로 볼록 → log d 시사')
smooth_h = lowess(u_h, h, frac=0.5, return_sorted=True)
axes[1].scatter(h, u_h, alpha=0.7)
axes[1].plot(smooth_h[:, 0], smooth_h[:, 1], 'r-', lw=2)
axes[1].set_xlabel('h'); axes[1].set_ylabel('partial residual')
axes[1].set_title('h 부분 잔차 — 대체로 선형')
plt.tight_layout(); plt.show()# 4라운드: log v ~ log d + log h
X_log = sm.add_constant(np.column_stack([np.log(d), np.log(h)]))
m3 = sm.OLS(log_v, X_log).fit()
print(f"\n[4라운드] log(v) ~ log d + log h : RSS = {m3.ssr:.4f}")
print(f" 계수: const={m3.params[0]:.3f}, log_d={m3.params[1]:.3f}, log_h={m3.params[2]:.3f}")
print(f" 물리 예측 (2, 1) 과의 비교:")
# 물리 모형: log v = const + 2 log d + log h
X_phys = sm.add_constant(2*np.log(d) + np.log(h))
m_phys = sm.OLS(log_v, X_phys).fit()
print(f" 물리 제약 모형 RSS = {m_phys.ssr:.4f} (df = {m_phys.df_resid})")
# 5라운드: Box-Cox 동시 프로파일
theta_grid = np.linspace(-0.5, 1.2, 30)
devs = []
for theta in theta_grid:
if abs(theta) < 1e-8:
d_t, h_t = np.log(d), np.log(h)
else:
d_t = (d**theta - 1) / theta
h_t = (h**theta - 1) / theta
X_t = sm.add_constant(np.column_stack([d_t, h_t]))
m_t = sm.OLS(log_v, X_t).fit()
devs.append(m_t.ssr)
fig, ax = plt.subplots(figsize=(7, 4))
ax.plot(theta_grid, devs, 'o-')
best = theta_grid[np.argmin(devs)]
ax.axvline(best, ls='--', color='red', label=f'$\\hat\\theta = {best:.2f}$')
ax.axvline(0, ls=':', color='blue', label='$\\theta = 0$ (log)')
ax.axvline(1, ls=':', color='gray', label='$\\theta = 1$ (원 척도)')
# 95% 경계
s2 = min(devs) / m_t.df_resid
ax.axhline(min(devs) + 3.84 * s2, ls='--', color='gray', alpha=0.5, label='95% 경계')
ax.set_xlabel(r'$\theta$'); ax.set_ylabel('Residual sum of squares')
ax.set_title('Fig 12.6: Box-Cox 동시 변환 프로파일')
ax.legend()
plt.show()기대 출력 (McCullagh-Nelder 와 일치): - \(\widehat\theta \approx 0.15\), 95% CI 약 \((-0.32, 0.63)\). - \(\theta = 1\) 배제, \(\theta = 0\) 포함.
7 요약 — §12.8 의 실무 교훈
세 예제가 주는 종합 교훈:
7.1 1. 진단은 문제에 맞춘 다른 스타일 로
- 단순 이상점: index plot 몇 개로 끝.
- 다원 혼입: 부분 잔차 + Box-Cox 반복 루프.
- 다모수 공동 검정: 2D 프로파일.
7.2 2. 도구의 순서 가 중요
- 체계적 이탈 먼저 (§12.6) → 구조를 정리하면 이상점이 명확히 드러남.
- 개별 이상점 나중 (§12.7) → 수정된 모형에서 진짜 외톨이를 식별.
- 반대 순서로 하면 이상점이 체계 편향을 만들어 진짜 구조를 흐림.
7.3 3. 물리적·도메인 지식 과 결부
- 나무 예제의 (2, 1) 물리 예측이 자유 추정과 일치 → 결론 정당화.
- 보험금 예제의 역수 링크가 도메인 관례와 일치 → 수용 용이.
- 통계 검정만으로는 수식의 여러 선택 중 어느 것을 택할지 결정 못 함. 도메인 지식이 선택지를 좁혀 준다.
7.4 4. 완전한 검증은 불가능 을 받아들임
- 나무 예제에서 \(\widehat\theta = 0.15\) 가 정확히 0 이 아니다. 그러나 신뢰구간이 0 을 포함 + 물리적 의미 + 단순성 → \(\log\) 채택.
- 진단은 “틀리지 않은 모형” 을 보증하지 않는다. “반박되지 않은 모형” 을 주는 것이 최선이며, 그것으로도 충분히 가치 있다.
다음 §12.9 는 이 마지막 교훈을 진단 전략의 본질적 한계 로 정식화한다.
8 관련 주제
선행 지식
- Model Checking — 개관 (McCullagh Ch.12)
- Checks for Systematic Departure (McCullagh §12.6) — 부분 잔차 · Box-Cox 프로파일
- Checks for Isolated Departure (McCullagh §12.7) — 삭제잔차 · Cook
- Score Tests — 1-step 트릭 (McCullagh §12.3)
- Raw Materials (McCullagh §12.5)
관련 교재 예제
- Gamma GLM Examples — 자동차 보험·혈액 응고 등 (McCullagh §8.4) — 12.8.3 의 출처
- Parameters in the Variance Function (McCullagh §11.2) — \(V = \mu^\zeta\) 프로파일의 이론
- Parameters in the Link Function (McCullagh §11.3) — \(g = \mu^\lambda\) 프로파일
- Non-Linear Parameters — Examples (McCullagh §11.5) — 비선형 모수 진단의 실전
관련 개념
- 일반화 가법 모형 (GAM) — 공변량 척도의 비모수 해결
- 데이터 변환과 Box-Cox
후속 주제
- A Strategy for Model Checking? (McCullagh §12.9) — 진단의 한계와 도메인 판단의 역할