불균등 간격·표본 크기와 추세 vs 회귀 — 언제 어느 분석을 쓰는가

Maxwell Ch.6.3 Unequal Spacing · Sample Size · Trend vs Regression

양적 요인의 levels 가 등간격이 아니거나 그룹 표본 크기가 다른 경우의 추세 분석 절차다. unweighted vs weighted 대비의 편향-검정력 트레이드오프와, 추세 분석 vs 회귀 분석의 선택 기준 (이산 levels + 다수 관측 vs 연속 변수) 을 정리한다.

Experimentation
DOE
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: unweighted vs weighted contrast (불균등 표본)

수준 \(X_j\), 그룹 표본 \(n_j\), 평균 \(\bar Y_j\) 의 양적 요인에서 추세 대비 계수를 정의하는 두 방식.

  • Unweighted: \(c_j = X_j - \bar X_U\), \(\bar X_U = \frac{1}{a}\sum_j X_j\) (\(X\) 값의 단순 평균). 그룹별 동일 가중치.
  • Weighted (Hierarchical): \(c_j = n_j(X_j - \bar X_W)\), \(\bar X_W = \frac{\sum_j n_j X_j}{\sum_j n_j}\) (표본 크기 가중 평균). 모형에 항을 순차 추가하는 접근.

등표본 (\(n_j = n\)) 일 때 두 방식은 정확히 일치한다 (Maxwell, 2004, Ch.6 Eq. 26-27).

2 불균등 표본의 SS 공식

표 계수는 등간격·등표본 가정에서 직교한다. 표본이 다르면 직교성이 깨져 SS 가 가산되지 않는다. 표 계수를 그대로 사용하는 unweighted 접근에서 추세 대비의 SS 는

\[ SS_{\psi} = \frac{\hat\psi^2}{\sum_j (c_j^2 / n_j)} \]

(분모가 등표본의 \(\sum c_j^2 / n\) 일반화임을 확인하자 — \(n_j = n\) 이면 \(\sum c_j^2 / n\) 이 되어 등표본 공식과 일치한다.)

기울기의 일반 형태는

\[ \hat\beta_1 = \frac{\sum_j n_j c_j \bar Y_j}{\sum_j n_j c_j^2} \]

(Maxwell Eq. 4)

3 Unweighted vs Weighted: 편향-검정력 트레이드오프

측면 Unweighted Weighted (Hierarchical)
가정 levels 가 동등하게 중요 표본 비율이 모집단 비율 반영
SS 가산성 깨짐 (표 계수 비직교) 유지
모집단이 진짜 선형일 때 검정력 약간 낮음 더 강한 검정력
모집단이 비선형일 때 편향 작음 선형 추세 추정이 편향됨
일반 권장 기본값 강한 이론적 근거 있을 때만
함정: weighted 접근의 위험

가중 계수 \(c_j = n_j(X_j - \bar X_W)\) 는 그룹 평균을 표본 크기로 가중한다. 이는 “표본이 큰 levels 가 더 신뢰할 만하다”는 가정에 기반한다. 그러나 표본 크기가 모집단 분포 가 아니라 연구자의 편의 로 결정된 경우 (학습 시간 1 분에 12 명, 4 분에 3 명 같은) 가중치가 모집단 추세를 왜곡할 수 있다. 또 진짜 추세가 비선형이면 weighted 선형 검정이 비선형 정보의 일부를 흡수해 가짜 선형 유의성을 만들 수 있다.

따라서 Maxwell 의 일반 권장은 unweighted 이며, 표본 크기가 모집단 비율을 정확히 반영한다는 강한 근거가 있을 때만 weighted 를 정당화한다.

4 불균등 간격 (levels 가 등간격이 아님)

학습 시간 1·2·4·8 분 같은 로그 스케일 levels 의 경우 표 직교 다항식 계수 (Fisher-Yates 표) 는 적용 불가능하다. 새 직교 계수를 만드는 두 표준 방법:

4.1 방법 1 — Gram-Schmidt 직교화

