R에서 box-cox 변환을 수행하는 방법(예제 포함)


박스콕스 변환(box-cox 변환)은 비정규 분포 데이터 세트를 보다 정규 분포된 세트로 변환하는 데 일반적으로 사용되는 방법입니다.

이 방법의 기본 아이디어는 다음 공식을 사용하여 변환된 데이터가 정규 분포에 최대한 가깝도록 λ 값을 찾는 것입니다.

  • y(λ) = (y λ – 1) / y ≠ 0인 경우 λ
  • y(λ) = log(y) y = 0인 경우

MASS() 라이브러리의 boxcox() 함수를 사용하여 R에서 box-cox 변환을 수행할 수 있습니다. 다음 예에서는 이 기능을 실제로 사용하는 방법을 보여줍니다.

Box-Cox 변환 개발에 대한 훌륭한 요약을 보려면 코네티컷 대학교의 이 기사를 참조하세요.

예: R의 Box-Cox 변환

다음 코드는 선형 회귀 모델을 데이터 세트에 맞춘 다음 boxcox() 함수를 사용하여 응답 변수를 변환하고 새 모델을 맞추는 최적의 람다를 찾는 방법을 보여줍니다.

 library (MASS)

#create data
y=c(1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 6, 7, 8)
x=c(7, 7, 8, 3, 2, 4, 4, 6, 6, 7, 5, 3, 3, 5, 8)

#fit linear regression model
model <- lm(y~x)

#find optimal lambda for Box-Cox transformation 
bc <- boxcox(y ~ x)
(lambda <- bc$x[which.max(bc$y)])

[1] -0.4242424

#fit new linear regression model using the Box-Cox transformation
new_model <- lm(((y^lambda-1)/lambda) ~ x)

최적의 람다는 -0.4242424 로 나타났습니다. 따라서 새로운 회귀 모델은 원래 응답 변수 y를 변수 y = (y -0.4242424 – 1) / -0.4242424로 대체했습니다.

다음 코드는 두 회귀 모델 간의 잔차 차이를 시각화하기 위해 R에서 두 개의 QQ 플롯을 만드는 방법을 보여줍니다.

 #define plotting area
op <- par(pty = "s", mfrow = c(1, 2))

#QQ plot for original model
qqnorm(model$residuals)
qqline(model$residuals)

#QQ plot for Box-Cox transformed model
qqnorm(new_model$residuals)
qqline(new_model$residuals)

#display both QQ plots
by(op)

R에서 Box-Cox로 변환된 QQ 지형

일반적으로 데이터 포인트가 QQ 플롯에서 직선 대각선을 따라 있는 경우 데이터 세트는 정규 분포를 따를 가능성이 높습니다.

Box-Cox 변환 모델이 어떻게 원래 회귀 모델보다 훨씬 더 직선적인 QQ 플롯을 생성하는지 확인하세요.

이는 Box-Cox 변환 모델의 잔차가 훨씬 더 정규 분포를 띠고 있음을 나타내며, 이는 선형 회귀 가정 중 하나를 만족합니다.

추가 리소스

R에서 데이터를 변환하는 방법(로그, 제곱근, 세제곱근)
R에서 QQ 플롯을 생성하고 해석하는 방법
R에서 정규성에 대한 Shapiro-Wilk 테스트를 수행하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다