S2 · 캡스톤: 하나의 데이터, 일곱 경로#

같은 회귀식을 두 프로그램에 넣었는데 계수가 다르면, 먼저 어느 프로그램이 빠른지 물을 일이 아닙니다. 두 프로그램이 같은 추정량을 계산하는지, 같은 고정효과를 제거했는지, 같은 계수 허용오차를 쓰는지부터 확인해야 합니다. 이번 장에서는 하나의 고정효과 도구변수 추정량을 일곱 경로로 계산하고, 수학적 동일성과 수치적 차이를 따로 측정합니다.

실제 실행 예제는 관측 2,400개, 설명변수 6개, 도구 7개, 집단 40개, 시점 12개입니다. 더 큰 자료로의 확장은 마지막 탐구 과제에서 다룹니다. 작은 예제도 충분히 까다롭습니다. 마지막 두 설명변수가 거의 겹치고, 첫 변수는 내생적이며, 오차에는 집단 공통 성분이 있습니다. 이 세 조건을 각각 조건수·식별·군집 추론으로 구별해야 합니다.

데이터의 단위와 정답의 뜻#

\(y_i\)는 모의 성과 지표, \(x_i\in\mathbb R^6\)는 정책·통제변수입니다. 생성기의 수치 단위를 사용하며 표본 평균 0·분산 1로 다시 표준화하지 않습니다. 계수는 설명변수 한 단위당 성과 지표의 변화입니다. 집단 \(g(i)\)와 시점 \(t(i)\)의 고정효과를 두면

\[ y_i=x_i^T\beta+\alpha_{g(i)}+\tau_{t(i)}+u_i. \]

상수항의 중복을 제거한 더미행렬을 \(D\in\mathbb R^{n\times51}\)이라 합시다. 40개 집단 더미와 기준 시점을 제외한 11개 시점 더미입니다. 생성기는 모든 집단과 시점을 잇는 관측을 먼저 넣어 집단–시점 그래프를 연결합니다. 고정효과의 기준을 정한 뒤 \(D\)는 전열계수입니다.

첫 설명변수는 제외 도구 두 개와 잠재 충격의 함수입니다. 잠재 충격이 \(u_i\)에도 들어가므로 내생적입니다. 나머지 5개 통제변수는 도구에도 포함합니다. 고정효과 제거 뒤의 도구는 7열입니다. 마지막 두 설명변수는 \(x_6=x_5+10^{-3}w\) 형태로 만들어 거의 공선적이게 합니다. 이때 참값은

\[ \beta_0=(1,0.5,-0.3,0.2,0.1,-0.2)^T \]

이지만 유한표본 추정값과 같을 이유가 없습니다. 수치 알고리즘의 오차는 동일한 표본의 SVD 기준해와 비교하고, 통계적 오차는 \(\beta_0\)와 비교합니다. 둘을 같은 열에 넣으면 원인을 구별할 수 없습니다.

공통 변환은 다음과 같습니다. \(M_D=I-P_D\)를 실제 \(n\times n\) 행렬로 만들지 않고 QR 또는 흡수로 적용합니다.

\[ \widetilde y=M_Dy,\quad \widetilde X=M_DX,\quad \widetilde Z=M_DZ,\quad Q_Z^TQ_Z=I,\quad \operatorname{col}Q_Z=\operatorname{col}\widetilde Z. \]

이제 \(A=Q_ZQ_Z^T\widetilde X\in\mathbb R^{n\times6}\), \(b=\widetilde y\)라 두겠습니다. 일곱 경로가 푸는 문제는 모두

\[ \widehat\beta=\arg\min_\beta\|b-A\beta\|_2^2 =(\widetilde X^TP_{\widetilde Z}\widetilde X)^{-1} \widetilde X^TP_{\widetilde Z}\widetilde y. \]

등호는 \(A\)가 전열계수라는 가정 아래 성립합니다. 이것은 2SLS의 계수입니다. 도구를 빼고 \(\widetilde X\)에 바로 OLS를 적용하는 것은 다른 추정량입니다. 고정효과 IV의 소거 증명은 마지막 정리 1 · 고정효과 IV의 소거에서 확인합니다.

일곱 경로의 계약#

번호

경로

같은 해를 얻는 이유

별도로 확인할 비용·위험

1

\(A^TA\)의 Cholesky

정상방정식

조건수 제곱, Gram 형성 오차

2

Householder QR

\(A=QR\), \(R\beta=Q^Tb\)

삼각해법, 전열계수

3

SVD

\(A=U\Sigma V^T\), \(\beta=V\Sigma^{-1}U^Tb\)