저차에서 시작해 각 다항식을 levels 위에서 직교화한다.

  1. 선형: \(c_j^{(1)} = X_j - \bar X\) (\(\bar X = \frac{1}{a}\sum_j X_j\), 등표본 가정)

  2. 이차: $X_j^2 - $ projection of \(X_j^2\) on \(c_j^{(1)}\) and constant

    \[ c_j^{(2)} = X_j^2 - \alpha - \beta\, c_j^{(1)} \] 여기서 \(\alpha = \overline{X^2}\), \(\beta = \frac{\sum_j c_j^{(1)} X_j^2}{\sum_j (c_j^{(1)})^2}\).

  3. 삼차·고차: 동일하게 \(X_j^p\) 에서 \(c_j^{(1)}, \ldots, c_j^{(p-1)}\) 의 투영을 차감.

직교화 결과는 정수가 아닌 일반 실수 계수가 된다. 검정 절차는 등간격과 동일.

4.2 방법 2 — OLS 다항 회귀 + Sequential SS

전체 데이터에 대해

\[ Y_{ij} = \beta_0 + \beta_1 X_j + \beta_2 X_j^2 + \cdots + \beta_{a-1} X_j^{a-1} + \varepsilon_{ij} \]

를 최소제곱으로 적합한 뒤, 항을 차례로 추가한 모형의 잔차 SS 차이로 각 차수의 SS 를 계산한다 (Type I sequential SS).

Model_0:  Y ~ 1
Model_1:  Y ~ 1 + X
Model_2:  Y ~ 1 + X + X^2
...

\(SS_{\text{linear}} = E_0 - E_1\), \(SS_{\text{quadratic}} = E_1 - E_2\), …

직관: 두 방법의 동치

Gram-Schmidt 와 sequential OLS 는 동일한 SS 분해를 산출한다 (이는 QR 분해의 동치성). 컴퓨터 시대 이후 OLS 가 더 널리 쓰이며, R 의 poly(X, degree), Python 의 numpy.polynomial.polynomial.Polynomial.fit + 정규화는 모두 직교 다항식을 자동 생성한다.

5 추세 분석 vs 회귀 분석: 언제 어느 것?

Maxwell 의 핵심 구분 (Ch.6 §QUANTITATIVE FACTORS):

기준 추세 분석 회귀 분석
levels 의 분포 소수의 이산값 (3~6) 다수의 고유값 (수십~)
그룹당 관측 다수 (\(n_j \ge 5\)) 보통 1 (개인별 unique \(X\))
본래 변수 형태 실험자가 통제한 처치 자연스러운 연속 변수
예시 학습 시간 1, 2, 3, 4 분 (각 6 명) 어머니 IQ → 자녀 IQ (각자 unique)
강점 직교 분해, ANOVA 통합 외삽·내삽 가능, 연속 해석
함정: 연속 변수를 추세 분석을 위해 인위적으로 이산화하지 않는다

어머니 IQ 점수가 본래 연속이면 회귀로 다뤄야 한다. 4 분위로 묶어 추세 분석을 하면 정보 손실분위 경계 의존성 이 발생한다. Maxwell 은 “if there are relatively few distinct values of the predictor and there are several individuals with scores at each of these values, trend analysis offers advantages over regression analysis. … rarely is it useful to categorize a continuous variable in order to perform a trend analysis” 라고 명시한다 (Maxwell, 2004, Ch.6).

6 외삽·내삽의 주의

추세 분석의 추정·검정은 연구에서 사용된 \(X\) 값들의 범위 내 에서만 유효하다.

  • 외삽 금지: 학습 시간 1~4 분 데이터로 적합한 \(\hat Y = 0.5 + 2.3 X\)\(X=10\) 에 적용해 회상 23.5 개를 예측하는 것은 부적절하다. 학습 시간 6 분쯤에 회상 능력의 생리적 한계가 올 수 있고, 추세 모형은 그 외부 행동을 보장하지 않는다.
  • 내삽은 신중히: \(X=3.5\) 의 회상 예측은 데이터 범위 내이지만, 사이 구간을 보간할 이론적 근거 (예: 단조 함수 가정) 가 있어야 신뢰할 수 있다.

7 데이터 예시 — 비등간격, 불균등 표본

