Understanding of Interactions

일반적으로 우리가 다중선형회귀모델을 수립한다고 할 때, \(y = \alpha + \beta x + \gamma z + \nu\)라고 할 수 있을 것입니다. 이때, \(y\)에 대한 \(x\)의 효과는 무엇으로 알 수 있을까요? \(\partial y/\partial x\)겠죠? 그리고 위의 식에서는 \(\beta\)일겁니다. 그런데 만약 \(\partial y/\partial x\)\(beta + \gamma z\)라면 어떻게 될까요? \(\partial y/\partial x = \beta + \gamma z\)인 경우를 상정해보겠습니다. 이 경우 \(\beta\)의 의미는 무엇일까요?

자, 상호작용을 보다 명시적으로 보여주는 회귀모델을 만들어보겠습니다. \[y = \alpha + \beta x + \tau xz + \gamma z + \nu\]

이 회귀모델에서 \(\beta\)는 무엇을 의미할까요? 상호작용이란 \(y\)에 대한 \(x\)의 효과가 본질적으로 \(z\)라는 변수와 밀접하게 연관되어 있는 경우를 말합니다. 따라서 \(z=0\)인 경우를 제외하면, \(x\)에 대한 계수값은 결코 그 자체로 그대로 해석될 수 없습니다. 왜냐하면 \(x\)의 계수값은 \(z\)의 값에 따라 조건적으로 변화할테니까요. 상호작용에 대한 이론적인 검토는 다음 장에서 이어서 하도록 하고, 여기서는 기본적인 내용들을 간단한 R 예제와 함께 살펴보도록 하겠습니다. \(y = \beta_0 + \beta_1x + \beta_2x^2 + \beta_3z + u\)의 형태를 취하는 회귀모델이 있다고 해보겠습니다.

사용할 데이터는 언제나와 같이 Quality of Government에서 가져오며 2016년 데이터입니다.

필요한 패키지를 로드하기

library(ezpickr)   # 다른 확장자의 파일을 R로 불러오기 위한 패키지
library(broom)     # 통계분석 함수의 결과를 정연하게 정리해주는 패키지
library(patchwork)
library(futurevisions) # 시각화를 위한 컬러패키지
library(tidyverse) # 데이터 관리 및 전처리를 위한 주요 패키지
library(showtext)
library(extrafont)
loadfonts()
font_add("NanumGothic", "NanumGothic.ttf")
theme_set(
  theme_bw() +
    theme(text = element_text(family = "NanumGothic"))
)
Sys.setlocale("LC_CTYPE","korean")
## [1] "Korean_Korea.949"
## 필요한 데이터셋을 불러오기

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

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

QOG 데이터셋에서 국가코드, 국가명, 연도, 노령화 지수, 무역 개방성, 1인당 GDP에 해당하는 변수들을 따로 선별하여 서브셋을 만들고, 결측치를 제외하였습니다. 그리고 1인당 GDP가 무역 개방성, 무역 개방성의 제곱항, 그리고 노령화 지수와 각각 관계를 맺고 있다는 선형회귀모델을 구축하였습니다.

model <- lm(wdi_gdpcapcon2010 ~ 
              wdi_trade + I(wdi_trade^2) + wdi_agedr, 
            data=QOG.s)

model %>% broom::tidy() %>% 
  mutate_if(is.numeric, ~ round(., 3))

여기서 I()는 안에 포함된 변수에 수리적 연산을 허용하게끔 하는 Rlm()에서 사용가능한 함수입니다.

구체적으로 위의 모델은 2010년도 미 달러 고정으로 측정된 2016년도의 1인당 GDP가 각 국가의 무역 개방성과 노령화 지수와 관계가 있다는 것을 보여주고 있습니다. 모델에서 무역 개방성은 국내 총생산에서 재화 및 서비스의 수출입의 총합이 차지하는 비율로 측정되었으며, 노령화 지수는 노동가능인구 대비 65세 이상 인구의 비율을 의미합니다. 이 회귀모델은 다중회귀모델의 형태를 취하고 있으므로(\(y = \beta_0 + \beta_1x + \beta_2x^2 + \beta_3z + u\)), 우리는 \(y\)(1인당 GDP)의 변화량이 \(x\)(무역 개방성)와 \(z\)(노령화지수)에 의해 설명된다고 진술할 수 있습니다.

그러나 이 모델은 동시에 \(x\)\(x^2\)을 포함하고 있습니다. 이는 \(x\)\(y\)에 대한 한계효과(marginal effect)가 \(\beta_1\) 뿐 아니라 \(\beta_2\)에 의해서도 영향을 받는다는 것을 의미합니다. \(x\)를 기준으로 편미분을 해보면, \(\frac{\partial y}{\partial x} = \beta_1 + 2\beta_2x\)가 되기 때문입니다. 정리하자면, 이 모델은 \(y\)의 변화량이 \(x\)\(z\)에 의해 설명될 수는 있지만, \(x\)와는 그 관계가 선형적일 것이라고 볼 수는 없다는 것을 의미합니다. 그러면 이 모델의 각각의 계수들(coefficients)을 해석해보겠습니다.

  • 상수항(절편; intercept): \(\hat{\beta_0}\)는 PRF의 \(\beta_0\)의 추정치이자 \(x\)\(z\) 모두가 0일 경우의 \(y\)의 값입니다.

  • 기울기(slopes)

    • \(\hat{\beta_1}\)는 PRF의 \(\beta_1\)의 추정치이자 \(x^2\)\(z\)로 설명될 수 있는 변화량을 제외한 \(y\)\(x\) 간의 관계를 보여줍니다. \(\hat{\beta_1}\)의 표준오차는 PRF를 추정하기 위해 우리가 수없이 표본들을 뽑아 PRF에 대응하는 SRF를 만들었을 때, 표본의 차이로 인해 각 SRF에서 나타날 \(\hat{\beta^i_1}\)들의 표집분포의 표준편차를 의미합니다.

    • \(\hat{\beta_2}\)는 PRF의 \(\beta_2\)에 대한 추정치를 의미하며, 순수하게 \(x\)\(z\)에 의해 설명되는 \(y\)의 변화량을 제외하고 \(x^2\)로 설명되는 \(y\)의 변화량에 대한 관계를 보여줍니다. 마찬가지로 그 표준오차는 PRF를 추정하기 위한 SRF에서 도출되는 \(\hat{\beta^i_2}\)의 표집분포의 표준편차를 보여줍니다.

    • \(\hat{\beta_3}\)\(x^2\)\(x\)로 설명되는 \(y\)의 변화량을 제외하고 \(y\)\(z\) 간의 관계를 보여주며, 그 표준오차는 \(\hat{\beta^i_3}\)의 표집분포의 표준편차라고 할 수 있습니다.

앞서 말했다시피 \(\hat{\beta_0}\)\(x\)\(z\)가 0일 경우의 \(y\) 값, 절편을 의미합니다. 이 값은 고정되어 있으므로 우리는 상수항이라고도 합니다. 이론적으로 변수인 \(y\)는 오직 다른 변수로만 설명할 수 있습니다. 따라서 우리는 기울기들에 좀 더 초점을 맞출 필요가 있습니다.

그런데 이 모델에서 우리는 \(\hat{\beta_1}\), \(\hat{\beta_2}\), 그리고 \(\hat{\beta_3}\)를 직접적으로 비교할 수 없습니다. 왜냐하면 \(\hat{\beta_3}\)\(y\)\(z\) 간 관계를 선형으로 상정하고 있지만 \(y\)\(x\)는 비선형성을 보여주고 있고, 특히 \(x^2\)\(y\)의 관계를 보여주는 계수는 그 자체로 설명될 수 없고 \(\beta_1\)에 의존적인 값이기 때문입니다. 따라서 이 모델이 다중선형회귀모델의 형태를 취하고 있다고 하더라도 \(\hat{\beta_1}\), \(\hat{\beta_2}\), \(\hat{\beta_3}\)의 세 계수들은 직접적으로 비교되기는 어렵습니다. 또한 \(\hat{\beta_1}\), \(\hat{\beta_2}\)\(x\)로 다시 써볼 수 있는데, 다시 한 번 말하지만 \(\hat{\beta_1}\) 또는 \(\hat{\beta_2}\)는 단독으로는 의미가 없습니다.

상호작용항이 흥미로운 이유는 무엇일까요? 우리가 이차항(quadratic term)을 포함시키고, \(\hat{\beta_1}\)\(\hat{\beta_2}\)를 구했다고 할 때, 단적으로 말하면 \(\hat{\beta_1}\)\(\hat{\beta_2}\) 그 자체의 값에는 크게 신경쓰실 필요가 없습니다. 만약 단순선형회귀모델이었다거나 다중선형회귀모델이었다면 \(\hat{\beta_1}\)\(\hat{\beta_2}\)\(x\)의 한 단위 변화와 관계된 \(y\)의 변화를 체계적으로, 일관되게 보여줄 것으로 기대하기 때문에 관심을 가질 필요가 있습니다.

그러나 이차항, 혹은 상호작용항을 모델에 포함한다면, \(x\)에 따른 \(y\)의 변화는 \(\frac{\partial y}{\partial x} \approx \hat{\beta_1} + 2\hat{\beta_2}x\)로 나타낼 수 있고, 이는 \(x\)\(y\)에 대한 한계효과가 “변할 수도 있고,” “비선형적일 수도 있다는 것”을 의미합니다. 따라서 \(\hat{\beta_1}\)\(\hat{\beta_2}\) 그 자체는 \(x\)\(y\)의 관계에 대해서 거의 말해주는 것이 없습니다. \(\hat{\beta_1}, \hat{\beta_2}\)의 값과 그 크기보다는 \(x\)\(y\)의 비선형적 관계의 방향성을 보여줄 수도 있는 부호에 관심을 가지는 것이 더 나을 것입니다. 또한, 우리는 \(x\)에 대한 서로 다른 값들 간 한계 효과의 차이에 초점을 맞춰야 합니다. 예를 들어, \(x\)의 최소값과 최대값 간 한계효과를 비교함으로써 우리는 \(y\)의 변화 양상을 포착할 수 있기 때문입니다.

즉, 상호작용은 선형회귀모델에서 한 변수의 종속변수에 대한 효과가 상수(constants)가 아니라 변수(variables)일 경우를 어떻게 이해하느냐의 문제라고 할 수 있습니다.

상호작용의 유무 비교

일반적인 가산적(additive) 선형회귀모델과 상호작용을 전제하고 있는 선형회귀모델을 각각 구성해보도록 하겠습니다.

\[ \begin{aligned} \text{상호작용이 없는 경우: }y&= \alpha +\beta x + \gamma z+ \nu\\ \text{상호작용이 있는 경우: }y&= \alpha +\beta x + \tau xz + \gamma z+ \nu \end{aligned} \]

자, 두번째의 식이 맨 처음의 식과 달라진 부분이 보이시나요? 위의 식에서 \(\beta\)는 무엇을 의미할까요? 과연 우리가 \(x\)에 대한 \(y\)의 효과를 맨 처음의 식에서와 같이 \(\beta\)만을 가지고 충분히 이해할 수 있을까요?

바로 위의 식에서는 \(y\)에 대한 \(x\)의 효과를 \(\beta\)로만 이해할 수 없습니다. 정확히는 \(y\)에 대한 \(x\)의 효과는 근본적으로 제3의 변수, \(z\)와 얽혀 있습니다. 따라서 이때 우리는 \(y\)에 대한 \(x\)의 효과를 \(\beta\) 그 자체로만 가지고 해석할 수 없습니다. 만약 \(z\)가 0일 경우에만 \(x\)\(y\)의 관계에서 \(\beta\)가 단독으로 의미를 가지게 됩니다. \(z\)가 0이면 위의 식에서 \(\tau xz\)라는 항이 아예 사라지게 되니 고려할 필요가 없게 되는 것입니다.

상호작용의 이해: Brambor et al. (2006)

정치학 분야에서 상호작용에 관한 방법론을 다룰 때, 거의 필수적으로 읽고 넘어가는 논문을 간단하게 한 번 살펴보고자 합니다. Brambor, Golder, 그리고 Clark이 2006년도에 저술한 ‘’Understanding Interaction Models: Improving Empirical Analyses’‘이라는 제목의 논문입니다. 우리말로는’‘상호작용 모델의 이해: 경험적 분석의 개선’’ 정도로 이해할 수 있겠네요.

이 논문의 요지는 간단합니다. 상호작용항(interaction term)을 다중선형회귀모델에 투입하여 변수들이 종속변수에 대해 상호작용하여 미치는 영향을 살펴보고자 하는 이른바 상호작용 모델의 연구가설은 ‘조건적인 가설’(conditional hypotheses)을 가지게 됩니다. 즉, 서로 상호작용하는 변수들은 각자에 대하여 ‘의존적인’ 관계에 놓이게 된다는 것이죠.

Brambor et al. (2006)은 이와 같은 상호작용항의 존재는 사실 다중선형회귀모델을 구성하는 Gaus-Markov 가정 중 변수들 간의 독립성에 해당하는 부분을 침해하는 것이기 때문에 이에 대한 조심스러운 접근이 필요함에도 불구하고 상호작용 모델을 사용하는 연구들이 고민없이 두 변수를 단순히 곱한 채 모델에 투입하는 등의 행태를 보이고 있다고 지적합니다.1

Brambor et al. (2006)은 곱셈을 통해 만들어낸 상호작용항을 이용한 경험적 분석을 개선할 수 있는 몇 가지 방법들을 제안합니다. 이들은 정치학 분야에서 조건적 가설을 사용한 몇몇 연구들이 상호작용 모델을 구성하는 데 있어서 오류를 범해 그 연구결과로부터 도출된 추론이 잘못되었다는 사실을 지적합니다. 과학적 연구란 항상 ‘정답을 보여주는’ 연구가 아니라 어디까지나 ‘반증가능한’ 연구를 의미한다는 것을 생각해볼 때, 그리 놀라운 일은 아닙니다. 오히려 굉장히 정치학 분야에서 과학적 연구의 순기능이 작동한 사례라고 볼 수도 있을 것 같습니다.

