5. 단순선형회귀의 변환 (Transformation of Simple Linear Regression)
3, 4단원에서는 직접 적합시킨 회귀모형이 자료를 설명하기에 적절한지 검토하는 방법에 대해 알아보았다.
이때 검토한 회귀모형이 적합하다면 그대로 사용하는 것이 좋지만, 적합시킨 단순선형회귀모형이 자료에 적합하지 않다면 두 가지의 접근 중 한 가지를 선택해야 한다.
1. 단순형회귀모형을 포기하고 더 적절한 모형을 만들어서 사용한다.
2. 회귀모형 자료에 몇 가지 변환을 사용한다.
두 접근법은 각각 장점과 단점이 있다. 첫 번째 접근법은 더 복잡한 모형을 사용해 직관적으로 이해가 잘 되는 모형을 사용하지만, 모수들을 추정하는 데 더 복잡한 과정을 거쳐야 한다. 반면에 두 번째 접근법은 상대적으로 단순한 추정 과정을 거치고, 복잡한 모형보다 모수의 개수도 적다. 하지만 경우에 따라 변수들 간의 핵심적인 연결 관계를 모호하게 만들 수 있다.
1. 비선형 관계만을 위한 변환
오차항의 분포가 정규분포에 가깝고 대략 상수분산을 가지고 있을 때, 비선형회귀관계를 선형화시키기 위해 X에 대한 변환이 사용된다.
X에 멱(power)을 이용 다양한 변환을 시도할 수 있으며, 산점도나 잔차그림으로 어떤 변환이 더 효율적인지 살펴보면 된다.
자료의 X값을 변환하는 이유는?
Q. Y가 아닌 X에 대한 변환을 사용하는 이유는?
A. Y에 대한 변환이 적절치 않은 이유는 Y에 대한 변환이 정규분포인 오차항의 분포 모양 또한 매우 크게 변화시키고 오차항의 분산들을 크게 변환시킬 수 있기 때문이다.
교육 받는 날의 수(X)가 모의의 판매 상황에서의 실적(Y)에 미치는 효과에 관한 실험으로부터 얻은 자료를 이용하자.
#데이터 불러오기
data4 <- read.table(file="C:/Temp/Company_data.txt")
names(data4) <- c("X","Y")
#산점도 그리기
with(plot(X,Y,pch=16), data=data4)
#회귀모형 만들기, 회귀모형 그래프에 표현하기
model4 <- lm(Y~X, data=data4)
abline(model4, col="red")
데이터를 산점도로 표현했을 때, X와 Y의 회귀 관계는 명확하게 곡선으로 나타난다는 것을 알 수 있다. 따라서 단순선형회귀모형이 데이터에 적합하지 않음을 알 수 있다.
따라서 예측변수 X에 다음과 같은 제곱근 변환을 시도해보아야 한다.
#X 대신 X의 제곱근 대입한 회귀모형 적합
X2 <- (data4$X)**0.5
new_data4 <- cbind(data4,X2)
new_model4 <- lm(Y~X2, data=data4)
with(plot(X2,Y,pch=16), data=data4)
abline(new_model4, col="red")
예측변수를 변환한 후 선형회귀함수 모형을 구하면 더 정확하게 자료에 적합함을 알 수 있다.
이번에는 로그를 이용해 데이터의 X값을 변환해보자.
#데이터 불러오기, 회귀모형 시각화하기
data6 <- read.csv(file="C:/Temp/eg01-08SpecArea.csv")
with(plot(Area,Species,pch=16), data=data6)
model6 <- lm(Species~Area, data=data6)
abline(model6, col="red")
#변환한 데이터 불러오기, 회귀모형 시각화하기
with(plot(logArea,logSpecies,pch=16), data=data6)
model6 <- lm(logSpecies~logArea, data=data6)
abline(model6, col="red")
2. 오차항의 비정규성과 이분산에 대한 변환
오차항의 비정규성과 이분산을 교정하려면 Y의 분포와 형태와 범위가 바뀌어야 하기 때문에 Y에 대한 변환을 사용해야한다. (선형회귀관계를 만들기 위해서 X에 대한 변환이 동시에 필요할 수 있다.)
건강 아동 25명 중 일부의 나이(X)와 폴리아민의 플라즈마 수준(Y), Y의 상용로그값에 대한 자료가 위와 같이 주어져 있다. 나이가 어린 아동들이 나이가 많은 아동들보다 플라즈마 수준이 더 높음을 보여주는 선형회귀관계를 나타내자.
#데이터 불러오기
data3.8 <- read.table(file="C:/Temp/CH03TA08.txt")
names(data3.8) <- c("X","Y","logY")
#산점도 그리기
with(plot(X,Y,pch=16), data=data3.8)
#회귀모형 만들기, 회귀모형 그래프에 표현하기
model3.8 <- lm(Y~X, data=data3.8)
abline(model3.8, col="red")
데이터를 산점도로 표현했을 때 데이터가 이분산 오차항을 가진 전형적 회귀 패턴을 보여준다는 것을 알 수 있다. 따라서 선형회귀관계를 만들기 위해 Y를 다음과 같이 변환해야 한다.
#변환된 Y 자료로 회귀모형 적합시키기
new_model3.8 <- lm(logY~X, data=data3.8)
with(plot(X,logY,pch=16), data=data3.8)
abline(new_model3.8, col="red")
3. Box-Cox 변환 (Box-Cox transformation)