다음은 iris 데이터의 1행, 51행, 101행 데이터가 어떻게 코딩되어 모델에 사용되는지를 보여준다. 아이리스에서 1행은 setosa, 51행은 versicolor, 101행은 virginica 종에 대한 데이터임을 상기하기 바란다.
> model.matrix(m)[c(1, 51, 101), ]
(Intercept) Sepal.Width Petal.Length Petal.Width Speciesversicolor Speciesvirginica
1 1 3.5 1.4 0.2 0 0
51 1 3.2 4.7 1.4 1 0
101 1 3.3 6.0 2.5 0 1
이렇게 만들어진 모델은 Species별로 Sepal.Length에 대해 다음과 같은 세 가지 모델을 만든 셈이다(편의를 위해 소수점 3자리 이하를 버리고 오차항은 생략함).
Species |
모델 |
setosa |
2.17 + Sepal.Width * 0.49 + Petal.Length * 0.82 + Petal.Width * (-0.31) |
versicolor |
2.17 - 0.72 + Sepal.Width * 0.49 + Petal.Length * 0.82 + Petal.Width * (-0.31) |
virginica |
2.17 - 1.02 + Sepal.Width * 0.49 + Petal.Length * 0.82 + Petal.Width * (-0.31) |
이 모델은 Species별로 절편만 다르고 그 외 부분은 동일하다. 만약 Species별로 다른 설명 변수의 계수까지 다르게 설정하고 싶다면 Species와 다른 열의 상호 작용을 모델링해야 한다. 설명 변수 간 상호 작용은 ‘8.3.6 상호 작용’ 절에서 다루기로 하자. 상호 작용을 고려한 다양한 모델 설명에 대해서는 참고자료 [7]에서 ‘Analysis of Covariance’ 절을 참고하기 바란다.
anova( )를 사용해 분산 분석 결과를 보자.
> anova(m)
Analysis of Variance Table
Response: Sepal.Length
Df Sum Sq Mean Sq F value Pr(>F)
Sepal.Width 1 1.412 1.412 15.0011 0.0001625 ***
Petal.Length 1 84.427 84.427 896.8059 < 2.2e-16 ***
Petal.Width 1 1.883 1.883 20.0055 1.556e-05 ***
Species 2 0.889 0.444 4.7212 0.0103288 *
Residuals 144 13.556 0.094
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary( )로 살펴볼 때와는 달리 anova( )의 결과에서는 Species가 하나의 설명 변수로 묶여서 표시된다. 이 표를 보면 Species의 p 값은 0.0103288이므로 유의미한 설명 변수(즉, 가설 검정 시 Species의 계수를 0으로 볼 수 없다)임을 알 수 있다.