1 이분 로지스틱 회귀모형

이분 로지스틱 회귀모형은 종속변수가 2가지 범주를 취하는 경우에 사용된다.

\(N\)개의 객체로 이루어진 학습데이터 \(\{(\mathbf{x}_i, y_i)\}_{i = 1, \cdots, N}\)를 아래와 같이 정의하자.

  • \(\mathbf{x}_i \in \mathbb{R}^p\): \(p\)개의 독립변수로 이루어진 벡터 (\(\mathbf{x}_i = [x_{i1} \, x_{i2} \, \cdots \, x_{ip}]^\top\))
  • \(y_i\): 0 혹은 1의 값을 갖는 이분형 지시변수 (indicator variable)

\(\mathbf{x}_i\) 관측값을 이용하여 \(y_i\)의 기대값 \(P_i\)을 추정하는 모형을 아래와 같이 로지스틱 함수로 정의하자.

\[\begin{eqnarray} P_i &=& P(y_i = 1 \,|\, \mathbf{x}_i)\\ &=& E[y_i | \mathbf{x}_i]\\ &=& \frac{\exp(\beta_0 + \boldsymbol\beta^\top \mathbf{x}_i)}{1 + \exp(\beta_0 + \boldsymbol\beta^\top \mathbf{x}_i)} \tag{1.1} \end{eqnarray}\]

여기에서 \(\boldsymbol\beta \in \mathbb{R}^{p}\)\(\mathbf{x}_i\)와 동일한 차원의 벡터이다 (\(\boldsymbol\beta = [\beta_1 \, \beta_2 \, \cdots \, \beta_p]^\top\)).

(1.1)는 모든 \(\mathbf{x}_i\)값에 대해 0에서 1 사이의 값을 갖게 되므로 각 범주에 속할 확률을 추정하는 데 적합한 반면, 변수 \(\mathbf{x}\) 및 계수들에 대해 선형이 아니므로 추정이 어렵다. 그러나 아래와 같이 로짓(logit) 변환을 통해 선형회귀식으로 변환할 수 있다.

\[\begin{eqnarray} logit(P_i) &=& \ln \left[ \frac{P_i}{1 - P_i} \right]\\ &=& \ln(\exp(\beta_0 + \boldsymbol\beta^\top \mathbf{x}_i))\\ &=& \beta_0 + \boldsymbol\beta^\top \mathbf{x}_i \tag{1.2} \end{eqnarray}\]

(1.2)에서 확률 \(P_i\)는 직접적으로 관측되는 것이 아니고 0 또는 1을 갖는 \(y_i\)가 관측되므로, \(P_i\)를 일종의 잠재변수(latent variable)로 해석할 수 있다.

\[\begin{equation} y_i = \begin{cases} 1 & \text{ if } \beta_0 + \boldsymbol\beta^\top \mathbf{x}_i + \varepsilon_i > 0 \\ 0 & \text{ otherwise } \end{cases} \tag{1.3} \end{equation}\]

(1.3)에서 \(\varepsilon_i\)는 표준로지스틱분포(standard logistic distribution)을 따른다.

1.1 데이터

data(student, package = "dmtr")
Table 1.1: 우수/보통 학생에 대한 설문조사 결과
id x1 x2 x3 y
1 0 8 2 우수
2 1 7 1 우수
3 0 9 0 우수
4 1 6 4 우수
5 1 8 2 우수
6 0 7 3 우수
7 0 7 0 보통
8 1 6 1 보통
9 0 7 2 보통
10 0 8 1 보통
11 0 5 2 보통
12 1 8 0 보통
13 0 6 3 보통
14 1 7 2 보통
15 0 6 1 보통

1.2 회귀계수 추정

로지스틱 모형에서 회귀계수의 추정을 위해서 주로 최우추정법(maximum likelihood estimation)이 사용된다. \(N\)개의 객체로 이루어진 학습데이터에 대해 우도함수는 다음과 같다.

\[\begin{equation*} L = \prod_{i = 1}^{N} P_i^{y_i} (1 - P_i)^{1 - y_i} \end{equation*}\]

그리고 우도함수에 자연로그를 취하면 아래와 같이 전개된다.

