안선생님 책의 제 10장 단순회귀분석을 보면 cars데이타에서 자동차의 속도와 거리의 모델이 나온다.
> cars=read.csv("cars.csv")
> tail(cars)
speed dist
45 23 54
46 24 70
47 24 92
48 24 93
49 24 120
50 25 85
> out=lm(dist~speed,data=cars)
> plot(dist~speed,data=cars,col="blue")
> abline(out,lty="dotted",col="blue")
안선생님께서는 이 그래프에서 speed와 dist가 2차식의 패턴을 보이고 speed가 증가하면 dist의 퍼진 정도가 점점 커지므로 sqrt변환 또는 로그변환을 해서 다시 회귀분석을 했었다.
나처럼 통계에 문외한인 사람도 조금 더 확실하게 두 변수 사이의 관계를 파악하도록 컴퓨터가 회귀곡선을 추정하도록 하는 방법은 없을까? 분석자가 직선모형, sqrt변환, 로그변환 등 회귀모형을 설정하지 않더라도 컴퓨터가 적절한 회귀 함수를 찾아주는 방법은 없을까?
이 문제에 대해 허명회교수님의 "탐색적자료분석"에 있는 LOWESS가 그 중 한 방법으로 되어있다.
LOWESS(Locally Weighted Scatterplot Smoother)는 이변량 자료를 작은 윈도우로 나누어 각각의 구간에서 가중선형회귀(weighted linear regression)를 하여 곡선을 구한다.
R의 함수는 lowess() 이며 사용방법은
lowess(y~x,f) 이다. 여기서 f의 디폴트 값은 2/3이다. 평활기너비 f가 크면 회귀함수가 직선에 가까운 밋밋한 곡선이 되고(과소적합, under-fitting) f를 작게하면 회귀함수가 휜 정도가 큰 곡선이 된다(과다적합,over-fitting).
cars자료에 LOWESS를 적용하여 그래프를 그려보면 다음과 같다.
> library(MASS)
> s1=lowess(cars$dist~cars$speed)
> plot(dist~speed,data=cars,col="blue")
> lines(s1,col="red")
> abline(out,lty="dotted",col="blue")
이중 파란 점선은 기존의 linear regression라인이고 빨간선인 lowess에 의한 회귀곡선이다.
이러한 방법을 통해 통계 전문가가 아닌 일반인에게도 비교적 정확하고 객관적으로 비모수적 회귀곡선을 얻게 해준다.
두개의 회귀선을 비교해보니 역시 dist ~speed의 관게는 이차식인것이 저명해진다.
안선생님 책의 정답인 y-0.39675^2*x^2 곡선과 상당히 유사하다.
> s1=lowess(cars$dist~cars$speed)
> plot(dist~speed,data=cars,col="blue")
> lines(s1,col="red")
> curve(0.39675^2*x^2,lty="dotted",col="blue",add=T)
Lowess에 대한 자세한 이론적 근거 및 공식 등은 생략했읍니다.
첫댓글 nonparametric regression까지 영역을 넓히셨군요^^