계수 판정 허용오차

4

희소 증강계 LU

\(r+A\beta=b\), \(A^Tr=0\)

큰 부정정 계, fill-in

5

흡수 후 QR

더미 QR와 같은 \(M_D\) 극한

흡수 중단오차

6

열 재척도 후 LSMR

원래 최소제곱 문제의 반복해

수렴 판정, 반복 수

7

스케치 전처리 후 LSMR

원래 잔차를 최소화하며 좌표만 변경

스케치 구성비용, 전처리 품질

4번은 \(\begin{pmatrix}I&A\\A^T&0\end{pmatrix}(r,\beta)^T=(b,0)^T\)를 희소 LU로 풉니다. 이 작은 \(k\)의 조밀 예제에서 더 빠를 이유는 없습니다. 희소하게 저장했다는 사실과 전체 분해가 저렴하다는 결론도 다릅니다.

7번은 \(S\in\mathbb R^{160\times n}\)의 Gaussian 스케치로 \(SA=Q_sR_s\)를 만들고 \(AR_s^{-1}z\approx b\), \(\beta=R_s^{-1}z\)를 풉니다. 최소화하는 것은 끝까지 원래 잔차입니다. 반면 \(\min_\beta\|S(A\beta-b)\|\)만 풀고 멈추는 방식은 근사해이며 별도 실험으로 분리합니다. 실제 코드는 작은 삼각 인자의 역작용을 준비하지만 큰 \(A^TA\)의 역행렬은 만들지 않습니다.

Hide code cell source

from pathlib import Path
import sys
root = next(p for p in [Path.cwd(), *Path.cwd().parents]
            if (p / "scripts/capstone_seven_paths.py").exists())
sys.path.insert(0, str(root / "scripts"))
from capstone_seven_paths import run
result = run(n=2400, seed=452, near=1e-3)
print("condition(A) =", result["condition_projected"])
print("sample SVD beta =", result["reference_beta"])
for name, record in result["methods"].items():
    print(name, "beta error", record["relative_coefficient_error"],
          "SE error", record["relative_se_error"])
condition(A) = 1966.1186719940386
sample SVD beta = [1.00700884246623, 0.4674409370190033, -0.27884993166328903, 0.18512785368580292, 22.648576222411783, -22.794253183430538]
normal_cholesky beta error 3.2940867842319514e-10 SE error 2.8328393363488665e-10
householder_qr beta error 9.548819637226716e-16 SE error 3.355938056632695e-10
svd beta error 0.0 SE error 0.0
sparse_augmented_lu beta error 9.438718512618902e-13 SE error 2.258699102300139e-10
absorption_qr beta error 1.66415367502764e-13 SE error 1.5236737484326065e-10
lsmr_scaled beta error 5.945586194383813e-12 SE error 2.333921762534241e-10
sketch_precondition_lsmr beta error 2.317299553915562e-13 SE error 2.0017291447637381e-10

일곱 방법의 정확도는 다음 절에서 같은 기준해와 비교합니다. 실행 시간은 입력 준비와 해법 실행을 구분해서 해석해야 합니다. 작은 문제의 한 번 실행만으로 다른 컴퓨터나 더 큰 문제에서도 같은 속도 순서가 유지된다고 결론 내릴 수는 없습니다. 코드 실행과 기록 방법은 실습 안내를 참고하세요.

실제 결과: 작은 잔차만으로 충분하지 않다#

기본 실행의 \(\kappa_2(A)\)는 약 \(1.966\times10^3\)입니다. SVD 표본 계수는 약

\[ (1.0070,\ 0.4674,\ -0.2788,\ 0.1851,\ 22.6486,\ -22.7943)^T. \]

뒤의 두 값은 참값과 멉니다. 두 열이 거의 같아 차이 방향의 정보가 부족하기 때문입니다. 두 표준오차도 각각 약 25.70입니다. 수치해법 일곱 개가 서로 일치한다고 해서 개별 계수가 통계적으로 정밀해지는 것은 아닙니다.

경로

SVD 대비 상대 계수오차

상대 표준오차 차이

추가 진단

정상방정식 Cholesky

\(5.69\times10^{-11}\)

\(7.47\times10^{-11}\)

이 조건수에서는 성공

Householder QR

\(5.31\times10^{-15}\)

\(1.75\times10^{-10}\)

직접 삼각해법

SVD

0

0

비교 기준, 절대적인 정확산술 정답은 아님

희소 증강계 LU

\(1.05\times10^{-12}\)

\(7.47\times10^{-11}\)

LU 인자 비영 원소 81,946개

흡수 후 QR

