더북(TheBook)

선형 회귀 모델이 주어졌을 때 새로운 데이터에 대한 예측은 predict( )로 수행한다. 함수 호출 시 인자로 interval=“confidence”를 지정해 신뢰 구간까지 구해보자.

> p <- predict(m, interval="confidence")
> head(p)
        fit        lwr       upr
1 -1.849460 -12.329543  8.630624
2 -1.849460 -12.329543  8.630624
3  9.947766   1.678977 18.216556
4  9.947766   1.678977 18.216556
5 13.880175   6.307527 21.452823
6 17.812584  10.905120 24.720047

위의 코드에서 예측 결과를 저장한 p의 데이터 타입은 행렬matrix이며, fit는 회귀 모델로 적합된 y 값, lwr은 신뢰 구간의 하한, upr은 신뢰 구간의 상한을 뜻한다. p의 각 행은 cars의 각 행에 대응한다. 예를 들어, p의 첫 행에 있는 fit 값 -1.849460은 cars의 첫 행에 있는 speed 값 4에 대한 dist 예측값이다.

polygon( )으로 신뢰 구간을 그리려면 그래프에 그릴 다각형의 x 좌표, y 좌표를 구해야 한다. 이는 cars의 speed를 x 좌표, 앞서 코드에서 구한 p의 lwr과 upr을 각각 y 좌표로 한 점들을 나열해 구할 수 있다. 단, 닫혀 있는 다각형을 그려야 하므로 시작점과 끝점이 만나야 한다는 점에 유의한다. 이를 표현한 코드는 다음과 같다.

> x <- c(cars$speed,
+        tail(cars$speed, 1),
+        rev(cars$speed),
+        cars$speed[1])

> y <- c(p[, "lwr"],
+        tail(p[, "upr"], 1),
+        rev(p[, "upr"]),
+        p[, "lwr"][1])

이 코드는 다음과 같이 이해할 수 있다. 먼저 (cars$speed, p[, “lwr”])의 좌표들을 나열한다. 그러면 하한에 대한 선이 완성된다. 다음으로 (cars$speed의 가장 마지막 값, p[, “upr”]의 가장 마지막 값)으로 선을 그린다. 이때 사용한 tail( )은 head( )의 반대 기능을 하는 함수로, 데이터의 가장 마지막 값을 얻어오는 데 사용했다. 이제 (cars$speed, p[, “upr”])의 점들을 따라 선을 그리되 그래프의 우측에서 좌측으로 그려나간다. 이는 rev( ) 함수를 사용해 수행한다. 마지막으로 시작점인 (cars$speed의 첫 번째 값, p[, “lwr”]의 첫 번째 값)으로 선을 그려 도형을 닫는다.

신뢰 구간을 그래프에 그리는 것이므로, 이 영역을 회색으로 색칠하는 것이 보기에 좋을 것이다. 그러나 col=“grey”와 같이 색을 지정하면 polygon( ) 호출 이전에 그래프에 그려진 내용이 모두 가려져버린다. 따라서 rgb( ) 함수에 알파alpha 값을 지정해 투명한 색을 사용한다.

전체 코드를 살펴보자.

> m <- lm(dist ~ speed, data=cars)
> p <- predict(m, interval="confidence")
> x <- c(cars$speed,
+        tail(cars$speed, 1),
+        rev(cars$speed),
+        cars$speed[1])
> y <- c(p[, "lwr"],
+        tail(p[, "upr"], 1),
+        rev(p[, "upr"]),
+        p[, "lwr"][1])
> plot(cars)
> abline(m)
> polygon(x, y, col=rgb(.7, .7, .7, .5))
그림 6-23 cars 데이터에 대한 선형 회귀 및 신뢰 구간
그림 6-23 cars 데이터에 대한 선형 회귀 및 신뢰 구간
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.