Brambor et al. (2006)의 핵심적인 주장—즉, 상호작용 모델을 이용한 경험적 연구의 개선방안은 크게 네 가지 정도로 정리해볼 수 있습니다.

  • 첫째, 조건적 가설을 수립하고 그것을 경험적으로 분석하는 데에는 상호작용 모델이 요구된다.

  • 둘째, 상호작용 모델을 사용할 때, 반드시 구성요소가 되는 변수들의 항(constitutive terms, 이하 구성항)을 모델에 모두 투입해야 한다. 예를 들어, \(x\), \(xz\), \(z\) 라는 세 예측변수들로 \(y\)를 설명하고자 할 때, 우리의 관심사가 상호작용의 관계, 즉 \(xz\)의 효과라고 하더라도 그 상호작용항을 이루는 \(x\)\(z\)의 각 변수 또한 모델에 투입해주어야 한다는 얘기입니다.

  • 셋째, 구성항들은 기존의 다중선형회귀모델의 가산적 관계(additive relationship)에서 예측변수들을 다루듯 해석하기가 어렵다는 것입니다. 여기서 가산적 관계란 ‘+’, OR로 이루어진 관계로 각 변수들 간의 관계는 독립적이라는 가정이 성립된다는 것을 의미합니다. 그러나 위에서 잠깐 살펴보았던 것처럼 상호작용항의 경우에는 \(x\)\(y\)에 대한 효과가 \(z\)에 조건적이고, 반대로 \(z\)\(y\)에 대한 효과도 \(x\)에서 자유롭지 못하죠. 따라서 각 변수들이 서로 독립적일 것이라는 기대가 가능했던 기존의 다중선형회귀모델과는 달리 상호작용 모델에서 구성항들의 의미는 직관적으로 해석하기가 까다롭습니다.

  • 마지막으로 넷째, 연구자들은 반드시 실질적으로 유의미한 한계효과(marginal effects)와 표준오차를 계산해야 한다고 제안합니다(Brambor et al. 2005, 64).

논문의 저자들은 그들의 주장을 이해하기 쉽게 \(Y = b_0 + b_1X + b_2Z + b_3XZ + \epsilon\)이라는 모델을 통해 풀어 나갑니다.

왜 조건적 가설을 수립하고 검증하기 위해서는 상호작용 모델을 사용해야만 하는가?

이론적으로 가산적 관계를 상정한 선형 모델은 각각의 예측변수들이 서로 독립적으로 종속변수와 관계를 맺고 있을 것이라고 봅니다. 이는 선형 모델의 경우 각 예측변수에 대해 조건적 가설이 아닌 독립적 가설을 수립하고 있다고 이해할 수 있습니다. 논문에 보시면 흔히, “다른 조건들이 모두 일정할 때, \(x\)\(y\)에 대한 효과는 어떠할 것이다” 라는 형태의 진술을 가설로 사용하는 것이 그러합니다. 다른 조건들이 모두 일정하다는 얘기는 다중선형회귀모델에서 우리가 관심을 가지고 있는 \(x\) 이외의 다른 모든 변수들을 상수로 고정하였을 때, \(x\)\(y\)에 미치는 부분적 효과(partial effect)만을 보겠다는 것이고, 이것이 이 챕터 맨 처음에 제시하였던 식에서의 \(\beta\)라고 이해할 수 있습니다.

그러나 여기서는 정치학이라고도 할 수 있겠습니다만 사회과학 제분야의 경우 어떠한 맥락 혹은 조건의 효과를 고려하는 것이 모델링에 주요한 영향을 미치기 때문에 상호작용항을 포함한 모델을 생각해보아야 하는 경우가 생길 때가 많습니다. 예를 들어, 한국의 선거정치 속에 나타나는 계급투표에 대해 관심이 있다고 해보겠습니다. 이때, 기존 연구들의 주요 가설은 소득 수준에 따라 돈 많은 사람은 세금 많이 떼기 싫고 기득권 층일테니 보수정당을 지지할 것이라고 기대하고, 반대로 돈 없는 사람은 복지지출 등을 제고하기를 기대하며 진보정당에 투표할 가능성이 클 것이라고 해보겠습니다. 이때, 나의 연구가설은 이러한 계급적 투표가 실제 선거에서 정당 선택으로 이어지는 관계가 개별 유권자들의 정치적 세련도, 혹은 정치지식 수준에 따라 달라진다는 조건적 가설일 수 있습니다. 왜냐하면 돈이 없더라도 정치지식 수준이 높은 사람들의 경우 특정 정책에 대한 이해도가 더 높아 정당 선호가 달라질 수 있으니까요. 다양한 논의가 가능하겠지만 일단 이런 맥락에서 사회과학 분야에서 상호작용 모델은 상당히 빈번하게 논의됩니다.

마찬가지로 Brambor al. (2006)도 조건적 가설의 사례를 하나 제시하는데, 그들이 제시하는 가설은 조금 더 통계적이라고 해야할까요, 도식적입니다. 실제 연구문제를 바탕으로 한 가설은 아닙니다. 일단 조건적 가설이라고 보기 어려운 경우를 한 번 보겠습니다.

그들은 “\(Z\)라는 조건이 존재할 때, \(X\)의 한 단위 증가가 \(Y\)와 관계를 가지고, \(Z\)라는 조건이 부재할 경우에는 \(X\)\(Y\) 간의 관계 또한 성립되지 않을 것이다”라는 가설을 제시합니다. 즉, 여기서 \(Z\)라는 변수는 특정 조건의 존재 여부를 보여주므로 이항변수(binary variable)이라고 할 수 있겠죠? 만약 우리가 이항변수 \(Z\)를 성별이라고 한다면, 이 성별 변수의 계수값은 \(Y\)에 있어서 남성과 여성일 경우 각기 다른 절편값으로 해석할 수 있을 겁니다. 남성이 1, 여성이 0이라고 한다면

\[\begin{equation*} \begin{aligned} &\text{여성}: Y = b_0 + b_1X + b_2(Z=0) + \epsilon = b_0 + b_1X + \epsilon \\ &\text{남성}: Y = b_0 + b_1X + b_2(Z=1) + \epsilon = b_0 + b_1X + b_2 + \epsilon \end{aligned} \end{equation*}\]

이때 이 두 식의 차이는 \(b_2\), 상수로 나타납니다. 따라서 이 경우에는 조건적 가설이라고 부르기가 어렵습니다.

왜 상호작용 모델에 모든 구성항을 다 포함해야할까?

그렇다면 왜 상호작용 모델에 모든 구성항을 다 포함해야만 할까요? 그리고 상호작용 모델에서의 구성항과 일반 가산적 관계의 선형 모델에서의 예측변수 간의 차이는 무엇일까요?

상호작용 모델(\(Y = b_0 + b_1X + b_2Z + b_3XZ + \epsilon\))에서 구성항을 제외한다면, 우리는 \(Y = b_0 + b_1XZ + \epsilon\)라는 모델을 생각해볼 수 있습니다. 구성항을 제외해도 말이 된다라는 얘기는 위의 \(Y = b_0 + b_1X + b_2Z + b_3XZ + \epsilon\)\(Y = b_0 + b_1XZ + \epsilon\)의 모델과 다르지 않다라는 주장을 해야한다는 것을 의미합니다. 이때, 만약 구성항을 제외한 모델이 타당하다면,

  1. \(Z\)가 평균적으로 \(Y\)에 미치는 효과가 존재하지 않다거나

  2. \(X\)가 0일 때, \(Z\)\(Y\)에 미치는 효과가 없다

라고 주장할 수 있어야만 합니다. 다시 말하면, 첫째로 \(Z\)가 평균적으로 \(Y\)에 미치는 효과가 없다는 얘기는 사실상 비체계적 요인으로서 \(Y\)에 평균적으로 체계적 변화를 가져오는 요인이 \(X\) 뿐이라고 주장하던가(이 경우 본질적으로 해당 모형의 함의는 \(Y = b_0 + b_1X + \epsilon\)과 다를 바 없게 됨), 혹은 \(X\)가 0일 때, \(b_1XZ\) 항이 제거되면서 절편값인 \(b_0 + \epsilon\)만 남게 되어 두 번째 주장이 타당하다고 말할 수 있어야 합니다. 그러나 위의 두 주장은 가설로서 거의 정당화되기 어렵습니다(Brambor et al. 2006, 66). 왜냐하면 \(Y = b_0 + b_1X + b_2Z + b_3XZ + \epsilon\)에서 \(b_2\)는 상호작용 모델에서 \(X\)가 0일때의 \(Z\)\(Y\)에 미치는 효과를 보여주기 때문에, 이는 \(Z\)가 평균적으로 \(Y\)에 미치는 효과가 존재않다는 것을 보여주어야 하는 것과 배치됩니다. 마찬가지로 \(Z\)\(Y\)에 대한 평균적인 효과가 0이라고 하더라도 \(b_2\)가 반드시 0이라는 보장도 없습니다. \(X\)가 0일 때, \(Z\)\(Y\)에 대해 가지는 효과가 전혀 없다(\(b_2 = 0\))고 미리 전제하는 것보다는, \(b_2\)가 0이 아닐 수도 있을 가능성을 먼저 생각해보는 것이 더 많은 경우의 수를 제공합니다(Brambor et al. 2005, 66). 다시 말해, 선험적으로 구성항을 제외하는 분석은 \(b_2\)가 0이 아니라면 우리가 관심을 가지고 있는 모수의 추정치를 왜곡하여 잘못된 추론을 도출하게 할 수 있습니다(Brambor et al. 2006, 68).

위에서 언급한 바와 같이, \(X\)에 대한 계수, \(b_1\)\(Z\)에 대한 계수 \(b_2\)는 일반적인 가산적 관계의 모델(\(Y =b_0 + b_1X + b_2Z + \epsilon\))의 \(X\)\(Z\)의 계수들과는 다릅니다. 가산 모델에서 \(b_2\)\(Z\)\(Y\)에 대한 평균적인 효과를 보여줍니다. 그러나 상호작용 모델에서 \(b_2\)\(X\)에 따라 조건적으로 변화하는 \(Z\)\(Y\)에 대한 효과를 보여줍니다.

왜 실질적으로 유의미한 한계효과와 표준오차를 보여주어야 하는가?

상호작용 모델에 있어서 각 예측변수들이 종속변수에 미치는 효과를 제대로 보여주기 위해서 Brambor et al. (2006)은 실질적으로 유의미한 한계효과와 표준오차를 함께 제시해야 한다고 주장하고 있습니다. 그 이유는 상호작용항의 효과가 일정하지 않기 때문(not constant)입니다. 상호작용 모델(\(Y = b_0 + b_1X + b_2Z + b_3XZ + \epsilon\))에서 \(X\)의 한 단위 증가와 관계된 \(Y\)의 변화분을 살펴보기 위해 편미분을 할 경우, 우리는 아래와 같은 식을 얻게 됩니다.

\[ \frac{\partial Y}{\partial X} = b_1+ b_3 Z \]

위의 식은 상호작용 모델에서 \(X\)\(Y\)에 대한 효과가 \(Z\) 변수의 값에 따라서 조건적으로 변화한다는 것을 의미합니다 (Brambor et al. 2006, 73). 따라서 상호작용항의 계수는 직접적으로 해석될 수는 없습니다. 그 값이 \(Z\)에 따라 변화하니까요. 우리는 계수의 부호나 통계적 유의성에 대해서는 이야기할 수 있지만 실질적으로 그 효과의 크기 등에 대해서는 계수만 보고는 대답할 수 없게 됩니다.

때문에 \(Z\)에 의해 조건적으로 변화하는 \(Y\)에 대한 \(X\)의 효과를 살펴보기 위해서는 \(X\)\(Y\)에 대한 한계효과를 계산할 필요가 있습니다. 한계효과는 \(Z\)의 조건 하에서 \(X\)의 한 단위 변화가 평균적으로 얼마만큼의 \(Y\)의 변화와 관계되는지를 보여줍니다. 또한 한계효과의 표준오차는 그렇게 계산된 한계효과가 얼마나 확실한지를 보여줍니다. 한계효과의 표준오차가 가지는 함의는 일반적으로 선형회귀모델의 계수값과 표준오차 간의 관계와 비슷하다고 이해하셔도 무방합니다. 그 한계효과가 통계적으로 유의미한 효과인지를 보여주는 것이니까요.

정리하자면 Brambor et al. (2006)의 함의는 다음과 같습니다.

  • 상호작용 모델이라고 하더라도 상호작용항뿐만 아니라 모든 구성항을 포함시켜 분석해야 한다.

  • \(Z\)를 상수로 고정한다(=통제한다)”는 것은 \(Z\)가 0이라는 것과 같은 의미가 아니다.

  • 모델 내에 존재하는 두 구성항의 곱으로 상호작용항을 만들었기 때문에 다중공선성(multicollinearity)이 발생할 수 있다.2

  • 상호작용항의 계수는 \(\frac{\partial Y}{\partial X} = b_1+ b_3 Z\)로 나타낼 수 있고, 이때 상호작용의 계수가 편미분을 하더라도 \(Z\)라는 새로운 변수에 의해 조건적으로 변화할 수 있다는 것을 알 수 있다. 따라서 상호작용항의 계수를 직접적으로 일반선형회귀모델의 계수처럼 해석하기는 어렵다.

그렇다면 한 번 실제 데이터를 통해 분석해보도록 하겠습니다.

상호작용항의 이해: 경험적 분석

4개의 연속형 변수(\(x\), \(z\), \(y\), \(w\))를 가지고 다음과 같은 형태의 모델을 추정하고자 한다고 합시다: \(y = \gamma + \eta x + \alpha z + \mu xz + \beta w\). \(x\)\(z\)의 상호작용항이 포함되었으니 위의 식에서 \(x\)\(z\)의 효과를 단순히 \(\eta\)\(\alpha\)를 가지고 해석할 수는 없을 것입니다. 따라서 여기서는 \(x\)\(z\)의 변화에 따라서 각각 \(z\)\(x\)\(y\)에 대해 미치는 효과가 어떻게 조건적으로 변화하는지를 살펴보고자 합니다.

  • 분석을 위해서 변수 \(x\)\(z\)가 높은 수준의 값을 지니는 경우를 \(\bar{x}\)\(\bar{z}\)라고 하겠습니다.

  • 반대로 \(x\)\(z\)가 낮은 수준의 값을 지닐 때를 \(\underline{x}\), \(\underline{z}\)라고 표현하도록 하겠습니다.

그리고 위와 같은 분석적 프레임 하에서 다음과 같은 경우를 실제 모델과 데이터를 통해 살펴보도록 하겠습니다.

\[\begin{equation*} \begin{aligned} E(y|x = \underline{x}, z = \underline{z}) - E(y|x = \bar{x}, z = \underline{z})\\ E(y|x = \underline{x}, z = \bar{z}) - E(y|x = \bar{x}, z = \bar{z}) \end{aligned} \end{equation*}\]