\(6.42\times10^{-13}\)

\(6.18\times10^{-11}\)

흡수 7회

열 재척도 LSMR

\(3.16\times10^{-11}\)

\(1.75\times10^{-10}\)

9회, 중단 코드 2

스케치 전처리 LSMR

\(5.43\times10^{-13}\)

\(3.86\times10^{-11}\)

6회, 중단 코드 2

이 값은 저장한 기본 실행의 반올림 값입니다. BLAS와 실행환경에 따라 마지막 자릿수는 달라질 수 있습니다. SVD 경로의 0은 자기 자신과 비교한 값입니다. 수치 정확성의 독립 검증은 작은 유리수 예제의 정확산술과 고정효과 소거 항등식으로 보완합니다.

일곱 경로의 상대 계수오차와 정상조건 잔차를 로그 축으로 표시. SVD 자기 비교의 영은 표시 하한에 별도 취급한다.

그림 179 가로축 번호는 일곱 경로 표와 같다. 0은 로그에 넣을 수 없어 \(10^{-16}\) 표시 하한에 놓는다. 계수오차와 정상조건 잔차는 다른 양이며, 잔차가 작다는 사실만으로 계수오차를 보증하지 않는다.#

저장 배열의 크기도 따로 읽자. 조밀 더미 \(D\)는 979,200바이트, 투영 설계행렬 \(A\)는 115,200바이트, 이번 조밀 Gaussian 스케치 \(S\)는 3,072,000바이트입니다. 이 작은 문제에서 스케치 자체가 \(A\)보다 크다. 이 수치는 지명한 배열의 크기이며 분해 인자·작업공간·Python 실행기의 최대 메모리 사용량이 아닙니다. 100만 행으로 확장하려면 희소 구조나 암묵적 연산자, 스트리밍 스케치를 설계하고 최대 메모리를 별도로 측정해야 합니다.

흡수는 어느 공간으로 사영하는가#

집단 더미공간을 \(G\), 시점 더미공간을 \(T\)라 합시다. 한 번의 집단별 평균 빼기는 \(P_{G^\perp}\)이고 시점별 평균 빼기는 \(P_{T^\perp}\)입니다. 흡수는 이 둘을 번갈아 적용하여

\[ G^\perp\cap T^\perp=(G+T)^\perp=\operatorname{col}(D)^\perp \]

로 보냅니다. 더미공간 자체의 교집합으로 보내는 것이 아닙니다. 불균형 패널에서는 한 번 평균을 빼고 나면 앞서 0으로 만들었던 다른 집단 평균이 다시 생길 수 있습니다.

코드는 모든 변수를 한 배열로 묶어 흡수하고, 각 종류의 집단 평균에 남은 오차를 초기 배열의 Frobenius 노름으로 나누어 중단합니다. 기본 실행에서 7회 후 이 값은 약 \(4.25\times10^{-13}\), 더미 QR 결과와의 상대 차이는 약 \(3.50\times10^{-12}\)입니다. 반복 횟수만 보고 멈추지 않고 대상 공간과 실제 중단오차를 같이 확인합니다.

집단–시점 관측 수 행렬을 \(B\)라 하고 각 집단·시점의 관측 수를 대각행렬 \(D_g,D_t\)에 담으면 \(C=D_g^{-1/2}BD_t^{-1/2}\)의 비자명 특이값이 두 더미공간의 주각 코사인입니다. 연결된 그래프에서는 상수 방향의 특이값 1을 제거한 최대값을 \(c<1\)이라 합니다. 정규화 이분그래프 Laplacian은

\[\begin{split} L=\begin{pmatrix}I&-C\\-C^T&I\end{pmatrix} \end{split}\]

이고 대응 고윳값은 \(1\pm s_j(C)\)입니다. 두 쪽에 비자명 방향이 있는 연결된 경우 두 번째 고윳값은 \(\lambda_2(L)=1-c\). 작은 갭은 느린 흡수를 예고합니다. 그래프가 여러 성분이면 1인 특이값을 모두 제거해야 하므로 전역 \(\lambda_2=0\) 하나로 성분별 속도를 설명할 수 없습니다. 완전 균형 패널은 비자명 \(c=0\)인 특별한 경우입니다.

구조적 잔차와 군집 표준오차#

최소제곱 알고리즘의 잔차는 \(r=b-A\widehat\beta\)입니다. 경제 모형의 구조적 잔차는

\[ \widehat u=\widetilde y-\widetilde X\widehat\beta \]

