1 정의
DAG \(A \to L \leftarrow U \to Y\) 에서 collider \(L\) 보정 시: - \(L\) 이 \(A\) 와 \(U\) 의 공통 결과. - \(L\) 보정 → \(A \leftrightarrow U\) 의 가짜 conditional 연관 도입. - \(U \to Y\) 이라면 → \(A \leftrightarrow Y\) 의 가짜 연관 (selection bias).
→ Sharp null 이라도 비영 추정. Berkson’s bias 의 일반 형태.
TC feedback 시 \(L_k\) 가 \(A_{k-1}\) 와 \(U_k\) 의 결과 → 정확히 이 구조.
직관 — Berkson’s bias 의 시간변동 일반화: 단일 시점 collider 위험 (Berkson, M-bias) 의 시간변동 형태. 시간변동 confounder 가 collider 의 본질. 단일 시점에서 회피 가능 (보정 안 함) 했으나 시간변동에서는 불가피 — confounder 보정 필요한 동시에 collider 함정.
2 20.3 Stratification 의 실패 메커니즘
2.1 Figure 20.5 — Collider 의 정확한 구조
A_0 → L_1 ← U_1
↘ ↘
A_1 → Y
\(L_1\) 의 위치: - \(A_0 \to L_1\): 처치가 covariate 변경. - \(U_1 \to L_1\): 미관측 변수가 covariate 영향. - \(L_1 \to A_1\): covariate 이 다음 처치 결정. - \(U_1 \to Y\): 미관측 변수가 결과 영향.
\(L_1\) 은 \(A_0\) 와 \(U_1\) 의 공통 결과 (collider).
\(L_1\) 보정 시 path \(A_0 \to L_1 \leftarrow U_1 \to Y\) 활성화 → \(A_0 \leftrightarrow Y\) 가짜 연관.
직관 — Collider 활성화의 시각: Path 가 “닫혀 있는” 상태에서 conditioning 이 path 를 연다. \(A_0 \to L_1 \leftarrow U_1\) 의 collider \(L_1\) 에서 본래 path 가 닫혀 있음. \(L_1\) 보정 → path 활성화. 이 path 가 \(A_0\) 의 결과 평균을 왜곡.
2.2 Stratum 별 메커니즘 — \(L_1=0\) 의 경우
\(L_1=0\) (CD4 high) 안에서:
Group A: \(A_0=0, L_1=0\) (4000 명) - 처치 안 받았는데 CD4 high. - 의미: 원래 면역 시스템 좋음 (낮은 \(U_1\)). - \(\mathrm{E}[Y | A_0=0, L_1=0] = 84\).
Group B: \(A_0=1, L_1=0\) (8000 명) - 처치 받고 CD4 high. - 의미: 원래 일부는 좋았고, 일부는 처치 효과로 회복 (다양한 \(U_1\), 평균 더 나쁨). - \(\mathrm{E}[Y | A_0=1, L_1=0] = 76\).
차이 -8 = \(U_1\) 의 baseline 차이 + \(A_0\) 의 직접 효과 (= 0). → 모두 \(U_1\) 차이로 설명.
직관 — “같은 \(L_1\)” 의 두 의미: Group A 의 “CD4 high” 는 baseline 좋음. Group B 의 “CD4 high” 는 baseline 나빴는데 처치로 회복. 같은 측정값이 다른 의학적 의미. Conditioning 으로 의미가 분리됨.
직관 — Berkson’s bias 의 의학적 비유: “병원 입원자 중 두 질병이 함께 있는 비율이 높다” — 입원 (collider) 으로 conditioning. 두 질병이 인구에서 무관해도 입원 환자 중에서는 가짜 연관. 같은 메커니즘이 시간변동 분석에서 작동.
2.3 \(L_1=1\) 의 경우 — 같은 메커니즘
Group C: \(A_0=0, L_1=1\) (12000 명) - 처치 안 받았는데 CD4 low. - 원래 baseline 안 좋음 (높은 \(U_1\)). - \(\mathrm{E}[Y | A_0=0, L_1=1] = 52\).
Group D: \(A_0=1, L_1=1\) (8000 명) - 처치 받았는데 CD4 low. - 원래 baseline 매우 안 좋음 — 처치도 충분 회복 안 됨 (가장 높은 \(U_1\)). - \(\mathrm{E}[Y | A_0=1, L_1=1] = 44\).
차이 -8 — 같은 \(-8\) collider 편향.
→ 두 stratum 모두 정확히 \(-8\) — uniform collider effect.
직관 — 두 stratum 의 일관된 -8: 데이터의 대칭성 — 처치 효과 0 이라는 진짜 구조를 반영. 그러나 추정 도구가 0 대신 -8 을 일관되게 추정. 도구가 체계적으로 편향 — 우연이 아닌 결정적 실패.
2.4 두 편향의 trade-off
비보정 (\(L_1\) 무시): - \(L_1\) 이 confounder 라 confounding 편향 -13.3. - \(L_1=1\) 그룹이 \(A_1=1\) 에 더 많이 분포 → \(A_1\) 의 부정 결과 효과 추정.
\(L_1\) 보정: - Confounding 부분 제거. - 그러나 collider conditioning 으로 새 편향 -8 도입. - 두 편향의 부분 상쇄 → 보정 후 작은 잔여 편향.
완벽한 도구 = confounding 제거 + collider 회피. 둘을 동시 달성 불가 (단순 도구로).
직관 — 진퇴양난: 보정 시 collider, 비보정 시 confounding. 부분 보정 (일부 stratum 만) 은 두 편향 혼재. 이 deadlock 이 g-method 의 정확한 발명 동기.
3 20.4 Outcome Regression 도 실패
3.1 회귀의 stratification 이라는 사실
회귀 모형 \(\mathrm{E}[Y | \bar{A}, L_1] = \theta_0 + \theta_1 cum(\bar{A}) + \theta_2 L_1\):
- 각 covariate 값에 모수 형태로 평균 추정.
- 각 stratum 의 \(\mathrm{E}[Y | A, L_1]\) 의 가중 평균.
- = stratification 의 부드러운 일반화.
→ 같은 collider conditioning 메커니즘.
→ 같은 실패 결과 (편향 -8 또는 비슷한 값).
직관 — 회귀가 매끄러운 stratification: 회귀 계수가 각 stratum 의 평균을 매끄러운 함수로 표현. 비모수 stratification 과 같은 정보 사용. 모수 형태가 collider 함정을 우회 안 함.
3.2 Hernan 의 회귀 분석 결과
\(cum(\bar{A}) = A_0 + A_1\) 사용: - \(cum(\bar{A}) = 0\) (always 0): 0 처치. - \(cum(\bar{A}) = 1\) (one 처치): 시점 0 OR 시점 1 만. - \(cum(\bar{A}) = 2\) (always 1): 모든 시점 처치.
\(\mathrm{E}[Y | \bar{A}, L_1] = \theta_0 + \theta_1 cum(\bar{A}) + \theta_2 L_1\):
Hernan 의 결과: - \(\theta_1 = -4\) (대략). - “Always treat vs never treat” = \(\theta_1 \times 2 = -8\).
진짜 ATE = 0. 회귀 결과 -8. 편향 -8.
→ Stratification 과 동일 편향 — 메커니즘 동일.
직관 — 더 정교한 회귀의 함정: 더 많은 spline, 더 많은 interaction, 더 큰 모형 — 모두 같은 함정. 함수 형태의 유연성으로 collider conditioning 우회 불가능. Hernan 의 강조.
직관 — Cumulative Dose 의 의미: 의학에서 흔한 모형 (“총 약물량의 효과”). 그러나 시간변동 처치에서는 misleading — 시점별 처치 sequence 가 다른 효과 가질 수 있음.
3.3 다른 도구들도 실패
\(L_1\)-based Matching: - 같은 \(L_1\) 값의 처치-비처치 짝지움. - = stratification 의 비모수 형태. - 같은 collider 편향.
Propensity Score on \(L_1\): - \(\Pr(A_1 | L_1)\) 의 함수. - \(L_1\) 정보를 PS 에 압축. - 같은 collider 편향.
Spline on \(L_1\): - \(L_1\) 의 비선형 함수 보정. - 더 유연한 형태지만 같은 conditioning. - 같은 편향.
모든 표준 도구가 동일 실패.
직관 — 도구 선택과 무관한 실패: 분석가가 어떤 도구를 시도해도 실패. 더 정교한 spline, 더 큰 데이터, 더 많은 변수 — 도움 안 됨. 본질적 deadlock. 새 frame 의 도구 (g-method) 만이 답.
3.4 Fix 시도의 마지막 — Mediation Analysis 시도
발상: \(A_0 \to L_1 \to A_1\) 경로가 매개. \(L_1\) 보정으로 direct effect 만 추정?
문제: - 매개 효과 분석 (Ch.23) 은 specific 도구 — 단순 회귀 아님. - \(A_1 \to Y\) 는 처치-처치 경로, 매개 아님. - \(A_0 \to L_1 \to Y\) 는 매개 지만 (sharp null 이라 효과 0), \(L_1\) 자체에 Y 화살표 없음.
→ Mediation framework 도 부적절. 본질적 deadlock.
직관 — Hernan 의 결론: “어떤 보정도 적절하지 않다.” 표준 도구 box 전체가 시간변동 처치 분석에 부적합. 새 도구 필요 — 정확히 g-method 의 도입 동기.
4 도구 fix 시도의 종합
| 시도 | 결과 |
|---|---|
| 보정 안 함 | confounding 편향 (-13.3) |
| \(L_1\) 층화 | collider 편향 (-8) |
| 더 많은 covariate 보정 | 같은 메커니즘 — 편향 |
| 더 유연한 회귀 (spline) | 같은 메커니즘 — 편향 |
| Propensity score on \(L_1\) | 같은 메커니즘 — 편향 |
| Matching on \(L_1\) | 같은 메커니즘 — 편향 |
| Cumulative dose 회귀 | 같은 메커니즘 — 편향 |
| Mediation analysis | 부적절 — 매개 구조 다름 |
| Random forest, ML | 같은 메커니즘 — 편향 |
→ 표준 도구 box 전체 실패. G-method 가 본질적으로 다른 frame.
직관 — Box 전체의 실패가 의미하는 것: 데이터 + 표준 도구로는 원리적 으로 풀 수 없음. 더 큰 데이터, 더 많은 변수도 도움 안 됨. 인식적 패러다임 전환 필요 — 이것이 Robins (1986) 의 기여.
5 G-method 가 다른 이유 — Preview
전통 도구: 한 번의 분석으로 모든 효과 추정. \(L_1\) 보정 → 모든 처치 효과 동시 추정. → Collider 함정.
G-method: 시점별 분리 분석. - G-formula: 시점별 결과 모형 + 시뮬레이션. - IPW MSM: 시점별 가중치 곱 + 가중 회귀. - G-estimation: 시점별 SNMM + sequential 추정.
→ Conditional 보정 안 함. Marginal (가중 또는 표준화) 보정.
→ Collider 활성화 회피.
직관 — Conditional vs Marginal 의 차이: 표준 회귀는 conditional (\(Y | A, L\)). G-method 는 marginal (\(Y^a\)). \(L\) 보정을 conditional 로 하면 collider, marginal 로 하면 OK. 분석 frame 의 변경이 deadlock 해결.
6 응용 분야
- HIV/AIDS ART: 1990 년대 분석 위기의 g-method 해결
- 종양학 sequential 항암제: 표준 회귀의 함정 회피
- 만성 질환 약물 dose: 시간변동 약물 효과
- 마케팅 sequential attribution: 캠페인 효과의 정확한 추정
- A/B 테스트 sequential rollout: 단계별 처치 변경 분석
7 코드 — Collider Conditioning 시뮬레이션
import numpy as np
import pandas as pd
import statsmodels.formula.api as smf
# === Sharp Null + TC Feedback 시뮬레이션 ===
np.random.seed(42)
n = 32000
# U_1: 미관측 변수 (Y 의 원인)
U = np.random.normal(0, 1, n)
# A_0: 무작위 50:50
A0 = np.random.binomial(1, 0.5, n)
# L_1: A_0 와 U_1 의 collider
L1 = (0.5 * A0 + 0.7 * U + np.random.normal(0, 0.5, n) > 0.5).astype(int)
# A_1: L_1 의 함수
prob_A1 = np.where(L1 == 1, 0.8, 0.4)
A1 = np.random.binomial(1, prob_A1)
# Y: U 만 의존 (sharp null — 처치 효과 0)
Y = 60 + 20 * (1 - U) + np.random.normal(0, 5, n)
df = pd.DataFrame({"A0": A0, "L1": L1, "A1": A1, "Y": Y, "U": U})
df["cum_A"] = df["A0"] + df["A1"]
print("=== 진짜 ATE = 0 (sharp null) ===\n")
# (1) 비보정
m1 = smf.ols("Y ~ cum_A", data=df).fit()
print(f"(1) 비보정 (cum_A): {m1.params['cum_A']:.2f}")
# (2) L1 보정 — collider conditioning
m2 = smf.ols("Y ~ cum_A + L1", data=df).fit()
print(f"(2) L1 보정 (cum_A + L1): {m2.params['cum_A']:.2f} (collider bias)")
# (3) U 보정 — 가상 (실제로는 미관측)
m3 = smf.ols("Y ~ cum_A + U", data=df).fit()
print(f"(3) U 보정 (가상): {m3.params['cum_A']:.2f} (~ 0, 진짜)")
# (4) L1 + U 보정 — 가상
m4 = smf.ols("Y ~ cum_A + L1 + U", data=df).fit()
print(f"(4) L1 + U 보정 (가상): {m4.params['cum_A']:.2f}")
print("\n→ 표준 도구 모두 비영 (U 보정 시만 0)")
print("→ U 미관측 시 g-method 필요 (Ch.21)")8 한 줄 요약
\(L_1\) 층화의 실패 메커니즘은 collider conditioning — Figure 20.5 의 \(A_0 \to L_1 \leftarrow U_1\) 구조에서 \(L_1\) 보정이 path 활성화. 같은 stratum 안의 두 그룹이 baseline \(U_1\) 다름 — gauche 연관 -8. 더 정교한 도구 (회귀, matching, PS, spline) 도 같은 메커니즘으로 실패 — stratification 의 모수적 일반화. Mediation framework 도 부적절. 표준 도구 box 전체의 본질적 deadlock — g-method 만이 conditional 대신 marginal 분석 frame 으로 함정 회피.
9 관련 주제
선행 지식
후속 주제
다른 카테고리 연결