\(x\)\(z\)에 관한 위의 두 표현이 과연 모델과 데이터와 관련해서 우리에게 어떤 실질적 함의를 제공해줄까요?

먼저 QOG 데이터셋에서 2014년도의 국가코드, 국가명, 연도, 해외직접투자 유입, 노동가능 인구, 무역 개방성, 1인당 GDP에 해당하는 변수들을 따로 선별하여 서브셋을 만들고, 결측치를 제외하였습니다. 그리고 1인당 GDP를 해외직접투자 유입, 무역 개방성, 그리고 해외직접투자 유입과 무역 개방성의 상호작용항과 노동가능 인구로 설명할 수 있다는 모델을 만들었습니다.

interactions <- lm(wdi_gdpcapcon2010 ~ wdi_trade + wdi_fdiin +
                  wdi_trade*wdi_fdiin + wdi_pop1564, data=QOG.s)

원래는 모델에서 얻은 추정치(estimates)를 별도의 객체(objects)로 저장하여 작업하는 것을 선호하지는 않습니다. 하지만 여기서는 직관적으로 위에 써 놓은 두 모델과 연관지어 이해하기 위해서 각 변수와 계수를 별도의 객체로 저장한 뒤에 위의 두 식과 동일한 R 코드를 이용해 분석해보도록 하겠습니다.

# 먼저 모델에서 얻은 각 계수값을 위의 식에 상응하는 객체로 저장하여 줍니다.
b0 <- interactions$coefficients[1]
b1 <- interactions$coefficients[2]
b2 <- interactions$coefficients[3]
b3 <- interactions$coefficients[4]
b4 <- interactions$coefficients[5]

# 그리고 각 변수들도 별도의 객체로 저장해보도록 하겠습니다.
y <- QOG.s$wdi_gdpcapcon2010; x <- QOG.s$wdi_trade; 
z <- QOG.s$wdi_fdiin; w <- QOG.s$wdi_pop1564

# 이제 첫 번째 수식에 대응하는 계산을 수행합니다.
y1 <- b0 + (b1 * min(x)) + (b2 * min(z)) +
  (b3 * min(x) * min(z)) + (b4 * w)
y2 <- b0 + (b1 * max(x)) + (b2 * min(z)) +
  (b3 * max(x) * min(z)) + (b4 * w)
A1 <- y1 - y2
unique(A1)
## [1] 13958438 13958438
# 두 번째 수식에 대응하는 계산을 수행합니다.
y3 <- b0 + (b1 * min(x)) + (b2 * max(z)) +
  (b3 * min(x) * max(z)) + (b4 * w)
y4 <- b0 + (b1 * max(x)) + (b2 * max(z)) +
  (b3 * max(x) * max(z)) + (b4 * w)
A2 <- y3 - y4
unique(A2)
## [1] -20626507 -20626507

위에서 만든 모델은 \(x\)\(z\), 즉 해외직접투자 유입과 무역 개방성 간의 상호작용항을 포함하고 있습니다. 그리고 이 두 변수는 ’서로에 대해 조건적’입니다. 따라서 두 변수가 모두 그 값이 변화한다고 할 때, 우리는 각 변수의 높은 값과 낮은 값을 최대값, 최소값으로 생각하여 다음과 같은 네 가지 시나리오를 생각해볼 수 있습니다.

\[\begin{equation*} \begin{aligned} &\hat{y_1} = \gamma + \eta \underline{x} + \alpha \underline{z} + \mu \underline{x}\underline{z} + \beta w\\ &\hat{y_2} = \gamma + \eta \bar{x} + \alpha \underline{z} + \mu \bar{x}\underline{z} + \beta w\\ &\hat{y_3} = \gamma + \eta \underline{x} + \alpha \bar{z} + \mu \underline{x}\bar{z} + \beta w\\ &\hat{y_4} = \gamma + \eta \bar{x} + \alpha \bar{z} + \mu \bar{x}\bar{z} + \beta w\\ \end{aligned} \end{equation*}\]

위의 네 시나리오에 따라서 우리는 \(\hat{y_1} - \hat{y_2}\)\(\hat{y_3}-\hat{y_4}\)를 계산해볼 수 있습니다.

\[\begin{equation*} \begin{aligned} \hat{y_1} - \hat{y_2}& = (\hat{\gamma} + \hat{\eta} \underline{x} + \hat{\alpha} \underline{z} + \hat{\mu} \underline{x}\underline{z} + \hat{\beta} w) - (\hat{\gamma} + \hat{\eta} \bar{x} + \hat{\alpha} \underline{z} + \hat{\mu} \bar{x}\underline{z} + \hat{\beta} w)\\ & = \hat{\eta}(\underline{x} - \bar{x}) + \hat{\mu}(\underline{x}\underline{z} - \bar{x}\underline{z}) = \hat{\eta}(\underline{x} - \bar{x}) + \hat{\mu}\underline{z}(\underline{x} - \bar{x})\\ \hat{y_3} - \hat{y_4}& = (\hat{\gamma} + \hat{\eta} \underline{x} + \hat{\alpha} \bar{z} + \hat{\mu} \underline{x}\bar{z} + \hat{\beta} w) - (\hat{\gamma} + \hat{\eta} \bar{x} + \hat{\alpha} \bar{z} + \hat{\mu} \bar{x}\bar{z} + \hat{\beta} w)\\ & = \hat{\eta}(\underline{x} - \bar{x}) + \hat{\mu}(\underline{x}\bar{z} - \bar{x}\bar{z}) = \hat{\eta}(\underline{x} - \bar{x}) + \hat{\mu}\bar{z}(\underline{x} - \bar{x}) \end{aligned} \end{equation*}\]

복잡해 보이지만 위의 식은 서로 상쇄되는 항들을 정리하면 다음과 같은 두 개의 식으로 다시 쓸 수 있습니다.

\[\begin{equation*} \begin{aligned} &\frac{\Delta y}{\Delta x} \text{Given $\underline{z}$} = \hat{\eta} + \hat{\mu}\underline{z}\\ &\frac{\Delta y}{\Delta x} \text{Given $\bar{z}$} = \hat{\eta} + \hat{\mu}\bar{z} \end{aligned} \end{equation*}\]

첫 번째 식, \(\hat{y}_1 - \hat{y}_2\)을 통해 우리는 \(z\)가 낮은 값으로 고정(통제)되어 있을 때의 \(y\)에 대한 \(x\)의 효과, 기울기를 구할 수 있습니다. 반대로 두 번째 식, \(\hat{y}_3 - \hat{y}_4\)를 이용해서 \(z\)가 높은 값으로 일정할 때, \(y\)에 대한 \(x\)의 효과를 추정할 수 있습니다. 실질적으로 데이터를 통해 구성한 위의 모델은

\[ \begin{aligned} \text{한 국가의 경제수준}&= \gamma + \eta \text{무역 개방성} + \alpha \text{해외직접투자 유입}\\ &+ \mu \text{무역 개방성}\times\text{해외직접투자 유입} + \beta \text{노동 가능인구} \end{aligned} \] 로 다시 쓸 수 있습니다. 따라서 위의 모델을 통해 저는 무역 개방성이 경제수준에 미치는 효과는 해외직접투자 유입 수준에 따라 조건적일 것이라고 기대한 모델을 구축한 것입니다.

하지만 해외직접투자 유입이 연속형 변수이기 때문에, 해외직접투자 유입이라는 조건 하에서 무역 개방성이 경제 수준에 미치는 한계효과를 포착하기란 쉽지 않습니다. 해외직접투자 유입이라는 변수의 값이 고정되어 있는 것이 아니라 변화하니까요. 그러므로 위에서는 해외직접투자의 유입에 관해 임의의 두 값, 최대값과 최소값을 설정함으로써 무역 개방성이 한 단위 증가할 때, 해외직접투자 유입의 최대값, 또는 최소값 하에서 경제수준에 미치는 한계효과를 계산하고자 한 것입니다. 만약 해외직접투자 유입의 최대-최소값으로 고정된 무역 개방성의 한계효과의 차이가 확실하게 보인다면, 이 모델을 통해 \(x\)\(z\), 무역 개방성과 해외직접투자 유입 간의 상호작용 효과가 존재한다고 말할 수 있습니다.3

R에서는 이와 같은 상호작용의 효과를 직관적으로 이해할 수 있도록 그래프를 통해 보여주는 여러 패키지들을 제공합니다. 직접 계산해서 ggplot으로 그려주셔도 좋습니다. 저는 후자를 선호합니다만, 여기서는 간단하게 패키지를 이용하여 위의 분석을 그래프로 재현해보도록 하겠습니다.