입니다. 2SLS에서는 일반적으로 서로 다릅니다. 집단 \(g\)의 점수 \(s_g=\sum_{i\in g}a_i\widehat u_i\in\mathbb R^k\)를 정의하면 소표본 보정을 하지 않은 CR0 공분산은

\[ \widehat V=(A^TA)^{-1}\left(\sum_{g=1}^G s_gs_g^T\right)(A^TA)^{-1}. \]

표준오차는 대각성분의 제곱근입니다. \(s_g\)를 만들 때 \(r_i\)를 대신 쓰지 않습니다. 또한 \(\sum_gs_g=A^T\widehat u=0\)이므로 이론적인 계수 상한은 \(\operatorname{rank}\widehat V\le\min(k,G-1)\). 수치 실행의 점수 합 노름은 약 \(2.13\times10^{-10}\)으로 0에 가깝습니다. 이 생성기의 집단 공통 상수 오차는 집단 고정효과로 제거됩니다. 따라서 이 실험은 CR0 계산 경로의 비교이며, 고정효과 제거 뒤에도 복잡한 집단 내 상관이 남는 모형의 검정 크기 실험은 아닙니다. 정확한 공분산 계산 항등식은 군집 수가 적을 때의 점근 추론 정확성까지 보장하지 않습니다.

스케치의 잔차 보증과 계수 오차#

별도 진단에서는 160행 스케치만 풀어 멈추었습니다. 잔차제곱의 비율은 약 1.0455지만 SVD 대비 상대 계수오차는 약 11.67입니다. 스케치 전처리 뒤 원래 문제를 다시 푸는 7번과 결과가 크게 다릅니다.

스케치만 푼 해의 잔차제곱 비율은 약 1.0455이지만 상대 계수오차는 약 11.67이며, 원래 문제의 전처리에만 쓴 해는 기준해와 일치한다.

그림 180 윗 패널과 아랫 패널은 단위가 다르다. 잔차 비율의 기준은 1, 상대 계수오차의 기준은 0이다. 약한 특이방향에서는 목적함수의 작은 변화가 큰 계수 이동을 허용한다.#

\(I4\)의 부분공간 스케치 가정을 \(\operatorname{col}[A,b]\) 전체에 적용하겠습니다. 모든 \(v\)에 대해 \((1-\epsilon)\|v\|^2\le\|Sv\|^2\le(1+\epsilon)\|v\|^2\)이면 근사해 \(\widehat x_S\)의 원래 잔차제곱은 최적값의 \((1+\epsilon)/(1-\epsilon)\)배 이하입니다. 기본 실행에서 이 부분공간의 실제 왜곡은 약 0.3541로 측정되었습니다. 한 표본에서 측정한 왜곡과 확률적 실패확률 보증은 구별합니다. 계수 차이에 대해서는 추가로 \(\sigma_{\min}(A)\)가 등장하며, 증명은 정리 5 · 잔차 부분공간을 보존하는 스케치에 있습니다.

섭동 이론이 예측하는 것과 실험이 측정하는 것#

전열계수 \(A\)와 최소제곱해 \(x\)에 대해 입력을 \(A+E,b+f\)로 바꾸면 1차 변화는

\[ \delta x=A^+(f-Ex)+(A^TA)^{-1}E^Tr,\qquad r=b-Ax. \]

첫 항에는 \(1/\sigma_{\min}\), 잔차와 관련된 둘째 항에는 \(1/\sigma_{\min}^2\)가 있습니다. 따라서 QR를 쓴다고 데이터 자체의 최소제곱 민감도에서 제곱 조건수 항이 사라지는 것은 아닙니다. 정상방정식의 별도 위험은 \(A^TA\)를 형성하고 푸는 과정에서 \(\kappa_2(A^TA)=\kappa_2(A)^2\)가 나타나는 것입니다.

import numpy as np
import scipy.linalg as la
# 같은 실제 행렬과 우변에서 조건수만 바꾸는 결정적 실험.
# exact beta=(1,1): 두 열의 합이 b이므로 부동소수점 SVD를 정답으로 삼지 않는다.
for eps in [1e-2, 1e-4, 1e-6, 1e-8]:
    M = np.array([[1.,1.], [0.,eps], [0.,0.]])
    rhs = np.array([2.,eps,0.])
    qx = la.lstsq(M,rhs,lapack_driver="gelsd")[0]
    try:
        nx = la.cho_solve(la.cho_factor(M.T@M),M.T@rhs)
        ne = la.norm(nx-np.ones(2))
    except la.LinAlgError:
        ne = "Cholesky failed"
    print(eps, "condition", np.linalg.cond(M),
          "normal error", ne, "SVD error", la.norm(qx-np.ones(2)))
