회귀분석의 사전 진단
실습을 위해 R에 내장된 cars
데이터를 사용한다.
data(cars)
cars
데이터는 speed
와 dist
두 개의 변수로 이뤄져 있다. 여기서는 speed
를 독립변수, dist
를 종속변수로 사용한다.
head(cars)
speed dist 1 4 2 2 4 10 3 7 4 4 7 22 5 8 16 6 9 10
사전작업
산점도에 추세선을 넣어 데이터에 선형적인 패턴이 있는지 확인한다. 아래와 같이 그려보면 대체로 speed가 증가할 수록 dist도 증가하는 관계가 있는 것을 볼 수 있다.
scatter.smooth(cars)
극단값이 있을 경우 회귀분석의 결과가 왜곡될 수 있다. 상자 그림을 그려서 극단값이 있는지 확인해본다. 아래 그림을 보면 dist
에서 값 하나가 크게 위에 있는 것을 볼 수 있다.
par(mfrow=c(1,2)) # 1행 2열 형태로 그래프를 그린다
boxplot(cars$speed, main = "Speed") # speed의 상자 그림
boxplot(cars$dist, main = "Distance") # dist의 상자 그림
선형회귀분석은 독립변수와 종속변수가 정규분포를 따를 때 잘 작동한다. 밀도 플롯(density plot)을 그려서 정규분포의 형태인지 확인해본다.
par(mfrow=c(1, 2))
plot(density(cars$speed), main="Speed") # speed의 밀도 플롯
plot(density(cars$dist), main="Distance") # dist의 밀도 플롯
대체로 중심부에 데이터가 몰려있고 좌우로 갈 수록 줄어드는 정규분포와 비슷한 형태를 보인다. 앞에서 봤듯이 dist
에 위로 치우친 값이 있기 하나 있기 때문에 밀도 플롯도 오른쪽으로 약간 늘어진 모습을 보인다.
데이터가 치우친 정도를 나타내는 왜도(skewness)를 구해본다. e1071
라이브러리가 없을 경우에는 install.packages('e1071')
을 실행하여 설치한다.
library(e1071)
skewness(cars$speed)
[1] -0.1105533
skewness(cars$dist)
[1] 0.7591268
speed
는 왜도가 -0.11이다 마이너스 쪽으로 약간 치우쳤다는 것을 뜻한다. dist
의 왜도는 0.76으로 플러스 쪽으로 어느 정도 치우쳤다. 위에서 그래프로 본 것과 비슷한 결과이다.
문제가 심각해보이지는 않으므로 일단 분석을 실시해보자.