1 이 포스트의 위치
EIV 모형 개요에서 측정오차 모형의 정의, Functional/Structural 구분, 감쇠 편향을 다루었다. 이 포스트는 그중 최소제곱 해법(Casella & Berger, 2002, §12.2.2)을 단계별로 유도한다.
핵심 질문: \(X\) 에도 오차가 있을 때, “최적의 직선”을 어떤 기준으로 찾아야 하는가?
2 수직 거리 vs 직교 거리
2.1 OLS가 최소화하는 것
통상 OLS는 관측점 \((x_i, y_i)\) 에서 직선 \(y = a + bx\) 까지의 수직 거리(vertical distance)를 최소화한다:
\[ \min_{a, b} \sum_{i=1}^{n} (y_i - a - bx_i)^2 \]
이 목적함수는 “\(x_i\) 는 정확하고, \(y_i\) 만 오차를 가진다”는 가정을 암묵적으로 반영한다. 수직 거리는 \(y\) 방향의 편차만 측정하기 때문이다 (Casella & Berger, 2002, §12.2.2).
2.2 EIV에서 수직 거리가 부적절한 이유
\(X_i = \xi_i + \delta_i\) 이므로 \(x_i\) 도 참값 \(\xi_i\) 에서 벗어나 있다. 수직 거리를 최소화하면 \(x\) 의 오차를 완전히 무시하게 되어, 감쇠 편향(attenuation bias)이 발생한다.
해결책: \(x\) 와 \(y\) 를 대등하게 취급하는 직교 거리(orthogonal distance)를 최소화한다. 이를 전체 최소제곱(Total Least Squares, TLS) 또는 직교 최소제곱(Orthogonal Least Squares)이라 한다.
3 직교 거리의 기하학적 정의
3.1 직선 위 최근접점
관측점 \((x', y')\) 에서 직선 \(y = a + bx\) 위의 가장 가까운 점 \((\hat{x}', \hat{y}')\) 을 구하자. 직교 조건을 적용하면 (Casella & Berger, 2002, 식 12.2.7):
\[ \hat{x}' = \frac{by' + x' - ab}{1 + b^2} \]
\[ \hat{y}' = a + \frac{b(by' + x' - ab)}{1 + b^2} \]
이 공식의 유도: 직선 위의 점을 매개변수 \(t\) 로 \((t, a + bt)\) 로 표현하고, \((x' - t)^2 + (y' - a - bt)^2\) 를 \(t\) 에 대해 미분하여 0으로 놓으면 된다.
3.2 직교 거리의 제곱
관측점 \((x_i, y_i)\) 와 직선 위 최근접점 \((\hat{x}_i, \hat{y}_i)\) 사이의 유클리드 거리의 제곱은:
\[ d_i^2 = (x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2 \]
전체 최소제곱의 목적함수는 이들의 합이다:
\[ Q(a, b) = \sum_{i=1}^{n} d_i^2 = \sum_{i=1}^{n} \left[(x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2\right] \]
4 유도: 직교 LS의 해
4.1 목적함수 정리
\(\hat{x}_i\), \(\hat{y}_i\) 를 대입하여 정리하면, 목적함수가 놀랍도록 간결해진다 (Casella & Berger, 2002, 식 12.2.8):
\[ Q(a, b) = \frac{1}{1 + b^2} \sum_{i=1}^{n} \left[y_i - (a + bx_i)\right]^2 \]
이 수식이 말하는 것: 직교 거리의 합은 통상 OLS 잔차 제곱합에 \(\frac{1}{1+b^2}\) 를 곱한 것이다. OLS 목적함수에 기울기에 의존하는 “할인 인자”가 곱해진 형태이다.
기울기 \(b\) 가 커지면 \(\frac{1}{1+b^2}\) 가 작아져 전체 값이 줄어든다. 따라서 직교 LS는 OLS보다 기울기를 크게 추정하는 경향이 있다 — 이것이 감쇠 편향을 교정하는 메커니즘이다.
4.2 Step 1: \(a\) 에 대한 최소화 (\(b\) 고정)
\(b\) 를 고정하면 \(\frac{1}{1+b^2}\) 는 상수이다. 남은 문제는:
\[ \min_a \sum_{i=1}^{n} \left[y_i - (a + bx_i)\right]^2 \]
이것은 통상 OLS와 동일하므로, 해는:
\[ \hat{a} = \bar{y} - b\bar{x} \]
직교 LS의 절편도 OLS와 같은 형태이다 — 회귀 직선은 항상 \((\bar{x}, \bar{y})\) 를 지난다.
4.3 Step 2: \(b\) 에 대한 최소화
\(\hat{a} = \bar{y} - b\bar{x}\) 를 대입하면:
\[ Q(b) = \frac{1}{1 + b^2} \sum_{i=1}^{n} \left[(y_i - \bar{y}) - b(x_i - \bar{x})\right]^2 \]
표준적인 제곱합/교차곱 표기를 도입한다:
\[ S_{XX} = \sum(x_i - \bar{x})^2, \quad S_{YY} = \sum(y_i - \bar{y})^2, \quad S_{XY} = \sum(x_i - \bar{x})(y_i - \bar{y}) \]
제곱을 전개하면:
\[ Q(b) = \frac{S_{YY} - 2bS_{XY} + b^2 S_{XX}}{1 + b^2} \]
4.4 Step 3: 미분과 해
\(\frac{dQ}{db} = 0\) 을 풀면 (분수함수의 미분, 상세는 Casella Exercise 12.2):
\[ (1 + b^2)(-2S_{XY} + 2bS_{XX}) - 2b(S_{YY} - 2bS_{XY} + b^2 S_{XX}) = 0 \]
정리하면:
\[ S_{XY} b^2 + (S_{XX} - S_{YY})b - S_{XY} = 0 \]
이것은 \(b\) 에 대한 이차 방정식이다. 근의 공식을 적용하면:
\[ \hat{b} = \frac{-(S_{XX} - S_{YY}) \pm \sqrt{(S_{XX} - S_{YY})^2 + 4S_{XY}^2}}{2S_{XY}} \]
두 근의 의미: 이차 방정식이므로 해가 2개이다. 하나는 최솟값을 주고 다른 하나는 최댓값을 준다. 최솟값을 주는 근은 \(+\) 부호이다 (Casella & Berger, 2002, 식 12.2.11).
근거: \(S_{XY} > 0\) (양의 상관) 인 일반적 경우를 가정하면, \(b\) 가 매우 크거나 매우 작을 때 \(Q(b) \to 0\) 이 아니라 \(Q(b) \to\) 유한값임을 확인할 수 있다. 두 근 중 \(+\) 부호 근은 \(\hat{b} > 0\) 을 보장하고 2차 미분 \(\frac{d^2Q}{db^2} > 0\) (극소 조건)을 만족한다. \(-\) 부호 근은 \(Q\) 의 극대(최댓값)에 해당하므로 배제한다.
\[ \boxed{\hat{b}_{OLS-\perp} = \frac{-(S_{XX} - S_{YY}) + \sqrt{(S_{XX} - S_{YY})^2 + 4S_{XY}^2}}{2S_{XY}}} \]
\[ \hat{a}_{OLS-\perp} = \bar{y} - \hat{b}_{OLS-\perp} \bar{x} \]
5 OLS와의 비교: 세 직선의 관계
관측 데이터 \((x_i, y_i)\) 에 대해 세 종류의 회귀 직선을 그을 수 있다:
| 직선 | 최소화 대상 | 기울기 |
|---|---|---|
| \(Y\) on \(X\) (통상 OLS) | \(\sum(y_i - a - bx_i)^2\) | \(\hat{b}_{Y|X} = S_{XY} / S_{XX}\) |
| \(X\) on \(Y\) (역 OLS) | \(\sum(x_i - c - dy_i)^2\) | \(1/\hat{d} = S_{YY} / S_{XY}\) |
| 직교 LS | \(\sum d_i^2\) (직교 거리) | \(\hat{b}_\perp\) (위 공식) |
항상 성립하는 부등식:
\[ |\hat{b}_{Y|X}| \leq |\hat{b}_\perp| \leq |S_{YY}/S_{XY}| \]
직교 LS 직선은 두 OLS 직선 사이에 놓인다 (Casella & Berger, 2002, Figure 12.2.2). 직관적으로, \(Y\) on \(X\) 는 \(X\) 오차를 무시하여 기울기를 과소추정하고, \(X\) on \(Y\) 는 \(Y\) 오차를 무시하여 기울기를 과대추정하므로, 둘 다 공정하게 취급하는 직교 LS는 중간에 위치한다.
5.1 특수 경우
- \(S_{XX} = S_{YY}\): 분산이 같으면 \(\hat{b}_\perp = S_{XY}/S_{XX} + \sqrt{1 + (S_{XY}/S_{XX})^2}\) … 이 아니라, 이차 방정식에서 \(S_{XX} - S_{YY} = 0\) 이므로 \(\hat{b}_\perp = \text{sign}(S_{XY}) \cdot 1\) 이 된다. 즉, 양 변수의 분산이 같으면 직교 LS 기울기는 \(\pm 1\) 이다. 기울기 \(\pm 1\) 은 45° 직선을 의미한다. 이것이 뜻하는 바: \(X\) 와 \(Y\) 의 산포가 동일하므로 두 변수를 완전히 대칭적으로 취급하는 최적 직선은 \(X\) 축과 \(Y\) 축 방향으로 동일한 기여를 한다. 예를 들어 시험 점수를 두 번 측정한 데이터(\(S_{XX} = S_{YY}\), 양의 상관)에서는 직교 LS가 항상 기울기 1의 직선을 반환한다 — “두 측정이 동등하다”는 가정이 기울기를 완전히 결정하는 것이다
- \(S_{XY} = 0\): 두 변수가 무상관이면 직교 LS 기울기는 정의되지 않는다 (0으로 나누기). 이 경우 직선을 맞추는 것 자체가 무의미하다
6 직교 LS와 MLE의 연결
EIV 모형 개요에서 다루었듯이, 분산비 가정 \(\sigma_\delta^2 = \lambda \sigma_\epsilon^2\) 하에서 functional 모형의 MLE를 구하면:
\[ \hat{b}_{MLE}(\lambda) = \frac{-(S_{XX} - \lambda^{-1} S_{YY}) + \sqrt{(S_{XX} - \lambda^{-1} S_{YY})^2 + 4\lambda^{-1} S_{XY}^2}}{2S_{XY}} \]
\(\lambda = 1\) (두 오차의 분산이 같다)일 때, MLE는 직교 LS와 정확히 일치한다. 즉, 직교 최소제곱은 “\(X\) 오차와 \(Y\) 오차의 분산이 같다”는 가정 하의 MLE이다 (Casella & Berger, 2002, §12.2.3).
\(\lambda \neq 1\) 이면 MLE는 가중 직교 최소제곱(Deming 회귀)이 된다.
7 선형대수적 해석
직교 LS는 선형대수의 관점에서도 해석할 수 있다. 중심화된 데이터 행렬을 \(\mathbf{Z} = \begin{bmatrix} \mathbf{x} - \bar{x}\mathbf{1} & \mathbf{y} - \bar{y}\mathbf{1} \end{bmatrix}\) (\(n \times 2\))로 놓으면:
\[ \mathbf{Z}^T\mathbf{Z} = \begin{bmatrix} S_{XX} & S_{XY} \\ S_{XY} & S_{YY} \end{bmatrix} \]
이 \(2 \times 2\) 행렬의 가장 작은 고윳값에 대응하는 고유벡터 \(\mathbf{v} = (v_1, v_2)\) 가 직교 LS의 기울기를 결정한다:
\[ \hat{b}_\perp = -\frac{v_1}{v_2} \]
직관: \(\mathbf{Z}^T\mathbf{Z}\) 의 고유분해는 데이터의 주성분 방향을 준다. 첫 번째 주성분(큰 고윳값)은 데이터가 가장 넓게 퍼진 방향 — 이것이 직교 LS 직선의 방향이다. 두 번째 주성분(작은 고윳값)은 직선에 직교하는 방향이며, 직교 잔차가 이 방향으로 투영된다.
이것은 PCA(주성분 분석)와 직교 LS가 동일한 문제임을 보여준다. 2변수에서 첫 번째 주성분 직선이 곧 직교 LS 직선이다.
8 코드 예시
8.1 유도 과정의 수치 검증 (Python)
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
n = 50
xi = np.random.uniform(1, 10, n)
X = xi + np.random.normal(0, 1.5, n)
Y = 2 + 3 * xi + np.random.normal(0, 1.0, n)
# 제곱합/교차곱
Sxx = np.sum((X - X.mean())**2)
Syy = np.sum((Y - Y.mean())**2)
Sxy = np.sum((X - X.mean()) * (Y - Y.mean()))
# 1. OLS (Y on X)
b_ols = Sxy / Sxx
a_ols = Y.mean() - b_ols * X.mean()
# 2. 역 OLS (X on Y) → 기울기 = Syy/Sxy
b_rev = Syy / Sxy
a_rev = Y.mean() - b_rev * X.mean()
# 3. 직교 LS (이차 방정식 풀기)
discriminant = (Sxx - Syy)**2 + 4 * Sxy**2
b_orth = (-(Sxx - Syy) + np.sqrt(discriminant)) / (2 * Sxy)
a_orth = Y.mean() - b_orth * X.mean()
# 4. 선형대수적 해 (PCA)
Z = np.column_stack([X - X.mean(), Y - Y.mean()])
ZtZ = Z.T @ Z
eigenvalues, eigenvectors = np.linalg.eigh(ZtZ)
# 가장 작은 고윳값의 고유벡터
v = eigenvectors[:, 0]
b_pca = -v[0] / v[1]
print(f"진짜 beta: 3.000")
print(f"OLS (Y on X): {b_ols:.3f}")
print(f"역 OLS: {b_rev:.3f}")
print(f"직교 LS: {b_orth:.3f}")
print(f"PCA 기반: {b_pca:.3f}")
print(f"직교 LS == PCA: {np.isclose(b_orth, b_pca)}")
print(f"\n부등식 확인: |b_ols| <= |b_orth| <= |b_rev|")
print(f" {abs(b_ols):.3f} <= {abs(b_orth):.3f} <= {abs(b_rev):.3f}")결과 해석: 진짜 기울기 \(\beta = 3.0\) 에 대해, OLS 추정치 \(\hat{b}_{Y|X} \approx 2.3\) 은 측정오차로 인한 감쇠 편향으로 과소추정된다. 역 OLS \(\hat{b}_{rev} \approx 3.8\) 은 반대 방향으로 과대추정한다. 직교 LS \(\hat{b}_\perp \approx 3.0\) 은 진짜 값에 가장 가깝다. PCA 기반 해가 직교 LS와 일치하는 것이 확인된다 (직교 LS == PCA: True). 부등식 \(|\hat{b}_{Y|X}| \leq |\hat{b}_\perp| \leq |\hat{b}_{rev}|\) 도 수치로 검증된다.
# 시각화: 세 직선 비교
x_plot = np.linspace(0, 12, 100)
fig, ax = plt.subplots(figsize=(8, 6))
ax.scatter(X, Y, alpha=0.5, s=25, color='gray')
ax.plot(x_plot, 2 + 3 * x_plot, 'k--', lw=2, label='True (beta=3.0)')
ax.plot(x_plot, a_ols + b_ols * x_plot, 'r-', lw=1.5,
label=f'OLS Y|X (b={b_ols:.2f})')
ax.plot(x_plot, a_rev + b_rev * x_plot, 'b-', lw=1.5,
label=f'Reverse OLS (b={b_rev:.2f})')
ax.plot(x_plot, a_orth + b_orth * x_plot, 'g-', lw=2,
label=f'Orthogonal LS (b={b_orth:.2f})')
ax.set_xlabel('X (측정오차 포함)')
ax.set_ylabel('Y')
ax.set_title('세 회귀 직선의 비교')
ax.legend()
plt.tight_layout()
plt.show()8.2 직교 거리 시각화 (Python)
# 직교 거리 vs 수직 거리 시각화
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
for ax, (a, b, title, color) in zip(axes, [
(a_ols, b_ols, 'OLS: 수직 거리', 'red'),
(a_orth, b_orth, '직교 LS: 직교 거리', 'green')
]):
ax.scatter(X, Y, alpha=0.5, s=25, color='gray')
ax.plot(x_plot, a + b * x_plot, color=color, lw=2)
for xi, yi in zip(X[:15], Y[:15]):
if 'OLS' in title:
# 수직 거리: (xi, yi) → (xi, a + b*xi)
y_hat = a + b * xi
ax.plot([xi, xi], [yi, y_hat], color=color, alpha=0.4, lw=0.8)
else:
# 직교 거리: (xi, yi) → 직선 위 최근접점
x_hat = (b * yi + xi - a * b) / (1 + b**2)
y_hat = a + b * x_hat
ax.plot([xi, x_hat], [yi, y_hat], color=color, alpha=0.4, lw=0.8)
ax.set_title(title)
ax.set_xlabel('X')
ax.set_ylabel('Y')
plt.tight_layout()
plt.show()결과 해석: 왼쪽 패널(OLS)에서는 잔차 선분이 모두 수직 방향이다 — \(x\) 좌표는 고정된 채 \(y\) 방향으로만 오차를 측정한다. 오른쪽 패널(직교 LS)에서는 잔차 선분이 직선에 수직으로 뻗어 있다 — \(x\) 와 \(y\) 방향 오차를 동시에 반영한다. 측정오차가 있는 상황에서 왼쪽(OLS)의 잔차 선분은 실제 참값까지의 거리를 올바르게 표현하지 못하지만, 오른쪽(직교 LS)의 잔차 선분은 \((x_i, y_i)\) 와 참 직선 사이의 실제 거리에 대응한다.
9 요약
| 유도 단계 | 핵심 내용 |
|---|---|
| 동기 | \(X\) 에도 오차가 있으므로 수직 거리 대신 직교 거리를 최소화한다 |
| 목적함수 정리 | 직교 거리의 합 = \(\frac{1}{1+b^2} \sum(y_i - a - bx_i)^2\) |
| \(a\) 최소화 | \(\hat{a} = \bar{y} - b\bar{x}\) (OLS와 동일) |
| \(b\) 최소화 | \(S_{XY}b^2 + (S_{XX} - S_{YY})b - S_{XY} = 0\) (이차 방정식) |
| 해 | \(\hat{b} = \frac{-(S_{XX}-S_{YY}) + \sqrt{(S_{XX}-S_{YY})^2 + 4S_{XY}^2}}{2S_{XY}}\) |
| 세 직선 | \(\|\hat{b}_{Y\|X}\| \leq \|\hat{b}_\perp\| \leq \|S_{YY}/S_{XY}\|\) |
| MLE 연결 | \(\lambda = 1\) 가정 시 MLE = 직교 LS |
| PCA 연결 | \(\mathbf{Z}^T\mathbf{Z}\) 의 첫 번째 주성분 = 직교 LS 직선 |
10 관련 주제
선행 지식
- EIV 모형 개요 — Functional/Structural 구분, 감쇠 편향
- SLR: Least Squares — 통상 OLS의 유도 (수직 거리 최소화)
후속 주제
- EIV: Maximum Likelihood Estimation — Casella §12.2.3, 분산비 가정 하의 MLE, 가중 직교 LS(Deming 회귀)
- EIV: Structural Model & Identifiability — Structural 모형의 모수 식별 조건
- Logistic Regression — OLS를 넘어선 GLM의 첫 번째 단계
- Robust Regression — M-추정 기반 (Casella §12.4), LAD와 Huber ρ
- Multiple Linear Regression — 행렬 OLS, Gauss-Markov, F-검정
다른 카테고리 연결