이 글은 Schulz Ch.15 Exclusions and Losses in Randomised Trials 시리즈 (4 편) 의 첫 글이다. Ch.12~14 가 어떻게 무작위 배정을 시작하고 숨기는가 를 다뤘다면, Ch.15 는 그 후 무엇을 분석하는가 의 절대 원칙 — Intent-to-Treat 를 다룬다.
1 진입 직관 — 무작위 배정 후의 함정
RCT 의 무작위 배정은 본질적으로 baseline 단계의 균형 을 보장한다. 그러나 시험은 시간 을 두고 진행된다. 무작위 배정 후:
- 환자가 추적 거부 (lost to follow-up)
- 환자가 처치 변경 (예: 새 약 군 환자가 표준 약 복용)
- 환자가 적격 조건 미달 사후 발견 (post-hoc ineligibility discovery)
- 환자가 프로토콜 위반 (예: 처방 외 약 복용)
결정적 질문: 이런 환자들의 데이터를 어떻게 분석 해야 하나?
직관적 답: “이런 환자는 시험 대상에서 제외하자. 그래야 처치 효과를 깨끗하게 측정할 수 있다.”
Schulz 의 충격적 답: 이 직관은 틀렸다. 무작위 배정 후 어떤 체계적 제외 도 RCT 의 baseline 균형을 무너뜨린다. 원칙은 단 하나 — Intent-to-Treat (ITT).
ITT 원칙 한 줄 요약: “Once randomised, always analysed as assigned.” 무작위 배정된 환자는 처치를 받았든 안 받았든, 추적되었든 안 되었든, 적격이었든 아니었든 모두 원래 배정된 군의 일부로 분석.
비유: 야구에서 한 번 라인업에 든 선수는 경기 중 부상으로 빠져도, 결국 안타를 못 쳐도 그 팀의 일원. 라인업에서 사후 제외는 통계 기록을 왜곡한다. RCT 의 ITT 도 같은 원리.
2 정의: Intent-to-Treat (ITT)
무작위 배정된 모든 환자 를 원래 배정된 군의 일부로 분석 하는 RCT 의 일차 분석 원칙. 처치 수용·완료·결과 측정 여부와 무관.
- 역학: Intent-to-Treat (ITT)
- IT: 일반적으로 명확한 대응 없음 (IT 는 사용자가 거의 자동 추적)
- FDA 임상시험 규제: ITT 가 primary analysis 의 표준
대안 분석 (모두 secondary 로만 보고 가능):
- Per-Protocol (PP): 프로토콜 완전 준수 환자만 분석
- As-Treated: 실제로 받은 처치 별 분석 (배정과 무관)
- modified ITT (mITT): 적격·약 받은 환자만 분석 — Schulz 가 비판 하는 misnomer
핵심 분리: ITT 는 primary, 나머지는 secondary. 학술지·규제기관 모두 primary 분석으로 ITT 만 인정.
3 Schulz 의 충격적 사례 — Sulfinpyrazone 시험 (Panel 15.1)
Ch.15 의 핵심 사례. Schulz 가 ITT 원칙의 결정적 중요성을 보여주기 위해 FDA audit 의 발견을 인용한다.
3.1 시험 개요
Anturane Reinfarction Trial Research Group (1978~1980, N. Engl. J. Med.).
- 목적: Sulfinpyrazone 의 심근경색 후 심혈관 사망 예방 효과
- 설계: 무작위 배정 RCT, sulfinpyrazone vs placebo
- 결과 (저자 보고): 32% 사망률 감소 (\(p = 0.058\))
3.2 FDA Audit 의 발견
FDA 가 시험 데이터를 상세 audit 하여 발견한 사실 (Temple & Pledger 1980):
3.2.1 부적절 제외 1: 사후 ineligibility 판정
저자들이 7 명의 환자 (처치 6 명, placebo 1 명) 를 사후에 부적격 으로 판정하고 분석에서 제외. 이 7 명 중 사망자가 처치군에 더 많음.
메커니즘: 실제로는 비슷한 ineligibility 가 placebo 군에도 있었지만 적용 안 함. 처치군에서 불리한 결과 (사망) 의 환자를 우선 제외 → 처치군이 더 좋아 보임.
3.2.2 부적절 제외 2: Compliance 미흡 사망 제외
저자들이 2 명의 sulfinpyrazone 사망 + 1 명의 placebo 사망 을 compliance 미흡 이라 분류하고 제외. 그러나 프로토콜에는 compliance 기반 제외 계획 없었음.
메커니즘: Post-hoc rationalization — 결과 본 후 정당화 규칙 만들기.
3.2.3 7-Day Rule
저자들이 처치 7 일 미만 또는 처치 종료 7 일 후 사망을 분석 불가능 으로 분류. FDA 는 이를 덜 비판 했음 — 프로토콜에 명시되어 있었고 결과에 큰 영향 없었음.
3.3 재분석 결과
FDA 가 부적절 제외 환자를 모두 다시 포함 하여 ITT 분석:
| 분석 | 효과 | p-value |
|---|---|---|
| 저자 보고 (제외 후) | 32% 감소 | 0.058 |
| FDA ITT 재분석 | 21% 감소 | 0.16 |
충격: 32% → 21%. 효과 크기가 3분의 1 이상 감소. p-value 도 0.058 → 0.16 으로 유의성 자체 잃음.
3.4 FDA 의 결정
FDA Advisory Committee 의 결론:
“Sulfinpyrazone 은 심근경색 후 사망 예방 약으로 labeling 및 광고 승인 거부. 정밀 검토 결과 데이터가 처음 보였던 만큼 설득력 있지 않음.”
so what: 한 시험의 부적절 제외 가 신약의 시장 진입 자체 를 결정한 사례. ITT 원칙의 정량적 중요성을 보여주는 가장 강력한 증거.
반사실: 만약 FDA 가 audit 안 했다면? Sulfinpyrazone 이 시장에 출시되었을 것이고, 의사들이 과장된 효과 로 처방. 일부 환자에게 불필요한 약 + 부작용 위험. ITT 의 부재는 임상 결정의 직접 왜곡.
4 ITT 원칙의 수학적 정당화
4.1 무작위 배정의 자연적 균형
무작위 배정 시 baseline 변수 \(X\) 에 대해:
\[E[X | T = 0] = E[X | T = 1]\]
즉 두 군의 baseline 평균이 같다 (대수의 법칙으로).
4.2 무작위 후 제외의 위험
만약 결과 \(Y\) 와 상관된 변수 (예: 위험 정도 \(X\)) 에 따라 체계적 제외 가 발생하면:
\[E[X | T = 0, \text{not excluded}] \neq E[X | T = 1, \text{not excluded}]\]
baseline 균형 무너짐. 효과 추정 편향.
수식 직관: Sulfinpyrazone 사례의 분해:
\[\text{Apparent effect} = \underbrace{\text{True effect}}_{\theta} + \underbrace{\text{Selection bias}}_{\delta}\]
32% (apparent) = 21% (true) + 11% (selection bias from inappropriate exclusions). FDA audit 가 \(\delta\) 를 분리해 \(\theta\) 를 회복.
4.3 ITT 의 보존
ITT 는 모든 무작위 배정 환자를 포함 하므로 baseline 균형 보존:
\[E[X | T = 0, \text{ITT}] = E[X | T = 1, \text{ITT}]\]
따라서 Apparent effect = True effect (편향 없음).
단점: ITT 는 처치를 안 받은 환자도 포함 하므로 효과 추정이 보수적 — 즉 실제 처치 효과를 약간 과소 추정. 그러나 unbiased 라는 가치가 더 크다.
5 ITT vs Per-Protocol vs As-Treated 비교
| 분석 | 누구를 분석? | 어느 군으로? | Bias 위험 | 사용 시기 |
|---|---|---|---|---|
| ITT | 모든 무작위 배정 환자 | 원래 배정된 군 | 낮음 | Primary analysis |
| Per-Protocol (PP) | 프로토콜 완전 준수 환자만 | 원래 배정된 군 | 높음 | Secondary only |
| As-Treated | 실제 받은 처치별 | 실제 처치 군 | 매우 높음 | Secondary only |
| modified ITT (mITT) | 적격 + 약 받은 환자 | 원래 배정된 군 | 중~높음 | 권장 안 됨 (사실상 PP) |
5.1 Per-Protocol 의 함정
사례 (Ch.15.3 에서 깊이): 항생제 RCT 에서 25% 의 환자가 약 미복용. 이들을 제외 하고 분석하면? 비순응자 = 더 건강 또는 덜 우려 → 항생제 군이 덜 위중 → 효과 과대 추정.
5.2 As-Treated 의 함정
사례: Cross-over 가 발생한 시험. 예: 새 약 군의 일부가 표준 약 복용. As-Treated 분석은 이들을 표준 군 으로 재분류. 결과: 처음부터 새 약 거부한 환자 = 더 위중 → 표준 군에 더 많은 사망 → 효과 부풀림.
5.3 modified ITT (mITT) 의 misnomer
Schulz 의 비판: “mITT 는 ITT 가 아니다. 실제로는 PP 분석이다.” (Schulz 2019, Ch.15)
mITT 는 적격 환자 + 약 받은 환자만 포함. 이는 본질적으로 PP. mITT 라고 부르는 것은 misleading.
반사실 — 효과 비교: Abraha 외 (2015, BMJ) 분석 — mITT 시험이 ITT 시험보다 효과 추정이 더 큼. 이는 mITT 가 체계적으로 편향 됨을 시사.
6 Exclusion Paradox — Schulz 의 충격적 발견
6.1 문제 진단
Schulz 외 (1996, BMJ): 1997 년 일반 의학 학술지의 249 RCT 분석. 단 2% (5/249) 만 ITT 적용을 명시적 보고. 약 절반 (119/249) 이 ITT 를 언급 했지만 세부 사항 부재.
후속 분석 (2013):
| 분야 | ITT 보고율 |
|---|---|
| 실험 통증 모델 | 0% (50 시험 중) |
| 임상 통증 시험 | 47% (123 시험 중) |
| 일반 메타 분석 (Abraha 외 2017) | 25% (2349 시험 중) |
| mITT 사용 (잘못된 ITT 변형) | 14% |
6.2 Exclusion Paradox
Schulz 의 발견:
“Exclusion 을 보고하지 않은 시험이 보고한 시험보다 더 편향 되어 있다.” (Schulz 외 1995, JAMA)
이는 직관과 정반대. 직관: “exclusion 보고 = exclusion 있음 = 편향”. 실제: “exclusion 미보고 = 정직성 부재 = 더 큰 편향 가능성”.
메커니즘: 일부 연구자가 exclusion 의 존재 자체 를 숨김. Reviewer 는 “exclusion 없음 = 깨끗한 시험” 으로 잘못 해석.
반사실: 두 시험.
시험 X: “12 명을 부적격으로 사후 제외, 3 명을 추적 손실” — 명시적 보고 시험 Y: “no apparent exclusions” — 보고 부재
직관: X 가 더 의심스럽다. 실제: Y 가 더 위험할 수 있다 — 사실 exclusion 이 있었지만 보고 안 함. CONSORT flow diagram 이 이런 함정을 차단한다.
7 Loss to Follow-Up — 5-and-20 Rule
ITT 의 가장 큰 실무적 도전: 추적 손실 (loss to follow-up).
7.1 정의
환자가 추적되지 않아 결과 측정 불가능 한 경우. 다른 출처 (예: 사망 등록부) 에서 결과 정보를 얻을 수 없으면 분석에서 부득이 제외.
7.2 5-and-20 Rule
| Loss 비율 | 평가 |
|---|---|
| < 5% | 거의 편향 없음 |
| 5~20% | 중간 위험 |
| > 20% | 심각한 편향 위험 |
Schulz 의 경고: “20% 이상 loss 시험은 sensitivity analysis 와 worst-case scenario 로도 타당성 도전을 견뎌내기 어렵다.” (Schulz 2019, Ch.15)
반사실 — 20% loss 시 worst case: 처치군 100 명 중 20 명 loss. 이들이 모두 사망 / 모두 생존 의 두 극단으로 가정 → 효과 추정의 95% CI 가 매우 넓어짐. 통계적 유의성 잃음.
7.3 더 정교한 Rule
추가 권고: “Loss to follow-up 비율 ≤ outcome event rate”. 즉 사망률 3% 시험에서는 loss 도 3% 이하여야 의미 있음.
이 규칙은 event 기반 결과 (시간-사건 분석) 에서 특히 중요. Loss 가 event 보다 많으면 event 결과의 신뢰도 자체가 약화.
7.4 Differential Loss
Schulz 의 강조: 전체 loss 비율 보다 두 군 간 차이 가 더 위험. 처치군 5%, placebo 군 20% loss → 두 군 비교가 본질적으로 다른 모집단.
반사실: 새 약의 부작용으로 처치군에서 증상 악화 → loss 증가. Placebo 군은 안정. 결과: 처치군에 생존자만 남음 → 사망률 측정 과소 추정. 효과 부풀림.
8 챕터의 줄기 — 후속 글 안내
Ch.15 의 후속 깊이는 다음으로 분해된다.
8.1 후속 글 1 — 무작위 전 제외 (32-15)
- Eligibility criteria 의 외적 타당도 영향
- “Large and simple trial” 철학
- 적격 기준 좁음 → 모집 부진 + 일반화 약화
8.2 후속 글 2 — 무작위 후 제외와 ITT (32-16)
- Discovery of ineligibility 의 위험 메커니즘
- ITT 절대 원칙의 정당화 깊이
- 무작위 마지막 순간 (last possible moment) 권고
8.3 후속 글 3 — 사후 제외와 추적 손실 (32-17)
- Post-randomisation pretreatment outcome 의 함정
- Protocol deviations 처리 (dental antibiotic 사례)
- Loss to follow-up 최소화 전략 (Panel 15.2)
9 IT / 디지털 실험 매핑
| 역학 (RCT) | IT (A/B Test) |
|---|---|
| ITT principle | Treatment of all exposed users (intent-to-expose) |
| Exclusions before randomisation | Pre-experiment user filtering |
| Discovery of ineligibility | “Bot detection 후 제외” (post-experiment) |
| Post-randomisation outcome | Pre-treatment metric filter |
| Protocol deviation | User uninstall / opt-out |
| Loss to follow-up | Inactive users / churn |
| 5-and-20 rule | Bucket completion rate |
| Per-Protocol | “활성 사용자만” 분석 |
| As-Treated | “실제 처치 노출 받은 사용자만” |
IT 의 흔한 함정: “활성 사용자만 분석” 이 high-engagement bias 를 만든다. 이는 임상의 PP 분석과 같은 위험. 모든 무작위 노출된 사용자 를 분석하는 것이 IT 버전의 ITT.
10 코드 예시 — Sulfinpyrazone 사례 재현
import numpy as np
from scipy import stats
np.random.seed(42)
# Sulfinpyrazone 시험 시뮬레이션
n_per_arm = 800
true_effect = 0.21 # FDA 재분석 효과 (21%)
# Baseline 사망률 0.10 (가정)
baseline_mortality = 0.10
# 무작위 배정
T = np.array([0]*n_per_arm + [1]*n_per_arm) # 0=새 약, 1=placebo
np.random.shuffle(T)
# 잠재적 결과
N = 2 * n_per_arm
mortality_T = baseline_mortality * (1 - true_effect) # 새 약: 사망률 0.079
mortality_C = baseline_mortality # placebo: 사망률 0.10
Y_0 = (np.random.random(N) < mortality_T).astype(int) # 새 약 시 사망
Y_1 = (np.random.random(N) < mortality_C).astype(int) # placebo 시 사망
Y_obs = np.where(T == 0, Y_0, Y_1)
# === 1. ITT 분석 (정확) ===
itt_T = Y_obs[T == 0].mean()
itt_C = Y_obs[T == 1].mean()
itt_effect = (itt_C - itt_T) / itt_C # 상대 감소
print(f"[ITT 분석]")
print(f"새 약 사망률: {itt_T:.3f}, placebo 사망률: {itt_C:.3f}")
print(f"효과: {itt_effect:.1%} 감소")
# === 2. 부적절 제외 시뮬레이션 ===
# Sulfinpyrazone 사례: 새 약 군에서 사망자 7 명 부적격 사후 제외
# (실제로는 placebo 군에도 비슷한 ineligibility 가 있었지만 적용 안 함)
# Mask 생성: 새 약 군 사망자의 일부를 부적격으로 분류
exclusion_mask = np.zeros(N, dtype=bool)
deaths_T = np.where((T == 0) & (Y_obs == 1))[0]
n_excluded_T = 7
deaths_C = np.where((T == 1) & (Y_obs == 1))[0]
n_excluded_C = 1 # 비대칭 제외
exclusion_mask[np.random.choice(deaths_T, n_excluded_T, replace=False)] = True
exclusion_mask[np.random.choice(deaths_C, n_excluded_C, replace=False)] = True
# Compliance 부족 사망 추가 제외
deaths_T_remaining = np.where((T == 0) & (Y_obs == 1) & ~exclusion_mask)[0]
deaths_C_remaining = np.where((T == 1) & (Y_obs == 1) & ~exclusion_mask)[0]
exclusion_mask[np.random.choice(deaths_T_remaining, 2, replace=False)] = True
exclusion_mask[np.random.choice(deaths_C_remaining, 1, replace=False)] = True
# Audit 후 분석
T_filt = T[~exclusion_mask]
Y_filt = Y_obs[~exclusion_mask]
biased_T = Y_filt[T_filt == 0].mean()
biased_C = Y_filt[T_filt == 1].mean()
biased_effect = (biased_C - biased_T) / biased_C
print(f"\n[부적절 제외 분석 (저자 보고)]")
print(f"제외 환자 수: T={n_excluded_T+2}, C={n_excluded_C+1}")
print(f"새 약 사망률: {biased_T:.3f}, placebo 사망률: {biased_C:.3f}")
print(f"효과: {biased_effect:.1%} 감소 (과대 추정)")
# === 3. ITT 와 부적절 제외의 차이 ===
print(f"\n[Sulfinpyrazone 사례 재현]")
print(f"FDA ITT 재분석: ~21% (실제 효과)")
print(f"저자 보고: ~32% (과대 추정)")
print(f"본 시뮬레이션: ITT={itt_effect:.1%}, 부적절 제외={biased_effect:.1%}")
# === 4. Per-Protocol 시뮬레이션 (비순응자 제외) ===
# 25% 의 환자가 약 미복용
nonadherent = np.random.random(N) < 0.25
# 비순응자는 평균보다 더 건강 → 사망 적음
healthy_mask = np.random.random(N) < 0.5 # 50% 가 더 건강한 사람
nonadherent_healthy = nonadherent & healthy_mask
# Per-Protocol: 순응자만 분석
adherent = ~nonadherent
T_pp = T[adherent]
Y_pp = Y_obs[adherent]
pp_T = Y_pp[T_pp == 0].mean()
pp_C = Y_pp[T_pp == 1].mean()
pp_effect = (pp_C - pp_T) / pp_C
print(f"\n[Per-Protocol 분석]")
print(f"PP 효과: {pp_effect:.1%} (비순응자 제외)")
print(f"→ 순응자는 일반 인구를 대표 안 함 → 외적 타당도 손실")이 코드는 (1) ITT 가 정확한 효과를 측정, (2) 부적절 제외가 효과 과대 추정, (3) Per-Protocol 도 편향 가능성, (4) Sulfinpyrazone 사례의 32% → 21% 변화 패턴을 재현한다.
11 결론 — Ch.15 의 한 줄 요약
Once randomised, always analysed — ITT 는 RCT 의 마지막 방어선.
핵심 메시지:
- 무작위 후 모든 환자를 ITT 로 분석 — 처치 받았든 안 받았든
- PP / As-Treated / mITT 는 secondary — 절대 primary 가 될 수 없음
- Sulfinpyrazone 32% → 21% — 부적절 제외의 정량적 비용
- Exclusion paradox — 보고 안 하는 시험이 더 편향
- 5-and-20 rule — Loss to follow-up 의 임계 기준
- CONSORT flow diagram 으로 모든 단계 보고
후속 글에서:
- 32-15: 무작위 전 제외와 외적 타당도
- 32-16: 무작위 후 제외와 ITT 의 정당화 깊이
- 32-17: 사후 제외 · 프로토콜 위반 · 추적 손실 (Panel 15.2 전략)
12 관련 주제
선행 지식
Phase C 후속 글
- 무작위 전 제외 (placeholder)
- 무작위 후 제외와 ITT (placeholder)
- 사후 제외와 추적 손실 (placeholder)
13 참고문헌
- Schulz, K. F. & Grimes, D. A. (2019). Essential Concepts in Clinical Research (2nd ed.), Ch.15. Elsevier.
- Anturane Reinfarction Trial Research Group. (1978). Sulfinpyrazone in the prevention of cardiac death after myocardial infarction. N. Engl. J. Med. 298, 289-295.
- Temple, R. & Pledger, G. W. (1980). The FDA’s critique of the anturane reinfarction trial. N. Engl. J. Med. 303, 1488-1492.
- Schulz, K. F., Grimes, D. A., Altman, D. G., Hayes, R. J. (1996). Blinding and exclusions after allocation in randomised controlled trials. BMJ 312, 742-744.
- Hollis, S. & Campbell, F. (1999). What is meant by intention to treat analysis? BMJ 319, 670-674.
- Abraha, I., et al. (2015). Deviation from intention to treat analysis in randomised trials. BMJ 350, h2445.
- Lachin, J. M. (2000). Statistical considerations in the intent-to-treat principle. Control. Clin. Trials 21, 167-189.