매칭과 매칭 분석 — McNemar·Conditional Logistic

Woodward Ch.6.5~6.6 — Matching & Analysis of Matched Studies

Case-control 매칭 설계의 통계적 정당화, McNemar 검정 (paired 분석의 표준), conditional logistic regression (다중 confounder 매칭의 회귀) 의 수식 유도와 직관을 정리한다. Overmatching 의 함정과 회피, 매칭 vs 비매칭의 검정력 비교를 추상 → 일상어 → 반사실 3 단계로 풀어낸다.

Experimentation
Epidemiology
저자

Kwangmin Kim

공개

2026년 05월 08일

1 6.5 Matching — 매칭의 동기와 정당화

정의: Matching

각 case 에 confounder 가 비슷한 control 을 짝지음 (Woodward, 2014, Ch.6.5).

매칭 비율: 1:1 (가장 일반적), 1:k (검정력 강화).

매칭 변수: 연령, 성별, 지역, 인종, 진단 시점.

1.1 매칭의 두 가지 동기

직관 3 단계: 매칭이 검정력 ↑ 시키는 메커니즘
  • 추상: 진성 OR 의 분산이 confounder 분산의 함수. 매칭으로 confounder 의 두 군 사이 분산 0 → 진성 OR 분산 ↓.
  • 일상어 비유: 두 학생의 시험 점수 비교에서 같은 학년·같은 학교로 매칭 → 학년·학교 효과 제거 → 진성 능력 차이 부각.
  • 반사실: 매칭 안 하고 회귀 보정만 하면 confounder 의 noise 가 잔존 → 분산 ↑, 검정력 ↓.

1.2 Overmatching 의 함정 (재확인)

가정 위반: Mediator 매칭

가설: 흡연-폐암 case-control 에서 “흡연 가족력” 으로 매칭. 본인 흡연이 가족력과 강한 상관 → 본인 흡연 효과가 매칭으로 약화.

수학적으로: \[ \text{OR}_{\text{matched on mediator}} \to 1 \]

3 단계 직관:

  • 추상: \(X \perp Y \mid Z\) 가 매칭으로 강제되면 진성 X-Y 연관이 0 으로 수렴.
  • 일상어 비유: IQ-시험 점수 연관 분석에서 “IQ 와 강한 상관 변수 (가정 학습 시간)” 로 매칭 → IQ 차이 자체가 사라짐.
  • 반사실: Confounder 만 매칭, mediator 는 매칭 안 함. DAG 의 명시적 분석 도움.

1.3 Frequency Matching vs Individual Matching

구분 의미
Frequency matching Case 군과 control 군의 confounder 분포를 비슷하게 (예: 둘 다 50% 남성)
Individual matching 각 case 한 명에게 confounder 비슷한 control 을 직접 매칭
직관: 두 매칭의 trade-off
  • Frequency: 분석 유연 (unmatched analysis 도 가능), 제한적 confounder 만.
  • Individual: 정확한 confounder 통제, 분석은 paired (McNemar, conditional logistic).

2 6.6 Analysis of Matched Studies

2.1 McNemar’s Test — Paired 분석의 표준

정의: McNemar’s Test

매칭된 1:1 case-control 쌍의 노출 표.

Control X=1 Control X=0
Case X=1 \(f_{11}\) \(f_{10}\)
Case X=0 \(f_{01}\) \(f_{00}\)

검정 통계량 (continuity correction): \[ \chi^2 = \frac{(|f_{10} - f_{01}| - 1)^2}{f_{10} + f_{01}} \]

자유도 1 의 \(\chi^2\) 분포.

OR 추정: \[ \hat{\text{OR}}_{\text{matched}} = \frac{f_{10}}{f_{01}} \]

2.2 직관 — Concordant vs Discordant Pairs

직관 3 단계: Discordant pair 만 정보를 갖는다
  • 추상: \(f_{11}\) (둘 다 노출) + \(f_{00}\) (둘 다 비노출) = concordant. OR 정보 없음. \(f_{10}, f_{01}\) = discordant. OR 정보 보유.
  • 일상어 비유: 쌍둥이 비교에서 둘 다 흡연 또는 둘 다 비흡연인 쌍은 흡연 효과 비교 안 됨. 한 명만 흡연하는 쌍에서만 효과 분리.
  • 반사실: Discordant pair 가 작으면 검정력 ↓. Sample size 계산도 discordant 예측 수 기준.

2.3 McNemar OR 의 95% CI

대표본 근사: \[ \log \hat{\text{OR}} \pm 1.96 \sqrt{\frac{1}{f_{10}} + \frac{1}{f_{01}}} \]

소표본은 exact 방법.

2.4 Conditional Logistic Regression

