1 정의
이원 상호작용 \(A \times B\) 의 패턴이 제3 요인 \(C\) 의 levels 에 따라 달라지는 정도이다. 대비 형태로:
\[ \hat\psi_{ABC} = \sum_{jkl} c_j^A \cdot c_k^B \cdot c_l^C \cdot \bar Y_{jkl} \]
대칭적으로 \(A \times C\) 의 패턴이 \(B\) levels 에 따라, 또는 \(B \times C\) 의 패턴이 \(A\) levels 에 따라 달라지는 정도와 동일하다 (모두 같은 자유도 1 효과를 다른 각도로 본다).
2 의미 — 이원 상호작용의 효과 수정
\(A \times B\) 상호작용을 “한 요인의 효과가 다른 요인 levels 에 따라 달라짐” 이라 했다면, \(A \times B \times C\) 는 그 달라짐의 정도가 제3 요인 levels 에 따라 또 달라짐 이다.
인과추론에서 effect modification 은 ATE 가 covariate \(X\) 의 levels 에 따라 다르다는 것 (CATE). 삼원 상호작용은 그 effect modification 의 정도가 또 다른 covariate \(Z\) 에 따라 다르다 — 즉 conditional effect modification.
이것이 개인화의 깊이 를 표현한다. “약 A 가 효과적이다” 가 평균. “환자 X 에서 효과가 더 크다” 가 이원 상호작용. “환자 X 에서 효과 차이가 연령군 Z 에 따라 또 다르다” 가 삼원 상호작용. ML 의 deep learning 이 잡고자 하는 비선형 상호작용의 정수가 이 구조의 일반화이다.
3 시각화 — Panel Plot
삼원 상호작용을 보는 표준 방법은 panel plot (small multiples) 이다.
C = 비보상 C = 보상
Y │ *(B=검색) Y │ *(B=검색)
│ / │ //
│ *(B=반복) │ //
│ / │ /*(B=반복)
│ * │ /
│ / │ /
│ * │ *
└───────────── └─────────────
1h 2h 1h 2h
(Time A) (Time A)
panel 사이의 상호작용 패턴이 다르면 삼원 상호작용이 존재한다.
- C=비보상 panel: B (검색 vs 반복) 의 효과가 시간 A 에 따라 약간 증가 → \(A \times B\) 작은 양의 상호작용
- C=보상 panel: B 의 효과가 시간 A 에 따라 크게 증가 → \(A \times B\) 큰 양의 상호작용
- 두 panel 의 차이 = 삼원 상호작용
4 가설 데이터로 검증
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 |
4.1 \(A \times B\) at \(C=0\)
\[ \hat\psi^{(C=0)}_{AB} = (Y_{000} + Y_{110}) - (Y_{010} + Y_{100}) = (5.0 + 9.5) - (6.0 + 7.0) = 1.5 \]
4.2 \(A \times B\) at \(C=1\)
\[ \hat\psi^{(C=1)}_{AB} = (Y_{001} + Y_{111}) - (Y_{011} + Y_{101}) = (6.5 + 12.0) - (7.0 + 8.5) = 3.0 \]
4.3 삼원 상호작용
\[ \hat\psi_{ABC} = \hat\psi^{(C=1)}_{AB} - \hat\psi^{(C=0)}_{AB} = 3.0 - 1.5 = 1.5 \]
(부호 표 적용 시 \(\pm\) 부호 차이는 정의 단위. 동치.)
\[ SS_{ABC} = \frac{8 \times 1.5^2}{8} = 2.25 \]
(이 가상 데이터에서는 삼원 상호작용이 작아 비유의일 가능성. 실무 데이터에서 큰 신호를 잡으려면 더 큰 효과 크기 또는 표본이 필요.)
5 하향식 (Top-Down) 분석 전략
5.1 절차
Step 1: ANOVA omnibus F (전체 그룹 차이)
↓
Step 2: 삼원 상호작용 ABC 검정
├── 유의 → simple interaction effect (G-MAX8-3)
│ panel 별 이원 factorial 분석
│ → 결론: "패턴 A×B 가 C levels 에 따라 다르다"
│
└── 비유의 → Step 3
↓
Step 3: 이원 상호작용 AB, AC, BC 검정
├── 일부 유의 → simple effect (G-MAX7-2)
│ 해당 이원 상호작용의 follow-up
│
└── 모두 비유의 → Step 4
↓
Step 4: 주효과 A, B, C 검정
├── 일부 유의 → marginal mean 비교 + 사후 검정
│
└── 모두 비유의 → 효과 없음
5.2 왜 top-down 인가
고차 효과가 유의하면 저차 효과의 marginal 해석이 오도될 수 있다. 예: \(A \times B \times C\) 가 유의하면 \(A \times B\) 의 marginal 패턴은 \(C\) levels 의 평균이라 의미가 흐려진다. 가장 고차부터 점검해 적절한 분석 단계에서 멈추는 것이 해석적 합리성을 유지한다.
삼원 상호작용은 자유도 1 의 작은 효과이고 검정력이 약하다. 표본이 작은 (예: \(n=5\), \(N=40\)) 실험에서 비유의는 “효과가 없다” 가 아니라 “효과를 검출할 검정력이 부족하다” 일 수 있다. 신뢰구간 또는 효과 크기 (partial \(\eta^2\)) 를 함께 보고하고, 사전 검정력이 충분했는지 점검한다.
6 사전 가설 설계의 중요성
삼원 상호작용을 탐색적으로 잡는 것은 매우 어렵다. 표본 크기가 큰 디지털 실험에서도 삼원 상호작용은 검출되기 어려운 경우가 많다. 효과적 전략은 사전 가설 을 명시:
- 도메인 지식 기반: “환자 연령 × 약 종류 × 용량” 에서 노인층은 약 A 가 더 효과적, 젊은층은 약 B 가 더 효과적이라는 사전 가설.
- 1 자유도 사전 대비: \(\hat\psi_{ABC}\) 의 의미를 사전에 정해 그것 한 가지만 검정 → FWER 보정 부담 ↓, 검정력 ↑.
- Pilot 데이터: 사전 연구의 효과 크기 추정으로 검정력 분석.
탐색이 필요하면: - Bonferroni 보정 (\(\alpha / 7\) 효과) - FDR 통제 (Benjamini-Hochberg)
7 선택적 절차: Forward 또는 Backward
| 전략 | 시작점 | 진행 |
|---|---|---|
| Top-down (backward) | Full model (모든 효과 포함) | 비유의 효과 제거 |
| Bottom-up (forward) | 주효과만 | 유의 효과 추가 |
| Hierarchical | 같은 차수 효과를 한꺼번에 | 차수별로 검정 |
학계 표준은 top-down. 단, 사전 가설이 강력하면 hypothesis-driven hierarchical 도 정당.
8 4 원 이상의 일반화
\(2^k\) factorial 의 효과 수는 \(2^k - 1\). 즉: - \(2^3\): 7 효과 - \(2^4\): 15 효과 - \(2^5\): 31 효과
해석의 한계로 4 원 이상의 상호작용은 거의 보고하지 않는다. 실무에서는: - Resolution III/IV/V fractional factorial (G-MON3-6) — 일부 효과만 추정 - Confounding (G-MON3-3) — 고차 상호작용을 block effect 와 동일시
이로써 표본 크기를 줄인다.
9 Python 코드
import numpy as np
import pandas as pd
import statsmodels.api as sm
from statsmodels.formula.api import ols
from scipy import stats
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():
for v in np.random.normal(mu, sigma, n):
records.append({"A": a, "B": b, "C": c, "Y": v})
data = pd.DataFrame(records)
# Top-down 절차
model = ols("Y ~ C(A, Sum) * C(B, Sum) * C(C, Sum)", data=data).fit()
anova = sm.stats.anova_lm(model, typ=2)
print("=== Step 2: ABC 삼원 상호작용 ===")
abc_row = anova.loc["C(A, Sum):C(B, Sum):C(C, Sum)"]
print(f" F = {abc_row['F']:.3f}, p = {abc_row['PR(>F)']:.4f}")
if abc_row["PR(>F)"] < 0.05:
print(" → 유의. simple interaction effect 분석으로 진행 (G-MAX8-3)")
else:
print(" → 비유의. 이원 상호작용 검정으로 진행")
print("\n=== Step 3: 이원 상호작용 ===")
for src in ["C(A, Sum):C(B, Sum)", "C(A, Sum):C(C, Sum)", "C(B, Sum):C(C, Sum)"]:
r = anova.loc[src]
print(f" {src}: F = {r['F']:.2f}, p = {r['PR(>F)']:.4f}")
# Panel plot 시각화
import matplotlib.pyplot as plt
fig, axes = plt.subplots(1, 2, figsize=(10, 4), sharey=True)
for c_lvl, ax in zip([0, 1], axes):
sub = data[data["C"] == c_lvl]
means = sub.groupby(["A", "B"])["Y"].mean().unstack()
for b_lvl, marker in zip([0, 1], ["o", "s"]):
ax.plot([0, 1], means[b_lvl], marker=marker,
label=f"B={b_lvl} ({'반복' if b_lvl==0 else '검색'})")
ax.set_title(f"C={c_lvl} ({'비보상' if c_lvl==0 else '보상'})")
ax.set_xlabel("A (학습 시간)")
ax.set_xticks([0, 1])
ax.set_xticklabels(["1h", "2h"])
ax.legend()
axes[0].set_ylabel("Y (회상 점수)")
plt.tight_layout()
# plt.savefig("three_way_panel.png")10 가정과 한계
- 검정력 부족 위험: 자유도 1 의 삼원 상호작용은 작은 효과 크기에 검정력 약. 사전 검정력 분석 권장.
- 사전 가설의 정당화: 탐색적 검출은 가짜 양성 위험. Bonferroni 또는 FDR 보정.
- 시각화 의존: panel plot 은 직관적이지만 panel 수가 많아지면 (4 원 이상) 효과 없음.
- simple interaction 분석의 분모: pooled \(MS_W\) 사용 시 등분산 가정 (G-MAX8-3).
11 관련 주제
선행 지식
후속 주제
- G-MAX8-3: 단순 상호작용과 비직교 설계
- G-MON3-3 — Confounding (작성 예정)
다른 카테고리 연결
- Causal Inference — 효과 수정 — conditional effect modification 의 인과 lens