2×2×2 설계와 7 효과 — 직교 대비로 분해하는 8 셀

Maxwell Ch.8.1 Three-Way 2×2×2 Factorial: Seven Effects

\(2 \times 2 \times 2\) 설계의 8 셀을 7 개 직교 대비 (3 주효과 + 3 이원 상호작용 + 1 삼원 상호작용) 로 분해하는 절차를 정리한다. ±1 부호 대비 표, SS 계산, 등표본 분석을 가상의 학습 시간 × 형식 × 동기 데이터로 단계적으로 유도한다.

Experimentation
DOE
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: 2×2×2 의 효과 모형

세 요인 \(A, B, C\) 각각 2 수준, 셀 평균 \(\mu_{jkl}\) (\(j,k,l \in \{0, 1\}\)):

\[ \mu_{jkl} = \mu + \alpha_j + \beta_k + \gamma_l + (\alpha\beta)_{jk} + (\alpha\gamma)_{jl} + (\beta\gamma)_{kl} + (\alpha\beta\gamma)_{jkl} \]

제약: 모든 단·이중·삼중 효과 모수의 합이 0 (sum-to-zero coding).

자유도: 각 효과 자유도 1, 총 7 개 효과 + grand mean = 8 셀.

2 8 셀의 직교 대비 표

각 셀을 \((jkl) = 000, 001, 010, 011, 100, 101, 110, 111\) 로 정렬. ±1 대비 계수:

효과 000 001 010 011 100 101 110 111 \(\sum c^2\)
\(A\) \(-1\) \(-1\) \(-1\) \(-1\) \(+1\) \(+1\) \(+1\) \(+1\) 8
\(B\) \(-1\) \(-1\) \(+1\) \(+1\) \(-1\) \(-1\) \(+1\) \(+1\) 8
\(C\) \(-1\) \(+1\) \(-1\) \(+1\) \(-1\) \(+1\) \(-1\) \(+1\) 8
\(AB\) \(+1\) \(+1\) \(-1\) \(-1\) \(-1\) \(-1\) \(+1\) \(+1\) 8
\(AC\) \(+1\) \(-1\) \(+1\) \(-1\) \(-1\) \(+1\) \(-1\) \(+1\) 8
\(BC\) \(+1\) \(-1\) \(-1\) \(+1\) \(+1\) \(-1\) \(-1\) \(+1\) 8
\(ABC\) \(-1\) \(+1\) \(+1\) \(-1\) \(+1\) \(-1\) \(-1\) \(+1\) 8

각 행의 부호 곱은 다음 패턴이다. - 주효과 \(A\) = \(\text{sign}(j)\) - 이원 \(AB\) = \(\text{sign}(j) \times \text{sign}(k)\) - 삼원 \(ABC\) = \(\text{sign}(j) \times \text{sign}(k) \times \text{sign}(l)\)

직교성 검증: 임의의 두 행은 부호 곱의 합이 0 (4 양·4 음). 예: \(A \cdot AB\) 의 부호 곱 = \((-1)(+1) + (-1)(+1) + (-1)(-1) + (-1)(-1) + (+1)(-1) + (+1)(-1) + (+1)(+1) + (+1)(+1) = -1 -1 +1 +1 -1 -1 +1 +1 = 0\). ✓

직관: 부호 패턴은 Hadamard 행렬

8×8 의 부호 표는 Hadamard 행렬 \(H_8\) 의 정확한 형태이다. Hadamard 행렬은 임의의 두 행이 직교하는 ±1 행렬로, factorial design 의 직교 대비를 통합적으로 표현한다. 이 구조는 fractional factorial (G-MON3-6) 과 weighing design (G-MON9) 으로도 확장된다.

3 SS 계산 공식

각 효과의 SS: \[ SS_{\text{effect}} = \frac{n \, \hat\psi^2}{\sum c^2_{jkl}} = \frac{n \, \hat\psi^2}{8} \]

여기서 \(\hat\psi = \sum_{jkl} c_{jkl} \bar Y_{jkl}\).

\(F\) 검정: \(F = SS_{\text{effect}} / MS_W\), 자유도 \((1, abc(n-1))\).

4 가상 데이터 — 학습 시간 × 형식 × 동기

