1 개요
이전 포스트에서 조건부 정규 모형 \(Y_i \sim N(\alpha + \beta x_i, \sigma^2)\) (독립)을 도입하고, Theorem 11.3.3 — 추정량의 정규분포, \(S^2\) 의 카이제곱 분포, 그리고 \((\hat\alpha, \hat\beta) \perp S^2\) — 을 증명했다. 이 세 결과는 “재료”에 불과했다. 이 포스트는 그 재료를 조합해 추론 도구 전체를 조립한다.
구체적으로 다음을 유도한다:
- \(\beta\) 에 대한 \(t\)-통계량과 그로부터 도출되는 검정, 신뢰구간
- \(H_0: \beta = 0\) 의 \(F\)-검정과 회귀 ANOVA 테이블
- 총 제곱합의 분해와 결정계수 \(R^2\)
- 특정 \(x_0\) 에서의 평균 추정과 예측구간
이 모든 절차는 정규 가정이 전제이다. 정규 가정 없이 얻을 수 있는 것(BLUE, 불편성)은 §11.3.2, 분포 가정의 계층은 §11.3.3를 참조한다.
2 \(t\)-통계량의 유도
2.1 \(\beta\) 에 대한 \(t\)-통계량 (11.3.33)
Theorem 11.3.3에서:
- \(\hat\beta \sim N(\beta, \;\sigma^2/S_{xx})\) — 정규 분포
- \((n-2)S^2/\sigma^2 \sim \chi^2_{n-2}\) — 카이제곱
- \(\hat\beta \perp S^2\) — 독립
\(t\)-분포의 정의: 표준정규를 독립 카이제곱의 제곱근(자유도로 나눈)으로 나누면 \(t\) 이다. 직관적으로 이해하면 다음과 같다. \(\hat\beta\) 를 표준화하면 \(Z = (\hat\beta - \beta)/(\sigma/\sqrt{S_{xx}})\) 가 되어 \(N(0,1)\) 을 따르지만, \(\sigma\) 를 모르므로 추정치 \(S\) 로 대체한다. \(S\) 는 \(\sigma\) 의 “흔들리는 근사치”이므로, 나눈 뒤의 분포는 정규분포보다 꼬리가 두꺼워진다 — 이것이 \(t\)-분포이다. 표본이 많으면 \(S \to \sigma\) 로 안정되어 \(t_{n-2} \to N(0,1)\) 이 된다. 따라서
\[ \frac{\hat\beta - \beta}{\sigma / \sqrt{S_{xx}}} \sim N(0, 1), \qquad \frac{(n-2)S^2}{\sigma^2} \sim \chi^2_{n-2}, \qquad \text{독립}, \]
이 둘을 결합하면:
\[ \boxed{\;T_\beta = \frac{\hat\beta - \beta}{S / \sqrt{S_{xx}}} \sim t_{n-2}.\;} \]
분모 \(S/\sqrt{S_{xx}}\) 는 \(\hat\beta\) 의 추정 표준오차(estimated standard error)이다. \(\sigma\) 를 모르므로 \(S\) 로 대체한 것이며, 이 대체의 대가가 정규분포에서 \(t\)-분포로의 전환이다.
2.2 \(\alpha\) 에 대한 \(t\)-통계량 (11.3.32)
같은 논리로:
\[ T_\alpha = \frac{\hat\alpha - \alpha}{S\sqrt{\sum x_i^2 / (n\,S_{xx})}} \sim t_{n-2}. \]
실무에서 \(\alpha\) 의 검정이 \(\beta\) 만큼 자주 쓰이지 않는 이유가 있다. \(\alpha = E(Y \mid x = 0)\) 인데, \(x = 0\) 이 관측 범위 밖이면 절편의 해석이 무의미하다. 예를 들어 “키(\(x\))로 몸무게(\(Y\))를 예측”할 때 “키 0cm 에서의 기대 몸무게” 는 현실적 의미가 없다. 반면 \(\beta\) 는 “\(x\) 가 1단위 변할 때 \(E(Y \mid x)\) 의 변화량”이므로 관측 범위 전체에 걸쳐 유효하다.
2.3 두 \(t\)-통계량의 결합 분포
\(\hat\alpha\) 와 \(\hat\beta\) 의 결합 분포는 이변량 정규이고, 같은 \(S\) 를 공유하므로 \((T_\alpha, T_\beta)\) 는 이변량 Student’s \(t\) 분포를 따른다. 이는 \(\alpha\) 와 \(\beta\) 에 대한 동시 추론(simultaneous inference)에 쓰인다. 하지만 실무에서는 대부분 개별 추론을 수행하므로 단변량 \(t\) 만 사용한다.
3 기울기 검정: \(H_0: \beta = 0\)
3.1 왜 \(\beta = 0\) 이 특별한가
\(\beta = 0\) 이면 \(E(Y \mid x) = \alpha\) 로 \(x\) 에 무관해진다. 즉, 설명변수와 반응변수 사이에 (선형) 관계가 없다. 회귀 분석의 가장 기본적인 질문 — “\(x\) 가 \(Y\) 에 영향을 주는가?” — 에 대한 형식적 검정이다.
3.2 \(t\)-검정 (11.3.34)
가설:
\[ H_0: \beta = 0 \quad \text{vs} \quad H_1: \beta \ne 0. \]
\(T_\beta\) 에 \(\beta = 0\) 을 대입하면:
\[ T = \frac{\hat\beta}{S/\sqrt{S_{xx}}}. \]
\(H_0\) 하에서 \(T \sim t_{n-2}\) 이므로, 유의수준 \(\alpha\) 에서
\[ |T| > t_{n-2,\;\alpha/2} \quad \Longrightarrow \quad H_0 \text{ 기각.} \]
3.3 \(F\)-검정과의 동치 (11.3.35)
\(t^2_{n-2} = F_{1,\,n-2}\) 이므로, \(|T| > t_{n-2,\alpha/2}\) 는 다음과 동치이다. 기하학적으로 보면, \(t\)-검정은 수직선 위에서 “\(\hat\beta\) 가 0에서 얼마나 먼가”를 판단하는 것이고, 그 거리를 제곱하면 “분산 비” — 즉 \(F\)-통계량 — 가 된다. 제곱에 의해 방향 정보가 사라지므로 \(F\)-검정은 항상 양측이다.
\[ F = \frac{\hat\beta^2}{S^2/S_{xx}} = \frac{S_{xY}^2 / S_{xx}}{\mathrm{RSS}/(n-2)} = \frac{\text{MS(Reg)}}{\text{MS(Resid)}} > F_{1,\;n-2,\;\alpha}. \]
이 동치가 회귀 ANOVA 테이블의 근거이다.
단순 선형 회귀에서 두 검정은 수학적으로 동치이다. 하지만 실무적 차이가 있다:
- \(t\)-검정: 단측 검정(\(H_1: \beta > 0\) 등)이 가능하고, \(\beta \ne 0\) 이외의 값 (\(H_0: \beta = \beta_0\))도 검정할 수 있다.
- \(F\)-검정: \(H_0: \beta = 0\) 만 검정할 수 있고, 항상 양측이다. 그러나 다중 회귀로 확장하면 여러 계수의 동시 유의성을 하나의 \(F\)-통계량으로 검정할 수 있다.
따라서 \(t\) 는 “개별 계수에 대한 유연한 검정”, \(F\) 는 “모형 전체에 대한 포괄적 검정”이다.
3.4 일반 검정: \(H_0: \beta = \beta_0\) (11.3.38)
\(\beta_0\) 가 반드시 0일 필요는 없다. 일반 가설:
\[ H_0: \beta = \beta_0 \quad \text{vs} \quad H_1: \beta \ne \beta_0 \]
에 대해 기각 기준은:
\[ \left|\frac{\hat\beta - \beta_0}{S/\sqrt{S_{xx}}}\right| > t_{n-2,\;\alpha/2}. \]
이 일반형은 ANOVA \(F\)-검정으로는 수행할 수 없다. ANOVA 는 \(\beta_0 = 0\) 에 묶여 있다.
4 회귀 ANOVA 테이블
4.1 제곱합 분해 (11.3.36)
총 변동 = 회귀 설명 변동 + 잔차 변동이다. 이 분해는 기하학적으로 피타고라스 정리와 같다. \(n\)-차원 공간에서 관측 벡터 \(\mathbf{y} - \bar{y}\mathbf{1}\) 을 회귀직선 위의 적합값 벡터 \(\hat{\mathbf{y}} - \bar{y}\mathbf{1}\) 과 잔차 벡터 \(\mathbf{e}\) 로 분해하면, 잔차가 적합값과 직교하므로 벡터 길이의 제곱이 그대로 더해진다. 따라서 SST = SSR + RSS 는 직각삼각형의 빗변과 두 변의 관계이다:
\[ \underbrace{\sum_{i=1}^n (y_i - \bar y)^2}_{\text{SST}} = \underbrace{\sum_{i=1}^n (\hat y_i - \bar y)^2}_{\text{SSR (Regression SS)}} + \underbrace{\sum_{i=1}^n (y_i - \hat y_i)^2}_{\text{RSS (Residual SS)}}. \]
여기서 \(\hat y_i = \hat\alpha + \hat\beta x_i\) 이다. 교차항이 사라지는 이유는 잔차가 \(x\) 와 직교하기 때문이다(§11.3.1 참조).
회귀 제곱합의 두 가지 동치 표현:
\[ \text{SSR} = \sum(\hat y_i - \bar y)^2 = \frac{S_{xY}^2}{S_{xx}}. \]
첫 번째는 직관적(“예측값의 변동”), 두 번째는 계산에 유리하다.
4.2 ANOVA 테이블 (Table 11.3.2)
| 변동 출처 | 자유도 | 제곱합 | 평균제곱 | \(F\) |
|---|---|---|---|---|
| 회귀 (Regression) | 1 | SSR \(= S_{xY}^2 / S_{xx}\) | MS(Reg) = SSR | \(F = \frac{\text{MS(Reg)}}{\text{MS(Resid)}}\) |
| 잔차 (Residual) | \(n-2\) | RSS \(= \sum \hat\epsilon_i^2\) | MS(Resid) \(= S^2\) | |
| 총 (Total) | \(n-1\) | SST \(= \sum(y_i-\bar y)^2\) |
자유도의 의미: 총 자유도 \(n-1\) 은 전체 평균을 제거한 뒤의 변동 차원이다. 회귀에 1을 쓰고(기울기 하나), 잔차에 \(n-2\) 가 남는다. 다중 회귀에서 설명변수가 \(p-1\) 개이면 회귀 자유도 \(= p-1\), 잔차 자유도 \(= n-p\) 로 일반화된다.
4.3 ANOVA 와의 병행
회귀 ANOVA 는 일원 ANOVA와 구조가 동일하다:
| ANOVA | 회귀 ANOVA |
|---|---|
| SSB (집단 간 변동) | SSR (회귀 설명 변동) |
| SSW (집단 내 변동) | RSS (잔차 변동) |
| \(H_0\): 모든 집단 평균 같다 | \(H_0\): \(\beta = 0\) (선형 관계 없음) |
| \(F = \text{MSB}/\text{MSW}\) | \(F = \text{MS(Reg)}/\text{MS(Resid)}\) |
핵심 차이는 회귀에서 설명변수가 연속이라는 점이다. ANOVA 는 이산적 집단, 회귀는 연속적 “기울기”를 검정한다. 그러나 수학적 구조(이차 형식의 분해, \(\chi^2\) 의 비)는 같다.
5 결정계수 \(R^2\)
5.1 정의
\[ R^2 = \frac{\text{SSR}}{\text{SST}} = \frac{\sum(\hat y_i - \bar y)^2}{\sum(y_i - \bar y)^2} = \frac{S_{xY}^2}{S_{xx} \cdot S_{YY}}. \]
\(R^2\) 는 “총 변동 중 회귀로 설명되는 비율”이다. \(0 \leq R^2 \leq 1\) 이며:
- \(R^2 = 1\): 모든 점이 회귀직선 위에 정확히 놓인다 (RSS = 0)
- \(R^2 = 0\): 회귀직선이 변동을 전혀 설명하지 못한다 (\(\hat\beta = 0\))
- 실무에서 \(R^2 > 0.7\) 정도면 “강한 선형 관계”로 해석하는 경우가 많지만, 이 임계값은 분야마다 크게 다르다 (물리학 0.99+, 사회과학 0.1~0.3)
5.2 표본 상관계수와의 관계
\(R^2\) 는 표본 상관계수 \(r\) 의 제곱이기도 하다:
\[ r = \frac{S_{xY}}{\sqrt{S_{xx} \cdot S_{YY}}}, \qquad R^2 = r^2. \]
단순 회귀에서 \(R^2 = r^2\) 은 항상 성립하지만, 다중 회귀에서 \(R^2\) 는 다중 상관계수의 제곱이므로 이 동치가 그대로 확장되지는 않는다.
5.3 \(R^2\) 와 \(F\)-통계량의 관계
\[ F = \frac{\text{SSR}/1}{\text{RSS}/(n-2)} = \frac{R^2}{1 - R^2} \cdot (n - 2). \]
따라서 \(R^2\) 가 크면 \(F\) 도 크다, 그리고 그 역도 성립한다. 이 공식이 전달하는 직관은 다음과 같다: \(F\) 는 “\(R^2\) 에 표본 크기를 곱한 것”에 비례한다. 신호 대 잡음 비율( \(R^2/(1-R^2)\) )이 같아도, 더 많은 데이터로 관찰했다면( \(n-2\) 가 크다면) 그 신호가 우연이 아닐 확률이 높아진다. \(R^2\) 만으로 “유의한가?”를 판단하면 안 되는 이유가 여기에 있다 — 같은 \(R^2\) 라도 \(n\) 이 크면 \(F\) 가 커지고 유의해진다. \(R^2\) 는 효과 크기(effect size), \(F\)(\(p\)-value)는 통계적 유의성이며 두 개념은 다르다.
- \(R^2\) 는 변수를 추가하면 절대로 줄어들지 않는다 — 다중 회귀에서 쓸모없는 변수를 넣어도 \(R^2\) 는 오른다. 이를 보정한 것이 수정 \(R^2\)(\(R^2_{\text{adj}}\))이다.
- \(R^2\) 는 인과를 의미하지 않는다. 높은 \(R^2\) 는 강한 선형 상관이지, \(x\) 가 \(y\) 를 일으킨다는 증거가 아니다.
- 비선형 패턴에서 \(R^2\) 가 높을 수 있다. 강한 이차 관계에서도 직선 적합의 \(R^2\) 가 제법 높게 나올 수 있어, 잔차 분석 없이 \(R^2\) 만 보면 오진단한다.
6 \(\beta\) 의 신뢰구간 (11.3.37)
\(t\)-피벗을 뒤집으면:
\[ P\!\left(\hat\beta - t_{n-2,\alpha/2}\,\frac{S}{\sqrt{S_{xx}}} \leq \beta \leq \hat\beta + t_{n-2,\alpha/2}\,\frac{S}{\sqrt{S_{xx}}}\right) = 1 - \alpha. \]
즉, \(100(1-\alpha)\%\) 신뢰구간:
\[ \boxed{\;\hat\beta \pm t_{n-2,\;\alpha/2} \cdot \frac{S}{\sqrt{S_{xx}}}.\;} \]
6.1 신뢰구간의 폭을 줄이려면
| 방법 | 메커니즘 |
|---|---|
| \(n\) 을 늘린다 | \(S_{xx}\) 증가 (동일 \(x\) 범위에서), 자유도 증가 → \(t\) 분위수 감소 |
| \(x\) 의 범위를 넓힌다 | \(S_{xx}\) 직접 증가 |
| 잡음 \(\sigma\) 를 줄인다 | \(S^2\) 감소 (실험 통제, 공변량 보정 등) |
| 유의수준을 완화한다 | \(\alpha \uparrow\) → \(t\) 분위수 감소 (대가: 커버리지 저하) |
\(S_{xx}\) 가 분모에 있으므로, \(x\) 를 넓게 퍼뜨리는 것이 가장 직접적인 전략이다. 이것은 §11.3.2의 실험설계 논의와 일맥상통한다.
7 특정 \(x_0\) 에서의 추론 (§11.3.5)
7.1 평균 반응의 추정 (11.3.39)
실험자가 새로운 \(x_0\) 값에서 \(E(Y \mid x_0) = \alpha + \beta x_0\) 를 추정하고 싶다면, 점추정은 자연스럽게 \(\hat y_0 = \hat\alpha + \hat\beta x_0\) 이다. 이 추정량의 분포는:
\[ \hat\alpha + \hat\beta x_0 \sim N\!\left(\alpha + \beta x_0, \;\sigma^2\!\left(\frac{1}{n} + \frac{(x_0 - \bar x)^2}{S_{xx}}\right)\right). \]
분산에서 \((x_0 - \bar x)^2 / S_{xx}\) 항에 주목한다. \(x_0\) 가 \(\bar x\) 에서 멀수록 분산이 커진다 — 데이터 중심에서 벗어날수록 추정이 불안정해진다. 이것은 직관적으로도 명백하다: 데이터가 없는 영역으로 외삽하면 불확실성이 폭증한다.
7.2 평균에 대한 신뢰구간 (11.3.40)
\[ \hat y_0 \pm t_{n-2,\alpha/2} \cdot S\sqrt{\frac{1}{n} + \frac{(x_0 - \bar x)^2}{S_{xx}}}. \]
이 구간은 \(x_0\) 에 따라 폭이 변한다. \(x_0 = \bar x\) 에서 가장 좁고, \(|x_0 - \bar x|\) 가 커질수록 넓어진다. 따라서 여러 \(x_0\) 에 대해 그리면 모래시계(hourglass) 모양의 신뢰대(confidence band)가 된다.
7.3 예측구간 (11.3.41)
평균이 아닌 개별 관측 \(Y_0 \sim N(\alpha + \beta x_0, \sigma^2)\) 을 예측하는 것은 추가적 불확실성을 수반한다. \(Y_0\) 자체가 확률변수이므로:
\[ Y_0 - (\hat\alpha + \hat\beta x_0) \sim N\!\left(0, \;\sigma^2\!\left(\underbrace{1}_{\text{미래 관측의 변동}} + \frac{1}{n} + \frac{(x_0 - \bar x)^2}{S_{xx}}\right)\right). \]
첫 번째 항 “1”이 핵심이다. 이것은 미래 관측 자체의 랜덤니스이다. 비유하자면, 과녁의 중심(회귀직선)을 정확히 안다 해도 화살(개별 \(Y_0\))은 매번 다른 곳에 꽂힌다 — 이 산포가 \(\sigma^2 \cdot 1\) 에 해당한다. 나머지 항 \(1/n + (x_0 - \bar{x})^2/S_{xx}\) 는 과녁 중심 자체를 정확히 모르는 데서 오는 불확실성이다. 예측구간은 이 두 독립적 불확실성을 합산하므로 항상 신뢰구간보다 넓다. 회귀직선을 정확히 안다 해도(\(n \to \infty\)) 개별 \(Y_0\) 는 \(\sigma^2\) 만큼 변동한다.
\(100(1-\alpha)\%\) 예측구간:
\[ \boxed{\;\hat y_0 \pm t_{n-2,\alpha/2} \cdot S\sqrt{1 + \frac{1}{n} + \frac{(x_0 - \bar x)^2}{S_{xx}}}.\;} \]
7.4 신뢰구간 vs 예측구간
| 신뢰구간 (평균) | 예측구간 (개별 관측) | |
|---|---|---|
| 대상 | \(E(Y \mid x_0)\) (상수) | \(Y_0\) (확률변수) |
| 분산 항 | \(1/n + (x_0-\bar x)^2/S_{xx}\) | \(1 + 1/n + (x_0-\bar x)^2/S_{xx}\) |
| 폭 | 좁다 | 항상 넓다 (\(1\) 항 추가) |
| \(n \to \infty\) 일 때 | 폭 → 0 | 폭 → \(2 t \cdot \sigma\) (수렴하지 않음) |
이것이 예측과 추정의 근본적 차이다. 아무리 많은 데이터를 모아도 개별 관측의 내재적 변동 \(\sigma^2\) 는 사라지지 않는다. 데이터가 많으면 직선의 위치를 정확히 알 수 있지만, 그 직선 주위의 산포는 줄일 수 없다. 이 한계는 통계적 예측의 본질적 제약이다.
8 외삽의 위험
모든 신뢰·예측 구간은 모형이 \(x_0\) 에서도 성립한다는 가정 하에서만 유효하다. \(x_0\) 가 관측 범위 \([\min x_i, \max x_i]\) 밖에 있으면(외삽, extrapolation):
- 회귀함수가 비선형일 가능성을 검증할 데이터가 없다
- 구간 폭이 넓어지는 것은 수학이 “불확실하다”고 경고하는 것이지만, 실제 위험은 수학이 표현하는 것보다 더 크다 — 모형 자체가 틀릴 수 있다
Casella & Berger 도 §11.3.6 끝에서 “관측 범위 밖으로의 외삽은 대개 현명하지 않다”고 명시한다.
9 동시 추론과 신뢰대 (§11.3.6 개요)
단일 \(x_0\) 가 아닌 모든 \(x\) 에 대해 동시에 유효한 구간을 원한다면 두 가지 방법이 있다:
- Bonferroni 보정 (11.3.42): 유한 개의 \(x_{01}, \ldots, x_{0m}\) 에 대해 \(t_{n-2,\alpha/(2m)}\) 사용
- Scheffé 신뢰대 (Theorem 11.3.6): 모든 \(x\) 에 대해 동시에 유효
\[ \hat\alpha + \hat\beta x \pm \sqrt{2 F_{2,n-2,\alpha}} \cdot S\sqrt{\frac{1}{n} + \frac{(x - \bar x)^2}{S_{xx}}}. \]
여기서 \(t\) 분위수 대신 \(\sqrt{2F_{2,n-2,\alpha}}\) 가 쓰이는 이유는, 동시에 보호해야 하는 대상이 \((\alpha, \beta)\) 라는 2차원 모수 공간 전체이기 때문이다. 개별 \(t\)-구간은 한 점 \(x_0\) 에서만 95%를 보장하지만, Scheffé 대는 무한히 많은 \(x\) 에 대해 동시에 커버하므로 더 보수적인 임계값을 사용한다.
Scheffé 대는 개별 \(t\)-구간보다 넓지만, 무한히 많은 \(x\) 에 대해 동시에 커버한다. Bonferroni 는 소수의 \(x_0\) 에 대해서는 더 좁을 수 있으나, \(m\) 이 커지면 Scheffé 가 유리해진다.
10 응용 분야
| 분야 | 추론 유형 | 구체적 예시 |
|---|---|---|
| 임상시험 | \(\beta = 0\) 검정 | 약물 용량과 혈압 변화의 선형 관계 유의성 |
| 품질공학 | 예측구간 | 온도(\(x\))에서 생산되는 부품의 강도(\(Y\)) 예측 |
| 경제학 | 신뢰구간 | 교육 연수 1년 추가의 소득 증가분(\(\beta\))에 대한 구간 추정 |
| 농학 | 회귀 ANOVA | 비료량(\(x\))과 수확량(\(Y\))의 관계 유의성 |
| 대학 입시 | 예측구간 | 고교 성적(\(x\))으로 대학 1년 GPA(\(Y_0\)) 예측 |
| 센서 보정 | 신뢰대 | 참값(\(x\))과 측정값(\(Y\))의 보정 곡선에 대한 동시 신뢰대 |
11 수치 예시
11.1 손 계산
\(n = 5\), \(x = (1, 2, 3, 4, 5)\), \(Y = (2.1, 3.9, 6.2, 7.8, 10.1)\).
§11.3.3 포스트에서 이미 계산한 수량:
- \(\hat\beta = 1.99\), \(\hat\alpha = 0.05\)
- \(S_{xx} = 10\), \(S_{xY} = 19.9\), \(S_{YY} = \sum(Y_i - \bar Y)^2\)
- RSS \(= 0.107\), \(S^2 = 0.107/3 = 0.0357\), \(S = 0.1889\)
Step 1: \(S_{YY}\) 계산
\(\bar Y = 6.02\). \(S_{YY} = (2.1-6.02)^2 + (3.9-6.02)^2 + (6.2-6.02)^2 + (7.8-6.02)^2 + (10.1-6.02)^2\) \(= 15.3664 + 4.4944 + 0.0324 + 3.1684 + 16.6464 = 39.708\).
Step 2: 회귀 ANOVA
- SSR \(= S_{xY}^2/S_{xx} = 19.9^2/10 = 39.601\)
- RSS \(= 0.107\)
- SST \(= S_{YY} = 39.708\) (확인: \(39.601 + 0.107 = 39.708\) ✓)
- \(F = 39.601/0.0357 = 1109.2\)
이 \(F\) 값은 \(F_{1,3}\) 에서 매우 극단적이므로, \(\beta = 0\) 은 강하게 기각된다.
Step 3: \(t\)-통계량
\(T = \hat\beta / (S/\sqrt{S_{xx}}) = 1.99 / (0.1889/\sqrt{10}) = 1.99/0.05974 = 33.31\).
\(T^2 = 33.31^2 = 1109.6 \approx F\) ✓ (\(t^2 = F\) 동치).
Step 4: 95% 신뢰구간 (\(t_{3, 0.025} = 3.182\))
\(\hat\beta \pm t \cdot S/\sqrt{S_{xx}} = 1.99 \pm 3.182 \times 0.05974 = 1.99 \pm 0.190\).
\(\beta \in [1.800, 2.180]\).
Step 5: 예측구간 (\(x_0 = 3\))
\(\hat y_0 = 0.05 + 1.99 \times 3 = 6.02\).
\(\text{SE}_{\text{pred}} = S\sqrt{1 + 1/5 + (3-3)^2/10} = 0.1889 \times \sqrt{1.2} = 0.2069\).
\(6.02 \pm 3.182 \times 0.2069 = 6.02 \pm 0.658\).
\(Y_0 \in [5.362, 6.678]\).
12 코드 예시
12.1 Step 1: 순수 Python — 검정·구간의 원리
import math
x = [1, 2, 3, 4, 5]
y = [2.1, 3.9, 6.2, 7.8, 10.1]
n = len(x)
x_bar = sum(x) / n
y_bar = sum(y) / n
S_xx = sum((xi - x_bar) ** 2 for xi in x)
S_xY = sum((xi - x_bar) * (yi - y_bar) for xi, yi in zip(x, y))
S_YY = sum((yi - y_bar) ** 2 for yi in y)
beta_hat = S_xY / S_xx
alpha_hat = y_bar - beta_hat * x_bar
resid = [yi - alpha_hat - beta_hat * xi for xi, yi in zip(x, y)]
rss = sum(r ** 2 for r in resid)
s2 = rss / (n - 2)
s = math.sqrt(s2)
# ANOVA 분해
ssr = S_xY ** 2 / S_xx
print(f"SSR = {ssr:.3f}, RSS = {rss:.3f}, SST = {S_YY:.3f}")
print(f"SSR + RSS = {ssr + rss:.3f} (should = SST)")
# R²
r2 = ssr / S_YY
print(f"R² = {r2:.6f}")
# F 통계량
f_stat = (ssr / 1) / s2
print(f"F = {f_stat:.2f}")
# t 통계량 (beta)
se_beta = s / math.sqrt(S_xx)
t_stat = beta_hat / se_beta
print(f"t = {t_stat:.2f}, t² = {t_stat**2:.2f} (should ≈ F)")
# 95% CI for beta (t_{3, 0.025} = 3.182)
t_crit = 3.182
ci_low = beta_hat - t_crit * se_beta
ci_high = beta_hat + t_crit * se_beta
print(f"95% CI for beta: [{ci_low:.3f}, {ci_high:.3f}]")
# 예측구간 at x0=3
x0 = 3
y0_hat = alpha_hat + beta_hat * x0
se_pred = s * math.sqrt(1 + 1/n + (x0 - x_bar)**2 / S_xx)
pi_low = y0_hat - t_crit * se_pred
pi_high = y0_hat + t_crit * se_pred
print(f"Prediction interval at x0={x0}: [{pi_low:.3f}, {pi_high:.3f}]")12.2 Step 2: statsmodels — summary 와 이론값 비교
import numpy as np
import statsmodels.api as sm
x = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
y = np.array([2.1, 3.9, 6.2, 7.8, 10.1])
X = sm.add_constant(x)
model = sm.OLS(y, X).fit()
print(model.summary())
# ANOVA 테이블
print(f"\nR² = {model.rsquared:.6f}")
print(f"F = {model.fvalue:.2f}")
print(f"p(F) = {model.f_pvalue:.2e}")
# 특정 x0 에서의 평균 추정 + 예측 구간
from statsmodels.sandbox.regression.predstd import wls_prediction_std
x0_arr = np.array([[1.0, 3.0]]) # add_constant 포함
prstd, iv_l, iv_u = wls_prediction_std(model, exog=x0_arr, alpha=0.05)
print(f"\n예측 at x0=3: {model.predict(x0_arr)[0]:.4f}")
print(f"예측구간: [{iv_l[0]:.4f}, {iv_u[0]:.4f}]")12.3 Step 3: 시뮬레이션 — 신뢰구간 커버리지 검증
import numpy as np
from scipy import stats
rng = np.random.default_rng(42)
alpha_true, beta_true, sigma = 1.0, 2.0, 1.0
x = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
n = len(x)
S_xx = ((x - x.mean()) ** 2).sum()
t_crit = stats.t.ppf(0.975, df=n - 2) # t_{3, 0.025}
n_sim = 50_000
cover_ci = 0
cover_pi = 0
x0 = 3.0
for _ in range(n_sim):
y = alpha_true + beta_true * x + rng.normal(0, sigma, n)
b = ((x - x.mean()) * (y - y.mean())).sum() / S_xx
a = y.mean() - b * x.mean()
resid = y - a - b * x
s = np.sqrt((resid ** 2).sum() / (n - 2))
# CI for beta
se_b = s / np.sqrt(S_xx)
if abs(b - beta_true) <= t_crit * se_b:
cover_ci += 1
# 예측구간 at x0
y0_hat = a + b * x0
se_pred = s * np.sqrt(1 + 1/n + (x0 - x.mean())**2 / S_xx)
y0_new = alpha_true + beta_true * x0 + rng.normal(0, sigma)
if abs(y0_new - y0_hat) <= t_crit * se_pred:
cover_pi += 1
print(f"CI coverage for beta: {cover_ci/n_sim:.4f} (nominal 0.95)")
print(f"PI coverage at x0=3: {cover_pi/n_sim:.4f} (nominal 0.95)")12.4 Step 4: 신뢰대·예측대 시각화
import numpy as np
import matplotlib.pyplot as plt
from scipy import stats
# 데이터 & 적합
x = np.array([1.0, 2.0, 3.0, 4.0, 5.0])
y = np.array([2.1, 3.9, 6.2, 7.8, 10.1])
n = len(x)
x_bar = x.mean()
S_xx = ((x - x_bar) ** 2).sum()
b = ((x - x_bar) * (y - y.mean())).sum() / S_xx
a = y.mean() - b * x_bar
s = np.sqrt(((y - a - b * x) ** 2).sum() / (n - 2))
t_crit = stats.t.ppf(0.975, df=n - 2)
# 연속 x 격자
x_grid = np.linspace(0, 6, 200)
y_hat = a + b * x_grid
# 평균에 대한 신뢰구간
se_mean = s * np.sqrt(1/n + (x_grid - x_bar)**2 / S_xx)
ci_lo = y_hat - t_crit * se_mean
ci_hi = y_hat + t_crit * se_mean
# 예측구간
se_pred = s * np.sqrt(1 + 1/n + (x_grid - x_bar)**2 / S_xx)
pi_lo = y_hat - t_crit * se_pred
pi_hi = y_hat + t_crit * se_pred
fig, ax = plt.subplots(figsize=(8, 5))
ax.scatter(x, y, color="black", zorder=5, label="observed")
ax.plot(x_grid, y_hat, "k-", label="fitted line")
ax.fill_between(x_grid, ci_lo, ci_hi, alpha=0.3, color="steelblue",
label="95% CI (mean)")
ax.fill_between(x_grid, pi_lo, pi_hi, alpha=0.15, color="coral",
label="95% PI (individual)")
ax.set_xlabel("x")
ax.set_ylabel("Y")
ax.set_title("Confidence Band vs Prediction Band")
ax.legend()
plt.tight_layout()
plt.show()12.5 결과 해석
- Step 1: 손 계산으로 ANOVA 분해, \(t^2 = F\) 동치, 신뢰구간·예측구간을 직접 확인한다.
- Step 2: statsmodels 의 summary 가 이론 공식과 정확히 일치함을 검증한다.
- Step 3: 50,000 회 시뮬레이션에서 CI 와 PI 의 커버리지가 명목 수준 0.95 에 근접한다. 이것은 Theorem 11.3.3 과 그로부터 유도된 추론 절차의 정확성을 경험적으로 확인한다.
- Step 4: 신뢰대와 예측대를 시각화하면, 예측대가 항상 신뢰대보다 넓고, \(n \to \infty\) 에서도 예측대는 수축하지 않음을 직관적으로 확인할 수 있다.
13 핵심 정리
- \(t\)-통계량은 Theorem 11.3.3의 세 결과(정규성, \(\chi^2\), 독립성)를 결합해 유도된다. \(T_\beta = (\hat\beta - \beta) / (S/\sqrt{S_{xx}}) \sim t_{n-2}\).
- \(H_0: \beta = 0\) 검정은 \(t\)-검정과 \(F\)-검정으로 동치이다. \(F\) 형태는 회귀 ANOVA 테이블로 정리된다.
- 제곱합 분해: SST = SSR + RSS. \(R^2\) = SSR/SST 는 설명된 변동의 비율이며, 단순 회귀에서 \(r^2\) 와 같다.
- \(\beta\) 의 신뢰구간: \(\hat\beta \pm t_{n-2,\alpha/2} \cdot S/\sqrt{S_{xx}}\).
- \(x_0\) 에서의 평균 신뢰구간: 분산은 \(\sigma^2(1/n + (x_0-\bar x)^2/S_{xx})\) — \(\bar x\) 에서 가장 좁다.
- 예측구간: 분산에 \(\sigma^2 \cdot 1\) 이 추가된다 — 미래 관측의 내재적 변동 때문이며, \(n \to \infty\) 에서도 사라지지 않는다.
- 외삽 주의: 모든 추론은 관측 범위 내에서만 신뢰할 수 있다.
14 §11.3 전체에서의 위치
§11.3.1 Mathematical Solution ← 133
§11.3.2 Statistical Solution (BLUE) ← 134
§11.3.3 Models and Distribution ← 135
§11.3.4 Estimation and Testing ← 이 포스트 (136)
§11.3.5 Estimation and Prediction ← 이 포스트 (136)
§11.3.6 Simultaneous Estimation ← Scheffé 대 (관련 주제)
§11.3.1–3 이 “재료 조달”이었다면, 이 포스트는 재료를 조합해 추론이라는 건축물을 완성한 것이다. 다음 단계는 §11.3.5의 이변량 정규 관점에서의 상관과 회귀의 관계이다.
15 참고 문헌
- Casella, G., & Berger, R. L. (2002). Statistical Inference (2nd ed.), §11.3.4–§11.3.6. Duxbury.
- Robson, D. S. (1959). A simple method for constructing orthogonal polynomials when the independent variable is unequally spaced. Biometrics, 15(2), 187–191.
16 관련 주제
선행 지식
- SLR: Least Squares — A Mathematical Solution — §11.3.1
- SLR: Best Linear Unbiased Estimators — §11.3.2
- SLR: Models and Distribution Assumptions — §11.3.3, Theorem 11.3.3
- BLUE 와 Gauss-Markov 정리 (일반)
- ANOVA F-test — 제곱합 분해와 \(F\)-분포
후속 주제
- Correlation and Regression (Casella §11.3.5*) — 이변량 정규에서의 \(\rho\) 추론
- Multiple Linear Regression
- Simultaneous Contrasts — Scheffé, Tukey — 동시 추론 일반
관련 개념
- 추정량 평가 기준 — MSE, 효율
- 가설 검정 개론 — 검정의 일반 프레임워크
- Partitioning Sums of Squares — 제곱합 분해의 일반 이론