library(margins)
library(interplot)
interplot(m = interactions, 
          var1 = "wdi_fdiin", 
          var2 = "wdi_trade") +
  xlab("The level of FDI Inflow") +
  ylab("Estimated Coefficient for Trade Openness") +
  ggtitle("Estimated Coefficient of Trade Openness on the Size of Economy
          by the Level of FDI Inflow") +
  theme(plot.title = element_text(face="bold", size = 10)) +
  geom_hline(yintercept = 0, linetype = "dashed")

이 그래프는 해외직접투자 유입 수준이 증가할수록 무역 개방성이 경제수준(경제규모)에 미치는 효과가 증가한다는 것을 보여주고 있습니다. 위에서 계산한 것은 해외직접투자 유입이 최소값이었던, 위의 그래프에서 제일 좌측의 값과 해외직접투자 유입이 최대값이없던 최우측의 값이라고 이해할 수 있습니다.

소결: 상호작용과 가설검정

기초 통계학을 공부하셨다면, 선형회귀모델에서 계수값을 통해 우리가 가설을 검정하는 방식에 대해서 이미 알고 계실 것입니다. 우리는 모집단에서의 모수들의 관계를 추론하기 위해 표본의 통계치들 간의 관계를 가지고 그 관계가 확률적으로 얼마나 ‘오류가 날지’ 즉, 유의미하지 않은 관계일지를 통해 가설을 기각 혹은 기각하지 못합니다.

  • 간단히 말하자면 표본은 본질적으로 모집단에서 추출해 모집단을 대표적으로 보여줄 것이라 기대되지만 표본추출의 방법 등에 내재된 한계로 인해 표본은 모집단과 동일할 수는 없습니다.

하나의 모집단에서 이론적으로 우리는 수없이 많은 표본들을 뽑아낼 수 있고, 이 표본들은 각각 평균과 같은 통계치를 가집니다. 따라서 우리는 표본들 통계치가 가지는 분포, 포집분포(sampling distribution) 등을 확인하게 되는 것이죠.

  • 표본들이 문제없이 잘 뽑혔다면, 그리고 관측치의 수가 충분하다면 우리는 모집단의 기대값(expected value)이 표집분포의 평균에 수렴할 것이라고 기대하게 됩니다(중심극한정리).

하지만 어디까지나 표본은 모집단과 동일하지 않기 때문에 확률적으로 표본을 통해서 관측한 통계치들 간의 관계가 모집단에서 모수의 관계를 보여주지 못할 수도 있습니다. 보여주지 못할 확률이 우리가 설정한 어떠한 기준보다 클 경우 우리는 표본을 통해 분석한 결과가 통계적으로 유의미하지 않다(정확히는 유의미하다고 말하기 어렵다)고 결론을 내리게 됩니다. 이 점에서 선형회귀분석에서 \(x\)의 계수값 \(b_1\)은 모집단에서의 모수가 가지는 \(\beta_1\)를 보여줄 것이라는 기대를 가지고 있는 것입니다.

  • 이때, 우리의 기대를 연구가설이라고 하면 이에 대한 영가설(null hypothesis)는 이러한 관계가 ‘존재하지 않을 것’, 즉 \(\beta_1 = 0\)이라고 할 수 있습니다.

  • 선형회귀분석에서 계수의 효과와 가설검정의 관계는 전체 표본 중에서 얼마나 많은 표본들이 관측된 결과가 0, 즉 “효과 없음”이라고 나타나느냐에 달려있다고 볼 수 있습니다.

그렇다면 상호작용 효과는 어떨까요? \(y = \beta_0 + \beta_1 x + \beta_2 z + \beta_3 xz + \epsilon\)이라는 모형이 있다고 할 때, 과연 상호작용 효과에 관심이 있기 때문에 \(\beta_3\)에만 관심을 가지고 \(\beta3 = 0\)에 대한 영가설을 기각하면 될까요?

이것이 Brambor et al. (2006)이 유의미한 한계효과와 표준오차를 계산해야 한다고 했던 이유이기도 합니다. 왜냐하면 단지 \(\beta_3 = 0\)에 대한 기각 여부는 상호작용 효과를 이해하는 데 실질적으로 도움이 되지 않기 때문입니다.

  • 상호작용 효과는 편미분을 했을 때, \(\frac{\partial y}{\partial x} = b_1+ b_3 z\)로 나타낼 수 있고 따라서 우리는 \(\beta_3 = 0\)이냐가 아니라 \(b_1+ b_3 z = 0\)인지를 살펴보아야 하기 때문입니다.

  • \(z\)가 변수이므로 계속 변화하기 때문에 이 변화하는 \(b_1+ b_3 z\), 한계효과와 그 표준오차를 계산해 그것이 얼마나 효과 없음, 0에 수렴하는지 혹은 수렴하지 않는지를 살펴보아야 한다는 것이 Brambor et al. (2006)의 핵심 주장입니다.

비모수 부트스트랩(Nonparametric Bootstrap: NPBS)

많은 연구들이 상호작용항을 분석에 포함시키지만, 설명변수 두 개를 곱한 새로운 변수를 모델에 포함시키고 그것이 유의미한지 유의미하지 않은지 살펴보고 보고하는 데 그칩니다. 여기서 조금 다른 방식으로 이 문제를 이해하기 위한 노력을 소개해보도록 하겠습니다—시뮬레이션을 통한 접근법입니다.

통계학에서 표본은 잊을만하면 다시금 튀어나와 생각하게 만듭니다. 사실 영어로 통계학을 의미하는 Statistics에서 Statistic 자체가 모집단의 모수(parameters)와 대비되는 표본에서의 수치를 의미한다고 할 수 있으니까요. 여기서도 익숙지 않은 비모수 부트스트랩이라는 것을 다루기 전에, 표본에 대한 이야기를 조금 하고 넘어갈까 합니다.

우리는 모집단을 관측할 수 없기때문에 모집단의 특성을 파악하기 위해서 모집단의 제반을 고루 보여줄 수 있는 대표성이 있는 표본을 얻기를 원하고, 이때 어떠한 체계적인 편향(bias)가 개입되길 원치 않습니다.

  • 대표성이 있는 표본을 뽑을 수 있는 표집방법 중 하나는 바로 무작위 추출입니다.

  • 따라서 우리는 모집단으로부터 무작위로 추출된 표본을 기대합니다.

한편, 모집단에서 표본을 추출할 때, 뽑고 난 후 그 값이 다음 차례에서도 또 뽑힐 수 있는, 이른바 무작위 복원추출을 하게 된다면 우리는 모집단으로부터 또 다른 표본을 무수히 얻을 수 있을 것입니다.

  • 즉, 여러 색의 공이 뒤섞여 담긴 항아리에서 10개의 공을 꺼낸 것이 우리의 표본이라고 할 때, 꺼낸 공을 다시 원래의 항아리에 집어넣는다면 또 10개의 공을 꺼낼 수 있고, 그렇게 우리는 무수히 많은 10개의 공들의 기록을 얻을 수 있을 것입니다.

  • 비모수 부트스트랩은 이 지점에서 한 가지 질문으로부터 시작됩니다. 만약 우리가 모집단에서 표본을 무작위 복원추출하듯이 꺼낼 수 있다면, 혹시 표본으로부터 또 다른 표본을 무작위 복원추출한다면 어떻게 될까?

기본 아이디어

우리가 알고싶은 것은 모집단의 특성입니다. 그러나 모집단을 관측하거나 혹은 모집단에 관한 완전한 데이터를 얻을 수 없기 때문에 우리는 모집단의 특성을 잘 반영할 것이라고 기대된 표본을 통해 모집단이 어떠할 것이라는 통계적인 추론을 하게 됩니다.

  • 즉, 추론의 기저에는 표본이 모집단을 잘 대표하고 있다면 표본에서 우리가 관측한 분포, 특성들이 모집단에서도 그러할 것이라고 주장하는 것이 가능하다는 가정이 깔려 있습니다.

이론적으로 우리는 모집단에서 무수히 많은 표본을 추출할 수 있고, 우리는 이렇게 반복된 표본들로 연구를 반복할 수 있습니다.

  • 그러나 모집단으로부터 표본을 추출하는 표집방법의 근본적인 문제로 동일한 모집단에서 뽑은 표본들이라고 할지라도 표본들 간에는 약간의 차이가 존재할 수 있습니다.

선형회귀모델을 한 번 생각해보겠습니다. 우리는 기본적으로 함수적 관계를 통해 어떠한 예측변수들이 종속변수와 관계를 맺을 것이라고 주장합니다. 그러나 약간씩 다른 표본의 자료들을 모델에 투입하는 순간, 당연히 결과로 추정되는 계수값들도 차이가 나게 될 것입니다. 우리는 이렇게 서로 다른 표본들로부터 얻은 통계치, 계수값들을 한 데 모아 그 분포를 그려볼 수 있습니다. 이것이 바로 표집분포입니다.

가우스-마르코프 가정에 따르면, 우리는 이렇게 한 데 그러모은 표본들로부터 나온 계수들의 기대값이 모집단 수준의 모수, 단 하나의 진실된 값과 동일할 것이라고 기대합니다.

  • 그러나 현실적으로 모집단으로부터 수없이 많은 표본들을 얻는 것은 불가능합니다.

  • 예를 들어, 정치학에서 흔히 사용되는 데이터셋인 POLITY IV를 생각해보겠습니다.

    • POLITY IV는 어디까지나 측정가능한 민주주의 정치체제에 대한 제반 속성들을 수치화한 것입니다. 민주주의라고 하는 모집단을 의미하는 것은 아니죠. 어디까지나 표본입니다.

    • 하지만 이 데이터셋 하나를 구축하는 데만도 엄청난 자원과 비용이 소요되었습니다. 네, 현실에서는 이렇게 표본 하나를 제대로 구하는 것도 쉽지 않습니다. 그러므로 사실 우리는 단 하나의 표본에서 나타나는 특성과 통계치를 이용해서 표집분포를 추정하고 있습니다.

    • 이렇게 하기 위해서는 몇 가지 가정들이 충족되어야만 합니다. 예를 들어, 우리가 선형회귀모델을 단 하나의 표본만을 가지고 추정한다고 할 때, 오차항의 독립성과 정규분포가 가정되어야 합니다. 만약 그렇지 않다면 우리는 추정한 계수값이 일관되거나 편향되지 않았다고 하기 어려울 것입니다.

부트스트랩 방법은 표집분포를 추정하는 데 있어서 다른 접근법을 취합니다. 부트스트랩 방법은 대개 복원추출을 통해 모집단으로부터 얻은 \(n\)개의 관측치를 가진 표본으로부터 다시 \(n\)개의 관측치를 가진 표본을 뽑아냅니다.

  • 즉, 표본에서 표본을 뽑습니다. 이렇게 재추출된 표본들은 원래 모집단에서 추출한 표본과 동일한 값을 지닐수도, 아닐수도 있습니다. 왜냐하면 무작위 복원추출을 했기 때문에 어떤 값은 중복되고 어떤 값은 재추출된 표본에는 포함되지 않을수도 있으니까요.

  • 부트스트랩은 이 과정을 반복합니다. 그러고나면 우리는 모집단에서 얻은 단 하나의 표본으로부터 무수히 많은 재추출 표본들을 얻을 수 있게 됩니다.

왜 이런 방법을 사용할까요? 목적은 다르지 않습니다. 우리는 여전히 우리가 알 수 없고, 관측할 수 없는 모집단의 특성을 알고 싶습니다. 그 모집단의 특성을 알기 위해서는 그 특성의 확률분포를 알아야할텐데, 우리는 그 분포가 어떠할 것이라는 확신을 가질 수가 없습니다.

  • 즉, 우리는 사전에 모집단의 확률분포가 어떠할 것이라고 알지 못합니다. 우리는 오직 관측된 표본 통계치들만을 가지고 모수를 추정할 뿐입니다. 한정된 데이터로 인한 불확실성은 우리의 추론을 제약합니다.

  • 또한, 대부분의 통계방법들은 표본의 크기에 따라서 다른 결과들을 내어놓기도 합니다. 표본의 크기 자체가 커질수록 우리는 모수에 대한 더 안정적인 결과를 얻을 수 있을 것이라 기대합니다. 하지만 비용과 시간의 제약으로 인하여 표본 규모를 늘리기란 쉽지 않습니다. 작은 규모의 표본을 가지고 할 수 있는 대안이 없을까? 여기서 부트스트랩 방법이 시작된 것입니다.

  • 부트스트랩 방법은 기본적으로 하나의 표본으로부터 수많은 부트스트랩 표본들을 추출함으로서 앞서의 문제들을 극복하고자 하며, 나아가 하나의 표본 특성을 부트스트랩 표본들로부터 얻은 표집분포로 추론하고, 나아가 그것을 모집단의 모수를 추론하는데까지 사용하고자 합니다.

부트스트랩 방법을 사용하게 되면 우리는 무수히 많은 부스트스랩 표본들을 하나의 표본으로부터 얻게 됩니다. 그리고 부트스트랩 표본들은 하나의 표본으로부터 무작위 복원추출을 한 결과물입니다. 이제 기본적인 논리가 이해가 가실 겁니다.

  • 부트스트랩 표본들 \(\rightarrow\) 표본 \(\rightarrow\) 모집단으로 가는 경로인 것이죠.

  • 부트스트랩 방법은 원 표본(original sample)과 동일한 규모의 표본으로 재추출하고, 부트스트랩 표본들로부터 얻은 표본 통계치의 분포를 표집분포로 사용합니다.

    • 즉, 부트스트랩 방법은 원 표본을 일종의 모집단에 대한 대리(proxy)로 간주하고 무작위 반복 표집을 하는 것이죠.

    • 이렇게 새로 뽑은 부트스트랩 표본은 흡사 원표본에 대한 ’하위 표본’으로 보이지만 정확하게는 ’하위 표본’은 아닙니다. 모집단에 대한 또 다른 표본이죠. 이것이 가능하기 위해서는 하나의 가정이 필요합니다.

    • 바로 원 표본이 모집단을 대표할 수 있는 무작위 반복추출된 표본이어야 합니다. 어디까지나 원 표본이 잘 추출되었다면, 거기서 무작위로 반복추출해서 다시 만든 부트스트랩 표본들은 모집단에서 무작위 반복추출한 결과와 다르지 않을 것이라는 굉장히 강력한 무작위화(randomization)에 대한 믿음이 뒷받침하고 있습니다.

  • 결과적으로 부트스트랩의 재표집 과정은 무수히 많은 표본들을 얻을 수 있고, 부트스트랩 표본들로부터 얻은 표본통계치들은 동일한 모집단에서 추출된 무작위 표본들 간의 차이(variability)를 추정하는 데 사용될 수 있습니다.

이러한 부트스트랩 표집분포를 이용해 우리는 실제 관측치를 이용한 신뢰구간 측정이나 가설검정을 수행할 수 있게 됩니다.

  • 여기서 한 가지 착각하면 안 되는 것은 비모수 부트스트랩 방법이 결코 모집단의 분포에 대한 어떠한 가정을 하고 있는 것은 아니라는 점입니다.

  • 우리는 작은 규모의 표본을 가지고 있을 때, 이 표본이 최소자승법을 사용하기 위한 가정들을 충족시키는지 여부를 알지 못하기 때문에 OLS의 추정 결과를 얻더라도 그것이 과연 BLUE인지를 검정할 방법이 없습니다.

  • 하지만 부트스트랩 방법을 이용하면 이 문제를 시뮬레이션한 표집 분포를 이용해 해결할 수 있습니다. 이것이 소규모 표본을 이용할 때 표본 통계치의 신뢰도4가 낮아 생길 수 있는 문제들을 다룰 수 있는 부트스트랩의 장점입니다.

부트스트랩 방법의 장점은 우리가 작은 표본을 가지고 있거나 모집단의 분포를 모른다고 하더라도 모집단의 특성을 추정할 수 있도록 해준다는 것입니다.

  • 시뮬레이션된 표집분포를 가지고 우리는 계수, 표준오차, 그리고 신뢰구간 등 기존에 추정하던 통계치들을 모두 추정할 수 있습니다. 또한 OLS가 회귀선을 그리는 방법을 부트스트랩 방법과 비교하자면, 부트스트랩 방법은 사전에 모집단의 분포가 어떠할 것이라고 가정을 하지 않기 때문에 모집단의 확률분포가 정규분포가 아니라고 가정하는 다른 여러 추정기법들과도 함께 사용될 수 있습니다.

  • 개인적으로는 부트스트랩 방법은 대개 소규모 표본의 문제로 여러가지 어려움을 겪는 사회과학 분야의 경험연구에 있어서 특히나 유용한 대안이라고 생각합니다. 그러나 분명 부트스트랩 방법에도 한계는 있습니다.

    • 바로 무작위화의 가정이 깨어질 경우입니다. 만약 우리가 가진 단 하나의 표본이 모집단으로부터 무작위 복원추출되었다고 할 근거가 충분하지 못하다면 어떻게 될까요? 원 표본이 편향된 순간, 부트스트랩 표본들도 모집단의 특성을 대표하는 것이 아니라 사실상 원 표본의 체계적 편향을 반영한 표본들이 되고 맙니다.

부트스트랩… 어디다 써먹지?

정리하자면 비모수 부트스트랩을 통해 우리는 표집분포를 얻을 수 있습니다. 그리고 이 표집분포에 대한 함수적 관계를 상정하는 것도 자유롭습니다.

  • 분석적 접근법(analytic approach)에 따르면 모델 \(y = \beta_0 + \beta_1x + \beta2_z + \beta_3xz + \epsilon\)에서 상호작용을 나타내는 편미분 결과 \(\hat{\beta_1} + \hat{\beta_3}z\)의 표준오차, 즉 표본의 차이에 따라 그 상호작용 효과가 다르게 나타날 수 있는 변동성은 \(Var(\hat{\beta_1}) + z^2Var(\hat{\beta_3}) + 2z Cov(\hat{\beta_1}, \hat{\beta_3})\) 으로 나타납니다.

  • 하지만 만약 우리가 \(g = 1, \cdots, G\)개의 부트스트랩 표본들을 추출할 수 있게 된다면, 그 부트스트랩 표본들로부터 얻은 \(\hat{\beta}_1^{(1)} + \hat{\beta}_3^{(1)}z, \cdots, \hat{\beta}_1^{(G)} + \hat{\beta}_3^{(G)}z\)를 가지고 요약통계를 보여주면 됩니다. 훨씬 간단하죠.

행렬 OLS를 통해 우리가 얻을 수 있는 예측값이 \(\hat{\textbf{y}} = \bar{\textbf{X}}\hat{\beta}\)이라는 것을 다시 떠올려보겠습니다.

  • 부트스트랩 표본을 \(g=1,\cdots,G\)개 가졌다고 한다면 이 부트스트랩 표본들로부터 얻은 계수값은 \(K\times1\)의 벡터로 나타낼 수 있습니다: \(\hat{\beta}^{(g)}\). 따라서 하나의 부트스트랩 표본에서 얻어진 예측값은 \(\hat{\textbf{y}}^{(g)} = \bar{\textbf{X}}\hat{\beta}^{(g)}\)라고 할 수 있습니다.

  • 그리고 \(G\)개의 부트스트랩 표본들을 이용해 알고 싶은 예측값에 대한 전체 부트스트랩 분포를 구할 수 있습니다. 간단히 말하면, \(x_1\) 변수에 대한 \(\hat{beta_1}\)은 부트스트랩 표본들 전체를 모델에 집어넣고 나온 \(\hat{\beta}^{(g)}\)의 분포로 나타낼 수 있다는 것입니다.

  • 부트스트랩 표본들로부터 추정된 일련의 계수값들을 \(\hat{\textbf{b}} = (\hat{\beta}^{(1)} \cdots \hat{\beta}^{(G)})\)라고 하겠습니다.

  • 그리고 부트스트랩 표본들에 모델을 적용하여 얻은 일련의 예측값들을 \(\hat{\textbf{Y}} = (\hat{y}^{(1)} \cdots \hat{y}^{(G)})\)라고 해보겠습니다.

  • \(\hat{\textbf{Y}} = \bar{\textbf{X}}\hat{\textbf{b}}\)는 우리가 관심을 가지는 특정한 \(M\)이라는 예측값 각각에 대한 \(G\)개의 부트스트랩 표본들이라고 할 수 있습니다.

부트스트랩 R로 보기: 비모수 부트스트랩의 추출횟수와 결과

실제 데이터를 가지고 부트스트랩 방법을 적용해보겠습니다. 논리대로라면 부트스트랩 표본의 추출 횟수가 증가할수록, 부트스트랩 표본을 통해 얻은 계수 추정치들은 우리가 표집분포를 이용해 도출한 분석적 접근법의 결과에 근사하게 될 것입니다.

Boot <- QOG.s %>% 
  dplyr::select(wdi_gdpcapcon2010, p_polity2, wdi_trade)

# 비모수 부트스트랩 표본추출 횟수 변화에 따른 결과의 차이를 보겠습니다.
# 먼저 100번 부트스트랩을 할 경우입니다.
holder100 <- matrix(NA, 100) ## 일단 100번 추출한 결과가 들어갈 빈 행렬을 만듭니다.
for(i in 1:100){  ## 함수를 만듭니다. i는 1부터 100까지를 의미합니다.
  ind <- sample(1:nrow(Boot), ## ind는 전체 관측치(각 행의 번호) 중에서 
              ## QOG.s와 동일한 표본규모로 표집됩니다.
                size=nrow(Boot), replace=T) ## 복원표집된 결과입니다.
  # 이 ind가 헷갈리실 텐데, 뭐냐면 넘버링입니다. 매번 무작위로 넘버링이 
  # 나올거고 이 넘버링에 속하는 관측치들은 개별 부트스트랩 표본을 구성합니다.
  # 그 과정이 i번, 즉 1~100까지 반복되어 총 100개의 부트스트랩 표본이 생깁니다.
  mod <- lm(log2(wdi_gdpcapcon2010) ~ ## 모델은 앞서와 동일하게 적용합니다.
              1 +  p_polity2 + wdi_trade, 
            data=Boot[ind,]) ## ind에 속하는 행의 관측치만을 가지고 모델분석
  holder100[i,] <- coef(mod)[2] ## 이렇게 새로 부트스트랩 표본으로 모델을 
  # 분석해 나온 계수값만을 아까 만든 깡통행렬에 차곡차곡 하나씩 저장.
  # 민주주의에 대한 계수의 결과만을 보겠습니다.
}
head(holder100) ## 그려면 이렇게 총 100개의 계수값이 담긴 행렬이 완성됩니다.
##            [,1]
## [1,] 0.16737332
## [2,] 0.11392406
## [3,] 0.05170454
## [4,] 0.09482248
## [5,] 0.05588331
## [6,] 0.08455292

이 다음에는 단순하게 추출 횟수만 바꾸어주면 되겠죠? 빠르게 가겠습니다.

## 1000번 Bootstrapping
holder1000 <- matrix(NA, 1000)
for(i in 1:1000){
  ind <- sample(1:nrow(Boot), 
                size=nrow(Boot), replace=T)
  mod <- lm(log2(wdi_gdpcapcon2010) ~ 
              1 +  p_polity2 + wdi_trade,
            data=Boot[ind,])
  holder1000[i,] <- coef(mod)[2]
}

## 10000번 Bootstrapping
holder10000 <- matrix(NA, 10000)
for(i in 1:10000){
  ind <- sample(1:nrow(Boot),
                size=nrow(Boot), replace=T)
  mod <- lm(log2(wdi_gdpcapcon2010) ~ 
              1 +  p_polity2 + wdi_trade,
            data=Boot[ind,])
  holder10000[i,] <- coef(mod)[2]
}

## 100000번 Bootstrapping
holder100000 <- matrix(NA, 100000)
for(i in 1:100000){
  ind <- sample(1:nrow(Boot), 
                size=nrow(Boot), replace=T)
  mod <- lm(log2(wdi_gdpcapcon2010) ~ 
              1 +  p_polity2 + wdi_trade, 
            data=Boot[ind,])
  holder100000[i,] <- coef(mod)[2]
}

이렇게 계산된 각각의 100번, 1,000번, 10,000번, 100,000번의 부트스트래핑 결과로 얻어진 계수값들을 하나의 데이터로 만들어서 비교해보도록 하겠습니다. tidyverse 패키지의 tibble을 이용하여 하나의 데이터로 만들겠습니다.

# 각각의 부트스트랩한 계수값 결과를 하나의 데이터로 만들어줍니다.
npbs <- bind_rows(
  holder100 %>%
    as_tibble() %>% mutate(NPBS = "100") %>% 
    rename(Estimates = V1),
  holder1000 %>%
    as_tibble() %>% mutate(NPBS = "1000") %>% 
    rename(Estimates = V1),
  holder10000 %>%
    as_tibble() %>% mutate(NPBS = "10000") %>% 
    rename(Estimates = V1),
  holder100000 %>%           
    as_tibble() %>% mutate(NPBS = "100000") %>% 
    rename(Estimates = V1)) %>%
  mutate_if(is.numeric, round, 3)

# 각 부트스트랩 횟수별로 평균을 구해주겠습니다. 그리고 비교대상인 OLS의
# 민주주의 계수값 결과도 추가해주고요.
analytic <- lm(log2(wdi_gdpcapcon2010) ~ 
              1 +  p_polity2 + wdi_trade, data = QOG.s)

npbs <- npbs %>% group_by(NPBS) %>% mutate(
  `NPBS Mean` = mean(Estimates, na.rm = T),
  `OLS estimates` = coef(summary(analytic))[2,1],
  `OLS se` = coef(summary(analytic))[2,2]
)

부트스트랩으로 얻은 회귀계수와 OLS로 추정한 회귀계수를 비교해보도록 하겠습니다.

  • 각 패널은 부트스트랩 복원표본추출 횟수를 보여줍니다.

  • 그리고 x-축은 회귀계수 값을, y-축은 밀도입니다. 좌측 상단의 패널은 부트스트랩 패널을 100번 추출했을 때의 결과입니다.

  • 붉은 선이 부트스트랩으로 얻은 회귀계수의 평균이고 소수점 셋째 자리에서 0.084입니다.

  • 그리고 붉은 색으로 표시된 분포와 히스토그램이 부트스트랩으로 얻은 계수 관측치들의 분포를 보여줍니다.

  • 검정색 선으로 표시된 분포는 OLS 분석으로 얻은 회귀계수값을 평균으로 하고 표준오차를 표준편차로 하는 정규분포입니다. 말이 되죠? 왜냐면 OLS의 가우스-마르코프 가정이 충족된다면 OLS의 회귀계수는 BLUE일테니, 그렇게 얻은 회귀계수의 기대값인 평균은 모집단의 모수, \(\beta\)와 같을 것이고 표집분포에서의 표준편차는 표본추출로 인한 표본들 간에 나타날 수 있는 차이를 보여주는 표준오차로 나타나니까요.

일단 부트스트랩 표본추출 100회차를 보면 벌써 평균이 0.002밖에 차이가 안 납니다. 다만 분포 양상은 정규분포라고 하기 조금 힘듭니다. 아무래도 관측치가 100개밖에 없다보니 좀 삐뚤빼뚤합니다. 히스토그램만 봐도 그렇죠.

두 번째로는 부트스트랩을 1,000번 시뮬레이션한 결과입니다. 평균 차이는 뭐 여전히 조금 존재하기는 하지만 분포가 한층 더 정규분포에 비슷해진 것을 확인할 수 있습니다.

  • 마찬가지로 나머지 하단의 두 패널들도 점점 분포 양상이 정규분포 모양으로 수렴하는 것을 확인할 수 있습니다.

  • 즉, 이를 통해서 우리는 부트스트랩 표본 추출 횟수가 증가할수록 부트스트랩 표본들을 이용해 얻은 계수값들의 분포는 OLS 회귀계수의 정규분포에 근사한다는 것을 알 수 있습니다. 시뮬레이션이 분석적 접근법의 대안일 수 있다는 것이죠.

부트스트랩 R로 보기(2): 신뢰구간과 점추정치

이전에 “변수에 대한 심화”라는 섹션에서 Gelman (2008)5에 따라 변수를 표준화하되 \(b=1sd(x)\)가 아니라 \(b=2sd(x)\)로 표준화를 해준 적이 있습니다.

  • 결과적으로 \(b=2sd(x)\)로 표준화했을 때, 표준화 이전 계수의 경향성과 표준화한 이후의 계수의 경향성이 비슷한 양상을 보인다는 것을 확인했습니다.

  • 어차피 표준화의 결과로 실질적 변수의 효과가 다르게 나타나는 것은 아니니만큼 \(b=2sd(x)\) 표준화가 직관적인 이해까지 도울 수 있다는 제언을 한 적이 있습니다.

이번에는 당시의 분석을 비모수 부트스트랩을 이용해서 재현해보도록 하겠습니다.

  • 기억을 되살려보면 \(y_i = \delta_0 + \delta_1x_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}\)를 추정하는 것이었습니다.

  • \(x\)에 맞추어 재구성하면 결국 아래와 같은 모델이라는 것을 알 수 있죠.