0.01 condition 200.005000125 normal error 3.140498935859287e-12 SVD error 2.482534153247273e-16
0.0001 condition 20000.00005 normal error 0.0 SVD error 3.1401849173675503e-16
1e-06 condition 2000000.0000004997 normal error 0.0 SVD error 0.0
1e-08 condition 199999999.99999997 normal error Cholesky failed SVD error 2.220446049250313e-16
결정적 두 열 예제의 조건수에 대한 정상방정식과 SVD의 실제 계수오차. 마지막 정상방정식 Cholesky 실패는 별도 표시한다.

그림 181 기울기 2인 곡선을 미리 그려 관측값처럼 제시하지 않는다. 이 예에서는 마지막 Gram 행렬의 작은 정보가 반올림으로 사라져 Cholesky가 실패한다. 영 오차는 표시 하한에 놓고, 실패는 유한 오차값으로 대체하지 않는다.#

binary64의 단위 반올림은 \(u=2^{-53}\)이고 흔히 출력하는 machine epsilon \(2^{-52}\)와 2배 차입니다. 라이브러리의 longdouble이라는 이름만으로 더 높은 정밀도라고 가정하지 않습니다. 정확산술 작은 예제, 입력을 정확히 재현하는 생성기, float 형식의 실제 정밀도를 함께 확인합니다. 반복법에서는 작은 잔차·정상조건 잔차·중단 코드·반복 상한을 모두 읽습니다. SPD CG의 에너지 노름 경계를 LSMR의 유클리드 잔차 경계로 그대로 옮기지 않습니다.

자신의 데이터로 확장하는 순서#

먼저 동일 추정량·계수 처리·표준오차 규약을 문서로 고정합니다. 다음으로 작은 표본에서 명시적 더미 QR와 흡수를 비교합니다. 그다음 행렬–벡터 곱을 암묵적으로 구현해 큰 표본으로 확장합니다. 조밀한 백만 행 더미나 \(n\times n\) 사영행렬을 만들지 않습니다. 열 수가 작고 잘 조건화되어 있으면 QR 또는 신중한 정상방정식, 계수 의심이면 SVD, 매우 크고 희소하면 전처리 반복법을 후보로 삼되 실제 잔차와 비용으로 결정합니다.

감사 로그에는 데이터 생성 seed 또는 데이터 버전, 단위·결측 처리, \(n,k,G\), 계수와 허용오차, 조건수의 정의·계산법, float 형식, 해법·드라이버·버전, BLAS/스레드 환경, 준비·해결·전체 시간, 최대 메모리 측정법, 반복 중단 조건, 표준오차 보정을 남깁니다.

배열이 차지하는 바이트 수와 프로그램 전체의 최대 메모리 사용량은 구별합니다. 반복 실행·스레드 변경 비교를 하지 않았다면 재현성이 검증되었다고 넓혀 쓰지 않습니다.

자신의 탐구 보고서는 실제 실패 한 가지에서 출발하면 좋습니다. 입력과 단위를 제시하고, 정리의 가정과 증명, 가정을 뺀 반례, 재실행 코드, 전체 풀이를 붙입니다. 실패를 발견하지 못했다면 인위적인 근접 공선성 사례와 실제 데이터가 어떻게 다른지 설명하는 것도 정직한 산출물입니다.

1주차에는 작은 정확산술 예제와 추정량 계약, 2주차에는 일곱 경로와 비용 로그, 3주차에는 확대 실험과 결과 해석·보고서 작성를 수행할 수 있습니다. 일정은 실행 규모에 맞추어 조절합니다.

평가표는 가정·단위 20점, 핵심 증명 25점, 동일 추정량과 정확성 검사 25점, 비용·재현 로그 15점, 반례와 해석 15점으로 구성합니다. 빠른 실행시간 자체에는 별도 가산점을 주지 않습니다. 목적과 정확도 요구가 설명된 알고리즘 선택이 평가 대상입니다.

연습문제와 전체 풀이#

1. 작은 정확산술 기준. \(A=\begin{pmatrix}1&0\\1&1\\1&2\end{pmatrix}\), \(b=(1,2,2)^T\)의 최소제곱해와 잔차를 구하라.

풀이. \(A^TA=\begin{pmatrix}3&3\\3&5\end{pmatrix}\), \(A^Tb=(5,6)^T\). 두 식을 풀면 \(x=(7/6,1/2)^T\). \(r=(-1/6,1/3,-1/6)^T\)이고 \(A^Tr=0\), \(\|r\|^2=1/6\)입니다. 서로 다른 구현을 검증할 때 이 유리수 값을 독립 기준으로 쓸 수 있습니다.