학습 시간 levels = \((1, 2, 4, 8)\) 분 (로그 스케일), 그룹 표본 = \((8, 6, 6, 4)\), 평균 회상 = \((2.0, 5.5, 8.5, 9.5)\).

7.1 Step 1 — 선형 unweighted 대비

\(\bar X_U = (1 + 2 + 4 + 8) / 4 = 3.75\)

\(c_j^{(1)} = X_j - \bar X_U = (-2.75, -1.75, 0.25, 4.25)\)

\(\hat\psi_{\text{lin}} = -2.75(2.0) + (-1.75)(5.5) + 0.25(8.5) + 4.25(9.5)\) \(= -5.5 - 9.625 + 2.125 + 40.375 = 27.375\)

\(\sum c_j^2 / n_j = 7.5625/8 + 3.0625/6 + 0.0625/6 + 18.0625/4\) \(= 0.945 + 0.510 + 0.010 + 4.516 = 5.981\)

\[ SS_{\text{lin}} = \frac{27.375^2}{5.981} = \frac{749.39}{5.981} = 125.30 \]

7.2 Step 2 — 이차 직교 계수 (Gram-Schmidt)

\(X_j^2 = (1, 4, 16, 64)\), \(\overline{X^2} = 21.25\)

\(c_j^{(1)} \cdot X_j^2 = -2.75(1) - 1.75(4) + 0.25(16) + 4.25(64) = -2.75 - 7 + 4 + 272 = 266.25\)

\(\sum c_j^{(1) 2} = 7.5625 + 3.0625 + 0.0625 + 18.0625 = 28.75\)

\(\beta = 266.25 / 28.75 = 9.261\)

\(c_j^{(2)} = X_j^2 - 21.25 - 9.261\, c_j^{(1)}\)

\(j=1\): \(1 - 21.25 - 9.261(-2.75) = -20.25 + 25.468 = 5.218\) \(j=2\): \(4 - 21.25 - 9.261(-1.75) = -17.25 + 16.207 = -1.043\) \(j=3\): \(16 - 21.25 - 9.261(0.25) = -5.25 - 2.315 = -7.565\) \(j=4\): \(64 - 21.25 - 9.261(4.25) = 42.75 - 39.359 = 3.391\)

(직교성 검증: \(\sum c_j^{(1)} c_j^{(2)} \approx 0\) ✓ — 작은 수치 오차 제외)

\(\hat\psi_{\text{quad}} = 5.218(2.0) - 1.043(5.5) - 7.565(8.5) + 3.391(9.5)\) \(= 10.436 - 5.737 - 64.303 + 32.215 = -27.389\)

이 값을 SS 로 환산하면 (분모 \(\sum c_j^{(2) 2} / n_j\)) 이차 추세의 강도를 추정.

7.3 Step 3 — Python 자동화

이런 손계산은 오류가 잦으니 컴퓨터로 위임한다.

8 Python 코드

import numpy as np
import statsmodels.api as sm
from numpy.polynomial import polynomial as P

# 비등간격 + 불균등 표본 데이터
levels = np.array([1, 2, 4, 8])
n_per = np.array([8, 6, 6, 4])
y_means = np.array([2.0, 5.5, 8.5, 9.5])

# 가상 raw data 재구성 (분포는 평균에만 맞춤)
np.random.seed(42)
all_X = np.repeat(levels, n_per)
all_Y = []
for k, (m, n) in enumerate(zip(y_means, n_per)):
    all_Y.append(np.random.normal(m, 1.5, n))
all_Y = np.concatenate(all_Y)

# 1) Sequential SS via OLS polynomial regression
def fit_poly(X, Y, deg):
    X_mat = sm.add_constant(np.column_stack([X**p for p in range(1, deg+1)]))
    return sm.OLS(Y, X_mat).fit()

E = []
for d in range(0, 4):  # 0..3 차수
    if d == 0:
        m = sm.OLS(all_Y, np.ones((len(all_Y), 1))).fit()
    else:
        m = fit_poly(all_X, all_Y, d)
    E.append(np.sum(m.resid**2))