\[\begin{eqnarray} \log L &=& \sum_{i = 1}^{N} y_i \log P_i + \sum_{i = 1}^{N} (1 - y_i) \log (1 - P_i)\\ &=& \sum_{i = 1}^{N} y_i \log \frac{P_i}{1 - P_i} + \sum_{i = 1}^{N} \log (1 - P_i)\\ &=& \sum_{i = 1}^{N} y_i (\beta_0 + \boldsymbol\beta^\top \mathbf{x}_i) - \sum_{i = 1}^{N} \log (1 + \exp (\beta_0 + \boldsymbol\beta^\top \mathbf{x}_i) )\\ &=& \sum_{i = 1}^{N} y_i \left(\beta_0 + \sum_{j = 1}^{p} \beta_j x_{ij} \right) - \sum_{i = 1}^{N} \log \left(1 + \exp\left(\beta_0 + \sum_{j = 1}^{p} \beta_j x_{ij}\right)\right) \tag{1.4} \end{eqnarray}\]

(1.4)을 각 회귀계수 \(\beta_0, \beta_1, \cdots, \beta_p\)에 대해 편미분하여 최적해를 얻는다. 이를 위해 주로 뉴턴-랩슨 알고리즘(Newton-Raphson algorithm)이나 quasi-Newton 알고리즘이 사용된다 (전치혁 2012).

회귀계수를 추정하는 함수를 fit_binary_logistic_regression()으로 구현하였다.

fit <- fit_binary_logistic_regression(student, y, c(x1, x2, x3), .reflevel = "보통")
print(fit)
#> $betas
#> (Intercept)          x1          x2          x3 
#>  -30.521912    2.032088    3.471895    2.415513 
#> 
#> $hessian
#>             (Intercept)         x1         x2         x3
#> (Intercept)  -1.6881640 -0.6963372 -12.650219  -2.595028
#> x1           -0.6963372 -0.6963372  -5.000818  -1.031367
#> x2          -12.6502186 -5.0008178 -96.025398 -17.990616
#> x3           -2.5950277 -1.0313675 -17.990616  -6.456938

위 추정계수와 헤시안 행렬(Hessian matrix)를 이용하여 아래와 같이 결과를 요약할 수 있다.

fit_summary_df <- tibble(
  term = names(fit$betas),
  estimate = fit$betas,
  std_error = sqrt((diag(solve(-fit$hessian)))),
  statistic = estimate / std_error,
  p_value = pnorm(if_else(statistic < 0, statistic, - statistic)) * 2,
  odds_ratio = if_else(term == "(Intercept)", NA_real_, exp(estimate))
)
Table 1.2: 우수/보통 학생 설문조사 데이터에 대한 Logistic Regression 결과
term estimate std_error statistic p_value odds_ratio
(Intercept) -30.52 18.03 -1.69 0.09 NA
x1 2.03 1.98 1.02 0.31 7.63
x2 3.47 2.08 1.67 0.09 32.20
x3 2.42 1.40 1.73 0.08 11.20

위 추정된 계수를 이용하여 사후확률을 계산하는 함수 회귀계수를 추정하는 함수를 posterior_binary_logistic_regression()로 구현하였다.

posterior_df <- posterior_binary_logistic_regression(
  fit$betas, .new_data = student, c(x1, x2, x3), 
  .reflevel = "보통",
  .poslevel = "우수"
)

prediction_df <- bind_cols(student, posterior_df)
Table 1.3: 우수/보통 학생 설문조사 데이터에 대한 범주 추정
id x1 x2 x3 y .pred_우수 .pred_보통
1 0 8 2 우수 0.89 0.11
2 1 7 1 우수 0.15 0.85
3 0 9 0 우수 0.67 0.33
4 1 6 4 우수 0.88 0.12
5 1 8 2 우수 0.98 0.02
6 0 7 3 우수 0.74 0.26
7 0 7 0 보통 0.00 1.00
8 1 6 1 보통 0.01 0.99
9 0 7 2 보통 0.20 0.80
10 0 8 1 보통 0.42 0.58
11 0 5 2 보통 0.00 1.00
12 1 8 0 보통 0.33 0.67
13 0 6 3 보통 0.08 0.92
14 1 7 2 보통 0.66 0.34
15 0 6 1 보통 0.00 1.00

2 명목 로지스틱 회귀모형

종속변수가 셋 이상의 범주를 갖고 있으나 자연스러운 순서가 없는 경우, 기준범주 로짓모형이 널리 사용된다.

\(N\)개의 객체로 이루어진 학습데이터 \(\{(\mathbf{x}_i, y_i)\}_{i = 1, \cdots, N}\)를 아래와 같이 정의하자.

  • \(\mathbf{x}_i \in \mathbb{R}^p\): \(p\)개의 독립변수로 이루어진 벡터 (\(\mathbf{x}_i = [x_{i1} \, x_{i2} \, \cdots \, x_{ip}]^\top\))
  • \(J\): 범주 수
  • \(y_i\): 객체 \(i\)에 대한 종속변수값 \(\in \{1, 2, \cdots, J\}\)

각 객체 \(i\)가 각 범주에 해당할 확률을 \(\pi_{ij}\)라 하자.

\[\begin{equation*} \pi_{ij} = P(y_i = j \, | \, \mathbf{x}_i), \, j = 1, \cdots, J \end{equation*}\]

이 때, 모든 \(i\)에 대하여

\[\begin{equation*} \sum_{j = 1}^{J} \pi_{ij} = 1 \end{equation*}\]

이 성립한다. 여기에서 범주 1을 기준 범주(reference category 혹은 baseline category)로 간주하여 범주별로 다음과 같은 회귀모형을 정의한다 (교재 (전치혁 2012)에는 범주 \(J\)를 기준 범주로 간주).

\[\begin{equation*} \log \left( \frac{\pi_{ij}}{\pi_{i1}} \right) = \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i, \, j = 2, \cdots, J \end{equation*}\]

이를 \(\pi_{ij}\)에 대해 풀면, 아래와 같은 해가 얻어진다 (Czepiel 2002).

\[\begin{equation} \begin{split} \pi_{ij} &= \frac{\exp \left( \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i \right)}{1 + \sum_{j = 2}^{J} \exp \left( \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i \right)}, \, j = 2, \cdots, J\\ \pi_{i1} &= \frac{1}{1 + \sum_{j = 2}^{J} \exp \left( \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i \right)} \end{split} \tag{2.1} \end{equation}\]

2.1 데이터

data(defecttype, package = "dmtr")
Table 2.1: 공정변수-불량 종류 데이터
id x1 x2 y
1 0.09 5.02 1
2 0.10 5.01 1
3 0.12 4.94 1
4 0.12 5.12 1
5 0.12 5.03 1
6 0.12 4.94 2
7 0.10 5.13 2
8 0.10 4.87 1
9 0.10 5.13 2
10 0.11 4.94 3
11 0.11 4.93 3
12 0.09 5.02 3
13 0.10 5.01 3
14 0.09 4.94 3
15 0.10 5.12 2
16 0.12 4.93 2
17 0.10 5.00 1
18 0.09 5.01 3

2.2 회귀계수 추정

위 모수 추정을 위해 최우추정법을 사용해보자. 우선, 종속변수를 변환한 지시변수를 아래와 같이 정의한다.

\[\begin{equation*} v_{ij} = \begin{cases} 1 & \text{ if } y_i = j\\ 0 & \text{ otherwise } \end{cases} \end{equation*}\]

이를 이용해 우도 함수를

\[\begin{eqnarray*} L &=& \prod_{i = 1}^{n} \prod_{j = 1}^{J} \left( \pi_{ij} \right)^{v_{ij}} \\ &=& \prod_{i = 1}^{n} \pi_{i1}^{1 - \sum_{j = 2}^{J} v_{ij}} \prod_{j = 2}^{J} \left( \pi_{ij} \right)^{v_{ij}}\\ &=& \prod_{i = 1}^{n} \frac{\pi_{i1}}{\pi_{i1}^{\sum_{j = 2}^{J} v_{ij}}} \prod_{j = 2}^{J} \left( \pi_{ij} \right)^{v_{ij}}\\ &=& \prod_{i = 1}^{n} \frac{\pi_{i1}}{\prod_{j = 2}^{J} \pi_{i1}^{v_{ij}}} \prod_{j = 2}^{J} \left( \pi_{ij} \right)^{v_{ij}}\\ &=& \prod_{i = 1}^{n} \pi_{i1} \prod_{j = 2}^{J} \left( \frac{\pi_{ij}}{\pi_{i1}} \right)^{v_{ij}} \end{eqnarray*}\]

와 같이 표현할 수 있으며, 여기에 식 (2.1)을 이용하면 아래와 같이 정리할 수 있다.

\[\begin{eqnarray*} L &=& \prod_{i = 1}^{n} \frac{1}{1 + \sum_{j = 2}^{J} \exp \left( \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i \right)} \prod_{j = 2}^{J} \left( \exp \left( \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i \right) \right)^{v_{ij}}\\ &=& \prod_{i = 1}^{n} \left( 1 + \sum_{j = 2}^{J} \exp \left( \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i \right) \right)^{-1} \prod_{j = 2}^{J} \left( \exp \left( \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i \right) \right)^{v_{ij}} \end{eqnarray*}\]

이에 따라 로그 우도함수는 다음과 같이 정의된다.

\[\begin{equation} \log L = \sum_{i = 1}^{n} \left( - \log \left( 1 + \sum_{j = 2}^{J} \exp \left( \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i \right) \right) + \sum_{j = 2}^{J} v_{ij} \left( \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i \right) \right) \tag{2.2} \end{equation}\]

(2.2)을 각 계수에 대해 미분하면 아래와 같이 정리된다.

\[\begin{equation} \begin{split} \frac{\partial \log L}{\partial \beta_{0,j}} &= \sum_{i = 1}^{n} v_{ij} - \frac{\exp \left( \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i \right)}{1 + \sum_{j = 2}^{J} \exp \left( \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i \right)}\\ \frac{\partial \log L}{\partial \beta_{k,j}} &= \sum_{i = 1}^{n} v_{ij} x_{ik} - \frac{x_{ik} \exp \left( \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i \right)}{1 + \sum_{j = 2}^{J} \exp \left( \beta_{0,j} + \boldsymbol\beta_{j}^\top \mathbf{x}_i \right)}, \, k = 1, \cdots, p \end{split} \tag{2.3} \end{equation}\]

따라서, 명목 로지스틱 회귀분석은 식 (2.3)이 표현하는 \((J - 1) \times (p + 1)\)개의 미분식을 모두 0으로 만드는 계수값을 찾는 문제가 된다. 이에 대한 closed form solution은 존재하지 않으므로, 각종 알고리즘을 이용하여 해를 찾아야 한다. Newton-Raphson method에 의해 해를 찾는 방법은 Czepiel (2002) 에 보다 자세하게 설명되어 있다.

Table 2.1의 학습데이터에 대해 명목 로지스틱 회귀모형을 학습하여 범주를 추정한 결과는 아래와 같다.

회귀계수를 추정하는 함수를 fit_multinom_logistic_regression()으로 구현하였다.

fit <- fit_multinom_logistic_regression(defecttype, y, c(x1, x2), .reflevel = 3L,
  .control = list(fnscale = -1, reltol = 1e-10, maxit = 100000))
print(fit)
#> $betas
#>                     1          2
#> (Intercept) -63.65737 -117.04357
#> x1          101.59702  131.91194
#> x2           10.70778   20.61947
#> 
#> $hessian
#>               (Intercept):1        x1:1       x2:1 (Intercept):2        x1:2
#> (Intercept):1    -3.9801283 -0.41901950 -19.925885     1.9930964  0.21765391
#> x1:1             -0.4190195 -0.04459339  -2.096977     0.2176539  0.02397958
#> x2:1            -19.9258845 -2.09697702 -99.778149    10.0334423  1.09496537
#> (Intercept):2     1.9930964  0.21765392  10.033442    -2.8642989 -0.30647713
#> x1:2              0.2176539  0.02397958   1.094965    -0.3064771 -0.03312263
#> x2:2             10.0334492  1.09496616  50.522223   -14.3960085 -1.53952911
#>                     x2:2
#> (Intercept):1  10.033449
#> x1:1            1.094966
#> x2:1           50.522223
#> (Intercept):2 -14.396008
#> x1:2           -1.539529
#> x2:2          -72.371668

3 서열 로지스틱 회귀모형

종속변수가 3개 이상의 범주를 가지며, 각 범주 간에 서열이 있는 경우에 대한 로지스틱 회귀모형을 소개한다.

3.1 데이터