2. 서로 다른 두 잔차. 왜 군집 점수에 \(b-A\widehat\beta\)를 넣으면 일반적으로 다른 공분산이 나오는가?

풀이. 두 잔차의 차이는 \((\widetilde X-A)\widehat\beta=(I-P_{\widetilde Z})\widetilde X\widehat\beta\). 전체 합에서는 \(A^T(\widetilde X-A)=0\)이지만, 집단별로 행을 잘라 합하면 이 직교성이 일반적으로 유지되지 않습니다. 따라서 \(s_g\) 각각이 바뀌고 \(\sum_gs_gs_g^T\)도 바뀝니다. 구조 모형의 오차를 추정하려면 \(\widetilde y-\widetilde X\widehat\beta\)를 씁니다.

3. 군집 수의 계수 제한. \(k=6,G=4\)이면 CR0 공분산이 가역일 수 있는가?

풀이. 아닙니다. \(k\times G\) 점수행렬 \(S=[s_1,\ldots,s_G]\)\(S\mathbf1=0\)이므로 계수는 \(G-1=3\) 이하입니다. \(\widehat V=H^{-1}SS^TH^{-1}\)도 계수가 3 이하라 6차원에서 특이합니다. 모든 표준오차가 양수여도 전체 공분산의 가역성과는 다릅니다.

4. 정상방정식 실패. 두 열 예제에서 \(\epsilon=10^{-8}\)일 때 어떤 정보가 사라지는가?

풀이. \(M^TM=\begin{pmatrix}1&1\\1&1+\epsilon^2\end{pmatrix}\). binary64에서 \(\epsilon^2\approx10^{-16}\)은 1 근방의 반 ulp보다 작아 \(1+\epsilon^2\)가 1로 반올림될 수 있습니다. 저장된 Gram 행렬은 특이가 됩니다. 원래 \(M\)에는 \(10^{-8}\)이 비영으로 남아 있으므로 직접 분해는 그 방향을 이용할 수 있습니다. 이는 정상방정식에서 정보를 먼저 제곱하는 위험입니다.

5. 두 사영의 속도. \(U=\operatorname{span}(e_1)\), \(W=\operatorname{span}((\cos\theta,\sin\theta))\)일 때 \(\|(P_WP_U)^k\|_2\)를 구하라.

풀이. \(u=e_1,w=(\cos\theta,\sin\theta)^T,c=\cos\theta\in[0,1)\)이면 \(P_WP_U=cwu^T\). \((P_WP_U)^k=c^{2k-1}wu^T\)이므로 노름은 \(c^{2k-1}\). 한 쌍의 사영을 적용할 때마다 이후에는 \(c^2\)배가 됩니다. 공통 부분공간이 있으면 그곳의 항등 작용을 먼저 빼고 이 계산을 적용합니다.

6. 스케치 보증을 계수로 옮기기. 잔차 비율 상한에서 계수오차 상한을 구하라.

풀이. \(h=\widehat x_S-x\)라 하면 \(r\perp\operatorname{col}A\)이므로 \(\|Ah-r\|^2=\|r\|^2+\|Ah\|^2\). 비율 상한을 대입하면 \(\|Ah\|^2\le2\epsilon\|r\|^2/(1-\epsilon)\). 따라서 \(\|h\|\le\sqrt{2\epsilon/(1-\epsilon)}\|r\|/\sigma_{\min}(A)\). 이 세 줄만으로 \(\epsilon\)에 선형인 계수 경계를 주장할 수는 없습니다. 작은 특이값이 잔차 보증과 계수 정밀도의 간격을 만듭니다.

7. 모의시험 A — 소거와 식별. 고정효과를 제거한 도구가 \(\widetilde Z=0\)이면 2SLS 계수를 식별할 수 있는가? 고정효과 QR를 잘 계산하면 해결되는가?

풀이. \(\operatorname{col}Z\subset\operatorname{col}D\)이면 \(M_DZ=0\)입니다. 그러면 \(P_{\widetilde Z}=0\), \(A=0\), \(\widetilde X^TP_{\widetilde Z}\widetilde X=0\)이므로 계수는 이 모멘트에서 식별되지 않습니다. 소거 계산을 더 정확히 해도 도구의 변동이 새로 생기지 않습니다. 고정효과 내부에서 유효한 도구 변동이 필요합니다.

8. 모의시험 B — 존재·안정성·추론. \(\sigma_{\min}(A)>0\)이지만 매우 작고 집단은 4개입니다. 유일해, 안정성, 6개 계수의 공동 Wald 검정에 대해 각각 답하라.