\[ y = \lambda_0 + \lambda_1(\frac{x_i - \bar{x}}{2\times\sigma_x}) \]

이번에는 QoG 데이터셋의 1인당 GDP와 민주주의 수준을 이용해 분석해보겠습니다. 데이터를 고려해보면 제 모델은 아래와 같습니다.

\[ \text{경제규모}_i = \lambda_0 + \lambda_1\frac{(\text{민주주의 수준})-(\text{민주주의 수준의 평균})}{\text{민주주의 수준의 표준편차}\times2} \]

# 2sd 표준화
QOG.std <- QOG.s %>%
  mutate(
    std.polity = p_polity2 - mean(p_polity2)/2*sd(p_polity2))

# 새롭게 모델링
model.sd <- lm(log2(wdi_gdpcapcon2010) ~ std.polity, data=QOG.std)

# 결과
model.sd %>% broom::tidy() %>% 
  mutate_if(is.numeric, round, 3) %>% knitr::kable()
term estimate std.error statistic p.value
(Intercept) 13.123 0.312 42.015 0.000
std.polity 0.084 0.029 2.926 0.004
# 비교를 위한 원 변수 모델
model2 <- lm(log2(wdi_gdpcapcon2010) ~ p_polity2, data=QOG.std)
model2 %>% broom::tidy() %>% 
  mutate_if(is.numeric, round, 3) %>% knitr::kable()
term estimate std.error statistic p.value
(Intercept) 11.985 0.216 55.543 0.000
p_polity2 0.084 0.029 2.926 0.004

표준화를 했기 때문에 이제 예측변수는 측정단위에 따라 결과가 좌우되지는 않습니다. 즉, 변수가 여러개 있다면 표준화한 변수들의 효과들 간에는 상대적 비교가 가능합니다. 예를 들어, \(x_1\)\(x_2\)보다 \(y\)에 미치는 효과가 상대적으로 크다, 작다 등으로 해석이 가능하다는 얘기지요. 그것이 실질적인 효과와 직결되느냐는 조금 다른 문제입니다만 여하튼 표준화는 서로 분석단위가 \(kg\)\(ml\) 등으로 상이한 변수들 간의 효과를 비교할 수 있도록 스케일링해주는 것입니다.

물론 여기서는 단 하나의 예측변수만을 사용하기 때문에 결과는 표준화된 예측변수—민주주의의 수준과 로그값을 취한 종속변수의 관계만을 보여줄 것입니다. 이 분석을 위하여 4,000번의 부트스트랩 복원표본추출을 해보도록 하겠습니다.

holder.std <- matrix(NA, 4000)
for(i in 1:4000){
  ind <- sample(1:nrow(QOG.std), size=nrow(QOG.std), replace=T)
  mod <- lm(log2(wdi_gdpcapcon2010) ~ std.polity, data=QOG.std[ind,])
  holder.std[i,] <- coef(mod)[2]
}

# 어떤 방식으로 데이터를 구성했는지 조금 직관적으로 이해할 수 있게
# 단순하고 늘어지는 코드를 써보았습니다.
# 먼저 부트스트랩 결과입니다.
std.data1 <- data.frame(ID="Bootstrapped",
                        Low=quantile(holder.std, 0.025), 
                        M=mean(holder.std),
                        High=quantile(holder.std, 0.975))
# 부트스트랩은 이미 우리가 4000개의 관측치를 가지고 있기 때문에 이 관측치에서
# 왼쪽꼬리 2.5백분위와 우측꼬리 2.5백분위에 해당하는 값이 95% 신뢰구간의
# 기준값이 됩니다.

# OLS 결과입니다.
std.data2 <- data.frame(ID="OLS",
                        Low=coef(summary(model.sd))[2,1] -
                          1.96*coef(summary(model.sd))[2,2],
                        M=coef(summary(model.sd))[2,1],
                        High=coef(summary(model.sd))[2,1] +
                          1.96*coef(summary(model.sd))[2,2])
std.data <- rbind(std.data1, std.data2)

자, 어떤가요? 부트스트랩 표본추출로 구한 계수 추정치와 OLS 추정치의 95% 신뢰구간 결과입니다. 보시다시피 부트스트랩 결과가 조금 큰 계수값과 넓은 신뢰구간을 가지고 있지만 두 계수 추정치는 매우 근사하고 이 차이는 실질적인 분석을 수행하는 데 있어서 무시할만합니다. 뭐 이렇게 말하면 조금 위험할수도 있지만요.

  • 하지만 부트스트랩의 평균과 표준편차가 OLS의 분석적 결과인 계수 추정치와 표준오차 계산을 통한 신뢰구간보다 조금 과대추정되었더라도 부트스트랩 결과는 그 나름의 장점이 있습니다.

  • 우리는 실질적으로 계수값들의 관측치를 통해 분포를 가지고 있기 때문에 그 분포를 이용해 원하는 값을 보여줄 수 있기 때문입니다. 게다가 부트스트래핑은 표본 규모가 작더라도 시도할 수 있기 때문에 어떤 부분에서는 OLS에 대해 상대적 이점이 있다고도 할 수 있습니다.

그렇다면 이번에는 비모수 부트스트랩을 넘어 이제 모수적 부트스트랩(parametric bootstrap), 흔히 정치학에서는 AJPS 2000년의 Gary King과 Michael Tomz, 그리고 Jason Wittenberg 논문으로 유명한 Clarify에 대해 살펴보도록 하겠습니다.

모수적 부트스트래핑: 왔노라, 보았노라, 밝혀냈노라(CLARIFYed)