ss_lin   = E[0] - E[1]
ss_quad  = E[1] - E[2]
ss_cubic = E[2] - E[3]
ss_within = E[3]  # full polynomial = 그룹별 평균에 적합 (a=4 levels)

df_within = len(all_Y) - 4
ms_within = ss_within / df_within

print("Sequential SS decomposition (unequal spacing, unequal n):")
print(f"  linear   : SS={ss_lin:8.3f}  F={ss_lin/ms_within:6.2f}")
print(f"  quadratic: SS={ss_quad:8.3f}  F={ss_quad/ms_within:6.2f}")
print(f"  cubic    : SS={ss_cubic:8.3f}  F={ss_cubic/ms_within:6.2f}")

# 2) Orthogonal polynomial via numpy.polynomial (자동 직교화)
from numpy.polynomial.polynomial import Polynomial
print("\nOrthogonal polynomial coefficients (centered+scaled):")
for d in [1, 2, 3]:
    p = Polynomial.fit(levels, y_means, d, w=n_per)  # 가중 회귀
    print(f"  degree {d}: domain={p.domain}, coef={p.convert().coef}")

# 3) 회귀 vs 추세 비교 — levels 가 연속 변수인 양 회귀 적합
slope, intercept, r, p_reg, se = __import__("scipy.stats", fromlist=["linregress"]).linregress(all_X, all_Y)
print(f"\n[regression] slope={slope:.3f}, intercept={intercept:.3f}, "
      f"R^2={r**2:.3f}, p={p_reg:.4g}")

9 IT 매핑

시나리오 levels 표본 적절 분석
추천 슬롯 3, 5, 7, 9 (각 그룹 1 만 명) 등간격 등표본 충분 표 계수 추세 분석
가격 인하율 5, 10, 20, 50 % (그룹별 트래픽 다름) 비등간격 불균등 충분 unweighted 추세 분석
사용자 연령 (개인별 고유값) 연속 1 인 1 값 회귀 분석
ML lr 1e-4, 1e-3, 1e-2, 1e-1 (각 5 회 실행) 비등간격 (로그) 작음 로그 변환 후 등간격 추세
A/B 변종 (UI 색 5 가지) 명목 (질적) 충분 일반 ANOVA + 사후 비교
ML 의 hyperparameter sweep 권장 절차

learning rate, weight decay 같은 양적 hyperparameter 의 grid 가 로그 스케일이면 \(X' = \log_{10}(X)\) 로 변환해 등간격으로 만들고 표 직교 다항식을 적용한다. 이는 “로그 스케일이 자연스럽다” 는 구조적 가정 (효과가 곱셈적) 에 부합한다. response surface (Phase G-12) 에서도 같은 변환이 표준이다.

10 가정과 한계 — 종합

추세 분석을 적용하기 전 점검할 가정:

  1. 양적 요인의 측도: 비율·간격 척도. 명목·서열은 적용 불가.
  2. levels 의 의미 있는 거리: 1 분과 2 분의 거리가 3 분과 4 분의 거리와 동일하다고 주장할 수 있는가? 아니라면 변환 (log, 제곱근) 후 분석.
  3. 본래 이산 처치: 연속 변수는 회귀로.
  4. 외삽·내삽 신중: 통계적 추론은 관측 levels 범위 내에서만.
  5. ANOVA 표준 가정: 정규성·등분산·독립성. 위반 시 robust 추세 (rank-based, bootstrap) 또는 Jonckheere 검정 (단조 추세의 nonparametric 대안).

11 본 시리즈 요약

G-MAX6-0  추세 분석 개관 — 양적 요인의 함수 패턴 분해
G-MAX6-1  선형 추세 = 회귀 기울기의 contrast 표현
G-MAX6-2  직교 다항식으로 이차·고차의 가산 분해
G-MAX6-3  불균등 간격·표본 + 추세 vs 회귀의 선택  ← 현재 글
            ↓
        Phase G-12 Response Surface
        (양적 요인 2 개 이상의 곡면 적합)

12 관련 주제

선행 지식

후속 주제

  • G-MON7 — Response Surface Designs (작성 예정, Phase G-12)
  • G-MAX7 — Two-Way Factorial Designs

다른 카테고리 연결

Subscribe

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