이 글은 Phase J 시리즈의 두 번째 글. Ch.4 개관 에서 제시한 effect modifier 개념 을 heterogeneity 의 정량 분석 과 stratification 의 식별 메커니즘 으로 깊이 다룬다 (Hernan Ch.4.1, 4.2).
1 진입 직관 — 평균이 가린 것을 층화로 드러내기
이전 글에서 전체 평균 효과 0 이 모두에게 효과 0 이 아닌 충격적 사례를 보았다. 이 글은:
- 왜 그런 일이 일어나는가 — heterogeneity 의 메커니즘 정량 분석
- 어떻게 발견하는가 — 3 가지 연구 설계에서의 stratification
결정적 도구: 층화 (Stratification). 각 sub-group 별 효과를 별도 계산. 단순한 도구지만 연구 설계에 따라 절차 다름.
2 Table 4.1 의 깊은 분석
2.1 데이터 구조
20 명 (그리스 신화 신/여신). Counterfactual outcomes:
- \(Y^{a=0}\): 처치 안 받았을 때 사망 여부 (관찰 불가능, 가상)
- \(Y^{a=1}\): 처치 받았을 때 사망 여부 (관찰 불가능, 가상)
- \(V\): 성별 (1 = 여성, 0 = 남성)
2.2 4 가지 환자 유형
각 환자는 \((Y^0, Y^1)\) 에 따라 4 유형:
| 유형 | \(Y^0\) | \(Y^1\) | 의미 |
|---|---|---|---|
| Doomed | 1 | 1 | 처치 무관 항상 사망 |
| Helped | 1 | 0 | 처치가 살림 — 효과 이로움 |
| Hurt | 0 | 1 | 처치가 해침 — 효과 해로움 |
| Immune | 0 | 0 | 처치 무관 항상 생존 |
2.3 Table 4.1 의 분포
20 명 중:
유형 여성 (V=1) 남성 (V=0) Doomed 1 (Persephone) 1 (Ares) Helped 0 4 (Kronos, Poseidon, Apollo, Hermes, Dionysus) Hurt 4 (Rheia, Leto, Aphrodite) +… 3 (Zeus, Hephaestus, Polyphemus) Immune 5 (Demeter, Hestia, Hera) +… 1 (Hades)
2.4 평균 효과의 계산
전체 (n=20):
- \(\Pr[Y^1 = 1] = 10/20 = 0.5\)
- \(\Pr[Y^0 = 1] = 10/20 = 0.5\)
- ATE (RD) = 0
여성 (n=10):
- \(\Pr[Y^1 = 1 | V=1] = 6/10 = 0.6\)
- \(\Pr[Y^0 = 1 | V=1] = 4/10 = 0.4\)
- CATE (RD) = +0.2 — 처치가 사망 위험 증가
남성 (n=10):
- \(\Pr[Y^1 = 1 | V=0] = 4/10 = 0.4\)
- \(\Pr[Y^0 = 1 | V=0] = 6/10 = 0.6\)
- CATE (RD) = -0.2 — 처치가 사망 위험 감소
2.5 메커니즘
여성에는 Hurt 유형 비율 높음. 남성에는 Helped 유형 비율 높음. 모집단 50:50 + 효과 크기 동일·방향 반대 → 완전 상쇄.
반사실: 만약 모집단이 60% 여성 이면 평균 효과 = \(0.6 \times 0.2 + 0.4 \times (-0.2) = +0.04\) — 해로운 처치. 반대로 40% 여성 이면 이로운 처치. 같은 처치, 다른 결론. Transportability 의 위협.
3 Additive vs Multiplicative — 4 가지 시나리오 깊이
이전 글에서 두 scale 의 차이를 봤다. 더 체계적으로 4 가지 가능성:
3.1 Scenario 1: 둘 다 있음 (qualitative)
\(V\) 에 따라 효과 방향 반대. 자동으로 additive + multiplicative 모두 modification.
사례 (Hernan Table 4.1): - 여성: RD = +0.2, RR = 1.5 - 남성: RD = -0.2, RR = 0.67 - 둘 다 다름 + 방향 반대.
3.2 Scenario 2: 둘 다 있음 (non-qualitative)
같은 방향, 크기 다름.
사례 (가상): - 여성: RD = +0.30, RR = 2.0 - 남성: RD = +0.10, RR = 1.5 - 둘 다 다름, 같은 방향.
3.3 Scenario 3: Additive 만 있음, Multiplicative 없음
예: 두 group 의 baseline risk 다르고, 동일 비율 변화하지만 절대 차이 다름.
그러나 수학적으로 불가능 — 같은 RR 면 같은 RD 가 아니므로 RD 도 다름. 단 baseline risk 가 다를 때.
정확한 사례: baseline risk 다르고 효과 비율 동일. RD 자동 다름.
3.4 Scenario 4: Multiplicative 만 있음, Additive 없음
Hernan 의 공식 사례 (이전 글 Scenario 1):
- \(V=1\): RD = 0.1, RR = 1.125
- \(V=0\): RD = 0.1, RR = 2.0
- 동일 RD, 다른 RR.
메커니즘: 두 group 의 baseline risk 가 매우 다름 (0.8 vs 0.1). 같은 절대 효과 (0.1) 가 다른 비율 효과.
3.5 함의
의사결정 차원:
- 공중 보건 (인구 영향): Additive (RD) 우선 — 절대 사례 수
- 생물학적 메커니즘: Multiplicative (RR) 우선 — 일반 패턴
어느 한 scale 만 보는 것은 위험.
4 Stratification — 식별 메커니즘 3 가지 설계
4.1 Setting 1: Marginal Randomized Experiment
무조건 무작위 배정. 처치 확률이 모든 사람 동일.
4.1.1 핵심
Exchangeability \(Y^a \perp\!\!\!\perp A\) 가 모든 stratum 에서 자동 성립.
\[ \Pr[Y = 1 | A=a, V=v] = \Pr[Y^a = 1 | V=v] \]
4.1.2 절차
각 stratum 에서 단순 조건부 비율:
\[ \widehat{CATE}_v^{RD} = \Pr[Y=1 | A=1, V=v] - \Pr[Y=1 | A=0, V=v] \]
4.1.3 예시
1000 명 시험. 무작위 50:50 배정. 남성 / 여성 으로 stratify.
처치 사망률 대조 사망률 RD 여성 60% 40% +20% 남성 40% 60% -20% 단순 비교만으로 effect modification 식별 가능.
4.2 Setting 2: Conditional Randomized Experiment
처치 확률이 어떤 변수 \(L\) 에 의존. 예: 심한 환자 (L=1) 에 처치 확률 0.75, 나머지 (L=0) 에 0.5.
4.2.1 도전
단순 conditional 비교는 bias. 왜? 심한 환자가 더 자주 처치 + 심한 환자의 결과가 더 나쁨 → confounding.
4.2.2 절차 (Hernan Greek/Roman 사례)
Stratification 2 단계:
- Stratify by \(V\) (성별 또는 국적)
- Standardize 또는 IP weight by \(L\) within each stratum
4.2.3 수식
Stratum \(V=v\) 에서:
\[ \Pr[Y^a = 1 | V=v] = \sum_l \Pr[Y=1 | A=a, V=v, L=l] \cdot \Pr[L=l | V=v] \]
즉 각 (V, L) cell 의 conditional risk 를 L 의 marginal distribution within V 로 가중 평균.
4.2.4 Greek/Roman 결과
40 명 시험. 20 Greek (V=1), 20 Roman (V=0). \(L\) = 심한 정도.
Greek (V=1) 에서: - \(\Pr[Y^{a=1} = 1 | V=1] = 0.5\), \(\Pr[Y^{a=0} = 1 | V=1] = 0.5\) - CATE_RD = 0 (no effect in Greeks)
Roman (V=0) 에서: - \(\Pr[Y^{a=1} = 1 | V=0] = 0.6\), \(\Pr[Y^{a=0} = 1 | V=0] = 0.3\) - CATE_RD = +0.3 (harmful in Romans)
효과가 국적 별로 다름 — effect modification by V.
4.3 Setting 3: Observational Study
처치가 연구자에 의해 배정 안 됨. 환자 자기 선택 또는 의사 결정.
4.3.1 가정
Conditional exchangeability \(Y^a \perp\!\!\!\perp A | L\) — 측정된 confounder 모두 통제 시 exchangeability.
4.3.2 절차
Setting 2 와 동일 — 2 단계 stratification. L 가 confounder 로 작용.
4.3.3 도전
Unmeasured confounder 가능성. Effect modification 식별 결과가 진짜 modification 인지 unmeasured confounder 의 효과 인지 구분 어려움.
반사실 — Hernan 의 경고: 관찰 연구의 effect modification 발견은 조심스럽게 해석. 무작위 시험에서 검증 권장.
5 Stratification 의 한계
5.1 한계 1: Continuous V
\(V\) 가 연속 변수 (예: 연령) 면 stratum 무한. 구간 분할 필요 — 분할 방법에 따라 결과 다름.
해결: 연속 effect modifier 모델 — interaction terms 또는 meta-learners (Phase J 후속).
5.2 한계 2: 다수 Modifier
여러 modifier (\(V_1, V_2, ..., V_k\)) 동시 고려 — stratum 폭증. 각 cell 의 sample 부족.
해결: 모델 기반 접근 (regression with interactions), ML methods (Causal Forest 등 — Phase J 후속).
5.3 한계 3: Multiple Testing
많은 sub-group 검정 → false positive 폭증. ISIS-2 의 별자리 사례 (Phase C 시리즈 참조).
해결: 사전 정의 subgroup, interaction test (Phase C-32).
6 Effect Modification vs Confounding — 결정적 분리
흔한 혼동 정리.
6.1 Confounding
Bias 의 원인. 처치와 결과 모두에 영향 인 변수. 통제 안 하면 ATE 추정 잘못.
\[ Y \leftarrow C \rightarrow A \quad \text{또는} \quad C \rightarrow A, C \rightarrow Y \]
6.2 Effect Modification
Heterogeneity 의 표현. 진짜 효과의 다양성. 통제 여부와 무관.
6.3 한 변수가 둘 다일 수 있음
연령 이 처치 결정 + 결과 영향 (confounder) + 처치 효과 modifier 이기도. 분석에서 다른 처리:
- Confounder 로서: 통제 (adjustment)
- Modifier 로서: stratify and report (heterogeneity)
반사실: 한 분석가가 연령을 confounder 로만 보고 전체 모집단의 ATE 추정 — modification 정보 사라짐. targeting 결정 불가능.
7 시뮬레이션 — 3 가지 설계의 stratification
import numpy as np
from scipy import stats
np.random.seed(42)
# Setting 1: Marginal Randomization
print("[Setting 1: Marginal Randomization]")
n = 1000
V = np.random.choice([0, 1], n, p=[0.5, 0.5])
A = np.random.choice([0, 1], n, p=[0.5, 0.5])
# True heterogeneous effect
# 여성: 처치가 위험 +20%
# 남성: 처치가 위험 -20%
baseline_p = np.where(V == 1, 0.40, 0.60)
treatment_effect = np.where(V == 1, 0.20, -0.20)
true_p = baseline_p + A * treatment_effect
Y = (np.random.random(n) < true_p).astype(int)
# Stratified analysis
for v in [0, 1]:
p_T = Y[(V == v) & (A == 1)].mean()
p_C = Y[(V == v) & (A == 0)].mean()
print(f" V={v}: P(Y|A=1) = {p_T:.3f}, P(Y|A=0) = {p_C:.3f}, RD = {p_T - p_C:+.3f}")
print()
# Setting 2: Conditional Randomization
print("[Setting 2: Conditional Randomization (Greek/Roman 분위기)]")
n = 1000
V = np.random.choice([0, 1], n, p=[0.5, 0.5])
L = np.random.choice([0, 1], n, p=[0.5, 0.5])
# 처치 확률이 L 에 의존
p_treat = np.where(L == 1, 0.75, 0.50)
A = (np.random.random(n) < p_treat).astype(int)
# 진짜 효과 (V 별 다름, L 도 영향)
baseline_p = 0.30 + L * 0.20 # L=1 이면 baseline 더 높음 (심한 환자)
te = np.where(V == 1, 0.0, 0.30) # Greek(V=1) 효과 0, Roman(V=0) 효과 +0.30
true_p = np.clip(baseline_p + A * te, 0, 1)
Y = (np.random.random(n) < true_p).astype(int)
# Naive (단순 conditional)
print(" Naive (단순 비교):")
for v in [0, 1]:
p_T = Y[(V == v) & (A == 1)].mean()
p_C = Y[(V == v) & (A == 0)].mean()
print(f" V={v}: RD_naive = {p_T - p_C:+.3f}")
# Standardization (L 보정)
print(" Standardization (L 보정):")
for v in [0, 1]:
# P(L=l | V=v) — L 의 marginal in V
p_l_given_v = {l: ((V == v) & (L == l)).sum() / (V == v).sum() for l in [0, 1]}
# E[Y | A=a, V=v, L=l] for each cell
rd_v = 0
for l in [0, 1]:
cell_T = Y[(V == v) & (A == 1) & (L == l)]
cell_C = Y[(V == v) & (A == 0) & (L == l)]
if len(cell_T) > 0 and len(cell_C) > 0:
rd_v += (cell_T.mean() - cell_C.mean()) * p_l_given_v[l]
print(f" V={v}: RD_standardized = {rd_v:+.3f}")
print()
# Setting 3: Observational
print("[Setting 3: Observational (가정: conditional exchangeability)]")
n = 1000
V = np.random.choice([0, 1], n, p=[0.5, 0.5])
L = np.random.choice([0, 1], n, p=[0.5, 0.5])
# 처치 결정이 L 에 의존 (의사 결정)
p_treat = np.where(L == 1, 0.70, 0.30)
A = (np.random.random(n) < p_treat).astype(int)
# 같은 진짜 효과
baseline_p = 0.30 + L * 0.20
te = np.where(V == 1, 0.0, 0.30)
true_p = np.clip(baseline_p + A * te, 0, 1)
Y = (np.random.random(n) < true_p).astype(int)
# Standardization (관찰 연구도 같은 절차)
print(" Standardization (L 보정):")
for v in [0, 1]:
p_l_given_v = {l: ((V == v) & (L == l)).sum() / (V == v).sum() for l in [0, 1]}
rd_v = 0
for l in [0, 1]:
cell_T = Y[(V == v) & (A == 1) & (L == l)]
cell_C = Y[(V == v) & (A == 0) & (L == l)]
if len(cell_T) > 0 and len(cell_C) > 0:
rd_v += (cell_T.mean() - cell_C.mean()) * p_l_given_v[l]
print(f" V={v}: RD_standardized = {rd_v:+.3f}")
print()
print("→ 3 설계 모두 stratification 으로 effect modification 식별")
print("→ Marginal: 단순 conditional 비교")
print("→ Conditional/Observational: stratify + standardize 2 단계")결과 해석:
- Setting 1: 무작위 배정 → 단순 비교만으로 진짜 effect modification 식별 (V=1 +0.2, V=0 -0.2).
- Setting 2: Naive 비교는 biased (L confounder). Standardization 후 진짜 효과 (V=1 ≈ 0, V=0 ≈ +0.3) 회복.
- Setting 3: 관찰 연구도 conditional exchangeability 가정 하에 동일 절차.
8 결론
Stratification 은 effect modification 식별의 핵심 도구. 연구 설계 (marginal·conditional·observational) 에 따라 2 단계 절차 필요.
핵심 메시지:
- Table 4.1 의 깊이: 4 환자 유형 + 모집단 분포 = 평균의 함정
- 4 시나리오 (Additive vs Multiplicative): 같은 데이터, 다른 결론
- 3 설계의 stratification: Marginal 단순, Conditional/Observational 2 단계
- Confounding 과 분리: 같은 변수가 둘 다일 수 있음
- 한계: Continuous V, 다수 modifier, multiple testing
다음 글에서 왜 effect modification 이 중요한가 (4.3) + adjustment 도구로서 stratification (4.4) 을 깊이.
9 관련 주제
선행 지식
- Effect Modification — Ch.4 개관
- (Phase D) Hernan Ch.2~3 — Conditional exchangeability, IP weighting
- (Phase C) Subgroup Analysis 함정 (별자리)
Phase J 후속 글
- HER Ch.4.3 + 4.4 — Why Care + Adjustment (placeholder)
- HER Ch.4.5 — Matching as Adjustment (placeholder)
10 참고문헌
- Hernán, M. A. & Robins, J. M. (2020). Causal Inference: What If, Chapter 4. Chapman & Hall/CRC.
- Greenland, S. & Rothman, K. J. (2008). Modern Epidemiology (3rd ed.), Chapter 5. Lippincott.
- VanderWeele, T. J. (2015). Explanation in Causal Inference: Methods for Mediation and Interaction. Oxford University Press.
- Sato, T. & Matsuyama, Y. (2003). Marginal structural models as a tool for standardization. Epidemiology 14, 680-686.