단순 상호작용 효과와 비직교 삼원 설계 — 삼원 유의 시 follow-up

Maxwell Ch.8.3 Simple Interaction Effects · Non-orthogonal Three-Way

삼원 상호작용 \(A \times B \times C\) 가 유의할 때 follow-up 으로 한 요인 levels 에서 나머지 두 요인의 이원 factorial 분석 (simple interaction effect) 을 한다. 비직교 삼원 설계의 Type I/II/III SS 처리도 포함하여 정리한다.

Experimentation
DOE
저자

Kwangmin Kim

공개

2026년 05월 08일

1 정의

정의: Simple Interaction Effect

삼원 상호작용 \(A \times B \times C\) 가 유의한 뒤, 한 요인 (예: \(C\)) 의 특정 level 에서 나머지 두 요인 (\(A, B\)) 의 이원 factorial (주효과 \(A\), 주효과 \(B\), 상호작용 \(A \times B\)) 을 분석하는 것이다.

\(C\) level 마다: - \(A\) at \(C = c_l\): simple main effect - \(B\) at \(C = c_l\): simple main effect - \(A \times B\) at \(C = c_l\): simple interaction effect

목적: 어느 panel 에서 이원 상호작용 패턴이 다른지 구체화 (G-MAX8-2 의 panel plot 정량화).

2 절차 — 삼원 상호작용 follow-up

2.1 Step 1 — Omnibus ABC 검정

먼저 \(F_{ABC}\) 가 유의한지 확인. 비유의면 simple interaction effect 분석 불필요.

2.2 Step 2 — 분석 차원 선택

\(C\) levels 에서 \(A \times B\) 분석 vs \(A\) levels 에서 \(B \times C\) 분석 — 어느 쪽? 도메인적 의미 또는 사전 가설에 따라 선택. 일반적으로 “조건적 처치” 의미가 강한 요인을 조건 (\(C\)) 으로 두고 나머지 두 요인 (\(A, B\)) 을 분석.

2.3 Step 3 — 각 level 의 SS

\(C = c_l\) level 에서 \(A \times B\) 의 SS:

\[ SS_{AB | C = c_l} = n \sum_{jk} (\bar Y_{jkl} - \bar Y_{j \cdot l} - \bar Y_{\cdot k l} + \bar Y_{\cdot \cdot l})^2 \]

자유도 \((a-1)(b-1)\). \(2 \times 2 \times 2\) 에서는 자유도 1.

2.4 Step 4 — 분모 (Error Term) 선택

방식 분모 (\(MS_{\text{err}}\)) 자유도
Pooled 전체 \(MS_W\) \(abc(n-1)\)
Separate 해당 \(C = c_l\) level 의 \(MS_W\) \(ab(n-1)\)

Pooled 가 자유도 큼 (검정력 ↑) 이지만 셀별 등분산 가정 필요.

3 가설 데이터 적용

G-MAX8-1 의 가상 데이터:

\(C=0\) (비보상) \(C=1\) (보상)
\(B=0\) 반복 \(B=1\) 검색 \(B=0\) 반복 \(B=1\) 검색
\(A=0\) (1h) 5.0 6.0 6.5 7.0
\(A=1\) (2h) 7.0 9.5 8.5 12.0

각 셀 \(n=8\), \(MS_W = 1.5\).

3.1 \(A \times B\) at \(C = 0\)

cell 평균 (4 개): \((5.0, 6.0, 7.0, 9.5)\) — 정렬 \((A, B)\) = \((0,0), (0,1), (1,0), (1,1)\).

상호작용 대비 \((+1, -1, -1, +1)\): \[ \hat\psi^{(C=0)}_{AB} = 5.0 - 6.0 - 7.0 + 9.5 = 1.5 \] \[ SS^{(C=0)}_{AB} = \frac{8 \times 1.5^2}{4} = 4.5 \] \[ F^{(C=0)}_{AB} = 4.5 / 1.5 = 3.0 \quad (df = 1, 56\, \text{pooled}) \]

3.2 \(A \times B\) at \(C = 1\)

cell 평균 \((6.5, 7.0, 8.5, 12.0)\).

\[ \hat\psi^{(C=1)}_{AB} = 6.5 - 7.0 - 8.5 + 12.0 = 3.0 \] \[ SS^{(C=1)}_{AB} = \frac{8 \times 3.0^2}{4} = 18.0 \] \[ F^{(C=1)}_{AB} = 18.0 / 1.5 = 12.0 \]

3.3 해석

\(C=0\) (비보상) 에서 \(A \times B\) 상호작용은 약함 (\(F = 3.0\), 비유의 가능). \(C=1\) (보상) 에서는 강함 (\(F = 12.0\), 매우 유의). 보상 조건에서 학습 시간 × 형식 시너지가 더 강하다 는 결론.

이 두 simple interaction effect 의 차이가 곧 삼원 상호작용 SS: \[ SS_{ABC} = SS^{(C=1)}_{AB} - SS^{(C=0)}_{AB} = ? \]

(엄밀히는 분해 식이 다소 다른 형태 — 정확한 가산은 SS 의 자유도와 부호 조정 후.)

4 비직교 삼원 설계

셀 표본이 다르면 ($n_{jkl} $ 상수) 직교 분해가 깨진다. G-MAX7-3 의 Type I/II/III SS 가 그대로 확장된다.

4.1 효과 분해의 일반 형태

