중선형 회귀 모델의 시각화
앞서 ‘Sepal.Length ~ . ’로부터 만든 모델은 여러 개의 독립 변수를 사용했다. 그러나 2차원 이상의 데이터는 쉽게 표시할 수 없으므로 여기서는 Species와 Sepal.Width만 사용해 시각화를 해보자. 다음은 아이리스 데이터를 Species별로 Sepal.Width, Sepal.Length 차원에 산점도로 그린 예다.
> with(iris, plot(Sepal.Width, Sepal.Length, + cex=.7, + pch=as.numeric(Species)))
위 코드에서 cex는 점의 크기를 지정하는 옵션이며, pch는 점의 형태를 정한다. as.numeric( )을 Species인 범주형 변수에 적용했으므로 Species의 종별로 1, 2, 3의 값을 갖게 된다. 즉, pch는 다음과 같이 지정된다.
> as.numeric(iris$Species)
[1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
[38] 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[75] 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3
[112] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[149] 3 3
다음은 회귀 직선을 그릴 차례다. Sepal.Width와 Species만 사용하기로 했으므로 모델을 새로 적합하고 계수를 구한다.
> m <- lm(Sepal.Length ~ Sepal.Width + Species, data=iris) > coef(m) (Intercept) Sepal.Width Speciesversicolor Speciesvirginica 2.2513932 0.8035609 1.4587431 1.9468166
회귀 직선은 abline( )을 사용해 그린다. abline( )의 첫 번째 인자는 절편, 두 번째 인자는 기울기며 lty는 선의 유형을 지정한다.
> abline(2.25, 0.80, lty=1) > abline(2.25 + 1.45, 0.80, lty=2) > abline(2.25 + 1.94, 0.80, lty=3)
알아보기 쉽게 legend( )를 사용해 범례를 표시하자.
> legend("topright", levels(iris$Species), pch=1:3, bg="white")
위 코드에서 bg=“white”는 배경을 흰색으로 칠해준다. 이렇게 하면 범주가 표시된 사각형 안의 데이터는 가려지므로 범주를 읽기 편해진다. pch는 앞서 plot( )에서 사용한 1, 2, 3을 차례로 지정한 것이다. levels( )는 범주형 변수의 각 레벨의 이름을 반환한다. levels(iris$Species)의 결과는 다음과 같다.
> levels(iris$Species)
[1] "setosa" "versicolor" "virginica"
코드를 한 번에 정리하면 다음과 같다.
> with(iris, plot(Sepal.Width, Sepal.Length, + cex=.7, + pch=as.numeric(Species))) > m <- lm(Sepal.Length ~ Sepal.Width + Species, data=iris) > coef(m) (Intercept) Sepal.Width Speciesversicolor Speciesvirginica 2.2513932 0.8035609 1.4587431 1.9468166 > abline(2.25, 0.80, lty=1) > abline(2.25 + 1.45, 0.80, lty=2) > abline(2.25 + 1.94, 0.80, lty=3) > legend("topright", levels(iris$Species), pch=1:3, bg="white")
결과는 그림 8-6에 보였다.