1 10.3 Logistic Regression — 핵심 수식
\[ y = \frac{1}{1 + \exp(-b_0 - b_1 x)} \]
S 모양 곡선 (Figure 10.3). 양 끝 asymptotes: - \(x \to -\infty\) → \(y \to 0\). - \(x \to +\infty\) → \(y \to 1\).
\(y \in (0, 1)\) 범위 내 — risk \(r\) 의 적합 곡선.
1.1 Logit 변환 형태
\[ \text{logit}(\hat r) = \log\left(\frac{\hat r}{1 - \hat r}\right) = b_0 + b_1 x \]
좌변: log odds (= logit). 우변: linear predictor (선형 회귀 형태).
- 추상: \(\hat r = 1/(1 + e^{-(b_0 + b_1 x)})\) 와 \(\text{logit}(\hat r) = b_0 + b_1 x\) 는 대수적으로 동등.
- 일상어 비유: 같은 사실을 두 언어로 표현 — risk 단위 (0~1) 와 logit 단위 (\(-\infty, \infty\)).
- 반사실: Risk 형태는 직관적, logit 형태는 모형 적합 + 추론에 유리. 두 형태를 자유롭게 변환.
1.2 MLE 추정
Likelihood: \[L(b_0, b_1) = \prod_{i=1}^n \hat r_i^{e_i} (1 - \hat r_i)^{n_i - e_i}\]
여기서 \(\hat r_i = 1/(1 + \exp(-b_0 - b_1 x_i))\).
Log-likelihood 최대화 → IRLS (Iteratively Reweighted Least Squares) 알고리즘.
R: glm(y ~ x, family=binomial). Python: statsmodels.api.Logit(y, X).fit().
1.3 직관 — IRLS 의 본질
- 추상: Logistic 의 likelihood 가 closed form 해 없음 → 반복적으로 가중치 갱신하며 적합.
- 일상어 비유: 처음 추정 → 그 추정의 정밀도로 가중치 부여 → 더 정확한 추정 → 반복. 점점 안정 해에 수렴.
- 반사실: IRLS 가 수렴 안 하면 (예: complete separation) 모형 부적합 신호.
2 10.4.1 Binary Risk Factor — OR 직접 산출
\(x \in \{0, 1\}\) 일 때:
\[ \log(\hat\Psi) = \text{logit}(\hat r_1) - \text{logit}(\hat r_0) = b_1 \cdot 1 - b_1 \cdot 0 = b_1 \]
\[ \hat\Psi = \exp(b_1) \]
즉 slope \(b_1\) 이 그대로 log OR, \(\exp(b_1)\) 이 OR.
95% CI: \[ \exp\left(b_1 \pm 1.96 \cdot \widehat{\text{se}}(b_1)\right) \]
(Woodward, 2014, eq. 10.4~10.6).
2.1 EGAT 사례 — Example 10.4
태국 EGAT (Electricity Generating Authority of Thailand) 코호트, Table 3.2 자료.
적합된 logistic: \[\text{logit} = -4.8326 + 1.0324 \cdot \text{smoke}\]
여기서 \(\text{smoke} = 1\) (흡연자), 0 (비흡연자).
OR 산출: \[\hat\Psi = \exp(1.0324) = 2.808\]
해석: 흡연자의 CV 사망 odds 가 비흡연자의 약 2.8 배.
3 단계 직관:
- 추상: 회귀 출력 한 줄 → OR 직접 산출. 별도 표 만들기 불필요.
- 일상어 비유: 흡연이 “OR 단위” 로 2.8 배 — 1 배가 “효과 없음”, 2.8 배가 “흡연자가 거의 3 배 위험”.
- 반사실: 만약 직선 회귀를 강제로 적용했다면 risk difference 0.06 (가상) 만 산출 → OR 또는 RR 산출에 추가 변환 필요.
2.2 Constant \(b_0\) 의 해석
\(b_0 = -4.8326\) 의 의미: \(x = 0\) (비흡연자) 의 log odds.
\[\text{logit}(\hat r_0) = b_0 = -4.8326\] \[\hat r_0 = \frac{1}{1 + \exp(4.8326)} = \frac{1}{1 + 125.7} \approx 0.79\%\]
비흡연자의 baseline CV 사망률 약 0.79%.
흡연자의 risk: \[\text{logit}(\hat r_1) = -4.8326 + 1.0324 = -3.8002\] \[\hat r_1 = \frac{1}{1 + \exp(3.8002)} \approx 2.18\%\]
RR: \(0.0218 / 0.0079 \approx 2.76\) — OR 2.81 와 비슷 (희귀 결과 가정 충족).
- 추상: Risk < 5% 면 OR ≈ RR. EGAT 의 0.8% vs 2.2% 가 이 영역.
- 일상어 비유: 작은 비율의 비교에서는 OR 와 RR 가 거의 동일. 큰 비율 (예: 30% vs 60%) 에서는 차이 큼.
- 반사실: 만약 결과가 흔하면 (50% 등) OR 가 RR 보다 부풀려져 보임. 보고 시 metric 정의 명확.
3 10.4.2 Quantitative Risk Factor — 단위당 OR
\(x\) 가 양적 (예: 연령, 혈압, 콜레스테롤) 일 때:
\[ \log(\hat\Psi) = b_1 (x_1 - x_0) \]
\[ \hat\Psi = \exp\{b_1 (x_1 - x_0)\} \]
해석: \(x_1 - x_0\) 차이당 OR. 1 단위 증가당 OR = \(\exp(b_1)\).
3.1 SHHS 사례 — 연령 단위당 OR
가설 적합: \(\text{logit}(\text{death}) = -10.0 + 0.10 \cdot \text{age}\).
1 살 증가당 OR = \(\exp(0.10) = 1.105\) — 1 살 늘면 사망 odds 10.5% 증가.
10 살 증가당 OR = \(\exp(0.10 \times 10) = \exp(1.0) = 2.72\).
40 → 59 세 (19 살 차이): \(\exp(0.10 \times 19) = \exp(1.9) = 6.69\).
- 추상: \(x\) 의 단위가 OR 의 의미를 결정. 1 살당 OR 와 10 살당 OR 는 같은 자료, 다른 표현.
- 일상어 비유: 환율 변환 — “1 달러당 원” vs “100 달러당 원” 같은 정보.
- 반사실: 임상 실무에서는 의미 있는 단위 (예: BMI 5 단위, 콜레스테롤 1 mmol/L) 로 보고. 1 단위 미세 변화 OR 는 직관 어려움.
3.2 선형성 가정 — 양적 변수의 함정
\(\text{logit}(r) = b_0 + b_1 x\) 는 logit 단위에서의 선형성을 가정. Risk 단위에서는 비선형.
진성 패턴이 비선형이면: - 연령 60~70 사이 효과 ↑ (가속). - 70~80 사이 효과 ↓ (saturation).
→ 단일 \(b_1\) 가 평균 효과만 잡고 패턴 가림.
3 단계 직관:
- 추상: 진성 \(f(\text{age})\) 가 비선형이면 선형 모형 misspecified.
- 일상어 비유: 학년-점수 관계가 1~6 학년에서 ↑, 7~12 학년에서 plateau, 13 학년 이상에서 ↓ 라면 단일 기울기 부적합.
- 반사실: 비선형 변환 (log age, age², spline) 으로 적합. 자세한 분석은 H-WOO10-7 (양적 변수) 에서.
4 표준오차와 신뢰구간
Binary 변수: \[\widehat{\text{se}}(\log\hat\Psi) = \widehat{\text{se}}(b_1)\]
Quantitative 변수: \[\widehat{\text{se}}(\log\hat\Psi) = (x_1 - x_0) \cdot \widehat{\text{se}}(b_1)\]
95% CI for OR: \[\exp\left(b_1 (x_1 - x_0) \pm 1.96 (x_1 - x_0) \widehat{\text{se}}(b_1)\right)\]
4.1 Wald CI 의 한계
Wald CI 는 대표본 정규 근사 — 작은 표본에서 부정확.
3 단계 직관:
- 추상: \(\log\hat\Psi\) 의 분포가 정규로 근사 — 작은 표본에서 노이즈.
- 일상어 비유: 100 회 동전 던지기 평균 vs 5 회 평균. 후자의 정규 근사 부정확.
- 반사실: Profile likelihood CI 또는 exact CI 가 작은 표본에 정확. R 의
MASS::confint.glm()또는 Pythonstatsmodels의 LR-based CI.
5 코드 예시 — Logistic 적합 + OR 추출
import numpy as np
import pandas as pd
import statsmodels.api as sm
np.random.seed(42)
n = 1000
# 가상 자료: 흡연-CV 사망
smoke = np.random.binomial(1, 0.30, n)
# 진성 OR=2.8, baseline risk 0.008
log_odds = -4.83 + 1.03 * smoke
prob = 1 / (1 + np.exp(-log_odds))
death = np.random.binomial(1, prob, n)
# Logistic 적합
df = pd.DataFrame({"smoke": smoke, "death": death})
X = sm.add_constant(df[["smoke"]])
model = sm.Logit(df["death"], X).fit(disp=0)
print(model.summary())
print(f"\nOR (smoker vs nonsmoker) = {np.exp(model.params['smoke']):.2f}")
print(f"95% CI: ({np.exp(model.conf_int().loc['smoke', 0]):.2f}, "
f"{np.exp(model.conf_int().loc['smoke', 1]):.2f})")해석: 진성 OR=2.8 에 가까운 추정 + Wald CI. 표본 충분하면 정확.
6 실험 분석 lens — A/B 테스트의 logistic
A/B 테스트 자료의 logistic 적합 패턴.
# A/B 테스트의 logistic
df["treatment"] = np.random.binomial(1, 0.5, n) # 50% A/B
df["pre_engagement"] = np.random.normal(0, 1, n) # 사전 활동량 (CUPED)
# 기능: treatment 가 0.2 log OR 효과
log_odds = -2.0 + 0.2 * df["treatment"] + 0.5 * df["pre_engagement"]
df["conversion"] = np.random.binomial(1, 1/(1+np.exp(-log_odds)), n)
# Logistic 적합 (단순)
X1 = sm.add_constant(df[["treatment"]])
m1 = sm.Logit(df["conversion"], X1).fit(disp=0)
OR_simple = np.exp(m1.params["treatment"])
# Logistic 적합 (CUPED 식 보정)
X2 = sm.add_constant(df[["treatment", "pre_engagement"]])
m2 = sm.Logit(df["conversion"], X2).fit(disp=0)
OR_adj = np.exp(m2.params["treatment"])
print(f"단순 OR: {OR_simple:.3f}")
print(f"CUPED 보정 OR: {OR_adj:.3f}")해석: 사전 활동량 보정으로 분산 ↓ → 더 정밀한 OR 추정.
7 Centering 과 Scaling — 양적 변수의 활용
Centering: 평균 (또는 임상 표준값) 빼기. \[X' = X - \bar X\]
Scaling: 표준편차 또는 IQR 로 나눔. \[X'' = (X - \bar X) / s_X\]
Z-score (standardization): 두 변환 결합.
- 추상 정의: Intercept \(\beta_0\) = “X = 0 의 logit”. X = 0 이 자연스럽지 않으면 (예: age 0) 의미 없음. Centering 후 \(\beta_0\) = 평균 X 의 logit.
- 일상어 비유: 시험 점수 비교 시 평균 0 으로 정렬 — intercept 가 평균 학생 수준.
- 반사실 시나리오: Centering 안 함 시 intercept + 다른 계수의 해석 어려움. Centering 이 표준.
7.1 사례 — Age 의 Centering
가설: \(\text{logit}(\hat r) = -3 + 0.05 \cdot \text{age}\).
Centered: \(\text{logit}(\hat r) = -0.5 + 0.05 \cdot (\text{age} - 50)\). - Intercept -0.5 = 50 세의 logit → risk = 0.378. - Slope 동일.
3 단계 직관:
- 추상 정의: 같은 모형, 다른 intercept 해석. Age = 50 baseline.
- 일상어 비유: 환율표의 baseline 변경 — 같은 정보, 다른 표현.
- 반사실 시나리오: 환자 의사소통 시 centered intercept 가 직관 (“50 세 baseline”).
8 Q&A — OR 해석의 흔한 오해
A: 아니다. OR > RR 는 결과 흔할 때 자연.
3 단계 직관:
- 추상 정의: \(\text{OR} = \text{RR} \cdot (1 - r_0) / (1 - r_1)\). Risk 흔하면 OR 가 RR 보다 큼.
- 일상어 비유: 50% 결과의 OR 와 RR — 큰 차이.
- 반사실 시나리오: 보고 시 metric 명시. 결과 흔함 (10%+) 시 RR 이 임상 직관 우월.
A: 단위 의존. 의미 있는 단위 변환 후 평가.
3 단계 직관:
- 추상 정의: 1 단위 차이의 효과. 의미 있는 차이는 더 클 수 있음.
- 일상어 비유: 1 mmHg vs 10 mmHg — 임상 의의 다름.
- 반사실 시나리오: 1 mmHg OR 1.05 → 10 mmHg OR = \(1.05^{10} = 1.63\). 임상 단위로 보고.
9 결론
Binary 변수의 OR 는 logistic 의 slope 자체. Quantitative 변수의 OR 는 단위당 또는 의미 있는 차이당. Logit 의 선형성 가정이 양적 변수의 함정 — 비선형 패턴 의심 시 spline. Centering 이 intercept 해석 도구. Metric (OR vs RR) 명시 + 의미 있는 단위 보고가 임상 표준.
다음 글 (H-WOO10-3) 에서는 categorical, ordinal 변수와 floating absolute risk 를 본다.
10 관련 주제
- Logistic 개관
- 표준 회귀의 문제와 logit
- 1111-11-11, 계수 해석 (2) — 범주·순서·FAR
Statistics 크로스링크