요인: - \(A\) = 학습 시간 (1 시간 = 0, 2 시간 = 1) - \(B\) = 학습 형식 (반복 = 0, 검색 = 1) - \(C\) = 동기 부여 (비보상 = 0, 보상 = 1)

각 셀당 \(n = 8\), \(N = 64\). 셀 평균 (가상):

\((jkl)\) 조건 \(\bar Y_{jkl}\)
000 1h, 반복, 비보상 5.0
001 1h, 반복, 보상 6.5
010 1h, 검색, 비보상 6.0
011 1h, 검색, 보상 7.0
100 2h, 반복, 비보상 7.0
101 2h, 반복, 보상 8.5
110 2h, 검색, 비보상 9.5
111 2h, 검색, 보상 12.0

\(MS_W = 1.5\) (\(df_W = 56\)) 가정.

4.1 7 개 대비 적용

효과 \(\hat\psi\) 계산 \(\hat\psi\) \(SS\) \(F\)
\(A\) \(-(5.0+6.5+6.0+7.0)+(7.0+8.5+9.5+12.0)\) \(+12.5\) \(8 \times 156.25/8 = 156.25\) 104.2
\(B\) \(-(5.0+6.5)-( ... )+(6.0+7.0)+(9.5+12.0)\)
\(= -(5.0+6.5+7.0+8.5)+(6.0+7.0+9.5+12.0)\)
\(+7.0\) \(49.0\) 32.7
\(C\) \(-(5.0+6.0+7.0+9.5)+(6.5+7.0+8.5+12.0)\) \(+6.5\) \(42.25\) 28.2
\(AB\) \(+(5.0+6.5)-(6.0+7.0)-(7.0+8.5)+(9.5+12.0)\) \(+12.5\)? 계산 필요

(부호 표 정확 적용: \(AB\) 대비 = \(+(000+001) - (010+011) - (100+101) + (110+111)\) \(= +(5.0+6.5) - (6.0+7.0) - (7.0+8.5) + (9.5+12.0) = 11.5 - 13.0 - 15.5 + 21.5 = 4.5\).)

\[ SS_{AB} = \frac{8 \times 4.5^2}{8} = 20.25,\quad F_{AB} = 13.5 \]

다른 대비도 동일하게 적용. 자세한 계산은 Python 코드 참조.

5 Python 코드

import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols

# 가상 데이터: 셀 평균 + 노이즈
np.random.seed(2026)
cell_means = {
    (0, 0, 0): 5.0,
    (0, 0, 1): 6.5,
    (0, 1, 0): 6.0,
    (0, 1, 1): 7.0,
    (1, 0, 0): 7.0,
    (1, 0, 1): 8.5,
    (1, 1, 0): 9.5,
    (1, 1, 1): 12.0,
}
sigma = np.sqrt(1.5)
n = 8

records = []
for (a, b, c), mu in cell_means.items():
    y = np.random.normal(mu, sigma, n)
    for v in y:
        records.append({"A": a, "B": b, "C": c, "Y": v})
data = pd.DataFrame(records)

# Sum coding 으로 ANOVA
model = ols("Y ~ C(A, Sum) * C(B, Sum) * C(C, Sum)", data=data).fit()
anova = sm.stats.anova_lm(model, typ=2)
print("Type II ANOVA:")
print(anova.round(3))

# 부호 대비 기반 SS 검증
def hadamard_8():
    H = np.array([
        [-1, -1, -1, -1, +1, +1, +1, +1],  # A
        [-1, -1, +1, +1, -1, -1, +1, +1],  # B
        [-1, +1, -1, +1, -1, +1, -1, +1],  # C
        [+1, +1, -1, -1, -1, -1, +1, +1],  # AB
        [+1, -1, +1, -1, -1, +1, -1, +1],  # AC
        [+1, -1, -1, +1, +1, -1, -1, +1],  # BC
        [-1, +1, +1, -1, +1, -1, -1, +1],  # ABC
    ])
    names = ["A", "B", "C", "AB", "AC", "BC", "ABC"]
    return H, names

cell_order = [(0,0,0),(0,0,1),(0,1,0),(0,1,1),
              (1,0,0),(1,0,1),(1,1,0),(1,1,1)]
y_cells = np.array([cell_means[c] for c in cell_order])
H, names = hadamard_8()