OLS에서 표집분포란 우리가 얻을 수 있는 모든 가능한 추정치 \(\hat{\beta}\)\((\beta, \hat{\sigma}^2(X'X)^{-1})\)을 따르는 정규분포를 가진다는 것을 의미합니다. OLSBLUE를 산출할 수 있는 가정들을 만족시킨다면 말이죠. 그런데 문제는 우리가 \(\beta\)를 모른다는 것입니다. \(\beta\)는 모집단의 모수, 우리가 진정 알고자 하는 모집단에서의 관계를 보여주는 것이니까요.

King, Tomz, 그리고 Wittenberg (2000, 이하 King et al. (2000))는 왜 우리가 OLS를 통해 추정해낸 “최고의 선형관계를 보여주는 편향되지 않은 효율적인 추정값”(Best Linear Unbiased Estimator)인 \(\hat{\beta}\)를 사용할 것을 제안합니다. King et al. (2000)에 따르면, 시뮬레이션을 통해 구할 수 있는 모든 계수값은 OLS 계수 추정치를 평균으로 하고 표준오차에 따라 정규분포를 이룰 것이라고 기대할 수 있습니다: \(\tilde{\beta} ~ N(\hat{\beta}, \hat{\sigma}^2(X'X)^{-1})\). 만약 이같은 관계가 성립한다면 우리는 이 정규분포로부터 원하는 값을 자의적으로 선택해서 보여줄 수 있고, \(\tilde{\beta}\)에 대해 어떤 함수적 관계에 상관없이 계산을 할 수 있게 됩니다.

평균과 불확실성을 추정하기

실제 모델을 통해서 한 번 생각해보도록 하겠습니다. 이 모델은 임금수준과 교육수준, 그리고 그 두 변수의 상호작용을 통해 범죄율을 설명할 수 있다는 내용을 담고 있습니다. 정확히는 임금수준이 범죄율에 미치는 효과가 교육수준에 따라 조건적으로 나타날 것이라고 기대한다고 합시다.

\[ \text{범죄율} = \beta_0 + \beta_1\text{임금수준} + \beta_2{교육수준} + \beta_3(임금수\times교육수준) \]

여기서 우리가 관심있는 것은 바로 관찰된 교육 수준의 값이 평균일 때, 임금 수준의 변화에 따른 기대값이라고 할 수 있습니다.

  • 모든 교육수준 관측치에 대해 임금 수준을 고임금(\(\overline{\text{임금}}\))과 저임금(\(\underline{\text{임금}}\))의 저임금으로 벡터화해보겠습니다.

  • \(g = 1, \cdots. G\)라고 할 때, 다음과 같이 단계대로 진행합니다.

    1. \(\tilde{\beta}^{(g)} ~ N(\hat{\beta}, \hat{\sigma}^2(X'X)^{-1})\)의 분포를 따르는 \(\tilde{\beta}^{(g)}\)를 추출합니다.

    2. 교육수준 변수로부터 \(PE^{(g)}\)를 무작위로 추출합니다.

    3. \(\mu \overline{\text{임금}}^{(g)} = \tilde{\beta_0}^{(g)} + \tilde{\beta_1}^{(g)}\overline{\text{임금}} + \tilde{\beta_2}^{(g)}\text{교육수준}^{(g)} + \tilde{\beta_3}^{(g)}(\overline{\text{임금}}\times\text{교육수준}^{(g)})\)을 계산합니다.

    4. \(\mu \underline{\text{임금}}^{(g)} = \tilde{\beta_0}^{(g)} + \tilde{\beta_1}^{(g)}\underline{\text{임금}} + \tilde{\beta_2}^{(g)}\text{교육수준}^{(g)} + \tilde{\beta_3}^{(g)}(\underline{\text{임금}}\times\text{교육수준}^{(g)})\)을 계산합니다.

    5. \(\mu \overline{\text{임금}}^{(g)}\)\(\mu \underline{\text{임금}}^{(g)}\) 값을 저장해줍니다.

자, 그러면 이제 두 개의 벡터, \(\mu \overline{\text{임금}}^{(g)}\)\(\mu \underline{\text{임금}}^{(g)}\)를 가지게 되었습니다. 이 두 벡터를 요약해서 보여주기만 하면 됩니다. 그러면 우리는 임금이 매우 낮을 때와 임금이 매우 높을 때의 범죄율의 차이를 분포를 통해 직관적으로 확인할 수 있습니다. 이 방법이 효율적인 이유는 위의 4번과 5번에서처럼 \(\tilde{\beta}\)\(G\)개의 추출 결과를 가지고 그냥 \(\tilde{\textbf{b}}\)의 행렬과 결합한 뒤 계산만 해주면 되기 때문입니다. 아니면 그냥 바로 구한 \(\tilde{\beta}\) 행렬을 요약해서 보여줘도 되구요.

King et al. (2000)

이 파트에서는 King et al. (2000)의 주장과 제안을 간단하게 정리 및 소개하도록 하겠습니다. 나아가 그들이 (1) 왜 이런 논문을 썼는지, (2) 예측값(predicted values)와 기대값(expected values)의 차이점이 무엇인지, 그리고 1차 차분(first difference)이란 무엇인지, (3) 베이지안 접근법에 대해서 King et al. (2000)이 무어라 말하고 있는지 등에 대해 살펴보겠습니다.

Title: Making the Most of Statistical Analyses: Improving Interpretation and Presentation

이 논문의 제목은 우리가 통계 분석을 통해 얻을 수 있는 결과들의 특성에 대해 좀 더 숙고할 필요가 있다는 King et al. (2000)의 제안을 드러낸다고 할 수 있습니다. 이들은 연구자들이 단지 복잡한 통계분석의 결과를 날것 그대로 보고하지만 말고, 그것의 의미를 제대로 전달할 수 있는 방식으로 보고할 책임이 있다고 주장하고 있습니다.

  • King et al. (2000)에 따르면, 사회과학자들은 통계분석 결과로부터 “가용한 정보의 모든 장점을 거의 취하지 못하고” 있습니다(King et al. 2000: 347).

  • 달리 말하면, 당시 King et al. (2000)이 정치학 분야의 통계방법을 이용한 경험연구들을 살펴보았을 때, 통계 결과를 보여주고 해석하는 방식이 실질적으로 그 결과를 이해하는 데 충분한 정보를 제공하지 못하고 있었다는 것을 의미합니다.

    • 물론 지금은 이 논문이 작성된지 20년이 흘렀고, King et al. (2000) 이후로도 많은 발전과 변화가 있었습니다.

King et al. (2000)은 독자가 통계학적 훈련을 받지 않은 이라고 할지라도 연구자들은 그들이 읽을 수 있고, 이해할 수 있는 방식으로 통계 결과를 제시할 책임이 있다고 강조합니다.

  • 또한 통계적 유의성이 실질적 유의성과 같은 것일고 할 수는 없기 때문에 우리는 연구 결과로 나타난 통계 결과의 실질적 의미가 무엇인지에 대해 통계적 바탕을 가지지 못한 다른 사회과학자 또는 논문을 읽을 일반 독자들과 공유하는 방법을 숙고해야 한다는 것입니다.

이들은 또 통계 방법이 가지는 두 가지 불확실성에 대해 인정해야만 한다고 언급하고 있습니다.

  • 바로 추정결과의 불확실성(estimation uncertainty)과 본연적 불확실성(fundamental uncertainty)입니다.

  • 이 두 불확실성으로 인해 통계적 결과는 가능한 한 많은 정보를 제공해야만 합니다.

    • 단지 효과의 규모, 방향, 그리고 유의성만 보여줄 것이 아니라 우리가 추정해낸 이 효과가 얼마나 불확실한지 역시도 보여주어야 한다는 것입니다.
  • 이를 위해서 King et al. (2000: 350)은 우리가 관심을 가지고 있는 예측값, 기대값, 그리고 1차 차분값이라는 점 추정치에 대해 더 많은 정보를 제공할 수 있을 것으로 기대하는 시뮬레이션에 기반한 접근법을 제안하고 있습니다.

    • King et al. (2000)이 말하는 예측값은 시뮬레이션 결과로 얻은 예측값을 의미합니다.

      • 통계적 시뮬레이션은 표본 추출 횟수에 따라 수많은 시뮬레이션 표본을 산출할 수 있습니다. 이는 우리가 가지고 있는 통계 모델을 가지고 수없이 시뮬레이션을 돌려 시뮬레이션 결과값들을 가질 수 있다는 것을 의미합니다.

      • 따라서 예측값은 이 시뮬레이션 결과로 가지게 된 벡터들로 계산된 결과입니다. 만약 우리가 예측값을 계산한다고 하면, 시뮬레이션으로 얻은 계수 값에 각 변수에서 하나의 관측치씩을 대입하여 하나의 결과값을 얻게 됩니다.

      • 이것이 바로 예측값입니다. \(y_1 = \beta_0 + \beta_1\times(x_1=1) + \beta_2\times(x_2=3) + \beta_3\times\{(x_1=1)\times(x_2=3)\}\)에서 결과로 나타난 이 \(y_1\)가 각각의 변수에 특정 값들을 대입했을 때, 우리가 얻을 수 있는 예측값입니다.

    • 한편 기대값은 예측값의 변동성을 평균화한, 결과값의 평균값이라고 할 수 있습니다. 따라서 우리는 기대값이 예측값의 변동성의 평균을 취하기 때문에, 예측값이 기대값보다 더 큰 분산을 가질 것이라고 생각할 수 있습니다.

    • 그리고 두 기대값 사이의 차이를 우리는 1차 차분값이라고 합니다.

      • 연구자들은 예측변수들의 설정을 다르게 함으로써 서로 다른 두 개의 기대값을 얻는 알고리즘을 사용합니다(King et al. 2000: 351). 어려울 것은 없습니다. 이 전 파트에서 다른 변수인 교육수준은 똑같이 넣고 임금 수준만 고임금, 저임금으로 나누어서 결과의 변화를 살펴보았던 것이 바로 이런 설정입니다.

        • 1차 차분값은 다른 변수들이 통제되었을 때, 우리가 관심을 가지고 있는 주요 변수의 변화가 결과에 미치는 효과를 보여준다고 할 수 있습니다. 따라서 우리는 이 알고리즘을 반복하면 1차 차분값의 분포를 얻을 수 있습니다.

        • 이 분포를 이용해 우리는 1차 차분값에 대한 추정값과 표준오차를 구할 수 있게 됩니다. 모수적 부트스트랩에서 수많은 부트스트랩 표본들을 이용해 각각의 1차차분값들을 모아 분포를 보여주는 것과 같은 논리입니다.

King et al. (2000)은 베이지안 접근법에 대해서도 하나의 대안적 접근법으로 평가하고 있습니다. 이들은 베이지안 접근법이 중심극한정리나 정규성 가정과 같은 제약에서 상대적으로 자유롭다는 점에서 더 설명력 있는 결과를 제시할 수 있다고 제안합니다. 하지만 King et al. (2000)이 논문을 작성하던 시점에서는 베이지안 접근법을 기존의 통계적 기법들에 적용하기 어려웠기 때문에, 이들은 상대적으로 용이한 시뮬레이션 기반의 접근법을 사용할 것을 제안하고 있습니다.

2020년 12월 현재, 이 논문은 구글 스칼라에서 약 4,100여 명이 넘는 학자들에 의해 인용되고 있습니다. 물론 인용하는 이들이 모두 King et al. (2000)의 주장과 제언을 수용하는 이들ㅇ은 아닐 것입니다만, 적어도 이들의 주장이 한 번쯤 연구문제를 적실하게 풀어나가는 방법을 고민할 때, 되새겨볼만한 의미를 가진 논문이라는 것을 시사한다고 생각합니다.

Practice the King et al. (2000)!

머리 아픈 논문을 살펴보았으니, 이제 데이터를 이용해서 모델을 만들고 King et al. (2000)의 제안에 따라 그들의 논문에 있는 Figure 1과 같은 방식으로 결과를 재현해보도록 하겠습니다. 두 가지 그래프를 그려야 합니다. 이를 위해서 일단 추정해야 할 모델은 일반적인 형태로 다음과 같은 구조를 가지고 있다고 가정해보겠습니다.

\[ y = \beta_0 + \beta_1x + \beta_2z + \beta_3xz + \beta_4w + \beta_5m + \beta_6mw \]

하나의 그래프는 \(x\)\(z\)에 초점을 맞춘 것이어야 하고, 다른 하나는 \(m\)\(w\)의 관계를 보여주어야 하는 것이라고 하겠습니다. 먼저 QoG 데이터셋의 2015년도 자료를 통해서 변수들을 다음과 같이 모델링 해보겠습니다.

\[ \begin{aligned} \text{경제규모} =&\beta_0 + \beta_1\text{무역개방성} + \beta_2\text{민주주의} + \beta_3(\text{무역개방성}\times\text{민주주의})\\ +&\beta_4\text{농지 비율} + \beta_5\text{노령인구비율} +\beta_6(\text{농지비율}\times\text{노령인구비율}) \end{aligned} \]

나중에야 RZelig 패키지나 STATAClarify를 이용할 수 있겠지만, 여기서는 기본적인 논리를 이해하며 코딩을 전개하고자 하기 때문에 좀 원시적인(?) 방식으로 코드를 짜보도록 하겠습니다.

데이터를 불러와 주었으니 이제는 모델을 만들어야겠죠? 단위의 문제가 있으니 종속변수인 경제규모의 측정지표, 1인당 GDP는 로그값을 취하도록 하겠습니다.

library(mvtnorm)
model1 <- lm(log2(wdi_gdpcapcon2010) ~ wdi_trade + p_polity2 + 
               I(wdi_trade * p_polity2) + wdi_araland + wdi_agedr + 
               I(wdi_araland * wdi_agedr), data=QOG.s)
model1 %>% broom::tidy() %>% 
  mutate_if(is.numeric, round, 3)

일단 회귀분석 결과를 summary를 통해 살펴보면 상호작용들 모두 유의미하지 않는 것으로 나타나네요. 뭐 어쩔 수 없습니다. 그렇다고 하더라도 이 작업이 무의미하지는 않으니까요.

제가 관심이 있는 것은 변수들 간의 상호작용입니다. 먼저 \(x\), \(z\)에 해당하는 변수, 무역개방성과 민주주의의 관계를 살펴보도록 하겠습니다.

set.seed(19891224)
beta_draws <- rmvnorm(n=1000, mean = coef(model1), sigma=vcov(model1))
head(beta_draws)
##      (Intercept)     wdi_trade    p_polity2 I(wdi_trade * p_polity2)
## [1,]    17.35005 -0.0023963830  0.025691386             7.312002e-04
## [2,]    18.68324 -0.0032424866  0.020011753             1.091112e-03
## [3,]    17.14560  0.0005784861 -0.008779808             8.476709e-04
## [4,]    18.22074  0.0042763462  0.017145542             7.995185e-04
## [5,]    16.62469  0.0070268007  0.086336501            -9.546159e-05
## [6,]    16.62564  0.0049103073  0.115611645            -3.416098e-05
##      wdi_araland   wdi_agedr I(wdi_araland * wdi_agedr)
## [1,] -0.01313041 -0.08070444              -0.0001032105
## [2,] -0.06878070 -0.09948163               0.0005771853
## [3,] -0.05279643 -0.08140526               0.0006251953
## [4,] -0.09277086 -0.10189863               0.0012669075
## [5,] -0.01525257 -0.07759279              -0.0001900096
## [6,] -0.04774735 -0.08325537               0.0004425008

rmvnorm은 다변량 정규분포(multivariate normal distribution)의 무작위 추출을 가능하게 하는 함수입니다. 위의 코드에 따르면 평균을 모델의 각 계수값으로 하고 각 계수들 간의 분산-공분산을 표준편차로 하는 분포로부터 각각의 계수값들의 1000회 추출한 시뮬레이션 분포를 beta_draws라는 객체에 저장하라는 내용입니다. 자세한 내용은 다루지 않겠습니다만, 간단하게 이야기하면 추정된 OLS 계수를 평균으로 하는 분포에서 시뮬레이션된 분포를 뽑되, 그 표준편차를 계수들 간의 공분산 즉, 계수들 간에 상관을 일종의 표준오차로 고려하여 추출하라는 것입니다.

이렇게 1000개에 해당하는 시뮬레이션된 계수값을 얻었으니, 이제는 우리가 관심을 가지고 있는 변수의 범위를 설정해주어야겠죠? 높은 수준의 무역개방성과 낮은 수준의 무역개방성을 보여주기 위하여 상위 15%에 해당하는 값과 하위 15%에 해당하는 값을 quantile 함수를 이용하여 벡터화 하였습니다. 이를 trade라는 별도의 객체에 저장하겠습니다. 또한 민주주의의 수준이 변화함에 따라 이 서로 다른 수준의 무역개방성이 경제규모에 미치는 효과를 탐색해야하기 때문에 민주주의 수준의 변화도 벡터화하여 포함하여 줍니다. POLITY2는 -10부터 10까지 1의 간격을 가진 변수기 때문에 그대로 반영해서 백터화하였습니다.

trade <- quantile(QOG.s$wdi_trade, c(0.15, 0.85))
trade
##       15%       85% 
##  43.20651 121.37311
democracy <- c(seq(-10, 10, by=1))
democracy
##  [1] -10  -9  -8  -7  -6  -5  -4  -3  -2  -1   0   1   2   3   4   5   6   7   8
## [20]   9  10

그리고 나서 이제는 \(\bar{\textbf{X}}\)\(\underline{\text{무역개방성}}\)\(\overline{\text{무역개방성}}\)에 해당하도록 만들어줍니다. 무역개방성과 민주주의를 제외한 나머지 모든 변수들이 평균값을 가진다고 할 때, 무역개방성의 수준 차이가 민주주의 수준의 변화에 따라 어떻게 경제규모에 영향을 미치는지 살펴보겠습니다.

# 낮은 수준의 무역개방성
LowTrade <- cbind(1, trade[1], 
                  democracy, 
                  I(trade[1] * democracy),
                  mean(QOG.s$wdi_araland), mean(QOG.s$wdi_agedr), 
                  I(mean(QOG.s$wdi_araland) * mean(QOG.s$wdi_agedr)))
# 높은 수준의 무역개방성
HighTrade <- cbind(1, trade[2], 
                democracy, 
                I(trade[2] * democracy),
                mean(QOG.s$wdi_araland), mean(QOG.s$wdi_agedr), 
                I(mean(QOG.s$wdi_araland) * mean(QOG.s$wdi_agedr)))

나머지는 \(\hat{\textbf{Y}} = \bar{\textbf{X}}\hat{\textbf{b}}\)에 대한 행렬계산을 R 코드로 구현하는 것입니다.

LowTrade.ME <- t(LowTrade %*% t(beta_draws)) ## ME는 Marginal Effect입니다.
LT.mean <- apply(LowTrade.ME, 2, mean) ## 구해진 1,000개의 예측값의 평균
LT.se <- apply(LowTrade.ME,2, 
               quantile, c(0.025, 0.975)) ## 구해진 1,000개의 예측값의 표준편차

HighTrade.ME <- t(HighTrade %*% t(beta_draws))
HT.mean <- apply(HighTrade.ME, 2, mean)
HT.se <- apply(HighTrade.ME, 2, 
               quantile, c(0.025, 0.975)) ## 2.5/97.5 perentile

LT <- data.frame(Democracy=democracy,
                 Group = "Low Trade", ## 시뮬레이션이니 직접 하위 5%, 상위 5%의
                 # 관측치를 95% 신뢰구간을 위해 사용할 수 있습니다.
                 Mean=LT.mean, Lower=LT.se[1,], Upper= LT.se[2,])
HT <- data.frame(Democracy=democracy,
                 Group = "High Trade", ## 시뮬레이션이니 직접 하위 5%, 상위 5%의
                 # 관측치를 95% 신뢰구간을 위해 사용할 수 있습니다.
                 Mean=HT.mean, Lower=HT.se[1,], Upper= HT.se[2,])
Trade <- bind_rows(LT, HT)

Trade %>% 
  ggplot(aes(x=Democracy, y=Mean, color=Group, shape=Group)) + 
  geom_point() +
  geom_pointrange(aes(y = Mean, ymin = Lower, ymax = Upper)) + 
  scale_x_continuous(breaks = democracy)+
  scale_color_manual(values=futurevisions("mars")) +
  theme(axis.text.x  = element_text(vjust=0.5)) + 
  labs(x="민주주의 수준", y="경제 규모 (로그화)",
       caption="점추정치를 둘러싼 수직선은 95% 수준의 신뢰구간을 나타냄") +
  theme(legend.position = "bottom")

상호작용 변수가 유의미하지 않은 것을 쉽게 이해할 수 있습니다. 왜냐면 민주주의 수준이 변화하는 전 구간에 걸쳐서 높은 수준의 무역개방성과 낮은 수준의 무역개방성이 경제규모에 미치는 효과가 모두 중첩됩니다. 즉, 두 효과가 통계적으로 유의하게 차이난다고 볼 수 있는 경험적 근거가 충분치 않기 때문에 우리는 두 효과가 서로 같다(다르지 않다)라는 영가설을 기각할 수 없게 됩니다.

이번에는 농지 비율과 노령인구비율의 관계를 살펴볼 것인데요, 똑같습니다. 이번에는 농지비율의 변화에 따라 높은 수준과 낮은 수준의 노령인구비율이 경제규모에 미치는 효과의 변화를 살펴볼 것입니다. 다만, POLITY2와 다르게 농지 비율은 1 단위로 변화하지는 않습니다. 따라서 저는 summary 함수를 이용해 농지 비율 변수의 척도를 확인하고, 최소값부터 최대값까지를 포함할 수 있는 범주를 설정하고 5라는 단위로 인터벌을 가지게끔 하였습니다.

age <- quantile(QOG.s$wdi_agedr, c(0.15, 0.85))
age
##      15%      85% 
## 44.86155 82.48158
summary(QOG.s$wdi_araland)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.1813  5.1117 12.0816 16.2298 22.6387 59.6467
agriland <- c(seq(0, 60, by = 5))


# 여기서 중요한 점은 예측변수의 행렬을 만들 때, 나중에 행렬곱셈을 해줄 시뮬레이
# 션된 계수값들의 순서는 OLS 분석에 투입된 변수 순서와 같다는 것입니다.
# 이를 고려해서 변수를 조작해주어야 합니다.

LowAge <- cbind(1, mean(QOG.s$wdi_trade), mean(QOG.s$p_polity2), 
                I(mean(QOG.s$wdi_trade) * mean(QOG.s$p_polity2)),
                agriland, age[1], 
                I(agriland * age[1]))

HighAge <- cbind(1, mean(QOG.s$wdi_trade), mean(QOG.s$p_polity2), 
                I(mean(QOG.s$wdi_trade) * mean(QOG.s$p_polity2)),
                agriland, age[2], 
                I(agriland * age[2]))

LowAge.ME <- t(LowAge %*% t(beta_draws))
LA.mean <- apply(LowAge.ME, 2, mean)
LA.se <- apply(LowAge.ME, 2, 
                   quantile, c(0.025, 0.975))

HighAge.ME <- t(HighAge %*% t(beta_draws))
HA.mean <- apply(HighAge.ME, 2, mean)
HA.se <- apply(HighAge.ME, 2, 
                   quantile, c(0.025, 0.975))

LA <- data.frame(Arable=agriland,
                 Group = "Low Age Dependency",
                 Mean=LA.mean, Lower=LA.se[1,], Upper= LA.se[2,])
HA <- data.frame(Arable=agriland,
                 Group = "High Age Dependency",
                 Mean=HA.mean, Lower=HA.se[1,], Upper= HA.se[2,])
Age <- bind_rows(LA, HA)

Age %>% 
  ggplot(aes(x=Arable, y=Mean, color=Group, shape=Group)) + 
  geom_point() +
  geom_pointrange(aes(y = Mean, ymin = Lower, ymax = Upper)) + 
  scale_x_continuous(breaks = agriland) +
  scale_color_manual(values=futurevisions("mars")) +
  theme(axis.text.x  = element_text(vjust=0.5)) + 
  labs(x="농지 (% 전체 토지)", y="경제 규모 (로그화)",
    caption="점추정치를 둘러싼 수직선은 95% 수준의 신뢰구간을 나타냄") +
  theme(legend.position = "bottom",
        legend.text=element_text(size=8.5))

어라? 여기서 재밌는 결과가 나옵니다. 틀림없이 농지 비율과 노령인구비율의 상호작용항은 통계적 유의성이 없는 것으로 나타났는데, 그래프는 농지 비율이 낮은 경우에는 낮은 수준의 노령인구비율이 경제규모에 미치는 효과가 높은 수준의 노령인구비율보다 더 높게 나타났습니다. 단, 이러한 차이는 농지 비율이 증가할수록 점차 수렴하여 종래에는 두 효과가 통계적으로 유의미한 차이를 보이지 않는 다는 것을 보여주었습니다.

이 결과가 보여주는 바는 명확합니다. 사실 OLS 결과표에서 상호작용항에 대한 계수값은 저 모든 효과를 뭉뚱그려서 평균 효과를 보여주는 것에 불과합니다. 아마도 노령인구비율이 고만고만한 차이를 보이는 중간 지점의 국가들에서는 저러한 효과가 눈에 보이지 않게 혼재되어 있을 수 있습니다. 하지만, 적어도 우리는 데이터를 통해서 1차 차분값의 결과가 저러한 정보를 내재하고 있다는 것을 보여줄 수 있고, 나아가 실질적인 함의를 도출하며 독자로 하여금 분석의 의의를 이해하는 데 도움을 줄 수 있습니다.

비모수 부트스트랩 vs. 모수적 부트스트랩

비모수 부트스트랩과 모수적 부트스트랩의 이론적 차이에 대해서 간단하게 얘기해보고자 합니다. 이 둘의 차이는 모집단의 분포를 가정하느냐, 혹은 가정하지 않느냐에 좌우된다고 할 수 있습니다.

  • 비모수 부트스트랩이 모집단의 분포를 가정하지 않습니다.

    • 비모수 부트스트랩을 사용해 우리는 하나의 표본(원 표본)으로부터 무수히 많은 수의 부트스트랩 표본을 추출할 수 있습니다.

    • 이 부트스트랩 표본에 속하게 될 관측치들은 원 표본으로부터 모두 동일한 확률로 추출됩니다. 즉, 무작위로 추출됩니다.

    • 비모수 부투스트랩은 부스트스랩 포본들을 통해 얻은 표본 통계치들의 분포를 표집분포로 활용합니다.

    • 따라서 비모수 부트스트랩을 이용할 경우, 우리는 OLS의 고전적인 가정들에 굳이 집착할 필요가 없습니다. 반복된 표집을 통해 우리는 반복 추출된 부트스트랩 표본들의 통계치들의 분포를 직접 관측할 수 있기 때문에 오차분산의 정규성 등과 같은 가정을 할 필요가 없습니다. 부트스트랩하고, 표집을 반복하면 우리는 바로 \(\hat{\beta}\)의 분포를 얻을 수 있으니까요.

  • 한편, 모수적 부트스트랩은 우리가 얻은 표본이 알려지지 않은 모수를 가진, 알려진 분포로부터 얻어졌다고 가정합니다.

    • 모수적 부트스트랩에 따르면 우리는 원 표본이 특정한 분포를 따르는 모집단으로부터 추출되었다고 가정합니다.

    • 따라서 우리는 특정한 부포를 가정하는 통계 기법과 방법을 이용하여 표본을 가지고 모집단의 모수를 추정할 수 있습니다.

    • 만약 우리가 모집단이 어떠한 분포를 따른다는 가정 하에서 표본이 뽑혔다고 가정한다면, 우리가 표본으로부터 얻은 추정값 역시 어떠한 분포를 가정했을 때, 그리고 모수가 가질 것으로 여겨지는 조건들을 충족했을 때 신뢰할만한 것이라고 여길 수 있다는 것입니다.

      • 예를 들어, OLS 추정치가 BLUE라고 주장할 수 있다고 하겠습니다. 그렇다면 우리는 이 계수추정치에 모수적 부트스트랩을 적용하기만 하면 됩니다. 중심극한정리에 따라, 부트스트랩 표본 추출 횟수가 증가할수록 OLS 계수값을 평균으로 취하는 표집분포는 정규 분포에 점차 근사할 것이기 때문입니다.
    • 모수적 부트스트랩을 통해 우리는 OLS 추정결과에 대해 분석적 결과(analytic results)에 비해서 더 풍부한 정보를 가진 수치들을 얻을 수 있습니다.

만약 우리가 부트스트랩 표본 추출 횟수를 많이 할 수 있다고 한다면, 모수적 부트스트랩과 비모수 부트스트랩은 표본 규모가 작더라도 유사한 결과를 제공할 것입니다. 그러나 부트스트랩 표본 추출 횟수가 감소하거나 표본의 분포가 매우 한 쪽으로 치우쳐져 있다거나 극단적인 값들을 많이 포함하고 있다면, 이 두 부트스트랩 방법을 통해 얻은 결과는 꽤 다를 수 있습니다.

조금 더 나아가기: Hainmueller, Mummolo, and Xu (2019)

2019년에 Political Analysis에 게재된 Hainmueller, Mummolo, and Xu의 논문, “How Much Should We Trust Estimates from Multiplicative Interaction Models? Simple Tools to Improve Empirical Practice”는 King et al. (2000)의 근본적인 문제제기와 앞선 챕터들에서 살펴본 상호작용항을 단지 회귀분석 결과표의 \(\beta\)만 보고 섣부르게 판단해서는 안 된다는 문제 모두를 잘 다루고 있습니다. 이 논문은 정치학 분야에서 흔히 사용하는 상호작용항을 다루는 방식에 대한 문제를 제시하고 있습니다. 동시에 Brambor et al. (2006)에 대해서도 일종의 업데이트를 하고 있는 논문입니다. 한번쯤 꼭 읽어보시기를 권하고 여기서는 필요에 따라 간단하게 요약 및 정리하는 정도로 마무리하겠습니다.

Hainmueller et al. (2019)의 주장과 Brambor et al. (2006)에 대한 비판

Hainmueller et al. (2019)은 Brambor et al. (2006)가 곱셈을 통해 나타나는 상호작용항을 탐색하고 해석하는데 있어서 일종의 가이드라인을 제공하고는 있지만 몇 가지 중요한 이슈들을 간과하거나 언급조차 하고 있지 않다고 비판합니다. Hainmueller et al. (2019)에 따르면 그 문제는 크게 두 가지로 대별할 수 있습니다. 첫째, 선형 상호작용(linear interaction effect; LIE)에 대한 가정과 둘째, 충분한 정보량의 결여에 관한 것입니다.

Brambor et al. (2006)는 편미분을 취하는 방식을 통해서 상호작용항의 한계효과를 살펴보고 있습니다. 아래는 Hainmueller et al. (2019: 166)가 제시하고 있는 수식들로 고전적 선형회귀분석 모델에 곱셈 형태의 상호작용항이 포함된 모델을 보여줍니다.

\[\begin{equation} Y = \mu + \eta X + \alpha D + \beta(D\cdot X) + Z\gamma + \epsilon \end{equation}\]

이 모델에서 \(Y\)는 종속변수이고, \(D\)는 우리가 관심을 가지고 있는 핵심적인 예측변수, 혹은 처치변수입니다. \(X\)는 일종의 매개변수이고, \((D\cdot X)\)는 상호작용변수, \(Z\)는 일련의 통제변수들이라고 하겠습니다. \(\mu\), \(\epsilon\)은 각각 상수와 오차항을 보여줍니다. 이때, 핵심적인 예측변수 \(D\)의 종속변수 \(Y\)에 대한 한계효과는 다음과 같이 나타낼 수 있습니다.

\[\begin{equation} \text{ME}_D = \frac{\partial Y}{\partial D} = \alpha + \beta X \end{equation}\]

이 지점에서 Hainmueller et al. (2019)는 Brambor et al. (2006)이 간과한 점이 있다고 지적합니다. Brambor et al. (2006)의 논의에 따르면 우리는 단지 핵심 변수들의 한계효과가 일종의 선형 함수적 형태로 나타나리라고 가정해야 합니다. 그러나 Hainmueller et al. (2019)는 그 선형상호작용에 대한 가정은 결코 선험적인 것이 아니며 종종 유지되지도 않는다고 주장합니다. 따라서 Hainmueller et al. (2019)는 연구자들이 그들의 데이터를 한 번 더 살펴보고 한계효과를 진정 선형함수의 형태로 나타낼 수 있는지를 의심해보라고 주문합니다. Brambor et al. (2006)이 묵시적으로 LIE를 가정하고 많은 학자들이 그 가이드라인을 그저 따른다고 할지라도 Hainmueller et al. (2019)는 LIE는 결코 선험적으로 정당화될 수 없는 가정이며, 이를 확인하기 위해서는 연구자가 가진 데이터를 더 깊이 들여다보고 이해하는 것이 필요하다고 지적합니다.

이이서 Hainmueller et al. (2019)는 충분한 정보량의 문제에 대해서 지적합니다. 이 문제는 상호작용항의 효과를 살펴볼 수 있는 데이터의 범주 전반에 걸쳐서 실상 우리가 관측할 수 있는 가용성의 문제와 직결됩니다. 다르게 표현하자면, 만약 우리가 매우 치우친 형태의 분포를 가진 데이터를 가지고 있다면 그 데이터에서 매개변수의 한 값에서 우리는 한계효과가 명확하게 존재한다고 할만한 충분한 정보를 얻지 못할 수도 있기 때문입니다. 수학적, 행렬적 계산으로 도출해서 예측값의 변화를 보여줄 수는 있지만 과연 그것이 실제로는 존재하지 않는 데이터의 구간을 수리적 계산으로 그릴 뿐이라면? 한계효과에 대한 주장의 타당성에 의문을 제기할 수 있다는 것입니다. Hainmueller et al. (2019)는 논문 165쪽에서 두 가지 조건에 대해 명시하고 있습니다: “(1) 주어진 매개변수의 값에 대해서 \(X\) 값이 충분한 수의 관측치를 가지고 있어야 하며, (2) 그 매개변수의 값에서 핵심적인 예측변수, \(D\)의 변화가 존재해야 한다는 것”입니다. 특히 때로 매우 치우치거나 값이 일정하게 분포되어 있지 않은 자료를 사용하는 사회과학연구에서 이같은 노력을 주문하고 있습니다.

만약 주어진 매개변수의 특정한 값에 실질적으로 핵심적인 예측변수의 관측치들이 없거나, 거의 존재하지 않는다면 우리는 충분한 정보없이 한계효과를 그저 추정하는 것이 되고, 이를 Hainmueller et al. (2019: 165)는 “함수적 형태의 외삽 또는 내삽의 문제”라고 언급하고 있습니다. 정리하자면, Hainmueller et al. (2019)의 두 가지 핵심적인 주장은 첫째, Brambor et al. (2006)이 간과하거나 묵시적으로 가정하는 LIE의 문제를 고려할 것, (2) 상호작용 모델에 관한 이론적 이해와 우리가 사용하는 경험적 데이터 간의 간극을 좁힐 것으로 요약할 수 있습니다.

Hainmueller et al. (2019)의 대안

첫 번째 전략

Hainmueller et al. (2019)의 첫 번째 전략은 데이터가 LIE 가정을 충족시키는지를 진단해보자는 것입니다. 이들은 원 데이터의 산포도를 그려볼 것을 추천합니다. 그냥 추천하는게 아니라 한계효과의 LIE 가정과 매개변수의 각 데이터 포인트별 핵심 예측변수의 실제 관측치 분포를 살펴볼 수 있는 산포도를 그리는 방법을 제시합니다.

  • 첫째, 핵심 예측변수가 이항변수일 경우, 핵심 예측변수에 따라 그래프를 두 개의 패널로 나눈 뒤 매개변수와 종속변수 간의 관계를 보여주는 산포도를 그려보라고 합니다.

  • 둘째, 두 개의 선을 이 산포도에 더하는데, 하나는 상호작용 효과의 선형성을 가정하는 회귀선이고, 다른 하나는 일종의 가중치를 적용한 국소가중치 회귀선(locally weighted regression; LOESS)입니다.

예측변수의 값에 따라 나뉜 산포도의 각 패널에서 이 두 선을 비교함으로써, 우리는 LIE가 충족되는지 여부를 확인할 수 있습니다.

마지막으로 정보량의 문제에 있어서 Hainmueller et al. (2019)는 데이터에 충분한 관측치들이 존재하는지를 보여줄 수 있는 박스플롯을 제시하라고 제안합니다. 만약 핵심적인 예측변수가 연속형 변수라면 표본을 대강 비슷한 규모를 가진 세 개의 집단으로 분리하여 매개변수에 따라 낮은 수준의 \(X\) (first tercile), 중간 수준의 \(X\) (second tercile), 그리고 높은 수준의 \(X\) (third tercile)의 패널로 나타내라는 것입니다(Hainmueller et al. 2019: 170). 이산형 변수일 때와는 달리, 연속형 변수일 경우 우리는 \(Y\)에 대한 \(D\)의 관계가 이 세 집단의 매개변수 패널에서 회귀선과 LOESS곡선에 어떠한 차이를 보이는지를 살펴보라는 것입니다. 이를 통해 우리는 선의 기울기의 변화 또는 차이를 통해 \(Y\)에 대한 \(D\)의 관계가 서로 다른 수준의 \(X\)에 따라서 어떻게 달라지는지를 파악할 수 있게 됩니다.

두 번째 전략

두 번째 전략은 일종의 구간화를 통한 추정치(binning estimator)를 사용하라는 것입니다. 구간화는 매개변수의 특정 값의 구간을 포함하는 일련의 더미변수들을 말하는데, 얘를 들어 매개변수가 1부터 10까지라면 1부터 3까지 하나의 더미변수, 4부터 7까지 또 다른 하나의 더미변수, 그리고 나머지 값들을 마지막 더미변수 등에 담는 방식을 말합니다. 우리가 이항변수인 매개변수를 가지고 있다면, 한계효과를 계산하는 것은 쉽습니다. 0과 1을 각각 집어넣으면 되니까요. 하지만 연속형 매개변수를 가지고 있을 때는 특정한 매개변수의 값을 골라서 한계효과를 살펴보기가 쉽지 않고, 살펴본다 하더라도 정확한 변화를 잡아내기가 쉽지 않습니다. Hainmueller et al. (2019)는 매개변수를 크게 세 개의 구간으로 나누어서 더미변수의 형태를 취하게 하고 이를 통해 매개변수의 삼분위 범주값들을 보여주라고 제안합니다. 만약 핵심적인 예측변수가 각각의 구간화 변수와 상호작용한다면, 우리는 주어진 매개변수의 삼분위 구간에서 예측변수의 한계효과를 보여줄 수 있을 것입니다.

다음으로 각 구간화 변수를 대표할 수 있는 값을 특정하여 그 특정한 지점에서 예측변수의 효과를 평가하라고 제안합니다. 구간의 평균 혹은 중간값이 될 수 있겠죠? 마지막으로 Hainmueller et al. (2019)는 핵심 예측변수와 구간화 더미, 그리고 예측값에서 그 평가지점(아까 이야기한 구간화 변수를 대표할 수 있는 평균 혹은 중앙값과 같은 수치) 간 차이 간 상호작용 모델을 추정하라고 제안합니다. 일종의 3개 변수 상호작용인 것이죠: \(D \times X - x_j \times G_j\). 여기서 \(j\)는 각 구간화 변수를 의미합니다. Hainmueller et al. (2019: 171-172)에 따르면 LIE 가정이 충족되고 충분한 양의 데이터가 상호작용을 지지한다면, 구간화 추정치는 주어진 \(ME_X = \hat{\alpha} + \hat{\beta}X\)라는 한계효과로 나타나는 표준 상호작용 모델의 한계효과 불편추정값으로 수렴할 것입니다. 나아가 구간화 추정치는 매개변수의 값에 기초하여 구축된 것이니만큼 구간화를 이용해 추정된 조건적 한계효과는 외삽과 내삽의 문제에 크게 왜곡될 일이 없습니다. 즉, 가능한 한 많은 데이터를 이용해서 추정을 하게 된다는 것입니다.

구간화 추정치 그 자체는 한계효과가 선형인지에 대한 여부를 알려주지는 못합니다만, 이것을 가지고 우리는 그래프 등을 그려봄으로써 한계효과가 각 구간에서 일관된 선형 관계로 증가하는지 아니면 특정 구간에서 널뛰는지를 살펴볼 수 있습니다. Hainmueller et al. (2019)는 Figure 2와 Figure 4(b)를 통해 구간화 추정치를 통해 LIE 가정과 정보량의 문제도 함께 살펴볼 수 있다고 주장하고 있습니다.


  1. 상호작용항을 곱셈으로 표현하는 것은 논리적 근거를 가지고 있습니다. 예를 들어, 부울리안(Boolean)은 ‘+’를 OR,’\(\times\)’를 AND로 표현하는데, 곱셈이란 두 조건이 동시에 존재하는 것을 의미합니다. 상호작용항 역시도 두 변수의 효과가 함께 종속변수에 영향을 미친다는 것을 보여주고자 하므로 곱셈의 형태로 나타냅니다.↩︎

  2. 다중공선성이라는 것이 변수들 간의 공변 양상(covariances)에 따라 나타나는 것이니만큼, 두 변수의 곱을 통해 만들어낸 상호작용항이 모델 전반의 다중공선성을 높일 것이라 예상하는 것은 어렵지 않습니다. 다만, 과연 다중공선성이 반드시 나쁘냐하는 것에 대해서는 고민해볼 필요가 있습니다. 앞선 챕터 4에서 이에 관한 문제를 다룬 부분이 있으니 참고해보시기 바랍니다.↩︎

  3. 여기서 한 가지 생각해보고 넘어가야할 것이 있습니다. 물론 상호작용 모델은 앞선 챕터들에서 보았던 가산적 관계의 선형회귀모델과는 다르게 두 변수 간의 상호작용을 모델에 반영하고 있습니다. 하지만 편미분을 통해 살펴본 결과는 상호작용 모델 역시 그 내부에 선형함수를 포함하고 있다는 것입니다. \(\frac{\partial y}{\partial x} = \beta_1 + \beta_3 z\)라는 결과는 결국 상호작용 관계도 \(z\)에 따라 선형으로 나열된다는 것입니다. 그렇다면 만약 상호작용 효과가 비선형 관계라면 어떻게 될까요? 이에 관한 부분은 뒤에 다루도록 하겠습니다. 상호작용항을 모델에 포함할 경우, 각 변수들의 독립성을 가정한 가산적 모델보다 상대적으로 다양한 분석을 수행할 수 있게 되는 것은 맞지만 어디까지나 상호작용항도 일련의 가정에 기초하고 있기에 만능은 아니라는 점을 알아두어야 합니다.↩︎

  4. 여기서의 신뢰도란 reliability로 모집단에서 다른 표본을 추출해 동일한 모델을 돌리더라도 우리가 처음에 얻은 결과가 재생산될 것이라는 개념입니다. 화살 과녁에 비유하자면 내가 쏜 10발의 화살이 모두 원하는 장소에 적중하는 것은 정확하고 적실한 개념을 사용했다하여 타당성(validity)이 충족되었다고 하고, 10점은 아니지만 10개의 화살이 쏠 때마다 7점이면 7점, 8점이면 8점에 고루 모여있는 것을 다음 결과 역시 어떻게 나올지 신뢰할만하다 하여 신뢰도(reliability)가 높다고 합니다.↩︎

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