1 들어가며 — 10-0 overview 의 두 핵심 식의 깊이
Ch.10 Overview (10-0) 에서 cumulative logit (식 10.1) 과 비례 오즈 가정 (Figure 10.2) 의 큰 그림을 제시했다. 본 sub-post 는 같은 두 식을 정량적·시각적으로 깊이 있게 분석하고, 비례 오즈 가정이 깨질 때의 처리 (§ 10.2.1 partial proportional odds) 를 다룬다.
“§ 10.2 = cumulative logit (식 10.1) 의 두 핵심 — 부호 관행 (양의 \(\beta\) = 응답 ↑) + 비례 오즈 가정 (회귀 계수가 \(c\) 무관). Figure 10.2 의 수치 풀이로 두 그룹의 logit 평행 이동 (\(x = 0\): -1, 1 / \(x = 1\): -0.5, 1.5) 시연. § 10.2.1 = Peterson-Harrell 의 비례 위반에 대한 처리. 식 (10.7) 의 partial proportional odds 모형으로 일부 공변량 (\(u\)) 만 범주 가변 효과 (\(\alpha_c\)) 허용. 결정적 caveat: 연속 공변량의 \(\alpha_c\) 가 다르면 회귀선이 데이터 범위 안에서 교차 → 음의 확률·절단점 순서 위반. 실무에서 이항 변수만 비례 위반 허용, 연속은 dummy 로 분할 또는 비선형 response.”
2 § 10.2 — Cumulative Logit 모형의 깊이
2.1 부호 관행 — 식 (10.1) vs 식 (10.6)
식 (10.1) — 의학·심리 관행:
\[ \log \left[ \frac{P_{ijc}}{1 - P_{ijc}} \right] = \gamma_c - [x_{ij}^\top \beta + z_{ij}^\top T \theta_i] \tag{10.1} \]
식 (10.6) — 생존분석 관행:
\[ \log \left[ \frac{P_{ijc}}{1 - P_{ijc}} \right] = \gamma_c + x_{ij}^\top \beta + z_{ij}^\top T \theta_i \tag{10.6} \]
식 (10.1) 의 \(-[x^\top \beta]\) 부호 선택의 직관:
cumulative logit 의 정의 — \(P_{ijc} = P(Y \leq c)\) 의 logit. \(P(Y \leq c)\) 가 줄어든다 = \(P(Y > c)\) 가 늘어난다 = 응답이 더 큰 범주로 이동.
\(\beta > 0\) 일 때 식 (10.1):
- \(x^\top \beta\) 증가 → \(\gamma_c - x^\top \beta\) 감소 → cumulative logit 감소.
- → \(P(Y \leq c)\) 감소 → \(P(Y > c)\) 증가.
- → 응답이 위로 이동.
즉 “\(\beta > 0\) = 양의 효과 = 응답 위로”. 직관적이고 다른 GLM (이항 logistic, 정규 회귀) 의 부호 관행과 일치.
식 (10.6) 의 \(+x^\top \beta\) 부호 선택:
- \(\beta > 0\) → cumulative logit 증가 → \(P(Y \leq c)\) 증가 → 응답이 아래로 이동.
- “\(\beta > 0\) = 응답 아래로” — 직관 반대.
왜 생존 분석에서는 식 (10.6) 을 쓰는가: 생존 시점이 응답일 때 “사건 발생 빨라짐” 이 임상적으로 중요. cumulative 방향 (\(Y \leq c\) = 시점 \(c\) 까지 사건 발생) 으로 양의 효과 정의가 직관적.
→ 분야별 관행 차이. 본 sub-post 와 Ch.10 본문은 식 (10.1) 사용.
2.2 절단점 식별 가능성
식 (10.1) 에서 모든 \(\gamma_c\) + 절편 \(\beta_0\) 를 자유 추정하면 잠재 변수의 위치 식별 불가능:
- \(\gamma_c \to \gamma_c + \delta\) + \(\beta_0 \to \beta_0 + \delta\) 의 평행 이동이 모든 \(P(Y = c)\) 를 똑같이 유지.
- → 모형이 비식별 (non-identified).
§ 9.4 에서 본 잠재 변수 분산의 식별 불가능성과 평행. 위치도 같은 종류의 문제.
선택 1 — \(\gamma_1 = 0\) 으로 고정, 절편 \(\beta_0\) 자유 추정:
- 첫 절단점을 0 으로 고정.
- 다른 절단점 \(\gamma_2, \ldots, \gamma_{C-1}\) 자유 추정.
- 자유 모수 = 절편 1 + 절단점 (\(C-2\)) = \(C-1\) 개.
3 범주 사례 (\(\gamma_1 = 0\) 고정, \(\gamma_2 = 2\) 추정, $_0 = $ 자유):
- \(-\beta_0\) = 첫 범주에 응답 odds 의 log.
- \(\gamma_2 - \beta_0\) = 첫 두 범주 합 vs 셋째 범주 odds 의 log.
선택 2 — \(\beta_0 = 0\) 으로 고정, 모든 절단점 \(\gamma_c^*\) 자유 추정:
- 절편 0 으로 고정 (회귀 부분에서 절편 제거).
- 모든 절단점 \(\gamma_1^*, \ldots, \gamma_{C-1}^*\) 자유 추정.
- 자유 모수 = 절단점 \(C-1\) 개. 같음.
두 표기의 일대일 대응:
\[ \gamma_c^* = \gamma_c - \beta_0 \]
→ 같은 모형의 다른 표기. R ordinal::clmm, Stata meologit 등은 보통 선택 2 사용 (Threshold coefficients 라벨).
2.3 Threshold Concept — Figure 10.1 의 깊이
3 범주 응답 + 2 절단점 (\(\gamma_1, \gamma_2\)):
- 잠재 변수 \(y\): 직접 관찰 불가, 연속.
- 관측 규칙: \(Y = c \iff \gamma_{c-1} \leq y < \gamma_c\) (단, \(\gamma_0 = -\infty\), \(\gamma_C = \infty\)).
- 잠재 변수의 분포 — 표준 logistic (logit 모형) 또는 표준 정규 (probit 모형).
Figure 10.1 의 핵심 메시지: 두 잠재 분포 (정규 vs logistic) 가 거의 동일. 평균 0, 분산 다름 (정규 = 1, logistic = \(\pi^2/3 \approx 3.29\)). 표준화하면 거의 구분 불가.
이 사실이 logit vs probit ordinal 모형의 결론이 거의 같은 이유 — 잠재 변수 분포의 형태 차이가 미미. § 9.5.5 의 logit-probit 비교 (식 9.12 의 \(\beta_L \approx 1.81 \beta_P\)) 가 ordinal 에도 적용.
범주 확률의 산출:
각 범주 확률 = 잠재 분포의 절단점 사이 면적:
\[ P(Y = c) = P(\gamma_{c-1} \leq y < \gamma_c) = \Psi(\gamma_c - x^\top \beta) - \Psi(\gamma_{c-1} - x^\top \beta) \]
3 범주 + 표준 logistic + \(x^\top \beta = 0\) + \(\gamma_1 = -1, \gamma_2 = 1\):
\[ P(Y = 1) = \Psi(-1) - 0 = 0.269 \] \[ P(Y = 2) = \Psi(1) - \Psi(-1) = 0.731 - 0.269 = 0.462 \] \[ P(Y = 3) = 1 - \Psi(1) = 0.269 \]
→ 3 범주의 확률이 (0.27, 0.46, 0.27) — 절단점이 대칭이라 양 끝 범주 확률이 같음.
\(x^\top \beta = 0.5\) 가 추가되면 잠재 분포가 오른쪽으로 0.5 이동:
\[ P(Y = 1) = \Psi(-1 - 0.5) = \Psi(-1.5) = 0.182 \] \[ P(Y = 2) = \Psi(1 - 0.5) - \Psi(-1.5) = \Psi(0.5) - 0.182 = 0.622 - 0.182 = 0.440 \] \[ P(Y = 3) = 1 - \Psi(0.5) = 1 - 0.622 = 0.378 \]
→ 양의 효과로 더 큰 범주 (3) 에 확률 이동. 식 (10.1) 의 부호 관행 직접 확인.
2.4 Proportional Odds 가정의 시각화 — Figure 10.2
3 범주 + 단일 이항 공변량 (\(x \in \{0, 1\}\)) + \(\gamma_1 = -1, \gamma_2 = 1, \beta_1 = -0.5\) (식 10.1 의 부호로 \(-(-0.5) = +0.5\) 효과).
두 cumulative logit:
\[ \log[P(Y \leq 1) / P(Y \geq 2)] = \gamma_1 - x \beta_1 \] \[ \log[P(Y \leq 2) / P(Y = 3)] = \gamma_2 - x \beta_1 \]
| 그룹 | \(\text{logit}_1 = \gamma_1 - x\beta_1\) | \(\text{logit}_2 = \gamma_2 - x\beta_1\) |
|---|---|---|
| \(x=0\) | \(-1 - 0 = -1\) | \(1 - 0 = 1\) |
| \(x=1\) | \(-1 - (-0.5) = -0.5\) | \(1 - (-0.5) = 1.5\) |
표의 두 행 (그룹 \(x = 0, 1\)) 비교:
- 첫 cumulative logit (\(P(Y \leq 1)\)): -1 → -0.5 (+0.5 변화).
- 둘째 cumulative logit (\(P(Y \leq 2)\)): 1 → 1.5 (+0.5 변화).
- → 두 logit 이 같은 +0.5 만큼 평행 이동.
이것이 비례 오즈의 시각적 정의. logit 척도에서 두 그룹의 회귀선이 평행.
확률 척도에서는 평행 아님 (Figure 10.2 의 위쪽 그림):
| 범주 | \(x = 0\) 의 확률 | \(x = 1\) 의 확률 |
|---|---|---|
| \(Y = 1\) | \(\Psi(-1) = 0.269\) | \(\Psi(-0.5) = 0.378\) |
| \(Y = 2\) | \(\Psi(1) - \Psi(-1) = 0.462\) | \(\Psi(1.5) - \Psi(-0.5) = 0.440\) |
| \(Y = 3\) | \(1 - \Psi(1) = 0.269\) | \(1 - \Psi(1.5) = 0.182\) |
각 범주의 확률 변화가 다름:
- \(Y = 1\): 0.269 → 0.378 (+0.109).
- \(Y = 2\): 0.462 → 0.440 (-0.022).
- \(Y = 3\): 0.269 → 0.182 (-0.087).
확률 척도의 비대칭이 logit 척도의 평행성과 양립하는 이유 — logit cdf 가 비선형이라 같은 logit 변화가 다른 확률 변화를 만들어냄. 양 끝에서 변화가 크고 중간에서 작음.
OR 의 절단점 무관성 검증:
\(P(Y \leq 1)\) 의 OR (\(x=1\) vs \(x=0\)):
\[ OR_1 = \frac{0.378 / 0.622}{0.269 / 0.731} = \frac{0.608}{0.368} = 1.65 \]
\(P(Y \leq 2)\) 의 OR:
\[ OR_2 = \frac{0.818 / 0.182}{0.731 / 0.269} = \frac{4.495}{2.717} = 1.65 \]
두 OR 가 정확히 같음! (\(1.65 = e^{0.5} = e^{-(-0.5)}\).) 비례 오즈의 가장 강력한 검증 — odds ratio 가 절단점 선택과 무관.
2.5 Multilevel Form 의 Cross-Level Interaction
Level-1: \(\log[P_{ijc}/(1-P_{ijc})] = \gamma_c - [b_{0i} + b_{1i} x_{ij}]\)
Level-2: \(b_{0i} = \beta_0 + \beta_2 x_i + \upsilon_{0i}\), \(b_{1i} = \beta_1 + \beta_3 x_i + \upsilon_{1i}\)
대입:
\[ \log[P_{ijc}/(1-P_{ijc})] = \gamma_c - [\beta_0 + \beta_2 x_i + \beta_1 x_{ij} + \beta_3 (x_i \cdot x_{ij}) + \upsilon_{0i} + \upsilon_{1i} x_{ij}] \]
NIMH 같은 RCT 맥락에서:
- \(\beta_0\): 평균 환자 (\(x_i = 0\), placebo) 의 baseline (\(x_{ij} = 0\)) 잠재 중증도. 절단점과 함께 baseline 응답 비율 결정.
- \(\beta_1\): placebo 환자의 시간 추세 (\(x_{ij}\) = 시간).
- \(\beta_2\): drug (\(x_i = 1\)) 의 baseline 절편 차이 — RCT randomization 이 잘 됐으면 0.
- \(\beta_3\): drug × time cross-level interaction — 약효의 차등 효과. 임상적 핵심.
→ Ch.9 의 NIMH 분석과 동일한 해석 framework. 차이는 응답이 0/1 → 1, 2, 3, 4 로 더 풍부.
비례 오즈의 의미 — 같은 \(\beta\) 가 모든 절단점에 작용:
- Drug × Time 효과 \(\beta_3\) 가 “moderate or worse” vs “mild or better” 절단점에서도, “severe” vs “less severe” 절단점에서도 같은 크기.
- 즉 약효가 모든 중증도에 일관되게 작용.
이 가정이 깨지면? — 약효가 가벼운 환자에게는 큰 효과, 심한 환자에게는 작은 효과 (또는 반대) 같은 비대칭. → § 10.2.1 partial proportional odds 가 처리.
3 § 10.2.1 — Partial Proportional Odds
3.1 동기 — Peterson-Harrell 의 위반 사례
Peterson & Harrell (1990) 의 핵심 관찰:
“examples of nonproportional odds are not difficult to find.”
(비례 오즈 가정 위반 사례를 찾기 어렵지 않다.)
흔한 위반 패턴:
- 약물 효과의 비대칭: “가벼운 증상은 잘 듣지만 심한 증상에는 효과 없음” (또는 반대).
- 인구학적 변수의 범주 가변 효과: 성별이 만족도 (“불만족-중립-만족”) 의 절단점 1 (“매우 불만족 vs 그 외”) 에는 큰 효과, 절단점 2 (“매우 만족 vs 그 외”) 에는 작은 효과.
- 시간 효과의 비례 위반: 호전이 가벼운 단계에는 빠르고 심한 단계에는 느림.
- Section 8 certificate (§ 10.4 NIMH 노숙자 데이터): independent housing 으로의 진행에는 유의 효과, community vs street 비교에는 효과 없음.
비례 오즈는 매우 강한 가정 — “공변량 효과가 모든 절단점에서 정확히 같다”. 임상·사회 현실에서:
- 효과 크기가 응답 척도의 어느 부분에서 더 크냐는 응답 변수의 본질적 특성.
- “약효가 어떤 환자군에 더 잘 듣는가” 는 거의 모든 약물에 적용되는 질문.
- → 비례 가정이 정확히 성립하는 경우가 오히려 드물다.
그러나 비례 가정이 근사적으로 성립 하는 경우는 흔하다 — 위반 정도가 작으면 모형의 해석은 살아있고 추정 안정성도 좋음. 강한 위반만 partial proportional odds 가 필요.
검정 권고:
- LR test: proportional vs partial proportional 모형의 deviance 비교.
- Brant test (R
MASS패키지): 각 공변량별 비례 오즈 검정. - 시각적: 절단점별로 별도 이항 logit 적합 후 OR 비교 (10-0 의 코드 Step 3 참조).
3.2 모형 정의 — 식 (10.7)
\[ \log \left[ \frac{P_{ijc}}{1 - P_{ijc}} \right] = \gamma_c - (x_{ij}^\top \beta + u_{ij}^\top \alpha_c + z_{ij}^\top T \theta_i) \quad (c = 1, \ldots, C-1) \tag{10.7} \]
표기:
- \(x_{ij}\): \((p+1) \times 1\) 공변량 — 비례 오즈 가정 유지 (회귀 계수 \(\beta\) 가 \(c\) 무관).
- \(u_{ij}\): \(h \times 1\) 공변량 — 비례 오즈 가정 위반 허용.
- \(\alpha_c\): \(h \times 1\) 회귀 계수 — \(c\) subscript 가짐, 절단점별 다른 효과.
- \(z_{ij}\): \(r \times 1\) 랜덤 효과 design 벡터.
- \(T\): Cholesky factor.
추정 모수의 수:
- \(\beta\): \(p+1\) 개 (단일 셋).
- \(\alpha_c\): \(h \times (C-1)\) 개 (범주별).
- \(\gamma_c\): \(C-2\) 개 (\(\gamma_1 = 0\) 고정).
- Cholesky: \(r(r+1)/2\) 개.
식 (10.7) 의 표기적 가치 — 공변량을 두 그룹으로 분류:
\(x\) 그룹 (비례 오즈 유지):
- 비례 가정이 (적어도 근사적으로) 성립하는 공변량.
- 단일 셋 \(\beta\) 추정 — 모수 절약.
- 해석: “이 공변량의 OR 가 모든 절단점에서 동일”.
\(u\) 그룹 (비례 위반 허용):
- 비례 가정이 명백히 깨진 공변량.
- \(C-1\) 개 셋 \(\alpha_c\) 추정 — 모수 증가.
- 해석: “이 공변량의 효과가 절단점에 따라 다름”.
→ 모형의 절약성과 유연성의 균형. 모든 공변량을 비례 위반 허용으로 두면 모수 폭발, 모두 비례 가정으로 두면 부정확. 검정 결과를 토대로 일부만 \(u\) 로 분류.
모형 선택 절차 (실무):
- 모든 공변량을 \(x\) 로 두고 표준 proportional odds 모형 적합.
- 각 공변량의 비례 오즈 검정 (Brant test 또는 절단점별 별도 이항 logit + OR 비교).
- 위반이 명백한 공변량을 \(u\) 로 옮김.
- 식 (10.7) 의 partial proportional odds 모형 적합.
- LR test 로 두 모형 비교 → partial 모형이 통계적으로 우세하면 채택.
추가 인용: Wakefield et al. (2001), Xie et al. (2001), Freels et al. (2002) 의 응용 + Ishwaran (2000) 의 Bayesian 버전.
3.3 Figure 10.3 — 비례 위반의 시각화
3 범주 + 단일 이항 공변량 (\(u \in \{0, 1\}\)) + \(\gamma_1 = -1, \gamma_2 = 1\) + 비례 위반 (\(\alpha_1 = -0.05\), \(\alpha_2 = -1\)).
두 cumulative logit:
\[ \log[P(Y \leq 1) / P(Y \geq 2)] = \gamma_1 - u \alpha_1 \] \[ \log[P(Y \leq 2) / P(Y = 3)] = \gamma_2 - u \alpha_2 \]
| 그룹 | \(\text{logit}_1 = \gamma_1 - u\alpha_1\) | \(\text{logit}_2 = \gamma_2 - u\alpha_2\) |
|---|---|---|
| \(u=0\) | \(-1\) | \(1\) |
| \(u=1\) | \(-1 - (-0.05) = -0.95\) | \(1 - (-1) = 2\) |
비례 가정 (Figure 10.2) 과의 결정적 차이:
- 첫 cumulative logit: -1 → -0.95 (+0.05 변화, 거의 무시 가능).
- 둘째 cumulative logit: 1 → 2 (+1 변화, 매우 큼).
→ 공변량 \(u\) 가 두 cumulative logit 에 매우 다른 효과. 비례 위반의 시각적 정의.
확률 척도 결과:
| 범주 | \(u = 0\) 의 확률 | \(u = 1\) 의 확률 | 변화 |
|---|---|---|---|
| \(Y = 1\) | \(\Psi(-1) = 0.269\) | \(\Psi(-0.95) = 0.279\) | +0.010 |
| \(Y = 2\) | \(0.462\) | \(\Psi(2) - \Psi(-0.95) = 0.881 - 0.279 = 0.602\) | +0.140 |
| \(Y = 3\) | \(0.269\) | \(1 - \Psi(2) = 0.119\) | -0.150 |
해석:
- 범주 1 (가장 가벼운) 응답률은 두 그룹이 거의 같음 (0.269 vs 0.279).
- 범주 2 (중간) 응답률은 \(u = 1\) 그룹에서 크게 증가.
- 범주 3 (가장 심한) 응답률은 \(u = 1\) 그룹에서 크게 감소.
임상 시나리오 적용:
이 모형이 실제 의미할 수 있는 것 — “어떤 처치 (\(u = 1\)) 가 환자를 가벼운 범주에 머물게 하는 효과는 거의 없지만, 심한 범주로 가는 것을 막는 효과는 큼”. 즉 처치가 극단 (severe) 으로의 진행을 차단 하지만 가벼운 단계에서의 회복은 못 도움.
이런 패턴이 비례 오즈로는 표현 못함 — 비례 모형은 모든 절단점에서 같은 OR 강요. Partial proportional odds 가 비대칭 효과를 정확히 모형화.
3.4 결정적 Caveat — Figure 10.4 의 회귀선 교차 위험
식 (10.7) 은 절단점별 다른 회귀 계수 \(\alpha_c\) 를 허용 → cumulative logit 회귀선이 평행 아님.
문제: 두 cumulative logit 이 어떤 \(u\) 값에서 교차 가능.
교차의 의미:
- \(\text{logit}_1(u^*) = \text{logit}_2(u^*)\) 인 \(u^*\) 가 존재.
- 그 점에서 \(P(Y \leq 1) = P(Y \leq 2)\).
- → \(P(Y = 2) = 0\) → 가능 (경계 사례).
교차 너머 (\(u > u^*\)):
- \(\text{logit}_1 > \text{logit}_2\).
- \(P(Y \leq 1) > P(Y \leq 2)\).
- → \(P(Y = 2) < 0\) → 불가능, 모형 무효.
식 (10.7) 의 단순화 ($x = $ 절편만) + 연속 공변량 \(u \in [-4, 5]\) + \(\alpha_1 = -0.75, \alpha_2 = -0.25\) + \(\gamma_1 = -1, \gamma_2 = 1\).
| \(u\) | \(\text{logit}_1 = -1 - u(-0.75)\) | \(\text{logit}_2 = 1 - u(-0.25)\) | 비교 |
|---|---|---|---|
| \(u = 0\) | \(-1\) | \(1\) | \(\text{logit}_1 < \text{logit}_2\) (정상) |
| \(u = 1\) | \(-0.25\) | \(1.25\) | \(\text{logit}_1 < \text{logit}_2\) (정상) |
| \(u = 2\) | \(0.5\) | \(1.5\) | \(\text{logit}_1 < \text{logit}_2\) (정상) |
| \(u = 4\) | \(2.0\) | \(2.0\) | 교차점 (\(\text{logit}_1 = \text{logit}_2\)) |
| \(u = 5\) | \(2.75\) | \(2.25\) | \(\text{logit}_1 > \text{logit}_2\) 위반 |
\(u = 5\) 에서:
- \(P(Y \leq 1 \mid u=5) = \Psi(2.75) = 0.940\).
- \(P(Y \leq 2 \mid u=5) = \Psi(2.25) = 0.905\).
- \(P(Y = 2 \mid u=5) = 0.905 - 0.940 = -0.035\) → 음의 확률.
이 결과는 “범주 2 와 3 의 합” 이 “범주 3 단독” 보다 작음 을 의미 — 수학적으로 불가능. 누적 확률의 정의 (\(P(Y \leq c)\) 가 \(c\) 에 대해 단조 증가) 위반.
위험 영역:
- 이항 공변량 (\(u \in \{0, 1\}\)): 교차점이 보통 데이터 범위 밖 (예: \(u = 4\)). 안전.
- 연속 공변량: 교차점이 데이터 범위 안에 들어갈 수 있음 → 위험.
Figure 10.4 의 caveat 가 시사하는 partial proportional odds 의 사용 규칙:
- 이항 공변량 (\(u \in \{0, 1\}\)): 비례 위반 허용 안전. 교차점이 0-1 범위 밖.
- 다범주 공변량 (\(u \in \{1, 2, \ldots, m\}\)): dummy code 로 변환 후 사용. 각 dummy 가 이항이라 안전.
- 연속 공변량: 비례 오즈 가정 유지를 우선. 위반이 명백하면 다음 두 길:
- 범주화: \(m\) 분위수로 dummy 변수 만들고 partial proportional odds 적용. ad-hoc 이지만 작동.
- 비선형 response function (Kauermann & Tutz 2003): 더 정교한 대안. 회귀선이 평행 아니지만 교차하지 않도록 제약.
실무 빈도: 대부분의 partial proportional odds 응용은 이항 공변량 (성별, 처치 그룹) 에 한정. 연속 공변량은 특별한 이유가 없으면 비례 가정 유지.
소프트웨어 지원:
- R
VGAM::vglm(family = cumulative(parallel = FALSE ~ var1)): 단일 수준 partial proportional odds. - R
ordinal::clm(..., nominal = ~ var1): 단일 수준. - Mixed-effects 는 Hedeker 의 MIXOR 가 가장 일반적. R
ordinal::clmm는 nominal 효과 직접 지원 안 됨 — Bayesian (brms) 우회.
4 응용 분야
| 분야 | 활용 | 비례 오즈 위반 가능성 |
|---|---|---|
| 정신과 RCT | 중증도 ordinal 분석 | 중간 — 약효의 일부 비대칭 |
| 만성 통증 | NRS 0-10 → 5 범주 | 낮음 — 처치 효과 균등 |
| 노숙자 보건 | 거주 형태 (street/community/independent) | 높음 — 정책 효과 비대칭 (§ 10.4) |
| 교육 평가 | 학업 등급 (A/B/C/D/F) | 중간 — 중재가 특정 등급에만 효과 |
| 종양 임상 | CR/PR/SD/PD | 중간 — 약효가 PR 에 집중 가능 |
| 마케팅 | Likert 5/7 점 만족도 | 낮음 — 보통 비례 가정 작동 |
5 코드 예시
5.1 Step 1: Proportional Odds 적합 + Brant 검정
library(MASS)
library(brant)
# 데이터 시뮬레이션 (proportional odds 가 진짜 성립)
set.seed(2026)
n <- 500
x <- rbinom(n, 1, 0.5) # 이항 공변량
y_latent <- 0.6 * x + rlogis(n)
gamma <- c(-1, 1)
y <- cut(y_latent, breaks = c(-Inf, gamma, Inf), labels = 1:3, ordered = TRUE)
df <- data.frame(y = y, x = x)
# Proportional odds 적합
fit_po <- polr(y ~ x, data = df, Hess = TRUE)
summary(fit_po)
# Brant 검정 — 각 공변량의 비례 오즈 가정 검정
brant(fit_po)
# Omnibus p-value 가 크면 (> .05) 비례 가정 만족
# 작으면 partial proportional odds 검토 필요Omnibus: 모든 공변량의 결합 검정.- 각 공변량별 행: 개별 검정.
- p > .05: 비례 가정 만족 (귀무가설 거부 못함).
- p < .05: 비례 가정 위반 → partial proportional odds 검토.
주의: Brant 검정은 표본 크기에 매우 민감. 큰 표본에서는 작은 위반도 검정 통과 못함. 작은 표본에서는 명백한 위반도 못 잡음.
권고: Brant + 시각적 검토 (절단점별 OR 비교, 10-0 의 Step 3 코드) + 임상적 판단 결합.
5.2 Step 2: Partial Proportional Odds 적합 (R VGAM)
library(VGAM)
# 비례 위반 공변량 시뮬레이션 (Figure 10.3 와 유사)
set.seed(2026)
n <- 800
u <- rbinom(n, 1, 0.5)
# 잠재 변수 계산이 어려우므로 cumulative probability 직접 정의
gamma1 <- -1
gamma2 <- 1
alpha1 <- -0.05 # 첫 cumulative logit 효과 (거의 0)
alpha2 <- -1.0 # 둘째 cumulative logit 효과 (큼)
# 각 관측의 두 cumulative logit
logit1 <- gamma1 - u * alpha1
logit2 <- gamma2 - u * alpha2
# Cumulative probabilities
P_le1 <- plogis(logit1)
P_le2 <- plogis(logit2)
# 범주 확률
P1 <- P_le1
P2 <- P_le2 - P_le1
P3 <- 1 - P_le2
# 응답 생성
y <- numeric(n)
for (i in 1:n) {
y[i] <- sample(1:3, 1, prob = c(P1[i], P2[i], P3[i]))
}
y <- factor(y, levels = 1:3, ordered = TRUE)
df <- data.frame(y = y, u = u)
# Partial proportional odds (u 의 비례 가정 해제)
fit_ppo <- vglm(y ~ u, family = cumulative(parallel = FALSE ~ u, link = "logitlink"),
data = df)
summary(fit_ppo)
# 비교: 표준 proportional odds
fit_po <- vglm(y ~ u, family = cumulative(parallel = TRUE, link = "logitlink"),
data = df)
# LR test
lrtest(fit_ppo, fit_po)parallel 인수
cumulative(parallel = ...) 의 의미:
TRUE: 표준 proportional odds (모든 공변량이 절단점 무관).FALSE: 모든 공변량이 절단점 가변.FALSE ~ u: \(u\) 만 절단점 가변, 다른 공변량은 비례 유지.~ u: 같은 의미 (간단 표기).
식 (10.7) 의 직접 구현. \(x\) 와 \(u\) 의 분리가 parallel 공식으로 표현.
LR test 결과:
- p < .05: partial 모형이 유의하게 우세 → 비례 위반 입증.
- p ≥ .05: 표준 proportional 모형으로 충분.
5.3 Step 3: Mixed-effects Partial Proportional Odds (R brms)
library(brms)
# Mixed-effects partial proportional odds 는 frequentist 패키지 지원이 약함
# Bayesian 우회 — brms 의 `cs()` (category-specific) 활용
# 종단 ordinal 데이터 시뮬레이션 (random intercept + 비례 위반)
set.seed(2026)
n_subjects <- 100
n_times <- 4
df <- expand.grid(subject = 1:n_subjects, time = 0:(n_times-1))
df$drug <- rep(rbinom(n_subjects, 1, 0.5), each = n_times)
# 환자 random intercept
upsilon <- rep(rnorm(n_subjects, 0, 1.0), each = n_times)
# 비례 위반: drug 효과가 절단점별 다름
# 이 시뮬레이션은 단순화 — brms 는 적합 후 결과 시연
gamma <- c(-1, 0, 1)
alpha_drug <- c(-0.3, -0.8, -1.2) # 절단점 1, 2, 3 에 대한 drug 효과
y <- numeric(nrow(df))
for (i in 1:nrow(df)) {
drug <- df$drug[i]
time <- df$time[i]
base <- 0.3 * time + upsilon[i]
P_le <- numeric(3)
for (c in 1:3) {
P_le[c] <- plogis(gamma[c] - (base + alpha_drug[c] * drug))
}
P_cat <- c(P_le[1], P_le[2] - P_le[1], P_le[3] - P_le[2], 1 - P_le[3])
y[i] <- sample(1:4, 1, prob = P_cat)
}
df$y <- factor(y, levels = 1:4, ordered = TRUE)
# Mixed-effects partial proportional odds (cs() = category-specific)
# fit <- brm(y ~ time + cs(drug) + (1 | subject),
# data = df, family = cumulative("logit"),
# chains = 2, cores = 2, iter = 2000)
# summary(fit)
# 결과: drug 의 절단점별 별도 효과 추정 (식 10.7 의 alpha_c)cs() (category-specific) 인수
~ time + cs(drug): time 은 비례 가정, drug 는 범주별 효과.- 추정 결과에
cs(drug)[1],cs(drug)[2],cs(drug)[3]으로 절단점별 계수 출력. - Bayesian 이라 prior 지정 가능 — 약한 위반은 prior 로 정규화 (Hedeker-Mermelstein 1998 의 frequentist 추정보다 안정).
frequentist 대안:
- SAS PROC NLMIXED: partial proportional odds + random effects 직접 적합 가능 (코드 복잡).
- MIXOR (Hedeker 의 자체 소프트웨어): partial proportional odds 명시 지원.
결론: Mixed-effects + partial proportional odds 의 frequentist 표준 도구가 빈약. 실무에서는 brms (Stan) 가 가장 안정적인 길.
5.4 Step 4: 회귀선 교차 시각화 (Figure 10.4 재현)
import numpy as np
import matplotlib.pyplot as plt
from scipy.special import expit
# Figure 10.4 의 두 모형 비교
# 공통 파라미터
gamma_1, gamma_2 = -1.0, 1.0
x_range = np.linspace(-4, 5, 200)
# 모형 1: Proportional odds (β = -0.5)
beta_po = -0.5
logit1_po = gamma_1 - x_range * beta_po
logit2_po = gamma_2 - x_range * beta_po
# 모형 2: Nonproportional odds (α_1 = -0.75, α_2 = -0.25)
alpha_1, alpha_2 = -0.75, -0.25
logit1_npo = gamma_1 - x_range * alpha_1
logit2_npo = gamma_2 - x_range * alpha_2
# 누적 확률
P_le1_po = expit(logit1_po)
P_le2_po = expit(logit2_po)
P_le1_npo = expit(logit1_npo)
P_le2_npo = expit(logit2_npo)
# Plot
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# 위 - proportional
axes[0, 0].plot(x_range, P_le1_po, "b-", linewidth=2, label="P(Y<=1)")
axes[0, 0].plot(x_range, P_le2_po, "r--", linewidth=2, label="P(Y<=2)")
axes[0, 0].fill_between(x_range, P_le1_po, P_le2_po, alpha=0.2, color="orange",
label="P(Y=2)")
axes[0, 0].set_title("Proportional Odds (top): P(Y<=1) and P(Y<=2)")
axes[0, 0].set_xlabel("Continuous covariate x")
axes[0, 0].set_ylabel("Cumulative probability")
axes[0, 0].legend()
axes[0, 0].set_ylim(0, 1)
# 위 우측 - 절단점 차이
axes[0, 1].plot(x_range, P_le2_po - P_le1_po, "g-", linewidth=2)
axes[0, 1].set_title("P(Y=2) under Proportional — 항상 양수")
axes[0, 1].set_xlabel("x")
axes[0, 1].set_ylabel("P(Y=2)")
axes[0, 1].axhline(0, color="black", linestyle=":")
# 아래 - nonproportional
axes[1, 0].plot(x_range, P_le1_npo, "b-", linewidth=2, label="P(Y<=1)")
axes[1, 0].plot(x_range, P_le2_npo, "r--", linewidth=2, label="P(Y<=2)")
axes[1, 0].fill_between(x_range, P_le1_npo, P_le2_npo,
where=(P_le2_npo >= P_le1_npo),
alpha=0.2, color="orange", label="P(Y=2) >= 0")
axes[1, 0].fill_between(x_range, P_le1_npo, P_le2_npo,
where=(P_le2_npo < P_le1_npo),
alpha=0.4, color="red", label="P(Y=2) < 0 (위반)")
axes[1, 0].set_title("Nonproportional Odds: 회귀선 교차 위험")
axes[1, 0].set_xlabel("Continuous covariate u")
axes[1, 0].set_ylabel("Cumulative probability")
axes[1, 0].legend()
axes[1, 0].set_ylim(0, 1)
# 아래 우측 - P(Y=2) 가 음수가 되는 영역
axes[1, 1].plot(x_range, P_le2_npo - P_le1_npo, "g-", linewidth=2)
axes[1, 1].fill_between(x_range, 0, P_le2_npo - P_le1_npo,
where=(P_le2_npo - P_le1_npo < 0),
alpha=0.4, color="red", label="음의 확률 (불가능)")
axes[1, 1].set_title("P(Y=2) under Nonproportional — 큰 u 에서 음수")
axes[1, 1].set_xlabel("u")
axes[1, 1].set_ylabel("P(Y=2)")
axes[1, 1].axhline(0, color="black", linestyle=":")
axes[1, 1].legend()
plt.tight_layout()
# 교차점 계산
crossing_x = (gamma_2 - gamma_1) / (alpha_2 - alpha_1)
print(f"교차점: x = {crossing_x:.2f}")
print(f" x < {crossing_x:.2f} 에서는 모형이 유효")
print(f" x > {crossing_x:.2f} 에서 P(Y=2) < 0 → 모형 무효")위쪽 (proportional odds): 두 cumulative logit 회귀선이 평행. P(Y=2) = \(P_{le2} - P_{le1}\) 가 모든 \(x\) 에서 양수 → 모형 항상 유효.
아래쪽 (nonproportional odds): 두 회귀선이 다른 기울기 → 어떤 \(x^*\) 에서 교차. 교차점 너머에서 \(P_{le2} < P_{le1}\) → P(Y=2) 음수 → 모형 무효.
교차점 공식:
\[ x^* = \frac{\gamma_2 - \gamma_1}{\alpha_2 - \alpha_1} = \frac{1 - (-1)}{-0.25 - (-0.75)} = \frac{2}{0.5} = 4 \]
→ \(x = 4\) 에서 교차, \(x > 4\) 면 모형 위반.
실무 적용: 데이터의 \(x\) 범위가 교차점 안 (\(x < x^*\)) 이면 안전하지만, 그것을 미리 보장하기 어렵다. 이항 변수만 비례 위반 허용이 안전한 이유 — 이항이면 두 점 (0, 1) 만 사용, 교차점이 그 사이에 들어올 가능성이 거의 없음.
6 관련 주제
선행 지식
- Ch.10 Overview — Cumulative logit 모형의 큰 그림 (식 10.1, Figure 10.1-10.2)
- § 9.4 Threshold concept — 잠재 변수 framework (cumulative logit 의 토대)
- § 9.5 Mixed-effects 정의 — Random effects + Cholesky (식 10.7 에 직접 적용)
후속 주제 (Ch.10 sub-posts)
- § 10.2.2 — Models with Scaling Terms (위치-척도 cumulative odds 모형, Cox 1995)
- § 10.2.3 — Survival Analysis Models (이산 시간 비례 위험)
- § 10.2.4 — Estimation (cumulative logit 의 marginal MLE 세부)
- § 10.3 — NIMH 4 범주 ordinal 분석 (Ch.9 이항 분석과 비교, partial proportional odds 응용 가능)
- § 10.4 — 노숙자 보건서비스 (section 8 certificate 의 비례 위반)
관련 개념
- McCullagh (1980) — Proportional odds 모형 원전
- Peterson & Harrell (1990) — Partial proportional odds (fixed-effects) 도입
- Terza (1985) — Ordinal probit 의 비슷한 확장
- Hedeker & Mermelstein (1998, 2000) — Mixed-effects partial proportional odds
- Wakefield et al. (2001), Xie et al. (2001), Freels et al. (2002) — 응용
- Ishwaran (2000) — Bayesian 계층 모형 버전
- Kauermann & Tutz (2003) — 비선형 response function 으로 교차 회피
- Ch.11 GLMM 명목 — Partial proportional odds 가 명목 모형에 가까워질 때