Simple Linear Regression: Estimation and Testing with Normal Errors

t-검정, F-검정, 신뢰구간, 예측구간 — Casella §11.3.4–§11.3.5

조건부 정규 회귀 모형 하에서 Theorem 11.3.3(표본분포)을 활용해 t-통계량, 기울기 검정(β=0), 회귀 ANOVA, 제곱합 분해, 결정계수 R², β의 신뢰구간, 특정 x₀에서의 평균 추정과 예측구간까지 단순 선형 회귀의 추론 절차 전체를 유도하고 해석한다.

Statistics
Regression
저자

Kwangmin Kim

공개

2026년 04월 06일

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\)-검정 vs \(F\)-검정 — 언제 무엇을 쓰나

단순 선형 회귀에서 두 검정은 수학적으로 동치이다. 하지만 실무적 차이가 있다:

  • \(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\)(\(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\) (수렴하지 않음)
예측구간은 절대로 0으로 수축하지 않는다

이것이 예측과 추정의 근본적 차이다. 아무리 많은 데이터를 모아도 개별 관측의 내재적 변동 \(\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 핵심 정리

  1. \(t\)-통계량은 Theorem 11.3.3의 세 결과(정규성, \(\chi^2\), 독립성)를 결합해 유도된다. \(T_\beta = (\hat\beta - \beta) / (S/\sqrt{S_{xx}}) \sim t_{n-2}\).
  2. \(H_0: \beta = 0\) 검정\(t\)-검정과 \(F\)-검정으로 동치이다. \(F\) 형태는 회귀 ANOVA 테이블로 정리된다.
  3. 제곱합 분해: SST = SSR + RSS. \(R^2\) = SSR/SST 는 설명된 변동의 비율이며, 단순 회귀에서 \(r^2\) 와 같다.
  4. \(\beta\) 의 신뢰구간: \(\hat\beta \pm t_{n-2,\alpha/2} \cdot S/\sqrt{S_{xx}}\).
  5. \(x_0\) 에서의 평균 신뢰구간: 분산은 \(\sigma^2(1/n + (x_0-\bar x)^2/S_{xx})\)\(\bar x\) 에서 가장 좁다.
  6. 예측구간: 분산에 \(\sigma^2 \cdot 1\) 이 추가된다 — 미래 관측의 내재적 변동 때문이며, \(n \to \infty\) 에서도 사라지지 않는다.
  7. 외삽 주의: 모든 추론은 관측 범위 내에서만 신뢰할 수 있다.

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 관련 주제

선행 지식

후속 주제

관련 개념

Subscribe

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