더북(TheBook)

이 절의 시작 부분에서 상호 작용은 ‘곱’의 형태라고 설명했다. 또, ‘8.3.2 범주형 변수’ 절에서 선형 회귀를 수행할 때 범주형 변수는 가변수로 바뀐다고 설명했다. 상호 작용이 있을 때 model.matrix를 살펴보면 이 두 가지 사실을 모두 확인할 수 있다.

> head(model.matrix(m))
  (Intercept) fTree1 fTree5 fTree2 fTree4  age fTree1:age fTree5:age fTree2:age fTree4:age
1           1      1      0      0      0  118        118          0          0          0
2           1      1      0      0      0  484        484          0          0          0
3           1      1      0      0      0  664        664          0          0          0
4           1      1      0      0      0 1004       1004          0          0          0
5           1      1      0      0      0 1231       1231          0          0          0
6           1      1      0      0      0 1372       1372          0          0          0

위 결과를 보면, fTree는 fTree1, fTree5, fTree2, fTree4라는 4개의 가변수로 표현되었음을 알 수 있다. 또, age와 fTree의 상호 작용은 fTree1:age, fTree5:age, fTree2:age, fTree4:age로 표현되었다.

좀 더 보기 쉽게 age와 연관이 있는 열들만 뽑아보자.

> mm <- model.matrix(m)
> mm[, grep("age", colnames(mm))]
    age fTree1:age fTree5:age fTree2:age fTree4:age
1   118        118          0          0          0
2   484        484          0          0          0
3   664        664          0          0          0
4  1004       1004          0          0          0
5  1231       1231          0          0          0
6  1372       1372          0          0          0
7  1582       1582          0          0          0
8   118          0          0        118          0
9   484          0          0        484          0
10  664          0          0        664          0
11 1004          0          0       1004          0
12 1231          0          0       1231          0
13 1372          0          0       1372          0
14 1582          0          0       1582          0
15  118          0          0          0          0
16  484          0          0          0          0
17  664          0          0          0          0
18 1004          0          0          0          0
19 1231          0          0          0          0
20 1372          0          0          0          0
21 1582          0          0          0          0
22  118          0          0          0        118
23  484          0          0          0        484
24  664          0          0          0        664
25 1004          0          0          0       1004
26 1231          0          0          0       1231
27 1372          0          0          0       1372
28 1582          0          0          0       1582
29  118          0        118          0          0
30  484          0        484          0          0
31  664          0        664          0          0
32 1004          0       1004          0          0
33 1231          0       1231          0          0
34 1372          0       1372          0          0
35 1582          0       1582          0          0

grep( )은 패턴과 문자열을 인자로 받아 패턴이 문자열 내에 존재하면 1, 그렇지 않으면 0으로 반환하는 함수다. 따라서 grep(“age”, colnames(mm))은 age라는 문자열이 열 이름에 존재하면 1, 그렇지 않으면 0을 반환하므로 age가 포함된 열의 선택을 쉽게 해준다.

결과를 보면 age열은 각 데이터의 age를 그대로 담고 있지만, 상호 작용을 뜻하는 fTree1:age는 1 ~ 7행에 대해서만 age를 갖고 있고 8 ~ 35행에 대해서는 age 값을 갖고 있지 않다. fTree5:age, fTree2:age, fTree4:age도 마찬가지로 일부 행에만 age 값이 들어 있다. 그 이유는 이들 상호 작용을 뜻하는 열들은 포뮬러에 주어진 fTree * age 그대로 가변수 fTreeN에 들어 있는 1 또는 0의 값과 age를 곱한 값을 담고 있기 때문이다.

따라서 가변수가 1인 열에서는 age 값이 상호 작용 열에 나타나지만, 가변수가 0인 열에 대해서는 상호 작용 열의 값이 0으로 나타난다. 이러한 방식으로 행렬을 만듦으로써 ‘곱’의 형태인 상호 작용을 고려한 선형 회귀를 수행하는 것이다.

순서형 범주형 변수 Tree를 사용한 선형 회귀와 더 다양한 시각화를 수행한 내용은 참고자료 [12]를 보기 바란다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.