1 들어가며 — § 9.5 의 두 마무리 조각
Ch.9 Overview → § 9.2-9.3 → § 9.4 → § 9.5.1-9.5.3 까지의 흐름에서 mixed-effects logistic 의 본문 (식 9.13-9.28) 과 ICC·Cholesky·이질 분산을 다뤘다. 본 포스트는 § 9.5 의 마지막 두 소절을 정리한다.
| 절 | 주제 | 핵심 |
|---|---|---|
| § 9.5.4 | Multilevel Representation | reduced form (식 9.13) 을 level-1·level-2 두 회귀로 분해 (식 9.29-9.31) |
| § 9.5.5 | Response Functions | 식 (9.32) 의 통합 표기 + 세 가지 link (logit, probit, complementary log-log) |
“§ 9.5.4 = ‘왜 회귀를 두 수준으로 나누어 쓰는가’ — level-1 회귀의 계수 자체를 level-2 회귀의 종속 변수로 두면 다수준 구조가 명시적으로 드러난다. 정규 모형과 다른 점은 level-1 잔차 분산이 고정이라 공변량을 더해도 분산이 줄지 않고 다른 모수가 부풀어 오른다는 것 (Snijders-Bosker 효과). § 9.5.5 = ‘같은 mixed-effects 구조 위에서 link 를 바꾸면 무엇이 달라지는가’ — logistic 은 cdf-pdf 의 단순한 관계, normal (probit) 은 tetrachoric correlation 의 자연 산출, complementary log-log 는 이산 시간 비례 위험 모형.”
2 § 9.5.4 — Multilevel Representation
2.1 동기 — 같은 모형의 두 가지 작성법
식 (9.13) 의 reduced form:
\[ \log \left[ \frac{p_{ij}}{1 - p_{ij}} \right] = x_{ij}^\top \beta + \upsilon_i \]
같은 모형의 multilevel form (식 9.29-9.31): level-1 회귀의 계수 \(\beta_{0i}, \beta_{1i}\) 자체를 level-2 회귀의 종속 변수로 둔다.
reduced form 은 모든 효과를 한 줄에 합쳐 쓰지만, 누가 누구의 효과인지 가 흐려진다. multilevel form 은 두 개의 회귀로 명시적으로 나누어 쓴다:
- Level-1 (피험자 내): 같은 환자에서 시간에 따라 응답이 어떻게 바뀌는가? → “환자 안 회귀” 의 절편·기울기.
- Level-2 (피험자 간): 환자별 절편·기울기가 환자 특성 (성별, 처치 그룹 등) 에 따라 어떻게 다른가? → “환자 간 회귀” 가 level-1 의 계수를 설명.
이 분해는 (1) 모형의 해석을 명확하게 하고, (2) 어느 수준에 어떤 공변량을 넣을지 설계 단계에서 사고를 정리해 주며, (3) HLM 같은 다수준 분석 소프트웨어의 입력 구조와 정확히 맞다.
reduced form 과 multilevel form 은 수학적으로 등가 — 단지 같은 식을 다른 방식으로 쓴 것뿐이다. 그러나 인간이 모형을 이해하는 방식은 매우 다르다.
2.2 식 (9.29) — Level-1 회귀 (Logit 형태)
피험자 \(i\) 안에서 level-1 공변량 \(x_{ij}\) 한 개를 갖는 경우:
\[ \log \left[ \frac{p_{ij}}{1 - p_{ij}} \right] = \beta_{0i} + \beta_{1i} x_{ij} \tag{9.29} \]
- \(\beta_{0i}\): 피험자 \(i\) 의 절편 (피험자 고유).
- \(\beta_{1i}\): 피험자 \(i\) 의 기울기 (피험자 고유).
식 (9.29) 만 놓고 보면 평범한 단순 로지스틱 회귀처럼 보인다. 차이는 절편과 기울기에 \(i\) 첨자가 붙어 환자마다 다른 회귀선 을 의미한다는 점.
같은 처치를 받아도 어떤 환자는 절편이 크고 (응답 성향이 강함), 어떤 환자는 기울기가 가파르다 (시간에 따른 반응 속도가 빠름). 식 (9.29) 는 이 환자별 변동을 일단 자유롭게 둔 채 회귀 구조만 명시한다.
문제는 환자 수가 많으면 추정할 모수가 폭발한다는 것 (\(N\) 명에 절편·기울기 각각 → \(2N\) 개). 그래서 다음 단계에서 환자별 계수를 더 작은 차원의 모형으로 다시 묶는다 — 그것이 식 (9.31) 의 level-2 회귀.
2.3 식 (9.30) — Level-1 회귀 (잠재 변수 형태)
§ 9.4 의 잠재 변수 \(y_{ij}\) 로 다시 쓰면:
\[ y_{ij} = \beta_{0i} + \beta_{1i} x_{ij} + \epsilon_{ij} \tag{9.30} \]
\(Y_{ij} = 1 \iff y_{ij} > 0\), \(\epsilon_{ij}\) 의 분포가 logistic 이면 logit, 정규면 probit.
식 (9.29) 의 logit 형태는 모형의 직접 표현 — 회귀 계수가 log-odds 척도. 식 (9.30) 의 잠재 변수 형태는 연속 다수준 모형 (정규 MRM, § 4.2-4.3) 과의 비교 를 명시적으로 한다.
같은 데이터에 정규 MRM 과 mixed-effects logistic 을 적합한다고 가정하면:
- 정규 MRM: 식 (9.30) 에서 \(\epsilon_{ij} \sim \mathcal{N}(0, \sigma_\epsilon^2)\), \(\sigma_\epsilon^2\) 자유 추정.
- Mixed-effects probit: 식 (9.30) 에서 \(\epsilon_{ij} \sim \mathcal{N}(0, 1)\), 분산 1 로 고정.
- Mixed-effects logit: 식 (9.30) 에서 \(\epsilon_{ij} \sim \text{Logistic}(0, 1)\), 분산 \(\pi^2/3\) 으로 고정.
세 모형은 잔차 분포의 형태와 척도만 다르고 회귀 구조는 동일하다. 잠재 변수 표현이 이 통일성을 드러낸다.
2.4 식 (9.31) — Level-2 회귀
피험자 수준 공변량 \(x_i\) 한 개를 가정하고, 기울기 \(\beta_{1i}\) 가 랜덤 효과 변수라면:
\[ \beta_{0i} = \beta_0 + \beta_2 x_i + \upsilon_{0i} \] \[ \beta_{1i} = \beta_1 + \beta_3 x_i + \upsilon_{1i} \tag{9.31} \]
여기서 비표준화 랜덤 효과 \(\upsilon = (\upsilon_{0i}, \upsilon_{1i})^\top \sim \mathcal{N}(0, \Sigma_v)\).
식 (9.31) 은 환자별 절편 \(\beta_{0i}\) 와 기울기 \(\beta_{1i}\) 를 다시 회귀로 표현한다 — 종속 변수가 회귀 계수 라는 발상이 다수준 모형의 본질.
해석:
- \(\beta_0\): 피험자 평균 절편 (전체 모집단의 기준 응답 성향).
- \(\beta_1\): 피험자 평균 기울기 (전체 모집단의 평균 시간 효과).
- \(\beta_2\): 피험자 공변량 \(x_i\) 가 절편에 미치는 효과 (예: 처치 그룹이 평균 응답 성향에 미치는 효과 → main effect).
- \(\beta_3\): 피험자 공변량 \(x_i\) 가 기울기에 미치는 효과 (예: 처치 그룹이 시간 추세에 미치는 효과 → cross-level interaction).
- \(\upsilon_{0i}, \upsilon_{1i}\): 모형이 설명하지 못한 환자별 잔차 변동.
cross-level interaction \(\beta_3\) 가 핵심 — “처치가 시간에 따른 반응 속도까지 바꾸는가” 같은 질문이 이 한 모수의 검정으로 처리된다. 임상시험에서 가장 흥미로운 효과가 보통 여기에 있다.
식 (9.31) 을 식 (9.29) 에 대입하면 reduced form (식 9.13) 이 복원된다:
\[ \log \left[ \frac{p_{ij}}{1-p_{ij}} \right] = (\beta_0 + \beta_2 x_i + \upsilon_{0i}) + (\beta_1 + \beta_3 x_i + \upsilon_{1i}) x_{ij} \]
\[ = \beta_0 + \beta_1 x_{ij} + \beta_2 x_i + \beta_3 (x_i \cdot x_{ij}) + \upsilon_{0i} + \upsilon_{1i} x_{ij} \]
→ reduced form 으로 보면 단순한 4 개 고정효과 + 2 개 랜덤효과 회귀. multilevel form 으로 보면 두 수준의 의미가 명확. 같은 식, 두 가지 시각.
2.5 비표준화 랜덤 효과를 쓰는 이유
§ 9.5.2 의 식 (9.24) 에서는 표준화 랜덤 효과 \(\theta_i \sim \mathcal{N}(0, I)\) 와 Cholesky 인자 \(T\) 를 분리해 썼다. 그 표기는 추정 알고리즘 친화적 — Gauss-Hermite 적분이 표준 정규 노드를 쓰므로.
§ 9.5.4 의 multilevel form 에서는 비표준화 \(\upsilon \sim \mathcal{N}(0, \Sigma_v)\) 가 자연스럽다. 이유는 정규 (continuous) 다수준 모형 (Bryk & Raudenbush, Goldstein) 과 표기를 맞추기 위해서. 정규 다수준 분야의 모든 교재와 소프트웨어 (HLM, MLwiN) 가 비표준화 \(\upsilon\) 표기를 쓴다.
즉 같은 모형이라도 보는 각도에 따라 표기가 달라진다:
- 추정 시각 (식 9.24, \(\theta_i, T\)): 적분 친화적. § 9.6 의 Gauss-Hermite 와 직접 연결.
- 다수준 시각 (식 9.31, \(\upsilon\)): 정규 multilevel 문헌과 일관성. 임상 연구자에게 친숙한 표기.
두 표기 모두 같은 모형. \(\upsilon_i = T \theta_i\) 로 변환할 뿐.
2.6 분산 조정의 비대칭 — Snijders-Bosker 효과
정규 (continuous) 다수준 모형:
- Level-1 잔차 분산 \(\sigma_\epsilon^2\) 가 자유 모수 — 데이터에서 추정.
- Level-1 공변량 \(x_{ij}\) 를 추가하면 잔차 분산이 줄어든다 (\(R^2\) 의 다수준 버전). 모형이 더 많은 변동을 설명하므로 자연.
이항 mixed-effects 모형:
- Level-1 잔차 분산 \(\sigma_\epsilon^2\) 가 고정 상수 — logit 은 \(\pi^2/3\), probit 은 \(1\). § 9.4 의 잠재 분산 식별 불가능성 때문.
- Level-1 공변량 \(x_{ij}\) 를 추가해도 잔차 분산이 줄지 않는다 — 줄일 수 없다. 그러면 무슨 일이 일어나는가?
같은 응답 확률 \(P(Y=1)\) 을 만들어내는 잠재 변수의 비율 \(\mu / \sqrt{V}\) 가 보존되어야 한다 (식 9.16 의 도출과 같은 논리). 공변량 \(x_{ij}\) 를 추가해도 데이터의 응답 확률은 변하지 않으므로:
\[ \frac{\mu_{\text{new}}}{\sqrt{V_{\text{new}}}} = \frac{\mu_{\text{old}}}{\sqrt{V_{\text{old}}}} \]
정규 모형: \(V = \sigma_v^2 + \sigma_\epsilon^2\), \(\sigma_\epsilon^2\) 가 자유. → 새 공변량의 \(R^2\) 만큼 \(\sigma_\epsilon^2\) 가 줄어 \(V\) 가 줄고, \(\mu\) 도 비례해 작아질 수 있다 → 회귀 계수와 다른 모수가 안정.
이항 모형: \(V = \sigma_v^2 + (\pi^2/3)\), \(\pi^2/3\) 가 고정. → \(\sigma_\epsilon^2\) 가 줄지 못하므로 분산을 보존하기 위해 다른 양이 변해야 한다. Snijders & Bosker (1999) 가 보인 것:
- 랜덤 효과 분산 \(\sigma_v^2\) 가 커진다 (보통).
- 회귀 계수의 절댓값이 커진다 — 같은 데이터에 더 정교한 모형을 적합했더니 효과 크기가 더 크게 추정되는 역설적 현상.
→ 이항 multilevel 모형에서 공변량 추가 시 회귀 계수가 변하면 “효과가 변한 것” 이 아니라 “분산 척도가 변한 것” 일 가능성을 항상 염두에 두어야 한다. 잠재 분산을 일정한 척도로 환산해 비교하면 효과의 실제 변화 여부가 드러난다.
Snijders-Bosker 효과를 정량화하는 실무 도구:
- Mundlak 분해: \(x_{ij}\) 를 피험자 평균 \(\bar{x}_i\) 와 그로부터의 편차 \(x_{ij} - \bar{x}_i\) 로 분리해 모형에 함께 넣는다. 두 효과가 (within-subject vs between-subject 효과) 명확히 구분된다.
- 잠재 분산 표준화: 각 모형의 \(\sigma_v^2 + \sigma_\epsilon^2\) 로 회귀 계수를 나누어 비교 가능한 척도로 만든다 (Bauer 2009 의 latent-scale 표준화).
- Marginal 효과 환산: 식 (9.16) 의 역방향으로 subject-specific 계수를 marginal 척도로 환산해 모형 간 비교.
3 § 9.5.5 — Response Functions
3.1 식 (9.32) — 통합 표기
mixed-effects logistic 모형의 일반 표현:
\[ p_{ij} = \Psi(x_{ij}^\top \beta + z_{ij}^\top T \theta_i) \tag{9.32} \]
여기서 \(\Psi(z)\) 는 response function (응답 함수). 로지스틱 모형이면 logistic cdf, 프로빗이면 정규 cdf, 보완 로그-로그면 Gumbel cdf.
GLM 은 두 가지 시각으로 정의할 수 있다:
- Link 함수 \(g\): 평균을 선형 예측자로 변환. \(g(\mu) = \eta\). 로지스틱이면 \(g = \text{logit}\).
- Response function \(\Psi\): 선형 예측자를 평균으로 변환. \(\mu = \Psi(\eta)\). 로지스틱이면 \(\Psi = \text{logistic cdf}\).
두 함수는 서로의 역함수: \(\Psi = g^{-1}\). 어느 시각으로 모형을 보느냐의 차이일 뿐 본질은 같다.
식 (9.32) 의 표기가 강조하는 것 — 모든 mixed-effects logistic 변형 (logit, probit, c-log-log) 이 \(\Psi\) 의 선택만 바뀐 같은 framework. 회귀 구조 (선형 예측자 \(x^\top \beta + z^\top T \theta\)) 는 동일.
3.2 식 (9.33) — Logistic CDF 와 PDF 의 단순한 관계
표준 logistic cdf:
\[ \Psi(z) = \frac{\exp(z)}{1 + \exp(z)} = \frac{1}{1 + \exp(-z)} \tag{9.33} \]
PDF 는 cdf 의 도함수:
\[ \psi(z) = \Psi(z) [1 - \Psi(z)] \]
\(\psi = \Psi (1 - \Psi)\) 라는 미분 성질은 logistic 분포의 가장 매력적인 수학적 특징. 이 한 식이 mixed-effects logistic 의 추정·해석을 매우 간단하게 만든다.
활용 예 1 — Score 함수의 단순한 형태: ML 추정의 score 식 (9.7) 에서 \(\partial \log L / \partial \beta\) 를 계산할 때 cdf 의 도함수가 필요하다. 일반 분포라면 chain rule 로 복잡하지만, logistic 은 \(\Psi (1-\Psi) = p(1-p)\) 형태로 단순. 결과적으로:
\[ \frac{\partial \log L}{\partial \beta} = \sum_i (y_i - p_i) x_i \]
이 깔끔한 형태가 IRLS (iteratively reweighted least squares) 알고리즘을 가능하게 한다.
활용 예 2 — Hessian 의 단순한 형태: Fisher 정보 행렬도 \(\Psi (1-\Psi) = p(1-p)\) 가중 합으로 표현. 추정의 표준오차 계산이 단순.
활용 예 3 — 잠재 변수 분산의 정확한 값: 표준 logistic 분포의 분산이 \(\pi^2/3\) 이라는 사실도 cdf-pdf 관계의 적분으로 유도. 이 값이 logit 모형의 ICC 분모를 결정 (§ 9.5.1).
다른 분포들 (정규, Gumbel) 도 cdf-pdf 관계가 있지만 logistic 만큼 깔끔하지 않다. 정규는 \(\phi(z)\) 가 \(\Phi(z)\) 와 단순한 함수 관계가 없어 (오류 함수 erf 가 필요), 수치 계산에 quadrature 가 필요.
3.3 Probit Response Function — 정규 잠재 변수의 자연 추론
식 (9.32) 에서 \(\Psi = \Phi\) (표준 정규 cdf) 로 두면:
\[ p_{ij} = \Phi(x_{ij}^\top \beta + z_{ij}^\top T \theta_i) \]
\(\epsilon_{ij} \sim \mathcal{N}(0, 1)\). 잠재 변수 벡터 \(y_i = (y_{i1}, \ldots, y_{in_i})^\top\) 의 다변량 정규 분포:
\[ y_i \sim \mathcal{N}_{n_i}(X_i \beta, \, Z_i T T^\top Z_i^\top + I) \]
강점 1 — 잠재 변수 분포의 닫힌 형태: probit 모형의 잠재 변수가 다변량 정규 라는 사실은 logit 에는 없다. logit 의 잠재 변수는 다변량 logistic 인데, 다변량 logistic 의 정의 자체가 모호하고 (한 개의 표준 형태가 없음) 추가 분석이 어렵다. 정규는 다변량 분포가 잘 정의되어 있어 자연.
강점 2 — Tetrachoric/Polychoric correlation 의 직접 산출: 잠재 변수의 분산-공분산 행렬
\[ \text{Var}(y_i) = Z_i T T^\top Z_i^\top + I \]
을 상관 행렬로 환산하면 잠재 정규 변수 사이의 상관계수 — 두 이항 변수가 가지는 잠재 정규 변수의 상관, 즉 tetrachoric correlation. 순서형 반응 (Ch.10) 으로 확장하면 polychoric correlation.
이 두 종류의 상관계수는 정의상 정규 잠재 변수에 기반하므로 probit 에서 자연. logit 에서는 잠재 변수가 logistic 이라 tetrachoric/polychoric 의 정확한 정의에서 벗어난다.
왜 가족 연구·유전학에서 probit 을 선호하는가: 형질의 유전 모형이 정규 잠재 변수를 가정하는 전통이 강하고, tetrachoric correlation 이 곧바로 heritability 추정의 입력이 된다 (§ 9.5.3 의 쌍둥이 분석과 직접 연결).
3.4 Logistic/Normal vs Normal/Normal — 모형의 분류
잠재 변수 모형 (식 9.30) 에서 두 분포의 조합이 모형을 결정:
| 잔차 \(\epsilon\) 분포 | 랜덤 효과 \(\upsilon\) 분포 | 모형 명 | 별칭 |
|---|---|---|---|
| Logistic | Normal | Mixed-effects logistic | Logit/normit, Logistic/normal |
| Normal | Normal | Mixed-effects probit | Normal/normal |
| Gumbel | Normal | Mixed-effects c-log-log | (별칭 없음) |
잔차 \(\epsilon_{ij}\): 잠재 변수의 피험자 내 잔차 잡음. 측정 오차, 환경 변동, 측정되지 않은 시변 요인 등의 합.
랜덤 효과 \(\upsilon_i\): 잠재 변수의 피험자 간 변동. 측정되지 않은 환자 고유 특성의 합.
두 분포는 다른 종류의 변동을 모형화하므로 이론적으로 서로 다른 분포를 가질 수 있다. 실무에서는:
- \(\epsilon_{ij}\) 의 분포가 모형 link 를 결정 (logistic ↔︎ logit, normal ↔︎ probit, Gumbel ↔︎ c-log-log).
- \(\upsilon_i\) 의 분포는 거의 항상 정규 (계산 편의 + Cholesky 분해 활용).
logit + normal 조합 (“logit/normit”) 이 가장 흔한 이유: logistic 잔차의 단순한 cdf-pdf 관계 + 정규 랜덤 효과의 Gauss-Hermite 적분 친화성. 두 장점의 결합.
대안적으로 \(\upsilon_i\) 를 다른 분포 (예: t 분포로 robust 처리, 비모수 분포로 free shape) 로 확장하는 모형도 존재하지만 (Verbeke & Lesaffre 1996), 추정 비용이 크고 해석 이득이 미미해 실무 표준은 정규.
3.5 식 (9.34-9.35) — Complementary Log-Log Response Function
\[ p_{ij} = 1 - \exp[-\exp(x_{ij}^\top \beta + z_{ij}^\top T \theta_i)] \tag{9.34} \]
식 (9.35) — link 형태 (양변에 \(\log[-\log(1-\cdot)]\) 적용):
\[ \log[-\log(1 - p_{ij})] = x_{ij}^\top \beta + z_{ij}^\top T \theta_i \tag{9.35} \]
complementary log-log link 는 logistic, probit 와 본질적으로 다른 분포에서 나온다. 잠재 변수 잔차가 표준 Gumbel (extreme value) 분포 — 비대칭, 분산 \(\pi^2/6 \approx 1.645\), 음의 왜도.
\(\Psi(z) = 1 - \exp[-\exp(z)]\) 는 표준 Gumbel cdf. PDF 는 \(\exp(z) \exp[-\exp(z)] = \exp(z)(1 - p(z))\).
실무적 의미는 생존 분석 맥락에서 가장 명확하다. “이산 시간 비례 위험 모형 (Discrete-Time Proportional Hazards)” 의 link 가 정확히 complementary log-log:
- 연속 시간 비례 위험: \(h(t \mid x) = h_0(t) \exp(x^\top \beta)\).
- 이산 시간 (예: 매 기간 사건 발생 여부 이항 변수): “이 기간에 사건이 일어날 조건부 확률” \(p_{ij}\) 를 위험률로 간주.
- 두 모형이 수학적으로 동등 하려면 \(\log[-\log(1 - p_{ij})] = \alpha_t + x^\top \beta\) 형태 (Allison 1995, Hedeker et al. 2000). 이것이 식 (9.35).
→ 이산 시간 종단 데이터에 비례 위험 해석을 적용하고 싶으면 c-log-log link 가 필수. logit 이나 probit 으로는 비례 위험 가정이 어긋난다.
logistic 과 정규는 0 을 중심으로 대칭. 그래서 \(P(Y=1) = 0.5\) 인 점 (\(x^\top \beta = 0\)) 의 양쪽에서 cdf 가 대칭. \(P(Y=1)\) 이 0 에 가까운 영역과 1 에 가까운 영역의 곡선 모양이 거울 대칭.
complementary log-log 는 비대칭 — \(P(Y=1) = 1 - 1/e \approx 0.632\) 인 점이 분포의 중앙. 0 에 가까운 영역 (low probability) 에서는 천천히 증가하고, 1 에 가까운 영역 (high probability) 에서는 빠르게 증가.
생존 분석에서 비대칭이 자연스러운 이유: “사건 발생까지 시간” 의 분포는 보통 비대칭 (대부분 사건이 비교적 일찍 일어나고 일부가 매우 늦게 일어나는 long-tail). 사건 위험률을 모형화하는 link 도 비대칭이 더 적합.
| 항목 | Logit (logistic) | Probit (normal) | C-log-log (Gumbel) |
|---|---|---|---|
| Response function | \(1 / (1 + e^{-z})\) | \(\Phi(z)\) | \(1 - \exp[-\exp(z)]\) |
| Link function | \(\log[p / (1-p)]\) | \(\Phi^{-1}(p)\) | \(\log[-\log(1-p)]\) |
| 잠재 분산 | \(\pi^2/3 \approx 3.29\) | \(1\) | \(\pi^2/6 \approx 1.645\) |
| 대칭성 | 대칭 | 대칭 | 비대칭 |
| 변곡점 위치 | \(p = 0.5\) | \(p = 0.5\) | \(p \approx 0.632\) |
| Cdf-pdf 관계 | \(\psi = \Psi(1-\Psi)\) 단순 | erf 필요, 비단순 | \(\psi = e^z (1-p)\) 단순 |
| 잠재 변수 분포 | Logistic | Normal | Gumbel |
| 다변량 잠재 분포 | 모호 | MVN | EV-Copula |
| 강점 | 추정 단순, OR 해석 | Tetrachoric, 정규 잠재 | 비례 위험 |
| 응용 분야 | 일반 의학, 마케팅 | 가족·유전, 심리 측정 | 이산 시간 생존 |
세 link 모두 mixed-effects 구조 (식 9.32) 위에서 동일하게 작동 — 추정 알고리즘과 해석 방식만 약간씩 다르다.
3.6 Mixed-Effects Probit 의 자리
Hedeker 책은 mixed-effects logistic 에 집중하지만 probit 도 같은 framework. 본 chapter 에서 logit 을 우선하는 이유:
- OR 해석의 단순함: \(\exp(\beta)\) 가 odds ratio. 임상·역학 연구자에게 가장 친숙한 효과 측정.
- Cdf-pdf 관계의 단순함: 추정 알고리즘이 더 직관적.
- 동등한 결과: 두 모형의 결론이 사실상 같음 (척도 차이만 있음).
probit 의 응용은 § 9.5.3 (쌍둥이 tetrachoric) 과 같은 특수 분야. 일반 mixed-effects 분석이라면 logit 으로 충분 — 결과 해석에서 차이가 없다.
자세한 mixed-effects probit 응용은 Gibbons & Hedeker (1994), Gibbons et al. (1994) 참조.
4 응용 분야
| 분야 | 활용 link | 활용 이유 |
|---|---|---|
| 임상 RCT 종단 분석 | Logit | OR 해석, 연구자 친숙성 |
| 행동 유전학 (쌍둥이) | Probit | Tetrachoric correlation 직접 산출, heritability 입력 |
| 교육 측정 (IRT) | Logit (Rasch, 2PL) 또는 Probit | 잠재 능력 척도 해석 |
| 이산 시간 생존 분석 | Complementary log-log | 비례 위험 가정 보존 (Allison 1995) |
| 사회 조사 (다수준) | Logit | 회귀 계수 OR 해석, HLM 표준 |
| 마케팅 (구매 여부) | Logit (또는 Probit) | 효용 모형 (random utility) 해석 |
5 코드 예시
5.1 Step 1: 세 가지 link 의 cdf 비교
import numpy as np
from scipy.stats import norm, logistic
import matplotlib.pyplot as plt
def logit_response(z: np.ndarray) -> np.ndarray:
"""Logistic cdf — 식 (9.33)."""
return 1.0 / (1.0 + np.exp(-z))
def probit_response(z: np.ndarray) -> np.ndarray:
"""Normal cdf."""
return norm.cdf(z)
def cloglog_response(z: np.ndarray) -> np.ndarray:
"""Complementary log-log — 식 (9.34) 의 oneargument 버전."""
return 1.0 - np.exp(-np.exp(z))
# z 범위
z = np.linspace(-4, 4, 200)
# 세 cdf 비교
plt.figure(figsize=(9, 5))
plt.plot(z, logit_response(z), label="Logit", linewidth=2)
plt.plot(z, probit_response(z), label="Probit", linewidth=2)
plt.plot(z, cloglog_response(z), label="C-log-log", linewidth=2)
plt.axhline(0.5, color="gray", linestyle=":", alpha=0.5)
plt.axvline(0, color="gray", linestyle=":", alpha=0.5)
plt.xlabel("Linear predictor z")
plt.ylabel("P(Y=1)")
plt.title("Response Functions of Three Link Choices")
plt.legend()
plt.tight_layout()
# 변곡점 (z=0) 에서의 확률 — c-log-log 의 비대칭 확인
print(f"P(Y=1) at z=0:")
print(f" Logit: {logit_response(0):.4f}")
print(f" Probit: {probit_response(0):.4f}")
print(f" C-log-log: {cloglog_response(0):.4f}")
print(f"\nC-log-log 의 P=0.5 를 만드는 z = {np.log(np.log(2)):.4f}")z = 0에서 logit·probit 은 \(P = 0.5\) — 대칭의 결과.z = 0에서 c-log-log 는 \(P = 1 - 1/e \approx 0.632\) — 비대칭.- c-log-log 가 \(P = 0.5\) 가 되는 점은 \(z = \log(\log 2) \approx -0.367\) — 분포의 중앙이 음수 영역에 있음.
비대칭이 가져오는 실무 영향: 같은 회귀 계수라도 c-log-log 의 효과 크기가 logit·probit 보다 직관적으로 다르게 보임. 임상시험에서 c-log-log 를 쓸 때는 link 의 비대칭을 명시적으로 설명해야 한다.
5.2 Step 2: Logistic CDF-PDF 의 단순한 미분 성질 검증
import numpy as np
def Psi(z: np.ndarray) -> np.ndarray:
"""Logistic cdf."""
return 1.0 / (1.0 + np.exp(-z))
def psi_via_relation(z: np.ndarray) -> np.ndarray:
"""식 (9.33) 의 관계: psi(z) = Psi(z) * (1 - Psi(z))."""
p = Psi(z)
return p * (1 - p)
def psi_via_numerical_derivative(z: np.ndarray, h: float = 1e-5) -> np.ndarray:
"""수치 미분으로 cdf 의 도함수 계산 — 검증용."""
return (Psi(z + h) - Psi(z - h)) / (2 * h)
# 두 방법의 결과 비교 — 일치해야 함
z_test = np.linspace(-3, 3, 7)
analytic = psi_via_relation(z_test)
numerical = psi_via_numerical_derivative(z_test)
print("z | Psi(z)*(1-Psi(z)) | numerical d/dz Psi(z) | diff")
print("-" * 70)
for i, z in enumerate(z_test):
print(f"{z:+.2f} | {analytic[i]:.6f} "
f"| {numerical[i]:.6f} | {abs(analytic[i] - numerical[i]):.2e}")두 방법의 결과가 소수점 5-6 자리까지 일치 → 식 (9.33) 의 \(\psi = \Psi(1-\Psi)\) 가 정확히 성립.
이 단순한 형태가 logistic 모형의 score 함수와 Hessian 을 닫힌 형태로 표현 가능하게 만든다. 정규 (probit) 의 \(\phi(z)\) 는 cdf 와 단순한 곱셈 관계가 없어 (Mill’s ratio 같은 더 복잡한 관계만 존재) 추정에서 항상 numeric integration 이 필요.
→ logit 이 probit 보다 추정에서 더 효율적인 근본적 이유.
5.3 Step 3: Multilevel form 시뮬레이션 (식 9.29-9.31)
import numpy as np
import pandas as pd
def simulate_multilevel_binary(n_subjects: int, n_times: int,
beta0: float, beta1: float,
beta2: float, beta3: float,
sigma_v0: float, sigma_v1: float,
rho: float = -0.3,
seed: int = 2026) -> pd.DataFrame:
"""식 (9.29-9.31) 의 multilevel form 으로 종단 이항 데이터 생성.
Level-1 (식 9.29): logit(p_ij) = beta_0i + beta_1i * x_ij
Level-2 (식 9.31): beta_0i = beta_0 + beta_2 * x_i + v_0i
beta_1i = beta_1 + beta_3 * x_i + v_1i
"""
rng = np.random.default_rng(seed)
# 피험자별 랜덤 효과 (이변량 정규)
Sigma_v = np.array([[sigma_v0 ** 2, rho * sigma_v0 * sigma_v1],
[rho * sigma_v0 * sigma_v1, sigma_v1 ** 2]])
v = rng.multivariate_normal(mean=[0, 0], cov=Sigma_v, size=n_subjects)
rows = []
for i in range(n_subjects):
x_i = rng.binomial(1, 0.5) # 피험자 공변량 (예: treat group)
# 피험자별 절편·기울기 (식 9.31)
beta_0i = beta0 + beta2 * x_i + v[i, 0]
beta_1i = beta1 + beta3 * x_i + v[i, 1]
for j in range(n_times):
x_ij = j # level-1 공변량 (예: 시간)
# 식 (9.29)
eta = beta_0i + beta_1i * x_ij
p = 1.0 / (1.0 + np.exp(-eta))
y = rng.binomial(1, p)
rows.append({"subject": i, "time": x_ij, "treat": x_i,
"y": y, "v0": v[i, 0], "v1": v[i, 1]})
return pd.DataFrame(rows)
# 시뮬레이션
df = simulate_multilevel_binary(
n_subjects=200, n_times=5,
beta0=-1.0, # 평균 baseline log-odds
beta1=0.3, # 평균 시간 추세
beta2=0.5, # 처치가 절편에 미치는 효과 (main effect)
beta3=0.4, # 처치가 기울기에 미치는 효과 (cross-level interaction)
sigma_v0=1.0, # 절편 SD
sigma_v1=0.4, # 기울기 SD
rho=-0.3 # 절편-기울기 상관
)
print(f"데이터 크기: {len(df)} 행")
print(f"\n그룹별 응답률:")
print(df.groupby(["treat", "time"])["y"].mean().unstack())
print(f"\n랜덤 효과 추출 (피험자 5 명):")
print(df.drop_duplicates("subject").head()[["subject", "treat", "v0", "v1"]])- Main effect (\(\beta_2\)): treat=1 그룹이 모든 시점에서 응답률이 더 높아야 한다.
- Cross-level interaction (\(\beta_3\)): treat=1 그룹의 시간에 따른 응답률 증가 속도가 treat=0 보다 빠르다.
- 랜덤 효과: 피험자별 \(v_0, v_1\) 가 정규 분포에서 추출됨.
이 시뮬레이션으로 multilevel form 의 모수가 어떻게 reduced form 으로 결합되는지 확인. 적합 시 reduced form 으로 표기되는 statsmodels 출력에서 treat (= \(\beta_2\)), time (= \(\beta_1\)), treat:time (= \(\beta_3\)) 으로 분해된 결과를 확인할 수 있다.
5.4 Step 4: 세 link 적합 비교 — 같은 데이터, 다른 결과 (statsmodels)
import numpy as np
import pandas as pd
import statsmodels.api as sm
# 단순 cross-sectional 이항 데이터 생성 (multilevel 없이 link 비교 목적)
rng = np.random.default_rng(2026)
n = 1000
x = rng.normal(size=n)
true_beta = 0.8
# 진짜 모형은 logit
p_true = 1.0 / (1.0 + np.exp(-(0.5 + true_beta * x)))
y = rng.binomial(1, p_true)
X = sm.add_constant(x)
# 세 link 적합
fit_logit = sm.GLM(y, X, family=sm.families.Binomial(
link=sm.families.links.Logit())).fit()
fit_probit = sm.GLM(y, X, family=sm.families.Binomial(
link=sm.families.links.Probit())).fit()
fit_cloglog = sm.GLM(y, X, family=sm.families.Binomial(
link=sm.families.links.CLogLog())).fit()
print("Link 별 회귀 계수 (intercept, slope):")
print(f" Logit: {fit_logit.params.round(3).tolist()}")
print(f" Probit: {fit_probit.params.round(3).tolist()}")
print(f" C-log-log: {fit_cloglog.params.round(3).tolist()}")
# 잠재 분산으로 표준화 (척도 통일)
sigma_logit = np.pi / np.sqrt(3)
sigma_probit = 1.0
sigma_cloglog = np.pi / np.sqrt(6)
print(f"\n표준화된 slope (slope / sigma):")
print(f" Logit: {fit_logit.params[1] / sigma_logit:.3f}")
print(f" Probit: {fit_probit.params[1] / sigma_probit:.3f}")
print(f" C-log-log: {fit_cloglog.params[1] / sigma_cloglog:.3f}")원래 회귀 계수는 link 에 따라 다르다 — 진짜 효과의 크기가 다른 것이 아니라 잠재 변수 척도가 다른 것.
표준화 (slope를 잠재 분산으로 나눔) 후에는 세 결과가 거의 같다. 이것이 § 9.5.5 의 핵심 통찰: 세 link 가 본질적으로 같은 효과를 다른 척도로 표현.
logit 과 probit 의 비율 ≈ \(\pi/\sqrt{3} \approx 1.81\) (식 9.12). c-log-log 와 logit/probit 의 비교는 비대칭 때문에 단순 비율로 환산되지 않지만 잠재 분산으로 표준화하면 효과 크기가 비슷해진다.
6 관련 주제
선행 지식
- § 9.5.1-9.5.3 — Mixed-effects logistic 모형 정의, ICC, Cholesky, 이질 분산
- § 9.4 — Threshold concept (잠재 변수 framework)
- § 4.2-4.3 — 정규 다수준 모형의 multilevel form (구조적 등가물)
후속 주제
- § 9.6 — Marginal MLE 추정과 Gauss-Hermite quadrature (logistic CDF-PDF 단순 관계의 활용)
- § 9.7-9.10 — 추정 세부 (Newton-Raphson, Fisher scoring, EM)
- § 9.11 — Subject-specific vs population-averaged 효과의 정량 비교 (식 9.16 의 활용)
- Ch.10 GLMM 순서형 — 누적 logit 으로의 확장, polychoric correlation
- 이산 시간 비례 위험 모형 — c-log-log link 의 생존 분석 응용
관련 개념
- GEE (Ch.8) — Marginal vs subject-specific 의 다른 한쪽
- mm-06 GLMM 이진 — AI Agent 비즈니스 예시 직관
- HLM (Bryk & Raudenbush) — 다수준 모형의 정규 multilevel 표기 표준
- Snijders & Bosker (1999) — 잠재 분산 고정의 다수준 모형 효과
- Allison (1995), Hedeker et al. (2000) — 이산 시간 비례 위험 모형의 c-log-log 도출