print("\n=== Hadamard contrast SS (n={}) ===".format(n))
for i, name in enumerate(names):
    psi = np.dot(H[i], y_cells)
    ss = n * psi**2 / np.sum(H[i]**2)
    print(f"  {name:>4s}: psi={psi:+6.2f}, SS={ss:7.2f}")

# 직교성 검증
print("\n=== Orthogonality (any two rows should have dot=0) ===")
for i in range(7):
    for j in range(i+1, 7):
        dp = np.dot(H[i], H[j])
        assert dp == 0, f"{names[i]} × {names[j]} = {dp}"
print("All 21 pairs orthogonal. ✓")

기대 출력:

Type II ANOVA:
                                              sum_sq    df       F  PR(>F)
C(A, Sum)                                    156.250   1.0  ~104.2  0.000
C(B, Sum)                                     49.000   1.0   ~32.7  0.000
C(C, Sum)                                     42.250   1.0   ~28.2  0.000
C(A, Sum):C(B, Sum)                           20.250   1.0   ~13.5  0.001
C(A, Sum):C(C, Sum)                            ...
C(B, Sum):C(C, Sum)                            ...
C(A, Sum):C(B, Sum):C(C, Sum)                  ...
Residual                                      ~84.0  56.0     NaN     NaN

=== Hadamard contrast SS (n=8) ===
     A: psi=+12.50, SS= 156.25
     B: psi= +7.00, SS=  49.00
     C: psi= +6.50, SS=  42.25
    AB: psi= +4.50, SS=  20.25
    ...

All 21 pairs orthogonal. ✓

ANOVA 의 분산 분해와 Hadamard 대비의 SS 가 정확히 일치한다.

6 효과 크기와 검정력

각 효과의 partial \(\eta^2\): \[ \text{partial } \eta^2 = \frac{SS_{\text{effect}}}{SS_{\text{effect}} + SS_W} \]

위 데이터의 \(SS_W \approx 56 \times 1.5 = 84\), partial \(\eta^2\): - \(A\): \(156.25 / (156.25 + 84) = 0.65\) — 매우 큰 효과 - \(B\): \(49.0 / 133.0 = 0.37\) — 큰 효과 - \(C\): \(42.25 / 126.25 = 0.33\) — 큰 효과 - \(AB\): \(20.25 / 104.25 = 0.19\) — 큰 효과 - …

세 주효과가 모두 큰 효과 크기를 가진다는 것은 시뮬레이션 데이터에서 의도된 신호이다. 실무 데이터에서는 보통 효과가 더 작고 (partial \(\eta^2 < 0.1\)), 검정력 분석에서 셀당 표본을 늘려야 한다.

7 시각화 — 이원 상호작용 plot 의 panel 형태

삼원 설계의 시각화는 두 가지 표준 형태이다.

Format: 검색 학습             Format: 반복 학습
Y │      *(C=보상)            Y │      *(C=보상)
  │     /                       │     /
  │    *(C=비보상)               │    *(C=비보상)
  │  /                          │  /
  │_/                           │_/
  └──────────────              └──────────────
   1h    2h                     1h    2h
       (Time A)                       (Time A)

각 panel 은 한 요인 (\(B\)) 의 한 level 에서 나머지 두 요인 (\(A, C\)) 의 이원 상호작용을 보여 준다. panel 사이의 상호작용 패턴이 다르면 삼원 상호작용이 존재한다 (G-MAX8-2).

8 가정과 한계

  • 셀 등분산·정규성·독립성: ANOVA 표준.
  • 셀 표본 균등: 직교 분해의 전제. 불균등이면 Type II/III SS (G-MAX8-3).
  • \(n \ge 5\) 권장: 셀당 표본이 너무 작으면 within SS 자유도 부족.
  • 고정 효과: 세 요인의 levels 가 모두 연구자 선택. 무작위 levels 는 G-MAX10.
  • 2 수준의 한계: 양적 요인의 비선형성을 잡지 못한다 (수준이 2 개라 선형 추세만 검정 가능). 양적 요인은 3 수준 이상 권장 (G-MON3-4 의 3-level factorial).

9 관련 주제

선행 지식

후속 주제

다른 카테고리 연결

Subscribe

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