풀이. 전열계수이므로 최소제곱해는 유일합니다. 그러나 \(\|A^+\|=1/\sigma_{\min}\)가 크므로 작은 입력오차가 큰 계수오차로 증폭될 수 있습니다. CR0 공분산의 계수는 최대 3이라 6차원 전체 역행렬을 요구하는 보통의 Wald 식을 사용할 수 없습니다. 수치 가역성, 통계적 정밀도, 공동 추론의 차원은 서로 다른 점검 항목입니다.

지금까지의 내용을 수학의 언어로 정리해 봅시다#

정리 1 · 고정효과 IV의 소거#

\(D\)가 전열계수이고 \(W=[D,Z]\)라 합시다. \(\widetilde Z=M_DZ\)의 열공간 사영은 계수결핍인 경우에도 정의됩니다. \(\widetilde X^TP_{\widetilde Z}\widetilde X\)가 양정치이면, 전체 2SLS 기준 \(\|P_W(y-D\alpha-X\beta)\|^2\)를 최소화하는 \(\beta\)는 본문의 소거된 2SLS 계수입니다.

증명. \(Z=P_DZ+M_DZ\)이고 두 항의 열공간은 직교하므로 \(\operatorname{col}W=\operatorname{col}D\oplus\operatorname{col}\widetilde Z\). 따라서 \(P_W=P_D+P_{\widetilde Z}\). 목적함수는

\[ \|P_D(y-X\beta)-D\alpha\|^2+ \|P_{\widetilde Z}(y-X\beta)\|^2. \]

고정한 \(\beta\)에서 첫 항은 유일한 \(\alpha=(D^TD)^{-1}D^T(y-X\beta)\)로 0이 됩니다. \(P_{\widetilde Z}M_D=P_{\widetilde Z}\)이므로 둘째 항은 \(\|P_{\widetilde Z}(\widetilde y-\widetilde X\beta)\|^2\). 이를 미분하면 \(\widetilde X^TP_{\widetilde Z}\widetilde X\beta=\widetilde X^TP_{\widetilde Z}\widetilde y\). 가정에 의해 유일합니다.

한편 \(\|\widetilde y-A\beta\|^2\)는 이 목적함수에 \(\|(I-P_{\widetilde Z})\widetilde y\|^2\)라는 \(\beta\)와 무관한 항만 더하므로 같은 해를 갖습니다. \(\square\)

정리 2 · 최소제곱해의 1차 섭동#

\(A\in\mathbb R^{n\times k}\)가 전열계수이고 \(x=(A^TA)^{-1}A^Tb\), \(r=b-Ax\)라 합시다. 충분히 작은 \(E,f\)에서 해의 변화는

\[ \widehat x-x=A^+(f-Ex)+(A^TA)^{-1}E^Tr +O((\|E\|+\|f\|)^2). \]

나머지의 상수는 고정된 \(A,b\)의 전열계수 근방에서 정합니다.

증명. 정상조건은 \(A^T(b-Ax)=0\). 섭동한 식 \((A+E)^T[b+f-(A+E)(x+\delta x)]=0\)에서 1차 항을 모으면 \(A^Tf-A^TEx-A^TA\delta x+E^Tr=0\). \(A^TA\)가 가역이므로 원하는 1차식을 얻습니다. 해는 전열계수 근방에서 행렬 역과 곱의 매끄러운 함수이므로 Taylor 나머지는 2차입니다. 노름을 취하면 1차항은

\[ \|\delta x\|\le\|A^+\|(\|f\|+\|E\|\|x\|) +\|A^+\|^2\|E\|\|r\|. \]

\(x\ne0,b\ne0\), \(\eta_A=\|E\|/\|A\|\), \(\eta_b=\|f\|/\|b\|\)이면 상대 1차 경계는

\[ \frac{\|\delta x\|}{\|x\|}\le \kappa(A)\left(\eta_b\frac{\|b\|}{\|A\|\|x\|}+\eta_A\right) +\kappa(A)^2\eta_A\frac{\|r\|}{\|A\|\|x\|}. \]

우변 섭동의 척도 인자를 생략하지 않았습니다. \(\square\)

정리 3 · 교대사영과 그래프의 갭#

유한차원 내적공간의 두 부분공간 \(U,W\)에 대해 \(K=U\cap W\)라 합시다. 공통 방향을 제외한 최대 주각 코사인을 \(c<1\)이라 하되 비자명 블록이 없으면 \(c=0\)으로 둡니다. 그러면 \(k\ge1\)에서