다중 confounder + matched 자료의 회귀 모형.

정의: Conditional Logistic

각 매칭 stratum \(s\) (1 case + k controls) 의 baseline odds \(\alpha_s\) 가 자유롭게 변하도록.

\[ \text{logit}(P(Y=1 \mid \mathbf{X}, s)) = \alpha_s + \boldsymbol{\beta}^T \mathbf{X} \]

각 stratum 의 likelihood 가 conditional likelihood 로 합산.

2.5 Conditional Likelihood 의 직관

직관 3 단계: Stratum-specific Baseline 의 흡수
  • 추상: \(\alpha_s\) 가 stratum 별 자유 파라미터 → 매칭 변수 (연령·성별 등) 의 효과를 자동 통제. Conditional likelihood 가 \(\alpha_s\) 를 적분 제거.
  • 일상어 비유: 학교별 baseline 점수가 다를 때, 학교 dummy 를 입력하면 학교 효과 자동 흡수. 단 학교당 학생이 1~k 명이라 일반 회귀 어려움 → conditional 형태로 대응.
  • 반사실: 매칭 자료를 unconditional logistic 으로 분석하면 매칭 효과 무시 → 분산 추정 부정확. Conditional 이 매칭 정보를 정확히 반영.

2.6 1:k 매칭의 검정력

직관: 매칭 비율 vs 검정력 (재확인)
Ratio Relative Power
1:1 100%
1:2 ~90%
1:3 ~85%
1:4 ~80%
1:5+ plateau

Sample size: 매칭 1:k 일 때 case 수 줄어드는 비율 = \((k+1) / 2k\).

  • 1:1 → case 수 1.0배.
  • 1:4 → case 수 0.625배.

즉 1:4 매칭으로 case 수를 약 40% 줄여도 같은 검정력.

2.7 Matched vs Unmatched 의 분석 차이

가정 위반: Matched 자료를 Unmatched 분석

가설: 1:1 매칭된 자료를 unmatched logistic 분석.

문제: - 분산 추정이 잘못됨 (paired 자료의 상관 무시). - 매칭 변수가 strong confounder 면 OR 의 점추정도 편향.

3 단계 직관:

  • 추상: 매칭으로 부여된 stratum 구조를 분석에서 무시 → conditional likelihood 가 아닌 marginal likelihood 사용.
  • 일상어 비유: 같은 사람의 측정 두 번을 독립으로 처리 → 분산 과대 추정 (실제로 paired 라 분산이 더 작음).
  • 반사실: McNemar 또는 conditional logistic → 매칭 구조 정확 반영. SAS·R·Python 모두 표준 함수 제공.

3 코드 예시 — Matched Case-Control

import numpy as np
import pandas as pd
from scipy.stats import chi2

np.random.seed(42)
n_pairs = 500

# 매칭된 case-control: 매칭 변수 = 연령
# 진성 OR=2 (흡연-폐암)

# Discordant pair 분포
f10 = 80   # case 흡연, control 비흡연 (X-pair: case+, control-)
f01 = 40   # case 비흡연, control 흡연
f11 = 200  # 둘 다 흡연
f00 = 180  # 둘 다 비흡연

# McNemar
chi2_stat = (abs(f10 - f01) - 1) ** 2 / (f10 + f01)
p = 1 - chi2.cdf(chi2_stat, 1)
print(f"McNemar χ² = {chi2_stat:.2f}, p = {p:.4f}")

# Matched OR
matched_OR = f10 / f01
log_OR_se = np.sqrt(1/f10 + 1/f01)
lo = np.exp(np.log(matched_OR) - 1.96 * log_OR_se)
hi = np.exp(np.log(matched_OR) + 1.96 * log_OR_se)
print(f"Matched OR = {matched_OR:.2f} (95% CI: {lo:.2f} ~ {hi:.2f})")

해석: Discordant pair 의 비대칭 (\(f_{10} > f_{01}\)) → 흡연자가 case 가 될 odds ↑ → 진성 OR 추정.

Conditional logistic 의 R 또는 Python (lifelines 의 CoxPHFitter 를 trick 적용) 또는 statsmodels 의 PHReg 등으로 다중 변수 매칭 자료 분석 가능.

4 결론

매칭은 strong confounder 통제와 검정력 강화의 도구. 1:4 까지 검정력 ↑, 그 이후 plateau. 매칭 자료는 paired 분석 (McNemar, conditional logistic) 필수. Overmatching (mediator 매칭) 은 noise 에서 효과를 가린다.

다음 글(B27)에서는 cohort 안에 배태된 case-control 의 두 변형 (nested CC, case-cohort) 을 본다.

5 관련 주제

Subscribe

Enjoy this blog? Get notified of new posts by email: