Multivariate Linear Regression I: Theory

단순선형회귀모델은 단순해보이지만 결코 단순하지 않습니다. 앞에서 우리는 +가 각 변수들 간의 독립적인 관계를 보여준다는 것을 확인하였습니다. 이번에는 범죄에 대한 회귀모델을 구축하되, 임금 수준 이외의 또 다른 변수—경찰의 노력(Police effort)를 포함해봅시다. 선형회귀모델이되 둘 이상의 설명변수를 포함하였으니 다중선형회귀모델(multiple linear regression model)이라고 할 수 있을 것입니다. 통계적 모델로 나타내자면

\[\text{범죄} = \beta_0 + \beta_1\text{임금 수준} + \beta_2\text{경찰의 노력} + u\]

가 될 것입니다.

우리는 일단 다중선형회귀모델의 각 계수, \(\beta_i\)들을 어떻게 구할 수 있는지를 살펴볼 것입니다. 그리고 설명변수로서의 제곱항(square term)이 포함된 다중선형회귀모델에서 \(\beta_i\)가 가지는 의미를 분석하고자 합니다.다중선형회귀모델 통계적 특성은 다음과 같습니다.

  • MLR.1: 모수들은 선형관계를 이루고 있다.

  • MLR.2: 표본은 무작위로 추출된 것이다(random sampling)

  • MLR.3: 완전한 다중공선성은 존재하지 않아야 한다(No perfect collinearity)

  • MLR.4: 오차항과 설명변수들 간의 상관관계가 존재하지 않아야 한다 (\(E(u|x_i,\cdots,x_k) = 0\)).

우리는 MLR.1부터 MLR.4까지를 가정하고, \(y_i = \hat{\beta_0} + \hat{\beta_1}x_{i1} + \hat{\beta_2}x_{i2}\)를 가정합니다. 따라서 다중선형회귀모델에서 \(\hat{\beta_1}\)을 구하기 위해서는 다음과 같은 공식이 성립합니다.

\[\hat{\beta_1} = \frac{\sum^{n}_{i=1}\hat{r}_{i1}\cdot y_i}{\sum^{n}_{i=1}\hat{r}^2_{i1}}\]

이때, \(r_{i1}\)은 잔차로 \(x_{i1} = \hat{\alpha}_0 + \hat{\alpha}_1x_{i2} + r_{i1}\)에서 도출된 것입니다. 간단히 말하자면, 단순선형회귀모델에서와는 달리 다중선형회귀모델에서는 \(\hat{\beta_1}\)을 구할 때, \(x_1\)\(y\) 간의 관계뿐 아니라 \(x_1\)\(x_2\) 간의 관계, 그리고 \(x_2\)\(y\)의 관계도 고려해주어야 한다는 것입니다. 왜? \(x_1\)이 설명하고 있는 부분의 일부는 사실 \(x_1\)\(x_2\)가 같이 설명하는 “교집합”, “공분산”(covariance)일 수 있기 때문입니다.

공분산에 대한 내용은 뒤에서 더 자세하게 다루기로 하고, 우선 MLR.1부터 MLR.4까지의 가정들이 모두 충족되었을 때, 우리는 수없이 많은 표본들로부터 얻어내는 \(\hat{\beta}_k\)의 기대값이 모집단에서의 \(\beta_k\)와 같을 것이라고 생각할 수 있습니다: \(E(\hat{\beta}_k) = \beta_k\). 이를 최소자승법으로 구한 선형회귀모델의 계수값의 비편향성(unbiasedness)라고 합니다.

오차(Errors)

이번에는 오차에 대해서 배워보겠습니다. 앞서 우리는 모집단 수준에서의 오차의 기대값은 0으로 수렴한다(\(E(u) = 0\))는 것을 가정하였습니다. 그렇다면 오차의 분산(\(Var(u)\))은 어떨까요? 이 오차의 분산에 관한 내용이 바로 다중선형회귀모델의 다섯번째 통계적 특성이자 가정, MLR.5입니다. 이미 단순선형회귀모델에서 살펴보았던 가정과 다르지 않습니다.

회귀분석의 가정: \(\Pr(Y|x)\)의 조건 분포는 동일한 분산을 가진 정규분포를 따르며, \(Y\)의 조건 평균(여기서는 \(\mu_1, \mu_2, \dots, \mu_5\))은 모두 일직선 상에 놓이게 됩니다 (Fox 2016, 17).

  • MLR.5: 오차의 분산은 동질적이다(Homosckedasticity).

    • \(Var(u|x_i, \cdots, x_k)=\sigma^2\)

    • \(E(y|x_1, x_2) = \beta_0 + \beta_1x_1 + \beta_2x_2\)

    • \(Var(y|x_1, x_2) = Var(y) = Var(u) = \sigma^2 = E(u^2)\)

    • 오차의 표준편차는 \(\sqrt{\sigma^2} = \sigma\)가 됩니다.

  • 위에서부터 순서대로 저 가정의 내용을 풀어가보면, 먼저 우리는 주어진 설명변수들 하에서 오차항의 분산을 모집단 수준에서 \(\sigma^2\)라고 합니다. \(\sigma\)가 표준편차고 분산은 표준편차의 제곱이라는 수리적 정리를 여기서 딱히 증명할 필요는 없을 거 같으니 이렇게 넘어가겠습니다.

  • 그리고 \(x_1, x_2\)라는 다중선형회귀모델의 두 설명변수가 있다고 할 때, 그 설명변수들이 주어졌을 때의 종속변수를 예측할 수 있는 기대값은 오차를 제외한 두 설명변수의 다중선형회귀모델의 PRF로 결정됩니다.

  • 그리고 이러한 설명변수들이 주어졌을 때의 종속변수의 분산은 MLR.5에 따라 오차항의 분산과 같고, 오차항의 분산은 \(\sigma^2\)입니다. 이는 \(u^2\)의 기대값과도 같습니다.

  • 표준편차는 분산의 제곱근이므로 결과적으로 오차의 표준편차는 \(\sigma\)가 됩니다.

\(\hat{\sigma}^2\) 추정하기

표본에서의 오차—즉, 잔차의 분산(\(\hat{\sigma}^2\))은 표본의 크기의 영향을 받습니다. 정확히는 \[\hat{\sigma}^2=\frac{1}{n-K-1}\sum\hat{u}^2_i\]이며, 이는 곧 잔차의 제곱합을 n-k-1, 전체 관측치의 개수에서 변수의 개수-1을 하는 것과 같습니다(\(SSR/(n-K-1)\)).

MLR.1부터 MLR.5까지의 가정이 모두 충족된다면 모집단 오차의 분산, \(\sigma^2\)에 대한 불편추정량인 \(\hat{\sigma}^2\)을 얻을 수 있습니다.

계수(Coefficients)

최소자승법(ordinary least square)는 예측값과 실제 관측치 간의 차이인 잔차의 제곱합을 최소로 하는 \(\hat{\beta}_k\)를 구하는 방법을 말합니다. 따라서 최소자승법에 따라 구한 \(\beta_i\)가 편향되어 있지 않다는 것은 모집단에서 추출한 표본들로부터 구한 각 \(\hat{\beta}_k\)의 기대값이 모집단의 \(\beta_k\)와 같다는 것(\(E(\hat{\beta}_k)=\beta_k\))을 의미합니다.

그러나 \(\hat{\beta}_k\)는 하나의 추정치에 불과하므로 필연적으로 불확실성을 내포하고 있습니다. 따라서 표본의 통계치로 모집단의 모수를 추론할 때에는 단지 \(\hat{\beta}_k\)를 제시하는 것만으로는 부족합니. 예를 들어, 우리는 “모집단에서의 계수, \(\beta_k\)가 0보다 큰가?”라는 질문에 대답하기 위해서는 다음과 같은 것들을 필요로 합니다.

  • \(\beta_k\)에 대한 (최선의) 추정치인 \(\hat{\beta}_k\)

  • 우리가 그 최선의 추정치에 대해 얼마만큼 “신뢰할 수 있느냐”에 관한 \(\hat{\beta}_k\)의 분산(\(Var(\hat{\beta}_k)\)). 이 분산은 이론적으로 모집단에서 수많은 표본들을 뽑고 그 표본들에 대한 SRF에서 도출된 \(\hat{\beta}_k\)들이 얼마나 서로 다른지를 보여줍니다.

  • 또, \(\hat{\beta}_k\)에 대해 신뢰하기 위해서 t-statistic, p-값 등과 같은 통계치들을 확인하고는 합니다.

분산(Variance)

분산에 관한 내용들이 계속해서 나오는데, 과연 분산이 크다는 것과 작다는 것은 무엇을 의미하는 것일까요? 다중선형회귀모델에서 분산이 중요하게 논의되는 맥락을 이해하기 위해서는 먼저 표집분포(sampling distribution)에 대해 짚고 넘어갈 필요가 있습니다.

표집분포(Sampling distribution)

\(\hat{\beta}_k\)을 확률변수라고 생각해봅시다. 주어진 하나의 표본에 대해서 \(\hat{\beta}_k\)는 고정된 값입니다. 그 하나의 표본에서 \(\hat{\beta}_k\)는 정해져 있기 때문입니다. 그러나 사실 우리는 모집단으로부터 또 다른 표본을 확보할 수 있습니다. MLR.2의 무작위 표집(혹은 확률표집) 가정에 따라서 우리는 하나의 모집단에서 뽑아낸 수없이 많은 표본들로부터 \(\hat{\beta}_k\)들을 일종의 확률변수로서 분포로 보여줄 수 있게 됩니다. 우리는 이 표본들로부터의 얻어낸 \(\hat{\beta}_k\)들의 분포를 표집분포(sampling distribution)라고 합니다. 그리고 우리는 그 표집분포가 모집단에 대한 \(\beta_k\)의 기대값을 포함하고 있을 것이라고 기대하고, \(\hat{\beta}_k\)의 분산—\(Var(\hat{\beta}_k)\)이 그 분포가 모집단의 \(\beta_k\)을 포함할 “불확실성”을 보여주는 것입니다.

표집분포의 표준오차(Standard errors)

여기서 우리는 수리통계적으로 \(\hat{\beta}_k\)에 대한 표준편차의 추정치에 대한 정리를 생각해볼 수 있습니다. 즉, \(\hat{\beta}_k\)의 표준오차에 대한 추정치는 표본에 따라 조건적이며, 동시에 MLR.1과 MLR.5 가정에 기초하고 있습니다. \[se(\hat{\beta}_k) = \frac{\hat{\sigma}}{[SST_k\cdot (1-R^2_k)]^{1/2}}\] 이때, \(SST_k\)\(x_k\)의 변동량을 의미하며, \(R^2_k\)는 다른 모든 설명변수들로 \(x_k\)를 회귀분석한 \(R^2\) 결과라고 할 수 있습니다.

표집분포의 표준오차는 또 다른 방식으로도 보여줄 수 있는데, 수리적으로만 유도해보도록 하겠습니다. \[\begin{equation*} \begin{aligned} sd(\hat{\beta_k})&= \sqrt{Var(\hat{\beta_k})}\\ &= \frac{\sigma}{[SST_k\cdot(1-R^2_k)]^{1/2}}\\ se(\hat{\beta_k})&= \frac{\hat{\sigma}}{[SST_k\cdot(1-R^2_k)]^{1/2}}\\ &= \frac{\hat{\sigma}}{\sqrt{n}\cdot sd(x_k)\cdot \sqrt{1-R^2_k}} \end{aligned} \end{equation*}\]

즉, 표준오차가 작을수록 우리가 표본을 통해 얻어낸 표본의 \(\hat{\beta}_k\)들이 만들어내는 분포가 모집단의 \(\beta_k\)을 포함하고 있을 가능성이 높다고 할 수 있습니다.

Best Linear Unbiased Estimator

그렇다면 이제는 이른바 BLUE, 불편추정량에 대해 알아볼 차례입니다. 대체 이 불편추정량이라는 것이 무엇을 의미하는 것일까요? 바로 모든 표본들을 통틀어 ‘평균적으로’ 그 추정량이 최선의(효율적이고 편향되지 않은) 추정량이라는 것을 의미합니다. 그리고 표준오차가 작다는 것은 그만큼 우리의 추정량이 “효율적”(efficient)이라는 것을 말합니다. MLR.1부터 MLR.5까지의 가정이 충족되는 하에서 OLS 추정량은 불편추정량입니다.

모델의 특정(specification)

부적절한(irrelevant) 변수의 포함

만약 우리가 추정해야할 모델이 \(y = \beta_0 + \beta_1x + u\)라고 합시다. 그런데 모델을 \(y = \beta_0 + \beta_1x + \beta_2z + e\)로 수립해 추정하였다고 합시다. 이 경우에 부적절한 \(z\) 변수를 모델에 포함하여 모델을 잘못 특정하였다고 말합니다(misspecified).

잘못 특정된 모델: \(E(\hat{\beta_1})\)\(Var(\hat{\beta_1})\)에 미치는 영향

좀 더 자세히 이 잘못 특정된 모델이 \(E(\hat{\beta_1})\)에 미치는 효과를 살펴보도록 하겠습니다. 우리는 MLR.1로부터 MLR.4까지의 가정 하에서 \(E(\hat{\beta_k})=\beta_k\)가 된다는 사실을 알고 있습니다. 그렇다면 \(\beta_2\), 즉 잘못 집어넣은 이 변수의 계수값이 0이라면 그것이 MLR.1부터 MLR.4까지의 가정에 영향을 미칠까요?

  • 부적절한 변수를 모델에 포함하게 되면, 이 모델에서 우리는 \(\tilde{\beta_1}\)를 얻게 됩니다. \(\hat{\beta_1}\)이 제대로 된 모델에서 얻을 수 있는 OLS 추정치라고 합시다. 그러면 \(E(\tilde{\beta_1}|x_k)=\beta_1\)라고 표현할 수 있습니다.

  • 이 경우에 분산은 다음과 같은 관계를 가지게 됩니다.

\[\begin{equation*} \begin{aligned} Var(\hat{\beta_1}|x_k)&=\frac{\sigma^2}{\sum^N_{i=1}(x_{i1}-\bar{x_1})^2}\\ &\leq \frac{\sigma^2}{(1-R^2_1)\sum^N_{i=1}(X_{i1}-\bar{x_1})^2} = Var(\tilde{\beta_1}|x_k). \end{aligned} \end{equation*}\]

  • \(se(\hat{\beta_1}) = \frac{\sigma^2}{[SST_1\cdot(1-R^2_1)]^{1/2}}\)라는 것을 다시 한 번 떠올려봅시다.

    • 부적절한 변수를 모형에 포함시키더라도 \(SST_1\)는 변하지 않습니다.

    • 이때, \(R^2_1\)\(x_1\)을 종속변수로 하는 \(x_2\)의 회귀분석으로부터 얻어낸 \(R^2\)입니다.

      • 정확히는 \(x_1 = \alpha_0 + \alpha_1z + e\)
    • 만약 \(z\)\(x\)를 잘 설명한다면, \(R^2_1\)는 높아질 것이고, \((1-R^2_1)\)는 작아질 것입니다. 따라서 분모가 작아지므로 결과적으로 \(se(\hat{\beta_1})\)은 커지게 됩니다.

  • 따라서 표본에서 \(x_1\)\(x_2\)가 서로 상관되어 있다면, \(x_2\)를 포함하는 것은 \(\beta_1\)에 대한 추정량의 분산을 증가시킬 수 있습니다.

결론적으로 부적절한 변수가 모델에 포함될 경우, 모수 추정에 편향성(bias)는 나타나지 않지만 모수에 대한 추정치의 표준오차가 증가하는 결과가 나타납니다.

적절한(relevant) 변수의 제외

한편, 우리가 원래 추정해야할 모델이 \(y = \beta_0 + \beta_1x + \beta_2z + u\)라고 해보겠습니다. 그런데 모델을 잘못 특정해서 \(y = \beta_0 + \beta_1x + e\)로 추정했다고 할 때, \(e = \beta_2z + u\)라고 할 수 있습니다. 이 경우에는 무엇이 문제일까요? MLR.1부터 MLR.5까지의 가정들이 위배되었다고 할 수 있을까요?

일단 \(x\)\(z\)의 상관관계가 없다, 즉 \(Cov(x, z) = 0\)이라고 생각해보겠습니다. 이 경우에는 아무 문제가 없습니다. 왜냐하면 우리가 추정해야 하는 정확한 모델의 \(\beta_1\)와 잘못 특정한 모델의 \(\beta_1\)가 동일하기 때문입니다. 다만 잘못 특정한 모델의 오차항의 크기가 클 뿐입니다. 왜냐하면 오차항으로부터 \(y\)를 설명할 수 있는 \(z\)라는 요인을 추출해내지 못했기 때문입니다.

문제는 바로 \(Cor(x, z)\neq0\)일 경우입니다. Wooldridge(2016: 89-90)에서도 살펴볼 수 있듯이, 우리는 네 가지 누락변수로 인한 편의(Omitted variable bias, OVB)를 생각해볼 수 있습니다.

  • 만약 \(Cov(x, z) > 0, \beta_2 > 0\)이면, \(\hat{\beta_1} > \beta_1\)이므로 이 경우는 Positive OVB라고 합니다.

  • 만약 \(Cov(x, z) > 0, \beta_2 < 0\)이면, \(\hat{\beta_1} < \beta_1\)이므로 이 경우는 Negative OVB라고 합니다.

  • 만약 \(Cov(x, z) < 0, \beta_2 > 0\)이면, \(\hat{\beta_1} > \beta_1\)이므로 이 경우는 Negative OVB라고 합니다.

  • 만약 \(Cov(x, z) < 0, \beta_2 < 0\)이면, \(\hat{\beta_1} < \beta_1\)이므로 이 경우는 Positive OVB라고 합니다.

만약 적절한 변수를 제외하고 만든 모델로 OLS 추정을 하게될 경우에 우리는 \[\begin{equation*} \tilde{\beta_1}=\hat{\beta_1} + \frac{\sum^N_{i=1}(x_{i1}-\bar{x}_1)e}{\sum^N_{i=1}(x_{i1}-\bar{x}_1)^2} \end{equation*}\] 를 얻게 됩니다. 즉, 원래 추정하고자 했던 \(\hat{\beta_1}\)에 비해 뭔가가 더 붙는 거슬 확인할 수 있습니다. 그렇다면 이 우변의 기대값을 구해보도록 하겠습니다.

  • 일단, 위에서도 살펴보았던 것처럼 \(e = \beta_2z + u\)입니다.

  • 이걸 방금 전의 OLS 추정치, 우변에다가 대압해보겠습니다. 정말 끔찍한 수식이 나오지만 원래 추정하고자 했던 \(\hat{\beta_1}\)에 뭔가 점점 잡다한게 더해지고 있다는 것에서부터 이게 문제가 있다는 게 짐작이 가시겠죠?

\[\begin{equation*} \tilde{\beta_1}=\hat{\beta_1} + \frac{\hat{\beta_2}\sum^N_{i=1}(x_{i1}-\bar{x}_1)x_{i2} + \sum^N_{i=1}(x_{i1}-\bar{x}_1)e}{\sum^N_{i=1}(x_{i1}-\bar{x}_1)^2} \end{equation*}\]

이 수식으로 주어진 설명변수들에 대한 기대값을 구해보면,

\[\begin{equation*} \begin{aligned} E(\tilde{\beta_1}|x_k)&= \hat{\beta}_1\\ &\:\:\:+\frac{\hat{\beta_2}\sum^N_{i=1}(x_{i1}-\bar{x}_1)x_{i2} + \sum^N_{i=1}(x_{i1}-\bar{x}_1)E(e|x_k)}{\sum^N_{i=1}(x_{i1}-\bar{x}_1)^2}\\ &= \hat{\beta}_1 + \hat{\beta}_2\frac{\sum^N_{i=1}(x_{i1}-\bar{x}_1)x_{i2}}{\sum^N_{i=1}(x_{i1}-\bar{x}_1)^2}\\ &= \hat{\beta}_1 + \hat{\beta}_2\widehat{Cov(x_1, x_2)}/\widehat{Var(x_1)} \end{aligned} \end{equation*}\] 라는 결과를 도출하게 됩니다. 따라서, 적절한 변수를 모델에서 제외할 때 생기는 편향, 누락변수의 편향(OVB)의 크기는 \[\begin{equation*} \text{Bias}(\tilde{\beta_1}) = E(\tilde{\beta_1})|x_k - \beta_1 = \beta_2\frac{\widehat{Cov(x_1, x_2)}}{\widehat{Var(x_1)}} \end{equation*}\] 가 됩니다. 그렇다면, 위에서 살펴본 것 같이 두 경우를 생각해볼 수 있겠죠?

  • \(\hat{\beta_2}=0\)

  • \(\widehat{Cov(x_1, x_2)}=0\)

이 경우들에서는 편향성이 0이 됩니다. 따라서 일반적으로 종속변수에 영향을 미치는 변수를 누락시키는 문제는 누락변수가 포함된 변수들과 독립적이지 않은 한에야 포함된 변수들의 OLS 추정값들의 편향시키는 결과를 가져옵니다. 그리고 그 편향의 방향성과 크기는 위에서 살펴본 네 가지 경우의 수에 따라서 나타날 수 있으며, \(\hat{\beta_2}\)\(\widehat{Cov(x_1, x_2)}\)의 부호와 크기에 따라 결정됩니다.

다양한 변수들 (Various variables)

질적 변수(Qualitative variables)

앞서 변수의 종류에 대해서 다루어본 적이 있습니다. 간략하게 말하면 일정한 간격을 가진 연속적인 수로 이루어진 연속형 변수(continuous variables)와 각 부류 간에 서로 배타적인 명목형 변수(혹은 분류형 변수, nominal or categorical variables), 그리고 그 사이에 서로 다른 부류임에도 불구하고 순위를 매길 수 있는 순위형 변수(ordinal variables)라고 구분할 수 있습니다.1

일단 변수가 연속형—양적 변수라고 할 때, 우리는 설명변수 \(x\)\(\mathbb{R}\), 실수에 속한다고 할 수 있습니다. 즉 \(x\in\mathbb{R}\)이라고 한다면, \(y = \alpha + \beta x + u\)에서 \(\beta\)가 의미하는 것은 무엇일까요?

한편, 변수가 질적 변수—예를 들어, 명목형이라고 하겠습니다. 따라서 이때 새로운 변수 \(w\)는 어떤 분류목에 속한다는 의미에서 \(w\in\{A, B, C\}\)라고 하겠습니다. 이때의 \(z = \gamma + \delta w + \nu\)에서 \(\delta\)가 의미하는 것은 무엇일까요?

위의 두 모델은 같은 형태를 가지지만 설명변수의 유형이 다릅니다. 양적 변수는 \(x \in \mathbb{R}\)이었고, 질적 변수는 \(w \in \{A,B,C\}\)로 나타낼 수 있었습니다. 바로 위에서는 모델의 특정(specification)에 대하여 살펴보았다면, 이번에는 설명변수의 유형에 따라 우리가 얻는 \(\beta_i\)의 의미가 어떻게 달라지는지를 살펴보고자 하는 것입니다.

질적 변수로 우리가 모델에 종종 포함하는 것은 이른바 더미변수(dummy variables, dummies)라고 불리는 것들입니다. 더미변수는 분류형 변수를 각 카테고리별로 쪼개어 각각 변수로 만든 결과로서, 그 카테고리에 속할 경우 1, 속하지 않을 경우 0으로 보여줍니다. 더미변수라고 부르는 이유는 이 변수가 해당 관측치가 특정한 카테고리에 속해있다 혹은 속해있지 않다는 것만을 말해주나는 점에서 그 정보량이 연속형이나 다른 유형의 변수들에 비해 상대적으로 적다는 것 때문입니다. \(w\) 변수를 예로 들자면, 우리는 \(w\)를 각각 \(\{A,B,C\}\)라는 카테고리별로 더미변수 3개로 쪼갤 수 있습니다. \[\begin{equation*} w = \begin{cases} A & \text{iff } wA = 1\\ B & \text{iff } wB = 1\\ C & \text{iff } wC = 1 \end{cases} \end{equation*}\]

그렇다면 이 더미변수들을 질적 변수로 구성했던 \(z = \gamma + \delta w + v\)에 투입하여 이 회귀모델을 실제 분석가능한 모델로 재구성해보도록 하겠습니다. \[\begin{equation*} \begin{aligned} &z = \gamma_1 I(w = A) + \gamma_2 I(w = B) + \gamma_3 I(w = C) + \nu\\ &z = \gamma_1 wA + \gamma_2 wB + \gamma_3 wC + \nu \end{aligned} \end{equation*}\] 자, 이렇게 분류형 변수를 더미변수들로 나누어 모델에 집어넣어 보면, 이론적으로는 문제가 없어보입니다. 왜냐하면 각각의 더미변수들을 모두 합쳐놓은 것이 원래의 분류형 변수일테니까요. 그럼 이대로 분석이 가능할까요? 아닙니다. 왜냐하면 위의 회귀분석모델은 완전다중공선성(Perfect Mulitcollinearity)로 인해 분석이 이루어지지 않게 됩니다. 세 더미변수의 총합, 즉 절편값이 1이 되기 때문입니다(\(wA+wB+wC = 1\)). 따라서 모든 조건이 일정하다고 할 때, \(z = \gamma + \delta_1 wA + \delta_2 wB + \delta_3 wC + \nu\)는 사실상 아무 것도 분석하지 못합니다.

더미변수들을 가지고 분석모델을 구성할 때는 전체 분류에 속하는 더미변수들 중 하나를 제외하고 모델에 투입해야 합니다. 그 제외된 분류가 바로 전체 더미들에 대한 기준변수가 됩니다. 예를 들어보면, 종속변수에 대한 계절의 효과를 보고 싶다고 합시다. 만약 봄, 여름, 가을, 겨울을 각각 더미로 측정할 경우 그 중 봄을 제외한 나머지 세 계절의 더미변수를 모델에 투입합니다. 이때, 여름/가을/겨울의 계수는 봄이라는 계절에 비교하여 해석할 수 있습니다. 일단 수리적 모형으로 살펴보겠습니다. 이번에는 사계절이 아니라 앞서의 \(w \in \{A,B,C\}\)의 분류형 변수를 기준으로 보겠습니다. \[\begin{equation*} \begin{aligned} &z = \gamma + \delta_2 wB + \delta_3 wC + v\\ &z = \gamma + \delta_1 wA + \delta_3 wC + v\\ &z = \gamma + \delta_1 wA + \delta_2 wB + v\\ \end{aligned} \end{equation*}\] 첫 번째 식의 경우 \(\delta_2, \delta_3\)\(wA\)에 비하여 \(wB\)\(wC\)가 종속변수에 미치는 효과를 보여줍니다. \(\delta_2 < 0\)이라면 우리는 \(wB\)\(wA\)에 비해 종속변수에 미치는 효과가 \(\delta_2\)만큼 ‘덜’ 하다는 의미입니다. 간략히 말하자면, 더미변수들의 효과는 항상 생략된 카테고리에 비교하여 해석되어야 합니다.

## 필요한 패키지를 불러오겠습니다.
library(ezpickr)
library(ggplot2)
library(futurevisions)
library(patchwork)
library(tidyverse)

## 먼저 가상의 데이터를 만들어 보겠습니다.

fake.data1 <- tibble(Consumption = seq(45, 94.5, 0.5) + 
                       rnorm(100, 5, 4),
                    Gender = rep("male", 100),
                    region = gl(n = 2, k = 50,
                               length = 2*50,
                               labels = c("PK", "TK"),
                               ordered = F),
                    Income = seq(50, 149, 1) + 
                      rnorm(100, 2, 10))

fake.data2 <- tibble(Consumption = seq(10, 59.6, 0.5) +
                       rnorm(100, 2, 8),
                    Gender = rep("female", 100),
                    region = gl(n = 2, k = 50,
                               length = 2*50,
                               labels = c("Seoul", "Honam"),
                               ordered = F),
                    Income = seq(30, 129, 1) + 
                      rnorm(100, 2, 10))

fake.data <- bind_rows(fake.data1, fake.data2) %>% 
  mutate(
  Gender = Gender %>% parse_factor(., levels = c("female", "male"),
                                   include_na = F, ordered = T),
  region = region %>% as.character() %>%
    parse_factor(., levels = c("PK", "TK", "Honam", "Seoul"),
                 include_na = F, ordered = T)
)
fake.data
## 각 성별에 따라서 기울기는 같지만 절편은 다른 회귀모델을 만들겠습니다.

model1 <- lm(Consumption ~ Gender + Income, data = fake.data)
summary(model1)
## 
## Call:
## lm(formula = Consumption ~ Gender + Income, data = fake.data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -20.0571  -5.8740   0.4099   4.4216  22.5627 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 16.75799    1.84282   9.094   <2e-16 ***
## Gender.L    21.83555    0.85002  25.688   <2e-16 ***
## Income       0.42513    0.01916  22.186   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 8.123 on 197 degrees of freedom
## Multiple R-squared:  0.8921, Adjusted R-squared:  0.891 
## F-statistic: 814.7 on 2 and 197 DF,  p-value: < 2.2e-16
## 회귀분석의 예측값을 별도의 열로 추가한 데이터를 만듭니다.
predict.fake <- bind_cols(fake.data, pred.gender = predict(model1))

predict.fake %>% 
  ggplot(aes(x = Income, y = Consumption, color=Gender)) + 
  geom_point(alpha = 1/3) + 
   geom_smooth(aes(y = pred.gender, color = Gender),
              method="lm", se=FALSE, fullrange=TRUE, 
              alpha = 1/3) + 
  scale_color_manual(values=futurevisions("mars")) + 
  theme_bw() + theme(legend.position = "bottom")

더미변수인 성별에 따라서 분석했을 경우, 각각 다른 두 개의 선을 그릴 수 있습니다. 앞서 살펴본 모델에서 더미변수 Gender의 계수값인 29.12는 무엇을 의미할까요? 바로 절편값의 차이를 말합니다. 즉, 더미변수의 경우 계수값은 기울기의 차이를 보여주는 것이 아니라 여성과 남성 집단의 추정치에 있어서 절편 크기의 차이를 보여주는 것입니다. 따라서 소득수준(Income)이 0일 때의 두 성별 집단의 소비 차이는 남성이 29.12만큼 더 크다고 이해할 수 있습니다. 분석 결과만 놓고 해석할 경우에는 여성이 기준변수이므로, “여성에 비하여 남성은 평균적으로 소비 수준이 29.12 높다”고 말할 수 있습니다. 카테고리가 여러개라도 분석하는 방식은 달라지지 않습니다.

model2 <- lm(Consumption ~ region + Income, data = fake.data)
summary(model2)
## 
## Call:
## lm(formula = Consumption ~ region + Income, data = fake.data)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -21.6209  -5.2047  -0.2184   4.2042  21.8285 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  27.59874    3.22962   8.545 3.67e-15 ***
## region.L    -29.24316    1.25653 -23.273  < 2e-16 ***
## region.Q     -8.40970    2.08702  -4.030 8.01e-05 ***
## region.C     15.46734    1.13612  13.614  < 2e-16 ***
## Income        0.30649    0.03482   8.802 7.20e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 7.832 on 195 degrees of freedom
## Multiple R-squared:  0.9007, Adjusted R-squared:  0.8987 
## F-statistic: 442.3 on 4 and 195 DF,  p-value: < 2.2e-16
predict.fake <- bind_cols(fake.data, pred.region = predict(model2))

predict.fake %>% 
  ggplot(aes(x = Income, y = Consumption, color=region)) + 
  geom_point(alpha = 1/3) + 
  geom_smooth(aes(y = pred.region, color = region),
              method="lm", se=FALSE, fullrange=TRUE,
              alpha = 1/3) + 
  scale_color_manual(values=futurevisions("titan")) + 
  theme_bw() + theme(legend.position = "bottom")

간단한 정리

개념들의 유기적인 연결

이 통계적인 논리들은 개별적인 것같지만 모두 유기적으로 연결되어 있습니다. 한 가지 예제를 통해 앞서 살펴보았던 내용들을 간단히 정리하는 시간을 가져보고자 합니다. 여러분들이 야구 경기가 시작하기 전에 그 앞에 위치한 식당의 맥주 소비량이 암표 가격(black market tickets prices)에 미치는 영향이 있는지를 연구해본다고 합시다. 그리고 어떤 정보상이 이에 관한 다양한 데이터들을 판매하는데 단 한 가지만 살 수 있습니다.

첫째, 아마도 “영향”을 연구하고자 하기 때문에 우리는 주로 회귀모델에서 기울기 계수값이 얼마나 큰지에 관심을 가질 것입니다. 그렇다면 문제는 정보상에게 어떤 데이터셋을 구매하는 것이 최선인가 하는 것입니다.

  • 큰 기울기 계수값을 갖기 위해서는 얼마나 많은 설명변수들이 서로를 설명하는지(covary), 그리고 얼마나 각 설명변수가 고유한 종속변수에 대한 설명력을 가지는지를 알아야 합니다. 아무리 설명변수가 많더라도 설명변수들끼리 공분산이 크다면, 정작 종속변수를 설명하는 데 중첩되어 개별 설명변수가 큰 계수값을 가지기 어렵습니다.

둘째, 만약 계수값의 크기보다 작은 표준오차를 더 신경쓴다면 어떤 데이터가 필요할까요?

  • 일단, 표준오차가 무엇인지에 대해서 다시 한 번 생각해봅시다.

    • 이론적으로 우리는 관심을 가지고 있는 하나의 모집단으로부터 무한한 수의 표본들을 추출해낼 수 있습니다.

    • 우리가 관심을 가지고 있는 것은 모집단 수준에서의 계수들, PRF의 계수들이지만 실제로 모집단은 관측할 수 없기에 우리는 관측가능한 표본들을 가지고 PRF에 대응하는 SRF를 구성해 PRF의 계수들을 추론하게 됩니다.

    • 즉, 표본에 따라서 SRF에 따라 도출된 표본 통계치들은 다소 다르게 나타날 수 있습니다. 대표적으로 표집 방법 등과 같은 이유로 추출된 표본들이 완전히 동일할 가능성이 매우 낮기 때문입니다. 따라서 PRF는 특정한 값으로 정해져 있지만, 우리는 그것을 모르고 우리가 구한 SRF의 계수들이 그 PRF의 계수들, 모수(parameters)를 중심으로 분포하고 있다고 생각하게 됩니다.

    • 이때, 서로 다른 표본들로부터 각기 얻은 일련의 계수들(a set of coefficients from different samples)이 분포를 이룬다고 할 때, 그 분포의 표준편차가 표준오차입니다.

    • 표준오차는 우리의 SRF 계수값들이 실제 진실된 PRF의 모수값과 평균적으로 얼마나 떨어져있는지를 보여줍니다.

  • 이 경우에는 표본의 크기에 대해 물어볼 필요가 있습니다. 표본의 크기가 커질수록 표준오차는 필연적으로 작아집니다. 또한 설명변수에 대한 전체 표본의 변화량(total sample variations)을 확인해보아야 합니다. \(x\)의 총 변화량이 커질수록, PRF의 \(x\)에 대한 \(\beta_1\)의 추정치 \(\hat{\beta_1}\)의 표준오차는 더 작아지게 됩니다.

셋째, 누군가가 “다중공선성(mulicollinearity)은 항상 나쁘다”라고 말했다고 합시다. 과연 그럴까요? 앞서 회귀모델의 가우스-마르코프 가정 중 우리는 “완벽한 다중공선성이 없어야 한다”는 내용이 있다는 것은 이미 알고 있습니다. 그렇다면, 우리는 다중공선성을 완벽하게 피할 수 있을까요?

  • 다중공선성은 가급적 적을 수록 좋겠지만, 항상 나쁜 것은 아닙니다. Wooldridge(2016: 84)에 따르면 다중공선성은 “둘 이상의 설명변수들 간 높은(하지만 완벽하지는 않은) 상관관계”라고 정의됩니다. 만약 \(x_1\)\(x_2\)가 매우 상관되어 있다면, 이는 \(y\)를 설명하기 위한 \(x_1\)의 고유한 변량과 \(x_2\)의 고유한 변량이 작을 것이라는 점을 시사합니다.

  • 보다 기술적으로 \(\hat{\beta_j}\)의 분산에 대해 생각해보겠습니다. 이후로는 \(VAR(\hat{\beta_j})\)라고 하겠습니다. \(VAR\)(\(\hat{\beta_j}\)\(\sigma^2/[SST_j(1-R^2_j)]\)로 나타낼 수 있습니다.

    • 이때 분자는 예측변수들의 영향력을 제외한 \(y\)의 변량입니다. 따라서, 이는 오차의 분산이라고 할 수 있습니다.

    • 분모는 다른 예측변수들의 변량을 포함하지 않은 순수한 각 설명변수의 고유한 분산입니다.

  • 그러나 다중공선성은 항상 나쁘다고 하기에는 어려운 것이 우리는 어디까지나 예측변수들을 이론적 배경에 입각하여 선택하기 때문입니다. 만약 서로 다른 예측변수에 대한 구성개념들이 서로 다른 현상들을 차별적으로 보여준다고 한다면, 우리는 그 변수들이 매우 상관되어 있다고 하더라도 그것들을 제외하기 위해서는 타당한 이유를 갖추어야 합니다.

  • 수적 공변(numerical covariation) 때문에 변수들 간 매우 높은 상관관계를 가질 수 있습니다만 그것이 반드시 나쁘다고 할 수는 없습니다. 단지 그러한 다중공선성이 높은 변수들을 포함한 모델이 설명력에 있어 “덜 유용하다”고 표현할 수 있을 따름입니다.

  • Goldberger는 이 다중공선성의 문제를 “과소표본크기(micronumerosity)”라는 개념으로 설명하고 있습니다.

    • 우리가 다중공선성을 설명변수들 간 높은 상관성으로 정의한다고 할 때, 그 결과로 우리는 더 큰 표준오차를 가지게 되어 결과적으로 추정치의 편의(bias)를 의심해볼 수 있습니다.

    • 그러나 Goldberger는 예측변수들이 매우 상관되어 있다면 그 표준오차는 반드시 크게 나타날 것이며, 큰 표준오차는 모델의 변수들 간의 관계가 매우 불확실하다는 것을 의미한다고 주장합니다.

    • 즉, 설명변수들 간 상관계수가 높아질수록 우리는 변수들의 변화가 종속변수와 관계된 것인지 아닌지를 구별하기가 어려워집니다. 따라서 Goldberger는 과소표본크기라는 개념을 통해 이 문제가 “작은 표본”에 따른 것으로 봐야 한다고 봅니다.

    • 과소표본크기의 맥락에서 보자면, 우리가 충분한 크기의 데이터를 가지지 않는다면 표준오차가 더 커질 것입니다. 예측변수들의 높은 상관관계는 각 예측변수들의 고유한 변량이 매우 작다는 것을 의미합니다. 이는 곧 종속변수를 설명할 변량—정보가 부족하다는 것과 상통합니다.

변수에 대한 심화

우리가 \(y_i = \delta_0 + \delta_1 x_i\)인 모델을 가지고, 이때 \(i \leq n\)이라고 합시다. 그리고 \(a = \frac{1}{n}\sum_i x_i\)이고 \(b=2sd(x)\)라고 하겠습니다. 이때, \(y_i = \lambda_0 + \lambda_1\frac{x_i -a}{b}\)를 어떻게 추정할 수 있을까요? Gelman (2008)2의 내용에서 표준오차에 대해 조금 더 자세히 이해하기 위해 가져와 본 내용입니다.

단순하게 보겠습니다. 만약 \(b = 2sd(x)\)가 아니라 \(b=sd(x)\)였다면, 두 번째 수식에서 \(\frac{x_i-a}{b}\)는 각 관측치들에서 평균을 제외하고 그것을 표준편차로 나누는, 일종의 표준화(standardization) 작업이라고 이해할 수 있을 것입니다. 표준화 작업은 우리로 하여금 변수의 측정척도의 영향에서 자유롭게 합니다. 그런데 만약 \(b=2sd(x)\)라고 한다면, 이 작업이 근본적으로 무언가 차이가 있을까요? 왜 우리는 꼭 \(sd(x)\)로 표준화를 해줘야만 하는 것일까요?

\(y = \delta_0 + \delta_1 x_i\)는 단순회귀모델입니다. 이때 \(\delta_0\)는 절편값이고 \(\delta_1\)은 모델의 회귀계수, 즉 \(x_i\)\(y\)와 맺는 관계 양상을 보여주는 것이죠. 그런데 우리가 두 번째로 수립한 수식에서 \(a\)\(x\)의 평균입니다. \(b\)\(x\)의 표준편차에 2를 곱한 것이죠. 따라서 \(a\), \(b\)로 되어 있는 이 식을 \(x\)와 관련하여 다시 구성하여주면 다음과 같습니다: \(y = \lambda_0 + \lambda_1(\frac{x_i - \bar{x}}{2\times\sigma_x})\). 앞서 말했다시피 일종의 표준화 작업입니다. 이론적으로 \(sd(x)\)\(2sd(x)\)의 차이를 논의하기 전에 실제 데이터를 가지고 어떠한 편화가 있는지를 살펴보겠습니다. 이미 만들어놓은 QOG.s 데이터셋의 1인당 GDP와 무역 개방성 변수를 이용해보겠습니다.3

QOG <- pick(file = "http://www.qogdata.pol.gu.se/data/qog_bas_ts_jan19.dta")

QOG.s <-QOG %>% 
  select(ccode, cname, year, wdi_agedr, 
         wdi_trade, wdi_gdpcapcon2010) %>%
  dplyr::filter(year==2016) %>% drop_na()

QOG.s %>% select(wdi_trade) %>% mutate(
  wdi_trade = wdi_trade,
  wdi_trade1sd = (wdi_trade - mean(wdi_trade))/sd(wdi_trade),
  wdi_trade2sd = (wdi_trade - mean(wdi_trade))/2*sd(wdi_trade)
) %>% summary() %>% knitr::kable()
wdi_trade wdi_trade1sd wdi_trade2sd
Min. : 20.72 Min. :-1.3093 Min. :-1616.3
1st Qu.: 56.10 1st Qu.:-0.5973 1st Qu.: -737.3
Median : 77.26 Median :-0.1714 Median : -211.6
Mean : 85.78 Mean : 0.0000 Mean : 0.0
3rd Qu.:102.75 3rd Qu.: 0.3415 3rd Qu.: 421.5
Max. :407.43 Max. : 6.4735 Max. : 7991.1

그럼 이번에는 세 변수 각각으로 종속변수를 선형회귀분석으로 추정했을 때의 결과를 비교해보도록 하겠습니다. 일단 이 예제를 진행하는 데 있어서 기술적으로(technically) 조작한(manipulated) 변수들의 내용은 다음과 같습니다.

  • 첫째, 1인당 GDP는 달러 기준이므로 단위가 너무 커서 가시적으로 보여주기가 어렵기 때문에 로그를 취한 값을 사용했습니다. 무역 개방성은 비율이기 때문에 단위차이가 너무 크면 표준화한 결과와 원변수의 결과를 한 그래프 안에서 보여주기 어려울 테니까요.

  • 둘째, 무역 개방성은 원변수(Original), 1표준편차로 표준화한 값(One_std), 그리고 2표준편차로 표준화한 값(Two_std)로 조작하였습니다.

  • 절편값에는 크게 관심이 없으므로 제외하고 무역 개방성과 1인당 GDP 간의 선형회귀모델 결과만 보여드리도록 하겠습니다.

간단하게 정리하자면 예측변수의 통계적 유의성 여부, 방향성은 표준화 여부를 떠나서 같습니다. 그리고 여기서는 보여드리지 않았지만 \(R^2\)도 동일합니다. 그 얘기는 세 모델 모두 동일한 \(y\)의 변동량의 일부를 설명하고 있다는 것이겠죠? 그러나 \(\hat{\beta_x}, \hat{\beta_x^{\sigma}}, \hat{\beta_x^{2\sigma}}\)\(se_{\hat{\beta_x}}, se_{\hat{\beta_x^{\sigma}}}, se_{\hat{\beta_x^{2\sigma}}}\)는 서로 다릅니다.

만약 우리가 변수를 적절하게 표준화한다면, \(x\)\(y\)의 관계는 왜곡되지 않게 나타날 것입니다. 또한 변수들은 변수들의 평균에 영향을 받지만 동시에 변수들의 분산—표준편차에도 영향을 받습니다. 왜냐하면 회귀모델은 통계적 기법으로 얘기하자면 이른바 “평균 차이”를 검정하는 방법이기 때문입니다.4 그러나 변수를 표준화한 다음에는 \(x\)의 한 단위 변화라고 해석할 때, 그 한 단위가 무엇을 의미하는지 고민해볼 필요가 있습니다.

일반적인 표준화에 대한 함의가 위의 논의였다면, 다음은 Gelman (2008)의 제안대로 \(2sd(x)\)를 이용해 표준화한 결과가 무슨 의미가 있는지 살펴보겠습니다. 일반 표준화와 비교해서 무슨 차이가 있나요? 보시면 그래프에서 원변수의 계수의 양상과 \(2sd(x)\) 표준화된 결과의 모습이 유사한 것을 확인할 수 있습니다. 즉, 측정척도의 영향에서 자유로우면서도 상대적으로 원변수의 경향성과 비슷한 모습을 보여줌으로써 우리는 단순 표준화 변수를 통한 결과보다 직관적인 이해가 가능하다고 할 수 있겠습니다.

Statistical Significance and Confidence Intervals

기초적인 선형회귀모델 파트와 현재 이 파트까지 따라오셨다면, 회귀분석에 있어서 BLUE라는 것이 무엇을 의미하는지, 그리고 표집분포(sampling distribution)이 무엇인지, 적절하지 않은 변수들을 모델에 포함하였을 때 어떤 결과를 얻게 되는지와 적절한 변수를 모델에 포함시키지 않았을 때 생기는 문제 등에 대해서는 익숙하시리라 생각합니다.

이 챕터에서는 통계적으로 유의미하다는 것의 의미와 그 기준, 그리고 모집단을 알 수 없기 때문에 표본을 통해 통계적 추론을 한다는 것이 실제로 어떠한 분석을 수반하는지 등을 중점적으로 살펴보고자 합니다.

영가설 유의성 검정 (Null Hypothesis Significance Testing; NHST)

우리가 생각하는 모집단에 대한 \(\beta_k\)가 사실(true)라고 가정해보겠습니다. \(\beta_k\)가 보여주고자 하는 모수를 \(w\)라고 하겠습니다. \(\beta_k = w\)라는 가정 하에서, 우리는 관측가능한 표본들로부터 추출한 \(\hat{\beta}_k\)들로부터 나타나는 분포가 얼마나 그 \(w\)를 보여주는 \(\beta_k\)를 포함할 가능성을 가지는지를 생각해볼 수 있습니다. 나아가 \(\beta_k = w\)라고 가정한다면 우리는 사실상 알 수 없는 모수를 아는 것과 다름없게 됩니다. 왜냐하면 \(\beta_k\)의 표집분포의 기대값이 \(w\)를 제대로 보여준다면, 이후에는 충분한 수의 표집과정을 통해 \(\beta_k\)를 충분히 확보만 하면 되는 것이니까요.

기술적으로 우리는 이것을 \((n-k-1)\)의 자유도를 가진 Student t 분포라고 합니다. 그리고 상당한 수의 관측치를 확보하게 된다면, 이 분포는 가우시안(Gaussian) 분포라고 할 수 있습니다. 아래와 같은 공식으로 나타낼 수 있겠네요.

\[ \frac{\hat{\beta_k} - \beta_k}{se(\hat{\beta})} \sim t_{n-k-1} \]

그렇다면 이제 영가설 유의성검정의 절차를 한 번 살펴보도록 하겠습니다. 영가설을 \(H_0: \beta_k = w\)이라고 설정해보도록 하겠습니다. 그리고 이때 t 통계치는 \(\frac{\hat{\beta_k} - w}{se(\hat{\beta_k}-w)} \sim t_{n-k-1}\)로 나타낼 수 있겠네요. 그렇다면 여기서 문제입니다. \(\beta_k\)에 대한 영가설 혹은 연구가설을 기각하기 위해서 우리에게 필요한 t 통계치는 얼마일까요? 즉 \(\hat{\beta_k}\)은 얼마나 \(\beta_k\)로부터 떨어져 있어야할까요?

먼저 영가설 \(H_0: \beta_k = w\)에 대해 그것과 비교하기 위한 대안가설(연구가설)을 \(H_1: \beta_k > w\)이라고 해보겠습니다. 즉, 우리가 관심있는 것은 \(\beta_k > w\)이지만 이것을 직접적으로 검증하거나 혹은 확증할 수는 없기 때문에 \(\beta_k \neq w\)라는 것을 통해 영가설을 기각함으로써 영가설이 기각될 확률, 연구가설이 유의미할 ’확률’을 구하게 되는 것입니다.

이것이 우리가 흔히 말하는 유의수준(significance level)입니다. 기술적으로 서술하자면 “모집단에서 추출한 100개의 표본 중에서 영가설이 사실일 경우를 기각하는 것을 몇 번 관측할 수 있느냐”라고 하는 것입니다. 만약 100개의 표본 중에서 12개의 표본이 영가설의 기대대로 \(\beta_k = w\)라는 것을 보여줬다면, 영가설이 사실일 확률은 0.12 이 될 것입니다. 이때 우리는 이 영가설이 사실일 확률 0.12\(\alpha\)라고 표현합니다. \(\alpha\)의 값이 더 작을 수록 영가설을 기각하는 \(\hat{\beta_k}\)가 더 많다는 것을 의미합니다.

위의 플롯은 영가설(\(H_0\))이 \(\beta_k = 0\)이라고 했을 때, 연구가설(\(H_1\))이 \(\beta_k > 0\)인 경우, 관측치가 10,000개인 표본에서의 기각역(rejection region)을 보여주고 있습니다. 일단 전체 곡선 면적의 합은 1입니다. 당연하겠죠? 밀도함수로 나타낸 분포이니까 전체의 총합은 1입니다. 그리고 플롯에서 기각역이라고 나타난 선 우측의 면적의 총합은 0.05가 됩니다. 통상적으로 그것은 우리가 상정한 영가설대로 \(\beta_k = 0\)일 확률을 의미합니다.

이번에는 영가설(\(H_0\))이 \(\beta_k = 0\)이라고 했을 때, 연구가설(\(H_1\))이 \(\beta_k < 0\)인 경우, 관측치가 10,000개인 표본에서의 기각역(rejection region)을 살펴보겠습니다. 마찬가지로 전체 곡선 면적의 합은 1입니다. 앞서의 플롯과 다른 점은 기각역의 위치입니다. 연구가설이 상정한 계수의 부호가 달라졌기 때문에 기각역의 위치도 달라진 것이죠. 따라서 이때는 선 좌측의 면적의 총합이 0.05가 되고, 영가설대로 \(\beta_k = 0\)일 확률을 의미합니다.

우리는 t 통계치가 우리가 상정한 100개의 표본 중에서 n개의 표본만이 영가설에 부합할 것이다라고 할 수 있는 일종의 결정적 기준값(critical value)보다 클 경우에 영가설을 기각할 수 있습니다. 이 결정적 기준값은 유의수준(\(\alpha\)) 혹은 전체 확률에서 유의수준을 제한 값(\(1-\alpha\))을 Student t 혹은 정규누적밀도함수에 대입하면 구할 수 있습니다.

영가설의 기각 이후

영가설을 기각했다고 해보겠습니다. 그렇다면 우리는 그 기각 결과를 가지고 어떻게 연구가설에 대해 설명할 수 있을까요?

사실 \(\alpha\)라고 하는 특정한 값을 사전에 미리 설정하고 그것을 선긋듯이 어떠한 결과를 결정하는 도구로 사용한다는 것은 문제의 소지가 있어 보입니다. 예를 들어 \(p\) 값이 0.051인 경우와 0,049일 때, 우리는 이들의 통계적 의미를 어떻게 이해해야할까요?

\(p\) 값은 주어진 t 통계치 하에서 영가설을 기각할 수 있는 가장 작은 \(\alpha\)를 의미합니다. 공식을 통해서 살펴보자면, \(T\)가 우리가 얻을 수 있는 모든 가능한 검정 통계량(test statistics)라고 해보겠습니다. 예를 들어 Student tGaussian이 있겠네요. 이때 만약 가설이 특정한 관계의 방향을 설정하지 않고 있다면, 단지 영가설 \(\beta_k = 0\)만을 기각하면 되기 때문에 이른바 양측검정을 상정한 연구가설을 설정하게 될 것입니다. 따라서 이때는 관계의 방향을 상정하지 않는 \(Pr(|T|>|t|) = 2Pr(T>|t|)\)가 성립하게 됩니다.

이제까지는 \(\beta_k = 0\)인 경우를 중심으로 살펴보았습니다. 왜냐하면 사실 회귀분석 같은 경우 영가설은 우리가 기대한 변수가 종속변수에 대해 ’효과가 없을 것’을 주로 기대하기 때문입니다. 따라서 \(\beta_k = 0\)이 기각되었다는 것은 우리가 관심을 가지고 있는 변수가 종속변수에 대해 유의미한 영향이 있을 수 있다는 것을 시사합니다.

하지만 사실 영가설은 반드시 0, 효과가 없다는 것만을 기대할 필요는 없습니다. 예를 들어서 \(H_0: \beta_k = g\)라는 특정한 값을 가지는 영가설에 대해서 \(H_1: \beta_k > g\)와 같이 계수값이 그 특정한 값보다 클 경우를 상정할 수 있습니다. 이때 유의수준 \(\alpha\)를 설정한다면, \(t = \frac{\hat{\beta_k} - g}{se(\hat{\beta_k})}\)가 되므로, 우리는 \(t > c\)이기만 하면 영가설을 기각할 수 있습니다.5 조금 더 풀어서 말하자면 일반적인 t 통계량은 다음과 같이 쓸 수 있습니다.

\[ t = \frac{\text{추정치 - 가설로 기대하는 값}}{\text{추정치의 표준오차}} \]

이제 정치학 분야에서 실제로 사용할법한 데이터를 이용해서 위의 내용을 한 번 더 살펴보도록 하겠습니다. Quality of Government 데이터셋을 이용해서 \(y = a_0 + \sum_k \beta_k x_k + e\)의 형태를 갖는 선형회귀모델을 한 번 만들어 보겠습니다.

# 단순선형회귀모델과 다중선형회귀모델
model.simple <- 
  lm(wdi_gdpcapcon2010 ~ wdi_trade, data=QOG.sub)
result1 <- broom::tidy(model.simple) %>%
  mutate(model = "SLR")
model.multiple <- 
  lm(wdi_gdpcapcon2010 ~ wdi_trade + p_polity2 + 
       wdi_pop1564, data=QOG.sub)
result2 <- broom::tidy(model.multiple) %>% 
  mutate(model = "MLR")
results <- bind_rows(result1, result2) %>% 
   mutate_if(is.numeric, round, 3)

이렇게 만들어진 두 선형회귀모델을 가지고 영가설이 \(\beta_k = 0\)인 경우와 \(\beta_k = c\)인 경우를 한 번 살펴보도록 하겠습니다. 물론 이 경우에는 \(c\)가 합당한 비교 기준이라고 정당화할 수 있어야할 것입니다. 다중선형회귀모델을 기준으로 모델을 수식으로 표현한다면 아래와 같습니다.

\[ \begin{aligned} \text{Economy} = &\beta_1\text{Trade} + \beta_2\text{Level of Democracy}\\ &+ \beta_3\text{Working Population} + e. \end{aligned} \]

results %>% knitr::kable()
term estimate std.error statistic p.value model
(Intercept) -428.294 2852.271 -0.150 0.881 SLR
wdi_trade 162.553 28.847 5.635 0.000 SLR
(Intercept) -55641.578 12446.463 -4.470 0.000 MLR
wdi_trade 120.069 28.134 4.268 0.000 MLR
p_polity2 757.293 223.603 3.387 0.001 MLR
wdi_pop1564 875.380 202.595 4.321 0.000 MLR

여기서 \(x_1\)에 대한 계수, \(\beta_1\)을 중심으로 일단 영가설을 특정해보도록 하겠습니다.

  • 먼저 \(H_0: \beta_1 = 0\)이라고 할때, 민주주의 변수, 노동가능 인구비율이 통제되었을 때, GDP 대비 재화와 서비스의 수출 및 수입의 총합으로 측정된 무역개방성의 한 단위 증가는 2010년 고정 달러로 측정된 1인당 GDP, 즉 그 국가의 경제규모에 미치는 효과가 없다라는 것이 영가설임을 이해할 수 있습니다.

  • 그 다음으로는 결정적 기준값으로 영가설을 수립해보도록 하겠습니다. 이번의 영가설은 \(\beta_1 = 164.355\)라고 하겠습니다. 즉, 무역 개방성의 한 단위 변화는 1인당 GDP로 측정된 경제규모가 163.48 증가하는 만큼의 효과를 가지고 있다는 것을 의미합니다.

  • 여기서 결정적 기준값을 \(\beta_1 = 164.355\)라고 설정한 것은 단순선형회귀 모델에서의 무역 개방성의 계수값입니다. 따라서 이 영가설을 통해 우리는 단순선형회귀모델에서 무역 개방성과 경제 규모 간의 관계가 다중선형회귀 모델에서 다른 통제변수들이 통제된 가운데 나타나는 무역 개방성과 경제 규모 간의 관계와 다른지, 그리고 그러한 차이가 통계적으로 유의미한지를 살펴볼 수 있습니다.

그렇다면 이번에는 우리가 관심을 가지고 있는, 연구가설에 대해 살펴보겠습니다. 효과의 방향(부호)를 생각할 필요가 없는 경우(양측, two-sided)와 방향도 고려해야 하는 경우(단측, one-sided) 모두를 특정해보도록 하겠습니다.

  • 효과가 없음이 영가설일 때(\(H_0: \beta_1 = 0\))

    1. 단측 연구가설(\(H_A: \beta_1 > 0\), 또는 \(H_A: \beta_1 < 0\)): 무역 개방성은 경제규모에 대해 긍정적 또는 부정적 효과를 가지고 있다. 이때의 연구가설은 긍정적 효과 또는 부정적 효과가 별개의 것이다.

    2. 양측 연구가설(\(H_A: \beta_1 \neq 0\)): 무역 개방성은 경제규모에 대해 ‘효과가 있다.’

  • 연구가설이 \(H_A: \beta_1 = 164.355\)일 경우

    1. 단측 연구가설(\(H_A: \beta_1 > 164.355\), 또는 \(H_A: \beta_1 < 164.355\)): 경제규모에 영향을 미칠 수 있는 다른 요인들을 고려하지 않을 때보다 고려했을 경우(통제했을 경우), 무역 개방성이 경제규모에 미치는 효과가 더 크다/작다.

    2. 양측 연구가설(\(H_A: \beta_1 \neq 164.355\)): 경제규모에 영향을 미칠 수 있는 다른 요인들을 고려하지 않을 때와 고려했을 경우(통제했을 경우), 무역 개방성이 경제규모에 미치는 효과는 다르다(같지 않다).

이번에는 각각의 영가설과 연구가설에 대한 검정을 시행하고 그 결과를 제시 및 해석해보도록 하겠습니다.

# 바로 이전의 분석을 이용해보도록 하겠습니다.
# 단순선형회귀모델의 무역 개방성에 대한 계수와 표준오차, 자유도
b1.simple <- results[2,2]
se1.simple <- results[2,3]
simple.df <- model.simple$df

# 다중선형회귀모델의 무역 개방성에 대한 계수와 표준오차, 자유도
b1.multiple <- results[4,2]
se1.multiple <- results[4,3]
multiple.df <- model.multiple$df

# 첫 번째 연구가설 중 단측 가설입니다.
# HA: beta_1 > 0
pt(as.numeric((b1.simple-0)/se1.simple), 
   simple.df, lower = FALSE)
## [1] 4.131871e-08
# 0.05보다 훨씬 작은 값을 확인할 수 있습니다.
# 즉, 영가설의 기대대로 표본에서 결과를 얻을 확률이 매우 낮다는 것이고
# 영가설을 기각하기에 충분한 경험적 근거를 확보했다고 할 수 있습니다.

# 양측 가설을 한 번 살펴보겠습니다. 방향을 고려할 필요가 없죠.
# HA: beta_1 != 0
2*pt(-abs(as.numeric((b1.simple-0)/se1.simple)), simple.df)
## [1] 8.263742e-08
# 방향을 고려할 필요가 없기 때문에 방향을 고려했을 때의 
# 확률에 2를 곱해줍니다 (좌측 + 우측)

# 두 번째 연구가설(단순 vs. 다중) 중 단측 가설입니다.
# HA: beta_1_Multi > beta_1_Simple
pt(as.numeric((b1.multiple-b1.simple)/(se1.multiple-b1.simple)), 
   multiple.df, lower = FALSE)
## [1] 0.3761995
# 0.05보다 훨씬 큰 값, 영가설은 기각되지 않습니다.
# 당연합니다. 다중회귀분석에서의 무역 개방성의 계수값과
# 단순회귀분석의 무역 개방성의 계수값은 일단 단순회귀분석의
# 계수값이 더 컸습니다. 따라서 위의 연구가설, 다중회귀분석의
# 계수값이 단순회귀분석의 그것보다 클 것이라는 기대는 기각되는 것이
# 우리의 상식에 부합합니다.

# HA: beta_1_Multi != beta_1_Simple
2*pt(-abs(as.numeric((b1.multiple-0)/(se1.multiple-b1.simple))), multiple.df)
## [1] 0.3731572
# 방향을 고려할 필요가 없기 때문에 방향을 고려했을 때의 
# 확률에 2를 곱해줍니다 (좌측 + 우측). 마찬가지로 영가설 기각.
# 둘이 서로 같지 않다는 기대죠? 하지만 두 계수 값의 차이는 각 계수값이
# 서로 다른 표본에서 계산되어 가지게 될 표집분포에 따른 편차,
# 즉, 표준오차에 따라 고려했을 때, 계수의 차이가 유의미하기 보다는
# 표본의 차이에 따라 나타날 수 있는 차이라고 볼 수도 있습니다.
# 그 결과 영가설은 기각되지 않습니다. 
# 두 효과는 통계적으로 차이가 있다고 말하기에는 영가설을 
# 기각할 수 있는 충분한 경험적 근거를 확보하지 못한 것입니다.

\(\beta_k\)에 대한 가설검정?

가설검정에 관련된 내용은 사실 영가설과 연구가설의 기각과 채택, 연역적 접근과 귀납적 접근에 대한 이론적 논의와 동시에 모집단과 표본에 대한 이해에서 시작됩니다. 만약 이 부분들에 대한 이해가 선행되지 않는다면, 같은 것을 말하고 있는 것 같지만 사실 다른 것을 의미하는 결과로 이어지기도 합니다.

예를 들어, 누군가가 \(\beta_k\)에 대한 가설검정을 해야한다고 합시다. 대충 들었을 때는 어떤 변수가 종속변수에 미치는 효과가 통계적으로 유의미한지, 혹은 어떠한 기준값에 비해 큰지 작은지 등과 같은 가설검정을 하고 싶다는 것으로 이해할 수 있을 것입니다. 하지만 저 ’표현’에는 오류가 있습니다.

우리는 어떠한 관계를 보여주는 \(\beta\)가 모집단의 수준에서도 존재하는지 여부를 추론하기 위하여 가설을 수립합니다. 그러나 \(\beta_k\)는 단지 하나의 표본에서 추출한 하나의 통계치일 뿐입니다. 즉, 1번 표본으로부터 모집단의 \(\beta\)를 추정하기 위해 구한 것이 \(\beta_1\)이듯, \(k\)번의 표본으로부터 뽑은 통계치가 바로 \(\beta_k\)인 것입니다. 표집 과정의 본연적 한계로 인하여, 우리는 이론적으로 무수히 많은 표본들을 모집단으로부터 뽑을 수 있지만, 그 표본들로부터 얻을 수 있는 \(\beta_k\)들이 전부 동일하다고 기대할 수 없습니다. 따라서 하나의 표본에 대응하는 하나의 \(\beta_k\)에 대해 가설을 검증한다고 하는 표현은 우리가 실제로 관심을 가지고 있는 모수를 이해하는 데 있어서는 의미없다고 할 수 있습니다. 아 다르고 어 다른 것인데 이론적으로는 이렇게 큰 차이가 있습니다.

\(\beta_k\)\(\hat{\beta_k}\)에 대한 또 다른 접근

서로 다른 데이터를 보여주는 간단한 분포 세 개를 보도록 하겠습니다.

세 분포의 공통점과 차이점은 무엇일까요? 우선 세 분포는 평균(mean)과 표준편차(standard deviation)가 매우 비슷합니다. 하지만 실제 관측치들의 분포 양상은 매우 다르죠. 첫 번째 분포는 정규분포를 따른다면, 두 번째 분포는 지수분포, 마지막 분포는 크게 양극화된 양봉분포(bimodal distribution)의 형태를 띄고 있습니다.

단순히 데이터를 평균과 표준편차만으로 섣불리 이해할 경우 그 데이터를 이용한 통계적 추론에서 오류를 범할 수 있습니다. 따라서 우리는 ‘보다 구조화된’ (more structured) 접근법을 취할 필요가 있습니다.

우선 가장 클래식한 선형회귀모델의 가정들을 다시 한 번 생각해보겠습니다. 총 다섯 개의 세부 가정으로 살펴볼 수 있는데, 순서대로 다중선형회귀분석(Multiple linear regression)에 대한 가정이라는 의미로 MLR라고 라벨링을 해보도록 하겠습니다. 어디까지나 여기서 클래식한 다중선형회귀분석의 가정들은 교차사례(cross-sectional) 자료에 적용가능합니다. 시계열(time-series)이 포함되면 또 고려해야할 문제들이 있기 때문인데, 이는 아마 고급 통계파트의 자료에서 다루게 될 것 같습니다.

  • MLR1. 모집단에서의 모수들의 관계가 선형이다.

  • MLR2. 무작위로 추출된 표본이다.

  • MLR3. 설명변수들 간의 완벽한 다중공선성은 존재하지 않는다.

  • MLR4. 설명변수와 오차는 독립적이다(Zero-conditional mean)

    • 주어진 설명변수라는 조건 하에서 오차항(\(u\))의 기대값은 0이다.

    • 만약 이 가정이 성립되지 않는다면 우리는 모델 특정에 문제가 있었다고 생각할 수 있다. 예를 들면, 종속변수에 영향을 미치는 적절한 변수를 모델에 포함시키지 않아 오차항이 설명변수와 상관성을 가진다고 볼 수 있다.

    • 이 MLR4는 선형회귀분석의 추정치, 계수의 편향성 문제와 매우 밀접한 관계를 가진다.

  • MLR5. (오차항의) 동분산성

    • 주어진 설명변수들에 대해 오차항의 조건 분포가 일정해야 한다.

    • 만약 오차항이 이분산성(heteroskedasticity)을 띈다고 하더라도 그것이 OLS 추정치가 편향되었다는 것을 의미하지는 않는다.

    • 다만 OLS 추정치의 ’효율성’이 낮다는 것을 의미한다. 즉, OLS 중 least 의 조건 최소 분산(least variance)이 아니라는 것을 의미할 뿐이다.

  • MLR1부터 MLR5까지가 충족되었을 때, 우리는 OLS의 결과를 BLUE (Best Linear Unbiased Estimates)라고 한다.

자, 이 다섯 가정을 우리는 한 데 묶어서 Gauss-Markov 가정이라고 합니다. 이 클래식한 선형회귀모델의 가정을 조금 단순하게 묶어보자면 다음과 같이 표현할 수 있을 것 같습니다.

  • \(E(\hat{\beta}_k) = \beta_k\). 당연하겠죠? 만약 BLUE라면 우리가 표본들로부터 얻는 평균들의 평균이 모집단의 기대값과 일치할 거라는 가정 또한 충족될 것입니다.

  • \(Var(\hat{\beta}_k)\)는 표본들로부터 얻은 평균들의 분산으로 어떠한 값을 가지게 될 것입니다. 뭐, 놀랄 건 아니죠. 모집단에서 표본을 추출하는 것은 본연적으로 일정한 오류를 내재하게 되어있기 때문에 평균들도 항상 모집단의 기대값과 같지는 않을 것이고, 그런 표본들의 평균들 간의 차이는 일종의 분산으로 나타날 것이니까요.

그런데 여기서 우리는 위의 두 발견으로부터 하나의 식을 도출해낼 수 있습니다. 만약 우리가 구한 OLS 추정치가 BLUE라면? 그래서 위의 두 조건이 충족된다면? 우리는 표본들로부터 구한 평균들이 어떠한 분포를 보일 것이라고 생각해볼 수 있습니다. 바로 모집단의 기대값을 보여줄 \(E(\hat{\beta}_k)\)를 중심으로 \(Var(\hat{\beta}_k)\)라는 분산을 가진 정규분포입니다.

\[ \hat{\beta}_k \sim N(\hat{\beta}_k, Var(\hat{\beta}_k)) \]

앞서 살펴보았던 \(\hat{\beta}_k \sim N(\hat{\beta}_k, Var(\hat{\beta}_k))\)가 성립한다고 할 때, 우리가 “알 수 있는 것”과 “알 수 없는 것”은 무엇일까요?

  • 먼저 우리가 알 수 있는 것은 크게 세 가지라고 할 수 있습니다. 우리가 가지고 있는 예측변수이자 확률변수인 \(x\)가 어떠한 평균과 분산을 가진 정규분포를 따를 것이라는 것을 알 수 있습니다: \(x\text{에 대한 분포} \sim N(\mu, \tau^2): \frac{1}{2\sqrt{\tau^2\pi}}\text{exp}[-\frac{(x-\mu)^2}{2\tau^2}]\). 그리고 실제로 표본을 통해서 \(\hat{\beta_k}\)\(Var{\hat{\beta_k}}\)도 구할 수 있습니다.

  • 반면에 모집단의 모수, \(\beta_k\)는 알 수 없습니다.

만약 우리가 \(\beta_k\)에 대한 가정을 세울 수 있고, 이론적 분석이 아니라 실제 경험적 데이터를 통해 그러한 가정이 충족되는지 아닌지를 확인할 수 있다면 어떻게 될까요?

신뢰구간(confidence interval)

영가설 유의성 검정, 즉 NHST에서 우리는 이미 \(\alpha\)에 대해서 살펴보았습니다. 알 수 없는 모수 \(\beta_k\)에 대한 알고 있는 통계치 \(\hat{\beta_k}\)를 바탕으로 한 분포의 가정에서 우리는 다시 이 \(\alpha\)로 돌아옵니다. \(\alpha\)라는 개념의 바탕에는 “이론적으로 무수히 많은 표본”이 전제되어 있습니다. 적어도 이론적 수준에서 우리는 하나의 모집단으로부터 수많은 표본을 반복하여 추출할 수 있습니다. 그렇게 무수히 많은 표본들로부터 얻은 통계치의 분포를 표집분포(sampling distribution)이라고 할 수 있고, 그 표집분포를 바탕으로 우리는 얼마나 많은 표본이 영가설의 기대에 부합하는 통계치를 가지는지, 전체 표본에서 그러한 표본의 비율을 \(\alpha\)라고 나타냅니다. 따라서 흔히 사용하는 유의수준 0.05라는 기준은 이런 맥락에서 보자면 “100번의 반복 추출된 표본 중에서 5개의 표본의 표본평균이 영가설의 기대를 포함하고 있을 경우”를 말한다고 할 수 있습니다. 그러면 \(\alpha\)는 조금 더 직관적으로 이해할 수 있습니다.

  • \(\alpha\)는 표집분포에 있어서 일종의 꼬리확률(tail probability)이라고 생각할 수 있습니다.

  • 신뢰구간은 우리가 일반적으로 모수가 그 사이에 존재할 것이라고 기대하는 구간입니다.

  • 반복해서 추출한 표본들에 대해 95%의 신뢰구간은 100번 추출한 표본의 \(\hat{\beta_k}\) 중에서 95개의 표본이 모수 \(\beta_k\)를 포함한다고 기대할 수 있습니다.

신뢰구간 구하기

표집분포로부터 우리는 \(\frac{\hat{\beta_k}-\beta_k}{se(\hat{\beta})} \sim N(0,1)\)이라는 것을 알 수 있습니다. 이건 t죠. 풀어서 말하자면 표본들을 통해 얻은 통계치들과 모수와의 차이를 표집 과정에서 나타날 수 있는 오차로 나누어준 값의 분포를 구할 수 있다는 겁니다. 일종의 표준화 작업을 해주었으니 분포는 평균 0을 갖는 정규분포로 수렴하게 될 것입니다. 여기서 평균이 0이라는 얘기는 어떤 표본에서 얻은 통계치가 완벽하게 모수의 값과 일치한다는 얘기겠죠?

95%의 신뢰구간을 양측꼬리확률로 생각해보겠습니다. 표집분포로 얘기해보자면 1000개의 표본 중 950개는 신뢰구간에 모수의 값을 포함하고 있지만 50개는 포함하지 않는 표본이라는 얘기일 것입니다. 그런데 이때 \(\hat{\beta_k}\)는 모수보다 매우 커서 신뢰구간에 모수의 값을 포함하지 않을 수도 있고, 모수보다 매우 작아서 그럴 수도 있습니다. 즉, 분포의 좌측과 우측 모두에서 모수를 포함하지 않을 확률을 더해서 5%라는 것입니다. 그렇다면 이를 분위(quantiles)로 보면 1000개의 표본에서 얻은 \(\hat{\beta_k}\)를 작은 값부터 큰 값까지 일렬로 줄을 세운다고 할 때, 제일값이 작은 통계치를 가진 표본부터 25번째로 작은 표본까지와 975번째로 작은 표본부터 마지막 표본까지가 이 5%에 해당할 것입니다. 그렇다면 기준점은? 25번째 표본에 해당하는 값과 975번째에 해당하는 값이겠죠(2.5th Quantile, 97.5th Quantile)? 이미 본 적이 있습니다. 정규분포에서 해당하는 확률을 가지는 t값은 \(\pm1.96\)입니다. 그렇다면 우리는 95% 신뢰구간을 이론적으로는 평균에서 \(\pm1.96\times\)표준오차를 통해, 만약 1000개의 표본이 있다면 2.5분위와 97.5분위에 해당하는 값을 기준으로 삼을 수 있을 것입니다. 99%의 신뢰구간도 마찬가지일 것입니다. 정리하자면 신뢰구간은 이론적으로 표본평균과 표준오차를 알고 있다면 다음과 같이 구할 수 있을 것입니다.

\[ \text{95% 신뢰구간}: [\hat{\beta_k} - 1.96 \times se(\hat{\beta_k}),\;\;\;\; \hat{\beta_k} + 1.96 \times se(\hat{\beta_k})].\\ \text{99% 신뢰구간}: [\hat{\beta_k} - 2.58 \times se(\hat{\beta_k}),\;\;\;\; \hat{\beta_k} + 2.58 \times se(\hat{\beta_k})]. \]

여기까지는 앞서 살펴보았던 NHST의 과정과 크게 다르지 않습니다. 그런데 주목해야할 것은 우리가 아까 \(\beta_k\)\(\hat{\beta_k}\), 그리고 \(Var(\hat{\beta_k})\) 간의 관계를 일종의 분포로 보여주었던 가정입니다.

  1. 과연 실제로도 무수히 많은 표본을 뽑았을 때, 이론적 기대와 같은 분포가 나타날까?

  2. 만약 \(\beta_k\)OLS의 가정인 Gaus-Markov 가정을 충족시켜 얻어낸 BLUE라고 한다면, 그래서 우리가 \(\hat{\beta}_k \sim N(\hat{\beta}_k, Var(\hat{\beta}_k))\)라고 할 수 있다면? 이러한 조건을 가진 분포에서 실제로 표집분포처럼 표본을 추출해서 이론적으로 설정된 신뢰구간이 아닌 정말로 2.5분위와 97.5분위에 해당하는 값을 통해 신뢰구간을 보여줄 수 있지 않을까요? 아니, 나아가 보다 구체적으로 \(\hat{\beta_k}\)의 분포를 직접적으로 보여줄 수 있지 않을까요?

Matrix OLS

최소자승법(Ordinary least squared)을 이용한 선형회귀분석, 이른바 OLS에서 BLUE란 무엇을 의미하는가? 그리고 표집분포(sampling distribution)란 무엇인가? 모델에 부적절한 변수를 포함시켰을 때, 또는 적절한 변수를 누락시켰을 때 나타날 수 있는 문제들은 무엇이 있는가? 이제는 이와 같은 질문들에 대해 어느 정도 답을 하실 수 있으리라 생각합니다. 또, 아래의 두 선형회귀모델에 대해서 해석할 수 있게 되셨으리라고 생각합니다.

  • \(y = \alpha + \beta_1x + \beta_2z + \beta_3xz\)

  • \(y - \alpha + \beta_1I(x = 1) + \beta_2I(x = 2)\), 이고 이때 \(x \in\{0,1,2\}\).

마지막으로 가설검정(hypothesis testing)의 기본 논리에 대해서도 조금은 익숙해졌을 것입니다. 어째서 우리는 연구가설(혹은 대안가설)이 맞다라고 직접적으로 검증하지 못하고 경험적 근거를 통해 영가설을 기각하는 “약간은 헷갈릴법한” 방법을 사용하는지 말입니다.

이 챕터에서는 OLS를 다시 한 번 다룰 건데요, 이전과는 다르게 행렬(matrix)을 통해 접근해보고자 합니다. 고등학교 때였나, 행렬이 교과과정에 포함되어 있어 의무적으로 다루었던 것 같기는 한데 혹시 모르니 처음부터 차근차근 살펴보도록 하겠습니다.

행렬? 벡터? 전치행렬? 역행렬?

저도 OLS 기본을 마무리하고 좀 더 깊게 들어갔을 때, 갑자기 [오랜만에] 등장한 이 행렬 때문에 당황했습니다. 하지만 R로 행렬들이 계산되면서 변화하는 것을 추적하며 공부하면 예전에 수학의 정석 붙잡고 노트에 필기하며 낑낑대었던 것보다는 훨씬 편하게 이해하실 수 있을 겁니다.

대체 행렬(matrix), 벡터(vector), 전치행렬(transposed matrix), 역행렬(inversed matrix)라는 이놈들이 왜 OLS를 공부하는 데 등장하는 것일까요? 그리고 OLS에서 \(X\beta\)가 제대로 돌아가기 위해서 가정되어야 하는 것들은 무엇이 있을까요? 마지막으로 이것들을 R로 어떻게 보여줄 수 있을까요? 참고로 \(X\beta\)OLS를 통해 얻은 일련의 계수값을 \(\beta\)라는 하나의 집단으로 나타내고 \(X\)도 마찬가지로 모델에 포함된 설명변수 일체를 표시한 것입니다.

행렬과 벡터를 정의하기에 앞서, 우리는 스칼라(scalar)라는 것에 대해서 알아야만 합니다. 저도 정치학을 전공한 사람이고 방법론은 연구문제를 풀기 위한 도구로 공부하는 사람이기 때문에 엄청 깊은 증명이나 디테일에 집착하지는 않겠습니다. 저도 지금 큰 문제없이 연구방법을 통해 연구문제들을 풀어가고 있으니, 제가 이해한 정도와 비슷한 정도로만 이해하셔도 연구에는 큰 지장은 없으실겁니다. 물론 주정공이나 부전공이 방법론이라던가 하는 경우에는 조금 얘기가 달라지겠죠? 어디까지나 부외자에 한정된 이야기입니다.

스칼라는 하나의 차원에서 측정된 수치화된 결과를 말합니다. 따라서 스칼라는 방향에 대한 정보는 가지지 않고 크기(magnitude)에 대한 정보만 가지고 있다고 할 수 있습니다. 벡터는 이런 스칼라들의 집합입니다. 스칼라와는 다르게 벡터는 크기뿐아니라 방향에 대한 정보도 가지고 있습니다. 예를 들면, \(n\)개의 스칼라를 가진 \(a\)라는 벡터가 있다고 해보겠습니다. 우리는 이 벡터를 \(n\)차원의 벡터라고 부를 수 있습니다. 이런 벡터는 아래의 수식 과 같이 열 또는 행으로 나타낼 수 있습니다.

\[\begin{equation} \label{eq:1} a = \begin{bmatrix}a_1 \\ a_2 \\ a_3 \\ \vdots \\ a_n\end{bmatrix} \text{ or } a = \begin{bmatrix}a_1, a_2, a_3, \cdots, a_n\end{bmatrix} \end{equation}\]

그렇다면 행렬은 무엇일까요? 행렬은 행과 열로 요소들(숫자일 수도 있고 일종의 함수들일 수도 있습니다)이 사각형의 형태를 띄게끔 배열된 결과물입니다. 행렬이라는 이름이 행(raw)과 열(column)이 합쳐진 것이니까 이 정도는 쉽게 유추할 수 있습니다. 행렬을 구성하는 행과 열의 수를 가지고 우리는 행렬의 차원(dimension)이 어떻게 되는지를 말할 수 있습니다. 예를 들면, 아래의 수식 는 요소들의 배열, 즉 행렬의 모습을 보여주고 있습니다. \(j\)는 행을, \(k\)는 열을 의미하는데요, \(a_{jk}\)\(j\)-행과 \(k\)-열에 위치한 요소를 나타냅니다.

\[\begin{equation} \label{eq:2} A = \begin{bmatrix}a_{jk}\end{bmatrix} = \begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \\ a_{21} & a_{21} & \cdots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{m1} & a_{m2} & \cdots & a_{mn} \\ \end{bmatrix} \end{equation}\]

행렬의 정의에 따르면, 우리는 벡터 역시도 일종의 행렬이라고 이해할 수 있습니다. 단 하나의 행(1\(\times n\)) 또는 열(\(m \times1\))로 구성된 행렬인 거죠. 그리고 행렬을 전치(transposition)한다는 것은 말 그대로 위치(position)를 뒤바꾸는 것(trans)이기 때문에 행렬의 행과 열을 서로 뒤바꾼다는 것을 의미합니다(수식 ). 예를 들면 2개의 행과 3개의 열을 가지고 있던 \(2\times3\) 행렬이 3개의 행과 2개의 열을 가진 \(3\times 2\)의 행렬로 전치되는 것입니다.

\[\begin{equation} \label{eq:3} A = \begin{bmatrix}a_{jk}\end{bmatrix} \Rightarrow A^T = \begin{bmatrix}a_{kj}\end{bmatrix} = \begin{bmatrix} a_{11} & a_{21} & \cdots & a_{m1} \\ a_{12} & a_{22} & \cdots & a_{m2} \\ \vdots & \vdots & \ddots & \vdots \\ a_{1n} & a_{2n} & \cdots & a_{mn} \\ \end{bmatrix} \end{equation}\]

주어진 행렬의 곱셈에 대한 역원을 역행렬이라고 합니다.모든 행렬이 반드시 그 역행렬을 가지는 것은 아닙니다. A라는 행렬이 역행렬을 가진다고 한다면, 우리는 A라는 행렬이 “역행렬을 가질 수 있는 행렬”이라는 의미에서 가역행렬(invertible matrix)라고 부릅니다. 반면에 역행렬을 가지지 않는 행렬을 특이행렬(singular matrix)라고 합니다. 만약에 어떤 행렬이 역행렬을 가진다면, 이때 그 역행렬은 가역행렬에 대해 유일한 역행렬입니다. 1:1 관계가 성립한다는 거죠. A라는 행렬에 대한 역행렬을 우리는 A\(^{-1}\)라고 표기합니다.

우리는 행렬을 이용해서 단선순형회귀모델을 표현할 수 있습니다. 이때 필요한 것은 \(x\)\(y\)로, 실제 관측치 \(x_i\)를 요소로 하는 예측변수의 행렬이 모델의 계수값이라고 할 수 있는 행렬을 거치게 되면 \(\hat{y}_i\)의 행렬을 산출하는 논리입니다. 마찬가지로 다중선형회귀모델도 행렬로 표현할 수 있습니다. 그러나 이때에는 \(y_i\)의 변화를 설명하기 위해 두 개 이상의 예측변수들을 나타내는 행렬이 필요합니다. 즉, 최소 세 차원 이상의 행렬이 필요하다는 것입니다.

앞서 정리한 것처럼 벡터는 스칼라들의 집합입니다. 따라서 우리는 \(k\)개의 예측변수들과 \(n\)개의 관측치를 이용한 행렬들로 수식 와 같이 다중선형회귀모델을 나타낼 수 있습니다.

\[\begin{equation} \label{eq:4} y = \begin{bmatrix}y_1 \\ y_2 \\ \vdots \\ y_n \end{bmatrix} X = \begin{bmatrix}1 & x_{21} & x_{31} & \cdots & x_{k1}\\ 1 & x_{22} & x_{32} & \cdots & x_{k2}\\ \vdots & \vdots & \vdots & \ddots & \vdots\\ 1 & x_{2n} & x_{3n} & \cdots & x_{kn}\\\end{bmatrix} \beta = \begin{bmatrix} \beta_1 \\ \beta_2 \\ \vdots \\ \beta_n \\\end{bmatrix} u = \begin{bmatrix} u_1 \\ u_2 \\ \vdots \\ u_n \\\end{bmatrix} \end{equation}\]

수식 에 입각해 우리는 선형모델을 각각의 관측된 \(y\)값과 \(X\), 그리고 추정된 \(\beta\)\(u\)를 가지로 수식 로 보여줄 수 있습니다.

\[\begin{equation} \label{eq:5} \begin{split} &y_1 = \beta_1 + \beta_2x_{21} +\cdots+\beta_kx_{k1} + u_1\\ &y_2 = \beta_1 + \beta_2x_{22} +\cdots+\beta_kx_{k2} + u_2\\ &\vdots\\ &y_n = \beta_1 + \beta_2x_{2n} +\cdots+\beta_kx_{kn} + u_n\\ \end{split} \end{equation}\]

여기서 \(X\)\(y\)는 실제 관측된 데이터로부터 나온 예측변수와 종속변수의 개별 관측값을 의미합니다. 따라서 현실의 데이터는 항상 우리가 알지 못하는 요인들에 의해 영향을 받을 수 있기 때문에 우리는 이 ‘관측하지 못한’ 그리고 ‘비체계적인’ 요인들을 나타내는 오차항을 모델에 포함시킵니다. 그러므로 다중선형회귀모델을 보여주는 행렬은 아래의 수식 와 같이 정리할 수 있습니다.

\[\begin{equation} \label{eq:6} y = \begin{bmatrix}y_1 \\ y_2 \\ \vdots \\ y_n \end{bmatrix} = \begin{bmatrix}1 & x_{21} & x_{31} & \cdots & x_{k1}\\ 1 & x_{22} & x_{32} & \cdots & x_{k2}\\ \vdots & \vdots & \vdots & \ddots & \vdots\\ 1 & x_{2n} & x_{3n} & \cdots & x_{kn}\\\end{bmatrix} \begin{bmatrix} \beta_1 \\ \beta_2 \\ \vdots \\ \beta_n \\\end{bmatrix} + \begin{bmatrix} u_1 \\ u_2 \\ \vdots \\ u_n \\\end{bmatrix} \end{equation}\]

그리고 예측변수 \(X\)의 1은 절편값을 나타냅니다. 행렬 계산 공식을 떠올리지 못하더라도 이 수식 을 직관적으로 이해해보자면, 관측된 종속변수 \(y_i\)는 관측된 \(k\)개의 예측변수의 관측치들인 \(x_{ki}\)가 모델에 의해 추정된 \(\beta\)들과 결합하여 계산되는 예측값 \(\hat{y}_i\)에 현실에서 관측하지 못한 오차들이 더해진 결과라는 것입니다. 우리는 위의 행렬을 계산해서 OLS, 즉 오차의 최소제곱합(least sum of squared errors)을 구할 수 있습니다. 이건 그냥 참고로 알아두세요.

\[ \begin{split} S&=\Sigma^n_{i=1}\epsilon^{2}_{i} = \Sigma^n_{i=1}(Y_i - \beta_1 - \beta_2X_i1 - \cdots - \beta_kX_{ik})^2\\ &=\epsilon'\epsilon = (Y - X\beta)'(Y-X\beta) = Y'Y - Y'X\beta - \beta'X'Y + \beta'X'X\beta \end{split} \]

이렇게 계산된 \(S\)에 편미분을 취하면?

\[ \begin{split} \frac{\partial S}{\partial \beta} =&-2X'Y + 2X'Y\beta = 0\\ \rightarrow&X'X\hat{\beta}= X'Y\\ \rightarrow&\hat{\beta} = (X'X)^{-1}X'Y \end{split} \]

이렇게 됩니다. 이 행렬계산을 통해서 \(\hat{\beta}_k\)를 얻을 수 있고(이게 계수값이죠!), R은 이 행렬계산을 구현할 수 있습니다.

우리가 수많은 변수들과 관측치들을 가지고 있다고 해봅시다. \(i \leq n\), 즉 \(n\)개의 관측치를 가지고 있다고 할 때, 우리는 \[ y_i = \alpha + \beta_1x_{i1} + \cdots + \beta_{K}x_{iK} + \epsilon_i \]

라는 다중선형회귀모델을 구축할 수 있게 됩니다. 이는 예측변수들의 수에 절편까지를 고려한 \(K+1\)개의 제한된 변수를 가진 함수를 가지 모델이라는 것을 의미하며, 우리는 이 모델에서 오차의 제곱합이 최소가 되는 계수값들을 구할 수가 있게 되는 것입니다. 조금 더 직관적이게 행렬을 보여드리자면,

\[ y = \begin{bmatrix}y_1 \\ y_2 \\ \vdots \\ y_n \end{bmatrix}, x_k = \begin{bmatrix}x_{1k} \\ x_{2k} \\ \vdots & x_{Nk}\end{bmatrix}, \text{ 그리고 }, \epsilon = \begin{bmatrix} \epsilon_1 \\ \epsilon_2 \\ \vdots \\ \epsilon_n \\\end{bmatrix} \]

이라고 할 때, 각각의 \(y\), \(x_k\), \(\epsilon\)\(N\times 1\)의 벡터입니다. 관측된 종속변수, 예측변수, 그리고 오차항이죠. 이를 선형회귀모델에 집어넣으면 아래와 같이 다시 써볼 수 있습니다.

\[ y = \begin{bmatrix}y_1 \\ y_2 \\ \vdots \\ y_n \end{bmatrix} = \alpha + \beta_1 \begin{bmatrix}x_{11} \\ x_{21} \\ \vdots & x_{N1}\end{bmatrix} + \cdots + \beta_k\begin{bmatrix}x_{1K} \\ x_{2K} \\ \vdots & x_{NK}\end{bmatrix} + v \]

이렇게 보면 조금 더 명확하죠? 우리가 지겹도록 보았던 \(y = \alpha + \beta_1x_1 + \cdots + \beta_kx_k + \epsilon\)과 형태가 같습니다. 그런데 이렇게 길게 쓰는 건 너무 비효율적이니 계수값들의 벡터를 \(\beta = (\alpha\;\;\beta_k\;\;\cdots\;\; \beta_k)'\)라고 나타내고 예측변수들을 \(\textbf{X} = (1\;\;x_1\;\;\cdots\;\; x_k)\)라고 표현합니다. 이때 \(\textbf{X}\)\(N\times(K+1)\)의 행렬이며, \(\beta\)\(1\times(K+1)\)의 벡터입니다. 이해하기는 어렵지 않겠죠? 왜냐면 예측변수들이야 변수들의 개수(\(K\))에 절편을 표현할 항이 하나 더 추가되서 (\(K+1\))에 실제 관측된 관측치의 수(\(N\))을 고려해준 것이고, 계수값은 변수들에 절편을 포함한 개수만큼 계산되는데 위에서 살펴본 것처럼 열로 표현되니까 벡터라고 할 수 있는 것입니다. 그렇다면 우리는 행렬로 나타내는 OLS를 다음과 같이 심플하게 보여줄 수 있습니다.

\[ \textbf{y} = \textbf{X}\beta+\epsilon \]

이 하나의 식이 모든 \(N\)개의 관측치와 \(K\)개의 예측변수들에 대한 정보를 함축하고 있는 것입니다.

행렬 OLS에서의 가우스-마르코프

당연히 행렬 OLS도 우리가 이전 챕터들에서 보았던 OLS와 동일하니만큼 OLS의 기본가정, 가우스-마르코프 가정을 \(\textbf{y} = \textbf{X}\beta+\epsilon\)을 이용해 보여줄 수 있습니다. 먼저 우리의 추정치로부터 잔차의 벡터를 얻어냅니다. 그냥 식의 좌변과 우변을 요리조리 옮겨주면 됩니다.

\[ \hat{\epsilon} = \textbf{y}-\textbf{X}\hat{\beta} \]

개별 종속변수의 관측치에서 우리가 추정한 계수—모델에 일련의 예측변수들의 관측치들을 하나하나 대입하여 계산된 예측값(\(\hat{\textbf{y}} = \textbf{X}\hat{\beta}\))을 제해주면 나오는 것이 우리가 모델로 설명하지 못한 종속변수의 변동(variations), 오차(errors)가 될 것입니다. 물론 표본을 가지고 하는 것이니 잔차(residuals)라고 하는 게 정확한 표현입니다. 그리고 우리는 이렇게 얻은 잔차의 제곱합을 최소한으로 하고 싶은거죠. 이게 OLS의 핵심이니까요. 최소로 만드는 값을 찾는 것은 여러 가지 방법이 있겠습니다만, 여기서는 편미분을 통해 제곱합이 0이 되는 해를 구하는 방식을 취하겠습니다.

\[ \frac{\partial \hat{\epsilon}'\hat{\epsilon}}{\partial\hat{\beta}} = \frac{\partial(\textbf{y}-\textbf{X}\hat{\beta})'(\textbf{y}-\textbf{X}\hat{\beta})}{\partial \hat{\beta}} = 2\textbf{X}'\textbf{X}\hat{\beta}-2\textbf{X}'\textbf{y} = 0 \]

여기서 \(\hat{\epsilon}'\hat{\epsilon}\)은 제곱합, \(\sum^{N}_{i=1}\epsilon^{2}_{i}\)를 벡터로 보여준 것입니다. 아무튼 \(2\textbf{X}'\textbf{X}\hat{\beta}-2\textbf{X}'\textbf{y} = 0\)라고 할 때, 우리는 이 식을 다시 \(\hat{\beta} = (\textbf{X}'\textbf{X})^{-1}\textbf{X}'\textbf{y}\)로 나타낼 수 있습니다. 이것이 회귀계수(물론 절편까지!)를 구하는 보다 간명한 해(solution)가 되겠습니다. 그리고 이때 회귀계수의 분산은 \(Var(\hat{\beta}) = \sigma^2(X'X)^{-1}\)가 됩니다. \(Var(\hat{\beta})\)\((K+1)\times(K+1)\)의 차원을 갖는 행렬이 되고, 이를 우리는 분산-공분산행렬(variance-covariance matrix)이라고 합니다. 이 분산-공분산행렬은 무엇이고, 왜 중요한지를 이제부터 살펴보겠습니다.

표집분포 (Sampling distribution)

지겹게 들어왔던 표집분포로 다시 돌아왔습니다. 그런데 이번에는 조금 다른 방식으로 표집분포를 나타내보겠습니다. 행렬에 대해서 살펴보았으니 표집분포를 행렬의 형태로 나타내 보겠습니다.

\[ \hat{\beta}\sim N(\beta, \hat{\sigma}^2(\textbf{X}'\textbf{X})^{-1}) \]

수없이 많은 표본을 뽑아서 그 표본들에 동일한 선형회귀모델을 적용해 계산한 계수값 \(\hat{\beta_k}\)들은 표집에 문제가 없다면 모집단의 모수, \(\beta\)를 평균으로 하고 설명변수들 간에 나타날 수 있는 분산-공분산, 일종의 표집과정의 본연적 한계로 나타나는 오차에 따라 분산(\(\hat{\sigma}^2(\textbf{X}'\textbf{X})^{-1}\))을 가지게 될 것이라는 이야기입니다. 이때, 우리는 모집단의 분산을 알 수 없으므로 \(\sigma^2\) 대신에 표본의 분산, \(\hat{\sigma}^2\)를 사용합니다.

행렬 OLS의 유용성

행렬 OLS는 어떠한 장점을 가지고 있길래 사용하는 걸까요? 무엇보다도 예측값에 있어서 분석적 접근(analytical approach)보다 유용하다고 할 수 있습니다. 분석적 접근이란 쉽게 말해서 통계 이론적으로 OLS에 접근하는 방식을 의미하는데요, 모집단과 표본의 관계를 바탕으로 오차와 잔차의 관계, 계수값과 영가설을 바탕으로 tp의 값을 계산하고, 표준편차와 관측치의 수를 바탕으로 표준오차를 계산하는 등의 접근법을 말합니다. 이제까지 해오던 방식입니다.

반면에 행렬 OLS는 우리가 직접적으로 관측한 데이터를 바탕으로 모델을 통해 일종의 예측값들을 얻을 수 있도록 해줍니다. 정확하게는 우리가 관심을 가지고 있는 행렬 \(\bar{\textbf{X}}\)를 가지고 모델을 거쳐 나올 예측값을 계산할 수 있게 됩니다. 다시 말하면, \(\bar{\textbf{X}}\)는 우리가 임의로 만들 수 있습니다. 이 \(\bar{\textbf{X}}\)는 관측된 실제 변수 \(\text{X}\)와 마찬가지로 모든 \(K\)개의 변수들에 대한 가정을 포함하고 있습니다. 즉, 원래 변수는 1, 4, 11, 5, 6 이런 관측치의 배열을 가지고 있다고 할 때, 우리는 이 변수가 1부터 11까지 1씩 증가할 때 나타날 \(\textbf{y}\), 예측값 \(\hat{\textbf{y}}\)를 얻을 수 있습니다. \(\hat{\textbf{y}} = \bar{\textbf{X}}\hat{\beta}\)라는 과정을 통해서 우리는 변수들의 관계를 쉽게 이해하고 실질적인 의미를 파악할 수 있습니다. 그리고 무엇보다 이 \(\hat{\textbf{y}} = \bar{\textbf{X}}\hat{\beta}\)R을 통해 구현될 수 있습니다.

행렬 OLS, R로 보기

행렬 OLS가 과연 분석적 접근법으로 계산해낸 OLS 추정 결과와 같은 결과를 가질지를 알아보기 위해서 실제의 데이터를 이용한 R 분석을 수행해보겠습니다. 언제나와 같이 QoG 데이터셋에서 2015년 기준의 POLITY2, 무역개방성, 2010년 기준 1인당 GDP를 따로 서브셋을 만들어 사용할 것입니다. 먼저 모델이 어떻게 생겼는지를 보겠습니다.

# 먼저 model1이 우리가 추정할 모델입니다.
## 종속변수는 로그를 취한 1인당 GDP
## 1은 절편을 의미
model1 <- lm(log2(wdi_gdpcapcon2010) ~ 
               1 + p_polity2 + wdi_trade, data=QOG2) 

위의 모델은 로그값을 취한 1인당 GDP를 종속변수로 하고, POLITY2 즉, 민주주의와 무역개방성을 예측변수로 합니다. 민주주의 수준과 무역개방성을 가지고 1인당 GDP를 설명하고자 하는 모델인 것이죠. 그럼 행렬 OLS로 이 모델을 재구성해보겠습니다.

X <- model.matrix(object = log2(wdi_gdpcapcon2010) ~ 1 +  
                    p_polity2 + wdi_trade, data=QOG2)
head(X)
##   (Intercept) p_polity2 wdi_trade
## 1           1        -1  55.80373
## 2           1         9  71.80102
## 3           1         2  59.73290
## 4           1        -2  70.32683
## 5           1        -7  72.60151
## 6           1         9  22.48623

먼저 우리가 필요로 하는 예측변수들의 행렬, \(\textbf{X}\)를 만들어줍니다. 로그화된 1인당 GDP의 개별 관측치에 대응하는 절편과 실제 관측된 민주주의, 무역개방성의 관측치가 행렬의 형태로 저장됩니다.

Y <- log2(QOG2$wdi_gdpcapcon2010)
head(Y)
## [1]  9.276256 12.143589 12.216623 11.864574 12.578616 13.357908

마찬가지로 로그값을 취한 1인당 GDP도 \(\textbf{Y}\)라는 행렬에 저장해줍니다. 벡터도 행렬이니까요. 이제 저 둘을 계산해보겠습니다.

beta.Hat <- solve(t(X) %*% X) %*% t(X) %*% Y

이게 우리가 수식으로 썼던 \(\hat{\beta} = (\textbf{X}'\textbf{X})^{-1}\textbf{X}'\textbf{y}\)에 대응하는 R 코드입니다. 순서대로 한 번 보겠습니다. 결과가 어떻게 변화하는지 보세요.

step1 <- solve(t(X) %*% X) 
step1
##               (Intercept)     p_polity2     wdi_trade
## (Intercept)  0.0286305657 -7.398553e-04 -2.205416e-04
## p_polity2   -0.0007398553  1.843584e-04 -9.382902e-07
## wdi_trade   -0.0002205416 -9.382902e-07  2.629664e-06
step2 <- solve(t(X) %*% X) %*% t(X)
step2 %>% as.data.frame() %>% dplyr::select(1:4) %>% head() 
# 이런게 153개 열이 있습니다
step3 <- solve(t(X) %*% X) %*% t(X) %*% Y
step3
##                    [,1]
## (Intercept) 10.67984565
## p_polity2    0.08517992
## wdi_trade    0.01423212

자, 위의 저 결과가 바로 행렬 OLS로 구한 \(\hat{\beta}\)가 됩니다. 그럼 이번에는 표준오차를 구해볼까요? 이미 위에서 수식으로 다 보여드린 내용을 R로 다시 풀어놓은 것과 다름이 없습니다. 여기서 처음보는 건 아마 chol 함수일텐데요, 이는 촐레스키 분해(Cholesky Factorization) 함수입니다.6 저는 여기서 자세한 설명은 하지 않을 것이기 때문에 참고할만한 블로그 링크를 공유하겠습니다.

sig.sq <- sum((Y - X%*%beta.Hat)^2)/(nrow(X)-ncol(X)) ## 분산이죠?
VCV <- sig.sq*chol2inv(chol(t(X)%*%X))
SE <- sqrt(diag(VCV))              
# 행렬 OLS 결과
cbind(beta.Hat, SE) %>% knitr::kable()  
SE
(Intercept) 10.6798456 0.3388283
p_polity2 0.0851799 0.0271892
wdi_trade 0.0142321 0.0032472
# R lm()을 이용한 OLS 결과
coef(summary(model1)) %>% knitr::kable()
Estimate Std. Error t value Pr(>|t|)
(Intercept) 10.6798456 0.3388283 31.519935 0.0000000
p_polity2 0.0851799 0.0271892 3.132860 0.0020798
wdi_trade 0.0142321 0.0032472 4.382831 0.0000218

두 결과의 계수값과 표준오차 추정치가 일치하는 것을 확인하실 수 있습니다.


  1. 구분하기 편하게 연속형 변수는 양적 변수(quatitative variables)로, 명목형과 순위형 변수는 질적 변수(qualitative variables)로 사용하겠습니다.↩︎

  2. Gelman, Andrew. 2008. “Scaling Regression Inputs by Dividing by Two Standard Deviations.” Statistics in Medicine 27: 2865-73.↩︎

  3. 여기서 염두에 두어야할 것은 본래 QOG.s는 1인당 GDP, 무역 개방성, 그리고 노령화 지수를 대상으로 서브셋으로 만든 후에 결측치를 제거했기 때문에 노령화 지수가 결측치일 경우, 그에 해당하는 id의 1인당 GDP와 무역 개방성도 제외되었을 수 있습니다. 편의상 이전에 사용한 서브셋을 다시 사용하는 것이므로 이 점을 감안해야 합니다.↩︎

  4. 어떤 변수의 영향력 하에서 종속변수의 평균이 그 변수의 영향력 외에 있을 때의 평균과 차이가 있는지 여부, 이것은 영가설 기각 논리의 배경이기도 합니다.↩︎

  5. 여기서 \(c\)는 결정적 기준값, critical value를 의미합니다.↩︎

  6. https://issactoast.com/129↩︎