1 정의
DAG 에 다음 두 화살표 동시 존재:
- \(L_k \to A_k\): Confounder 가 처치 결정.
- \(A_{k-1} \to L_k\): 이전 처치가 covariate 변경.
→ Confounder 와 처치의 순환적 인과 의존 (시간 차원으로 펼쳐 acyclic 표현).
예 (HIV): CD4 → ART 처치 결정, ART → CD4 회복. 두 화살표 동시.
Time-varying confounding only (Figure 20.2): \(L_k \to A_k\) 만 있음. \(A_{k-1} \to L_k\) 없음. - Confounder 는 시간 변동하지만 처치의 결과 아님. - 단순 보정으로 해결 가능 (각 시점 표준 보정).
TC Feedback (Figure 20.1, 20.3): 두 화살표 모두. - 단순 보정 실패. - g-method 필요.
직관 — 두 시나리오의 결정적 차이: TVC only 는 “covariate 가 시간에 따라 변함” — 단순 시간 의존 보정. TC Feedback 은 “처치가 covariate 을 바꿈” — 보정 시 매개 효과 차단. 매우 미묘한 차이가 분석 가능성을 결정.
2 20.1 TC Feedback 의 DAG 구조
2.1 Figure 20.1 — 풀 형태
L_0 → A_0 → L_1 → A_1 → Y
↓ ↓ ↓
U_0 U_0 U_1 → Y
화살표: - \(L_0 \to A_0, L_1 \to A_1\): 처치 결정. - \(A_0 \to L_1\): 처치가 covariate 변경 (TC feedback). - \(L_0 \to L_1\): covariate 의 시간 진행. - \(U_k \to L_k, U_k \to Y\): 미관측 변수의 영향.
→ Sequentially randomized trial 의 가장 일반 형태 (Figure 19.2 에서 처치-covariate feedback 추가).
직관 — DAG 의 모든 화살표가 의미 있음: \(A_0 \to L_1\) 이 TC feedback 의 도장. 이 화살표 없으면 TVC only (Figure 20.2). 한 화살표가 분석 가능성 변경.
2.2 Figure 20.3 — 단순화된 TC Feedback
가정: - 처치 효과 0 (sharp null) — \(A_0, A_1, L_1\) 의 \(Y\) 화살표 없음. - \(L_0\) 표시 안 함 (간단화). - \(A_0 \to A_1\) 화살표 없음.
A_0 → L_1 → A_1
↘ ↙
Y
↑
U_1
핵심: \(A_0 \to L_1\) (TC feedback) + \(U_1 \to L_1, U_1 \to Y\) (collider 구조).
진짜 ATE = 0 (인과 화살표 없음).
직관 — Sharp null 의 교육적 가치: 진짜 효과를 0 으로 사전 결정 → 어떤 비영 추정도 bias 임이 명확. 추정 도구의 실패를 깨끗히 보여주는 사고 실험.
직관 — Figure 20.3 가 가장 단순한 TC feedback 사례: 더 작게 하면 TC feedback 없어짐. 이 DAG 가 최소 reproducible example.
2.3 Figure 20.4 — 관찰 연구 변형
W_0 → A_0
W_0 → L_1 → A_1
↘ ↙
Y
↑
U_1
- \(W_0\): 미관측 변수 (예: 환자 동기, 의사 선호).
- \(W_0 \to A_0\): 처치 결정에 영향.
- \(W_0 \to L_1\): 다음 covariate 에 영향.
\(A_0 \to L_1\) 직접 화살표 없음 — 그러나 \(W_0\) 통한 간접 의존. 효과는 비슷.
→ Sequentially randomized 가 아닌 관찰 연구 의 TC feedback 형태.
직관 — 관찰 연구의 보편적 시나리오: 의사가 환자 상태 보고 처치 결정 — 미기록 정보 활용. 이 미기록 정보 (\(W_0\)) 가 처치와 다음 covariate 모두에 영향. TC feedback 의 흔한 관찰 형태.
직관 — Figure 20.3 vs 20.4 데이터로 구분 불가: 같은 처치-covariate-결과 패턴. DAG 는 도메인 지식으로만 결정. 관찰 연구 분석 시 두 시나리오 가능 — sensitivity 검토 필수.
3 20.2 Table 20.1 의 32,000 명 사례
3.1 데이터 구조 자세히
| \(A_0\) | \(L_1\) | \(A_1\) | \(N\) | \(\mathrm{E}[Y]\) | 의미 |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 2,400 | 84 | 비처치 baseline, 비처치 |
| 0 | 0 | 1 | 1,600 | 84 | 비처치 baseline, 시점 1 처치 |
| 0 | 1 | 0 | 2,400 | 52 | 비처치 + CD4 low + 비처치 (40%) |
| 0 | 1 | 1 | 9,600 | 52 | 비처치 + CD4 low + 처치 (60%) |
| 1 | 0 | 0 | 4,800 | 76 | 처치 + CD4 high + 비처치 (60%) |
| 1 | 0 | 1 | 3,200 | 76 | 처치 + CD4 high + 처치 (40%) |
| 1 | 1 | 0 | 1,600 | 44 | 처치 + CD4 low + 비처치 (20%) |
| 1 | 1 | 1 | 6,400 | 44 | 처치 + CD4 low + 처치 (80%) |
관찰 1: 같은 (\(A_0, L_1\)) 안에서 \(A_1\) 따라 \(Y\) 동일. → \(A_1\) effect = 0 conditional on \(L_1\).
관찰 2: \(\mathrm{E}[Y|A_0=0] = (2400 \times 84 + 1600 \times 84 + 2400 \times 52 + 9600 \times 52)/16000 = 60\). \(\mathrm{E}[Y|A_0=1] = (4800 \times 76 + 3200 \times 76 + 1600 \times 44 + 6400 \times 44)/16000 = 60\). → \(A_0\) marginal effect = 0.
진짜 ATE always vs never = 0 (g-null 정리에 의해).
직관 — 데이터의 일관성: 모든 시점, 모든 stratum 에서 처치 효과 정확히 0. 그러나 결과 평균 은 stratum 별로 다름 (84, 52, 76, 44). 이 차이가 covariate 의 결과 영향 이지 처치 효과 아님.
직관 — 비율의 의미: \(L_1=1\) (CD4 low) 일 때 \(A_1=1\) 비율이 \(A_0=0\) 그룹은 80% (9600/12000), \(A_0=1\) 그룹은 80% (6400/8000). 같음 — 의사가 \(A_0\) 무시하고 \(L_1\) 만 보고 결정 (Figure 20.3 의 가정).
3.2 4 가지 분석의 결과
(0) 진짜 ATE: 0 (모든 처치 효과 0).
(1) 비보정 비교 (\(\mathrm{E}[Y | A_0=A_1=1] - \mathrm{E}[Y | A_0=A_1=0]\)): - \(\mathrm{E}[Y | A_0=A_1=1] = (3200 \times 76 + 6400 \times 44)/9600 = 54.7\). - \(\mathrm{E}[Y | A_0=A_1=0] = (2400 \times 84 + 2400 \times 52)/4800 = 68\). - 차이: \(-13.3\). - 편향 -13.3 — \(L_1\) 미보정 → confounding.
(2) \(L_1\) 층화: - \(L_1=0\): \(\mathrm{E}[Y | A_0=A_1=1, L_1=0] - \mathrm{E}[Y | A_0=A_1=0, L_1=0] = 76 - 84 = -8\). - \(L_1=1\): \(44 - 52 = -8\). - 두 stratum 모두 \(-8\). - 편향 -8 — collider conditioning.
(3) 회귀 (\(Y \sim cum(\bar{A}) + L_1\)): - \(\theta_{cum} = -4\). \(cum(\bar{A})=2\) vs \(cum(\bar{A})=0\) 차이 = \(-8\). - 편향 -8 — 같은 collider 메커니즘.
(4) Matching on \(L_1\): 비슷한 결과.
모든 분석이 진짜 0 을 다른 비영 값으로 추정.
직관 — 편향의 방향: 모든 분석이 처치를 해롭게 추정. “처치 받은 사람이 결과 나쁨” 의 가짜 메시지. 실제로는 처치-confounder feedback 으로 처치 받은 사람의 baseline 이 나쁨. 의학 적 의사결정에 반대 방향 결론 도달 위험.
3.3 분석 결과의 정량적 분해
비보정 분석의 편향 (-13.3): confounding bias. - \(A_0=A_1=1\) 그룹은 원래 더 많은 사람 CD4 low (저건강) — 그래서 처치 받음. - 그 그룹의 평균 \(Y\) 가 낮음 — confounding.
\(L_1\) 층화의 편향 (-8): collider conditioning bias. - \(L_1\) 보정으로 confounding 제거 (각 stratum 안에서 baseline 비슷). - 그러나 \(L_1\) 이 collider — \(A_0\) 와 \(U_1\) 의 결과. - \(L_1\) 보정 시 \(A_0\) 와 \(U_1\) 의 가짜 연관 도입. - \(A_0=1\) 그룹이 조금 더 나쁜 \(U_1\) (처치 받았는데도 CD4 high — 처치로 회복).
직관 — 편향의 부분 보정: 비보정 -13.3 → 층화 -8 → 편향 일부 감소. 그러나 완전 제거 안 됨. 다른 도구도 같은 부분 감소만. Collider conditioning 이 본질 — 도구로 우회 불가능.
직관 — 두 편향의 정반대 방향 가능성: 다른 시나리오에서는 confounding 과 collider 가 같은 방향, 다른 시나리오에서는 반대. Hernan 의 Table 20.1 에서는 둘 다 음의 방향이라 합쳐서 큰 편향. 도구의 정량적 실패는 데이터 구조 의존.
4 분석의 의미
Sequentially randomized experiment 라도 TC feedback 으로 인해 전통 분석 실패.
Sharp null 일 때도 비영 추정 가능 — 도구가 non-null 결과 잘못 보고.
모든 전통 도구 (회귀, 매칭, 층화) 동일한 collider 메커니즘으로 실패.
G-method 필요: 새 frame 의 도구 (Ch.21) 가 본질적으로 다름.
1986 년 Robins 의 g-formula 가 이 deadlock 의 해결책.
직관 — 1980-90 년대 HIV 분석의 위기: AZT 같은 초기 ART 의 효과 분석에서 표준 회귀가 해롭다 는 결과. 임상의사들의 대결심 — 처치 효과 있다고 믿으면서 통계는 반대. Robins 의 g-method 가 이 위기 해결.
5 응용 분야
- HIV/AIDS ART: 1990 년대 초기 분석 위기의 해결
- 종양학: 항암제 sequential 효과
- 심혈관 약물: 만성 약물 치료의 시간변동 효과
- 행동 개입: 인지 치료의 sequential 적용
- 마케팅 attribution: 사용자 sequential 캠페인 노출
6 코드 — Table 20.1 분석 재현
import pandas as pd
import numpy as np
import statsmodels.formula.api as smf
# Hernan Table 20.1
data_summary = pd.DataFrame({
"A0": [0, 0, 0, 0, 1, 1, 1, 1],
"L1": [0, 0, 1, 1, 0, 0, 1, 1],
"A1": [0, 1, 0, 1, 0, 1, 0, 1],
"N": [2400, 1600, 2400, 9600, 4800, 3200, 1600, 6400],
"Y": [84, 84, 52, 52, 76, 76, 44, 44]
})
# Person-level expand
rows = []
for _, r in data_summary.iterrows():
for _ in range(int(r["N"])):
rows.append({"A0": r["A0"], "L1": r["L1"], "A1": r["A1"], "Y": r["Y"]})
df = pd.DataFrame(rows)
df["cum_A"] = df["A0"] + df["A1"]
print("=== 진짜 ATE = 0 (sharp null) ===\n")
# (1) 비보정
t = df[(df.A0 == 1) & (df.A1 == 1)].Y.mean()
u = df[(df.A0 == 0) & (df.A1 == 0)].Y.mean()
print(f"(1) 비보정 비교: {t - u:.1f} (편향 -13.3)")
# (2) L1 층화
print("\n(2) L1 층화:")
for l1 in [0, 1]:
sub = df[df.L1 == l1]
t = sub[(sub.A0 == 1) & (sub.A1 == 1)].Y.mean()
u = sub[(sub.A0 == 0) & (sub.A1 == 0)].Y.mean()
print(f" L1={l1}: {t - u:.1f}")
# (3) 회귀
m1 = smf.ols("Y ~ cum_A + L1", data=df).fit()
print(f"\n(3) 회귀 (cum_A + L1): theta_cum = {m1.params['cum_A']:.2f}")
print(f" Always vs Never: {m1.params['cum_A'] * 2:.1f}")
# (4) 더 정교한 회귀 — A0, A1 별도
m2 = smf.ols("Y ~ A0 + A1 + L1 + A0:L1 + A1:L1", data=df).fit()
print(f"\n(4) 정교한 회귀 (interaction 포함):")
print(f" A0 효과 (L1=0): {m2.params['A0']:.2f}")
print(f" A1 효과 (L1=0): {m2.params['A1']:.2f}")
print("\n→ 모든 분석 비영 결과 (진짜 0 인데)")
print("→ G-method (Ch.21) 만이 일관")7 한 줄 요약
Treatment-confounder feedback 의 정확한 DAG (Figure 20.1, 20.3, 20.4) 구조 분석 — \(L_k \to A_k\) 와 \(A_{k-1} \to L_k\) 의 동시 존재. Hernan 의 Table 20.1 의 32,000 명 가상 sequentially randomized 시험에서 처치 효과 0 (sharp null) 임에도 비보정 분석 -13.3, \(L_1\) 층화 -8, 회귀 -8 의 비영 추정. 모든 전통 도구가 같은 collider conditioning 메커니즘으로 실패. 단순 도구의 정량적 실패 의 충격적 사례 — Ch.21 의 g-method 도입 필연성을 명확히 보여줌.
8 관련 주제
선행 지식
후속 주제
다른 카테고리 연결