data(telconnection, package = "dmtr")
(#tab:잡음(N)손실(L)만족도(y))성능변수에 따른 통신 만족도
N L y
25 5 3
25 10 3
25 20 2
25 30 1
32 5 3
32 10 3
32 20 2
32 30 1
42 5 1
42 10 3
42 20 1
42 30 1

3.2 누적 로짓모형

객체 \(i\)가 범주 \(j\) 이하에 속할 누적확률을 \(\kappa_{ij}\)라 하자.

\[\begin{equation*} \kappa_{ij} = P(y_i \leq j \, | \, \mathbf{x}_i), \, j = 1, \cdots, J \end{equation*}\]

누적 로짓모형은 범주 누적확률의 로짓변환에 대한 선형 회귀모형이다.

\[\begin{equation} \log \left( \frac{\kappa_{ij}}{1 - \kappa_{ij}} \right) = \beta_{0,j} + \boldsymbol\beta^\top \mathbf{x}_i, \, j = 1, \cdots, J - 1 \tag{3.1} \end{equation}\]

(3.1)은 독립변수에 대한 계수 \(\boldsymbol\beta\)가 모든 범주에 대해 동일하며 절편(intercept) \(\beta_{0,j}\)만 범주에 따라 다른 비례 승산 모형(proportional odds model)이다. 즉, 범주에 관계없이 각 독립변수가 한 단위 증가할 때마다 로그 승산비는 동일하게 증가한다.

모형의 추정은 2절과 유사하게 다항분포를 사용한 최우추정법을 사용할 수 있다. 각 객체 \(i\)가 범주 \(j\)에 속할 확률은 아래와 같다.

\[\begin{equation*} \begin{split} \pi_{ij} &= \kappa_{ij} - \kappa_{i,j-1}\\ &= \frac{\exp (\beta_{0,j} + \boldsymbol\beta^\top \mathbf{x}_i)}{1 + \exp (\beta_{0,j} + \boldsymbol\beta^\top \mathbf{x}_i)} - \frac{\exp (\beta_{0,j-1} + \boldsymbol\beta^\top \mathbf{x}_i)}{1 + \exp (\beta_{0,j-1} + \boldsymbol\beta^\top \mathbf{x}_i)}, \, j = 2, \cdots, J - 1\\ & \\ \pi_{i1} &= \kappa_{i1}\\ &= \frac{\exp (\beta_{0,1} + \boldsymbol\beta^\top \mathbf{x}_i)}{1 + \exp (\beta_{0,1} + \boldsymbol\beta^\top \mathbf{x}_i)}\\ & \\ \pi_{iJ} &= 1 - \kappa_{i,J-1}\\ &= 1 - \frac{\exp (\beta_{0,J-1} + \boldsymbol\beta^\top \mathbf{x}_i)}{1 + \exp (\beta_{0,J-1} + \boldsymbol\beta^\top \mathbf{x}_i)} \end{split} \tag{3.2} \end{equation*}\]

로그 우도함수는

\[\begin{equation*} \sum_{i = 1}^{n} \sum_{j = 1}^{J} y_i \log \pi_{ij} \end{equation*}\]

이며, 이에 위에서 정리한 \(\pi_{ij}\)식을 대입하여 전개할 수 있다. 이 로그 우도함수는 concave 함수이므로(Pratt 1981), 각 계수에 대해 편미분하여 0이 되도록 하는 값을 구하는 방식으로 회귀모형을 추정할 수 있다.

회귀계수를 추정하는 함수를 fit_ordinal_logistic_regression()으로 구현하였다.

fit <- fit_ordinal_logistic_regression(
  telconnection, y, c(N, L)
)
print(fit)
#> $par
#> [1] -13.0270423 -11.3909924   0.2234882   0.2996985
#> 
#> $value
#> [1] -6.441254
#> 
#> $counts
#> function gradient 
#>      449       NA 
#> 
#> $convergence
#> [1] 0
#> 
#> $message
#> NULL
#> 
#> $hessian
#>             [,1]        [,2]        [,3]       [,4]
#> [1,]  -1.3670843   0.6006743   -24.21539  -15.81477
#> [2,]   0.6006743  -1.4690612   -27.55876  -12.06814
#> [3,] -24.2153900 -27.5587587 -1707.10486 -843.13495
#> [4,] -15.8147679 -12.0681364  -843.13495 -559.77999
Czepiel, Scott A. 2002. “Maximum Likelihood Estimation of Logistic Regression Models: Theory and Implementation.” Available at Czep. Net/Stat/Mlelr. Pdf.
Pratt, John W. 1981. “Concavity of the Log Likelihood.” Journal of the American Statistical Association 76 (373): 103–6.
전치혁. 2012. 데이터마이닝 기법과 응용. 한나래출판사.