\[ \|(P_WP_U)^k-P_K\|_2\le c^{2k-1}. \]

증명. 두 부분공간의 정규직교 기저 사이 Gram 행렬을 SVD하면 공통 방향, 직교 방향, 주각을 이루는 서로 직교한 2차원 블록으로 분해됩니다. 공통 방향에서는 두 사영이 모두 항등이고 \(P_K\)가 이를 제거합니다. 직교 블록에서는 곱이 0입니다. 나머지 블록의 단위벡터를 \(u_j,w_j\)라 하면 \(u_j^Tw_j=c_j<1\)이고 \((P_WP_U)^k=c_j^{2k-1}w_ju_j^T\). 블록들이 직교하므로 전체 노름은 최대 블록 노름이며 원하는 상한을 얻습니다. 따라서 흡수는 \((G+T)^\perp\)로 수렴합니다.

그래프와의 연결도 같은 Gram 계산입니다. 정규화 더미 기저의 교차 Gram은 \(C=D_g^{-1/2}BD_t^{-1/2}\). \(Cv=s u\), \(C^Tu=s v\)이면 \(L(u,v)^T=(1-s)(u,v)^T\), \(L(u,-v)^T=(1+s)(u,-v)^T\). 연결 그래프의 공통 상수 방향만 \(s=1\)을 만들고, 나머지 최대 특이값 \(c\)\(1-c\)의 갭을 줍니다. 두 공간의 직교여공간에도 같은 비자명 주각이 나타나므로 흡수의 속도를 결정합니다. \(\square\)

정리 4 · CR0의 양의 준정부호성과 계수#

본문의 전열계수 2SLS 문제에서 \(\widehat V\)는 대칭 양의 준정부호이고 계수는 \(\min(k,G-1)\) 이하입니다.

증명. \(H=A^TA\), \(S=[s_1,\ldots,s_G]\)라 쓰면 \(\widehat V=H^{-1}SS^TH^{-1}\)입니다. 모든 \(v\)에 대해 \(v^T\widehat Vv=\|S^TH^{-1}v\|^2\ge0\). 또한 \(A^T\widetilde X=\widetilde X^TP_{\widetilde Z}\widetilde X=A^TA\)이므로 \(S\mathbf1=A^T(\widetilde y-\widetilde X\widehat\beta)=0\). 따라서 \(S\)의 열은 종속이고 계수는 \(G-1\) 이하입니다. 가역한 \(H^{-1}\)의 곱은 계수를 늘리지 않으므로 결론을 얻습니다. \(\square\)

정리 5 · 잔차 부분공간을 보존하는 스케치#

\(A\)가 전열계수이고 \(S\)\(\operatorname{col}[A,b]\)에서 \(0\le\epsilon<1\)의 제곱노름 보존을 만족한다고 하자. 원래 해 \(x\)와 스케치 최소제곱해 \(x_S\)에 대해

\[ \|Ax_S-b\|^2\le\frac{1+\epsilon}{1-\epsilon}\|Ax-b\|^2, \qquad \|x_S-x\|\le\sqrt{\frac{2\epsilon}{1-\epsilon}} \frac{\|Ax-b\|}{\sigma_{\min}(A)}. \]

증명. \(SA\)도 전열계수입니다. 실제로 \(SAh=0\)이면 보존 하한으로 \(Ah=0\)이고 \(h=0\). 최소성 및 두 보존 부등식을 차례로 적용하면

\[ (1-\epsilon)\|Ax_S-b\|^2 \le\|S(Ax_S-b)\|^2 \le\|S(Ax-b)\|^2 \le(1+\epsilon)\|Ax-b\|^2. \]

첫 결론을 얻습니다. \(h=x_S-x\), \(r=b-Ax\)에 대해 \(A^Tr=0\)이므로 \(\|Ah-r\|^2=\|Ah\|^2+\|r\|^2\). 첫 결론에서 \(\|r\|^2\)를 빼면 \(\|Ah\|^2\le2\epsilon\|r\|^2/(1-\epsilon)\). \(\|Ah\|\ge\sigma_{\min}(A)\|h\|\)를 사용하면 둘째 결론입니다. 잔차가 0이면 같은 해를 정확히 복원하며, 일반적인 경우에는 작은 특이값의 영향이 남습니다. \(\square\)

같은 추정량을 계산하는 여러 경로를 비교하면서, 수학적 동일성·수치적 정확도·통계적 해석을 구별했습니다. 자신의 자료로 확장할 때에도 먼저 모형과 가정을 적고, 작은 예제의 계산과 잔차를 확인한 뒤 규모를 늘려 보세요.