Type \(A\) 의 SS 정의
Type I 모형에 효과를 사전 순서로 추가, 그 단계의 잔차 SS 차이
Type II 다른 같은 또는 낮은 차수 효과 모두 포함한 모형 vs 거기에 \(A\) 추가
Type III 전체 모형 vs \(A\) 만 빠진 모형

7 효과 모두에 같은 정의를 적용. statsmodels, R car::Anova 가 자동.

함정: 비직교 삼원에서 Type II vs III 의 차이

Type II 에서는 \(A\) 의 SS 가 \(B, C, AB, AC, BC\) 를 포함한 모형에서 \(A\) 추가의 효과 (상호작용 모두 포함하지 않음). Type III 는 \(ABC\) 까지 모두 포함. 보통 Type III 가 더 보수적이지만 차이가 작은 편. 복잡 데이터에서는 두 결과를 모두 보고 안정성 점검.

5 셀 결측의 영향

\(2^3 = 8\) 셀 중 일부가 비면 (예: 표본 \(n=0\)) 일부 효과가 식별 불가능. 옵션:

  1. 부분 factorial 분석: 식별 가능한 효과만.
  2. 이원 marginal 모형: 삼원 상호작용 가정을 0 으로 두고 이원 분석.
  3. 데이터 추가 수집.

상용 패키지는 결측 셀을 자동 처리하지 못하는 경우가 많음. 사전 셀 표본 점검 필수.

6 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_specs = {
    (0, 0, 0): (5.0, 1.22, 8),
    (0, 0, 1): (6.5, 1.22, 6),
    (0, 1, 0): (6.0, 1.22, 8),
    (0, 1, 1): (7.0, 1.22, 5),
    (1, 0, 0): (7.0, 1.22, 8),
    (1, 0, 1): (8.5, 1.22, 5),
    (1, 1, 0): (9.5, 1.22, 6),
    (1, 1, 1): (12.0, 1.22, 8),
}
records = []
for (a, b, c), (mu, sigma, n) in cell_specs.items():
    for v in np.random.normal(mu, sigma, n):
        records.append({"A": a, "B": b, "C": c, "Y": v})
data = pd.DataFrame(records)

print("Cell sizes:")
print(data.groupby(["A", "B", "C"]).size().unstack().fillna(0))

# Type II vs III ANOVA
model = ols("Y ~ C(A, Sum) * C(B, Sum) * C(C, Sum)", data=data).fit()
print("\n=== Type II SS ===")
print(sm.stats.anova_lm(model, typ=2).round(3))
print("\n=== Type III SS ===")
print(sm.stats.anova_lm(model, typ=3).round(3))

# Simple interaction effect: A x B at each C level
print("\n=== Simple interaction A x B at each C level ===")
ms_w_pooled = (sum((data.groupby(["A","B","C"])["Y"].transform(lambda x: (x - x.mean())**2)).sum())
               / (len(data) - 8))

for c_lvl in [0, 1]:
    sub = data[data["C"] == c_lvl]
    sub_model = ols("Y ~ C(A, Sum) * C(B, Sum)", data=sub).fit()
    sub_anova = sm.stats.anova_lm(sub_model, typ=2)
    interaction_row = sub_anova.loc["C(A, Sum):C(B, Sum)"]
    n_sub = len(sub)
    df_sub_w = sub_anova.loc["Residual", "df"]
    print(f"\n  C = {c_lvl}:")
    print(f"    SS_AB    = {interaction_row['sum_sq']:.2f}")
    print(f"    F_pooled = {interaction_row['sum_sq'] / ms_w_pooled:.2f}")
    print(f"    F_separate = {interaction_row['F']:.2f}")

7 결정 차트 — 삼원 분석 종합

ANOVA (Type II 또는 III)
    ↓
F_ABC 유의?
├── No  → 이원 상호작용·주효과 분석
└── Yes → simple interaction analysis
          ├── 어느 차원으로 분해?
          │   (도메인·사전 가설 기반 선택)
          ├── 각 level 에서 이원 factorial 분석
          ├── 분모: pooled vs separate (등분산 점검 후)
          └── 다중 비교 보정 (Bonferroni 또는 사전 계획)

8 가정과 한계

  • 삼원 상호작용 검정력: 자유도 1 의 작은 효과는 검출 어려움. 사전 검정력 분석.
  • 셀 등분산: pooled \(MS_W\) 사용 시 검정. 위반 시 separate.
  • 다중 simple interaction 검정: \(c\) 개 level 에서 모두 검정 시 FWER 부풀림. 보정.
  • 결측 셀 처리: 수동 점검 필요. 통계 패키지의 default 가 안전하지 않을 수 있음.

9 MAX Ch.8 시리즈 정리

G-MAX8-0  Higher-Order Factorial 개관
G-MAX8-1  2×2×2 와 7 효과 (직교 대비, Hadamard 표)
G-MAX8-2  3 원 상호작용과 하향식 분석
G-MAX8-3  Simple Interaction Effects + Non-orthogonal  ← 현재 글
    │
    ▼
G-MAX9 (ANCOVA)
G-MON3 (Factorial 정통, 분수 분할)

10 관련 주제

선행 지식

후속 주제

  • G-MAX9 — ANCOVA (작성 예정)
  • G-MON3 — Factorial Experiments (작성 예정)

다른 카테고리 연결

Subscribe

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