회귀분석을 진행함에 있어서 독립변수를 통해 종속변수를 설명하고자 할 때, 단순히 Raw 한 형태(따로 변환이 없는 상태)의 독립변수는 종속변수에 제대로 Fit하지 못한 경우가 있을 수 있다.
이에 따라 독립변수의 값을 변환하여 회귀모형을 Fitting값을 개선하고자 할 때가 있다.
변환에는 Log변환, Power변환(제곱, 세제곱 등) 등이 있다. (예를 들어 타 분야에서는 잘 하지 않지만, 금융쪽에서는 Mini-Modeling을 통한 변수 변환도 진행한다)
로그나 지수 변환의 경우 변수의 분포가 좌측이나, 우측으로 치우쳐있는 경우 진행하게 된다.
위의 그림과 같이 우측으로 치우친 경우 Exponential 변환을 진행하게 되고, 좌측으로 치우친 경우 log 변환을 진행하게 된다. 각각에 대한 코드는 아래와 같다.
#로그 변환
log_x <- log(x)
#지수 변환
exp_x <- exp(x)
다음으로 Box-Cox Transformation을 통해 어떤 배수를 곱해주는 것이 종속변수를 설명해주는 것에 가장 도움이 되는지를 확인할 수 있다.
Box-Cox Transformation에 대한 코드는 아래과 같다.
#임의의 데이터 만들기
x <- 11:100
tmp <- rnorm(90, sd = 5) #간단하게 error term 만들어주기
y <- (x +tmp)^(-1/1.5)
#회귀분석하기
#1) 단순 선형회귀
m <- lm(y~x)
summary(m)
이에 대한 결과는 아래와 같다.
물론 Raw 데이터 기반의 R sqaure도 충분히 높은 값이지만, R square를 더 높여보기 위해(사실 위의 데이터 생성 과정에서 이미 Power값을 -1.5정도로 줬기 때문에 오차를 고려해도, -1.5에 근접한 값을 Power로 넣어주면, 더 나은 결과가 생성될 것이다)
이를 위해 MASS Package를 불러와서 boxcox함수를 사용해본다.
# 2) 단순 선형회귀 기반 box-cox transformation 하기
library(MASS)
bc <- boxcox(m)
위의 그림을 보면, 대략 -1.5 정도의 값에서 가장 높은 log-likelihood를 가짐을 알 수 있다.
이를 기반으로 새롭게 회귀분석을 진행해보면,
#결과상 최적의 람다값(최적의 x축값 찾기- 여기서 log-likelihood는 높을수록 좋음)
lambda <- bc$x[which.max(bc$y)]
#위의 결과 기반 선형회귀
z <- y^lambda
m2 <- lm(z~x)
summary(m2)
이와 같이 단순히 Box-Cox transformation을 해주는 것만으로도 R square의 개선이 나타날 수 있음을 알 수 있다.
'Business Analytics > R로 하는 통계검정' 카테고리의 다른 글
R로 하는 가설검정과 확률분포 (0) | 2022.12.04 |
---|---|
R 데이터 불균형 처리(imbalance data) (0) | 2022.11.20 |
R로 하는 비모수검정(Non parametric Statistics) (1) 독립표본 평균검정(윌콕슨 순위합 검정, 크러스칼-왈리스 검정, 프리드만 검정) (0) | 2022.09.12 |
댓글