통계/회귀분석 - R 프로그래밍

회귀분석 - 모형 변환(대수변환 및 역변환의 지수와 로그) + 가중회귀분석

BlueNoa 2021. 7. 22. 03:58
728x90
반응형

<사전 설명>

보통 plot(x, y)가 랜덤하게 분포가 되지만 그렇지 않은 경우를 가정하여 설명.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

· 모형의 변환

산점도에서 자료의 퍼짐 정도의 굴곡이 심하지 않은 포물선이나 지수함수의 형태를 띄는 경우, 설명변수 또는 반응변수 중 하나의 모형 변환을 하거나 두 변수 모두 변환하여 산점도의 모양을 직선에 가깝게 만들 수 있다.

모형의 변환을 통해 적합 회귀식의 MSE 값이 더 작게 나오는 모형을 선택한다.

회귀 후에 결과를 역변환 하여 원자료에 적용시킬 수 있는 회귀식을 얻을 수 있다.

 

 

· 대수변환(로그,  변환)

대부분의 경우 변환은 로그를 취하는 방법이 사용된다. 이러한 방법을 '대수' 또는 '로그 변환'이라고 한다.

값에 로그를 취하기만 하면 되므로 간단하면서도 유용한 방법이다. 

 

어떤 형태의 로그를 취해야 하는지는 아래의 자료를 참고하여 판단해야 한다.

좌측의 그림 번호를 보고 올바른 식을 적용하면 된다.

[출처] - 선형회귀분석, 출판사 : 자유아카데미

 

위의 자료는 plot으로 데이터의 그래픽을 출력해서 판단할 때 로그 변환과 루트 변환 중 어느 것이 적합한지 빠르게 알 수 있게 해주는 가이드북이다. 

 

 

· 역변환

설명변수와 반응변수 사이에 역관계를 갖는 데이터가 있으면 어떻할까?

y = β0 + β1/x + ε과 같은 모습일 때 말이다.

이처럼 지수함수 그래프와 비슷한 역함수 그래프가 그려질 것이다. (둘 중 하나로 그려질 것이다.)

 

맨 처음 사전설명을 할 때 사용한 로그 변환 식과 같이 역변환도 마찬가지로 모형을 변환 시킨 뒤 회귀분석을 실시하여 결과를 얻은 후 다시 원상태로 역변환하여 적합 회귀식을 얻는다.

 

x' = 1/x로 하여 y = β0 + β1x' + ε

y' = 1/y로 y' = β0 + β1x' + ε 는 다음과 같이 변환해준다.

1/y = β0 + β1/x + ε

 

 

· 가중회귀(등분산을 만족하기 위한 변환 과정)

모형 진단 및 잔차 분석 등은 다른 가정들에 비해서 크게 위배되는 것은 없으나 오차항의 등분산성이 만족하지 않는 경우가 종종 발생한다. 이렇게 오차항이 각각 다른 분산을 갖는 경우를 가정한다면 가중치를 줘서 등분산으로 만들어 줄 수 있다.

 

 

· 예제

병아리 태아에 대한 관측값이다.

x는 일수(day), y는 체중(g)이다.

 

# 로그 변환 예제
# 병아리 태아의 체중에 관한 자료
x=c(6:16)
y=c(0.029, 0.052, 0.079, 0.125, 0.181, 0.261, 0.425, 0.738, 1.130, 1.882, 2.812)
x1 = log(x)
y1 = log(y)
# 종합 모형형
par(mfrow=c(2,2))
par(mar=c(4,4,4,4))
plot(x, y)
plot(x1, y)
plot(x, y1)
plot(x1, y1)

# 일반적인 회귀분석 결과(지수함수 모양)
out1 = lm(y~x)
summary(out1)

# 로그변환을 한 후 모양
out2 = lm(y1 ~ x)
summary(out2)

# 로그변환을 한 후 그래프
par(mfrow=c(1,2))
plot(x, y)
abline(out1, col='green')

plot(x, y1)
abline(out2, col='blue')

# 추정치
yhat1 = fitted.values(out1)
yhat2 = fitted.values(out2)

# 잔차
res1 = residuals(out1)
res2 = residuals(out2)

# 잔차 산점도 비교
par(mfrow=c(1,2))
plot(yhat, res1)
abline(h=0, col="green")

plot(yhat2, res2)
abline(h=0, col="blue")

# 각 계수 출력
b = coefficients(out2)
b

# 절편
b0 = b[1]
# 계수
b1 = b[2]
변환 전 데이터의 요약 결과 로그 변환 후 데이터의 요약 결과
Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-0.5113 -0.3593 -0.1061  0.2657  0.9354 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.88453    0.52584  -3.584 0.005895 ** 
x            0.23507    0.04594   5.117 0.000631 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.4818 on 9 degrees of freedom
Multiple R-squared:  0.7442, Adjusted R-squared:  0.7158 
F-statistic: 26.18 on 1 and 9 DF,  p-value: 0.0006308
Call:
lm(formula = y1 ~ x)

Residuals:
      Min        1Q    Median        3Q       Max 
-0.112486 -0.041012  0.009482  0.049456  0.078368 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept) -6.192108   0.070348  -88.02  1.6e-14 ***
x            0.451033   0.006146   73.38  8.2e-14 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.06446 on 9 degrees of freedom
Multiple R-squared:  0.9983, Adjusted R-squared:  0.9981 
F-statistic:  5385 on 1 and 9 DF,  p-value: 8.196e-14

둘 다 유의하다는 p-value결과가 같지만, 로그 변환을 한 모형이 설명력도 높고 MSE 값이 작게 나오는 것을 확인할 수 있다.

 

- 두 모형의 그래프 출력

변환이 없는 원본 데이터의 경우 특정 지수 함수의 모양이 나타나고 있음을 알 수 있다.

반면 로그 변환을 한 후의 데이터의 그래프의 경우 일직선으로 선형을 띄고 있는 것을 알 수 있다.

 

참고로 위 변환 전 그래프 모양을 보고 위에서 설명한 a~f 예시 그래프에 맞는 해당 식으로 변환해야 한다.

 

 

- 잔차 산점도 그래프 비교

좌측이 변환 전 데이터의 잔차 그래프이다. 특정 모양의 형태를 띄는 것을 확인할 수 있다.

우측은 변환 후의 데이터의 잔차 그래프이다. 0을 중심으로 분포를 보면 랜덤하게 분포된 것을 알 수 있다.

 

 

 

· 예제

x는 화학반응의 촉매물이라 하고, y는 합성 결과의 소득량이라 가정한다.

 

# 예제2
x=c(1,1,1,2,2,2,4,4,4,8,8,8)
y=c(13.6, 15.4, 16.1, 18.2, 19.6, 20.2, 21.8, 22.2, 23.1, 23.6, 24.7, 24.9)
par(mfrow=c(1,2))
plot(x,y) # e에 해당하는 그림 -> x를 log 변환한다.

out1 = lm(y~x)
summary(out1)

# 로그변환
x1=log(x)
plot(x1, y)
out2 = lm(y ~ x1)
abline(out2, col='red')
summary(out2)

# 잔차 그림 비교
yhat1 = fitted.values(out1)
yhat2 = fitted.values(out2)
res1 = residuals(out1)
res2 = residuals(out2)

plot(yhat1, res1)
abline(h=0, col="green")
plot(yhat2, res2)
abline(h=0, col="blue")
로그 변환 전 데이터 요약 로그 변환 후 데이터 요약
Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.4200 -1.0950 -0.2167  1.4500  2.5200 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  15.8333     0.9300  17.026 1.03e-08 ***
x             1.1867     0.2017   5.882 0.000155 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.874 on 10 degrees of freedom
Multiple R-squared:  0.7758, Adjusted R-squared:  0.7534 
F-statistic:  34.6 on 1 and 10 DF,  p-value: 0.0001547
Call:
lm(formula = y ~ x1)

Residuals:
     Min       1Q   Median       3Q      Max 
-2.01333 -0.32167 -0.04667  0.58333  1.47333 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  15.6133     0.5104   30.59 3.27e-11 ***
x1            4.4916     0.3936   11.41 4.68e-07 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.057 on 10 degrees of freedom
Multiple R-squared:  0.9287, Adjusted R-squared:  0.9216 
F-statistic: 130.2 on 1 and 10 DF,  p-value: 4.679e-07

두 모형 다 p-value는 낮게 나오므로 유의하다는 것을 알 수 있다.

하지만 로그 변환 후의 데이터가 설명계수가 더 높은 것을 확인할 수 있으며 결정적으로 MSE 값이 더 낮기 때문에 로그 변환 후의 데이터가 더 적합하다고 볼 수 있다.

 

- 두 데이터의 그래프 비교

 

변환 전 데이터의 그래프는 특정 모양이 나타남을 알 수 있고, 변환 후의 데이터는 직선의 선형을 띄는 것을 알 수 있다.

 

- 잔차 산점도 그래프 비교

 

우측의 그래프가 좀 더 위 아래로 랜덤하게 퍼져 있음을 알 수 있다.

 

 

 

· 예제

# 예제3
# 오차항의 등분산성이 만족되지 않을 경우가 있다.
x = c(4,5,5,5,5,7,7,8,8,8,8,9,9,9,10,10,
      10,12,12,12,13,13,13,14,14,15,16,16,16,17,17,18,
      18,18,19,20,21,21,21,24,25,25,25,25,26,26,27,27,
      28,28,29,29,30,30,30,31,35,35,36,39,40,40)
y = c(4,2,4,8,8,7,7,8,9,11,13,5,5,13,8,14,
      17,11,19,21,15,18,27,14,16,16,14,19,34,22,29,29,
      34,47,30,48,39,42,55,56,33,48,56,59,39,41,57,78,
      64,84,54,68,60,67,101,77,85,107,79,138,110,134)

out1 = lm(y~x)
summary(out1)
yhat1 = fitted.values(out1)
res1 = residuals(out1)

# 제곱근 변환 데이터와 비교
out2 = lm(sqrt(y) ~ x)
summary(out2)
yhat2 = fitted.values(out2)
res2 = residuals(out2)

# 그래프
par(mfrow=c(1,2))
plot(yhat1, res1)
plot(yhat2, res2)

반응변수에 대한 제고급 변환을 한다.

제곱근 변환 전 데이터 요약 제곱근 변환 후 데이터 요약
Call:
lm(formula = y ~ x)

Residuals:
    Min      1Q  Median      3Q     Max 
-25.410  -7.343  -1.334   5.927  35.608 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) -20.1309     3.2308  -6.231 5.04e-08 ***
x             3.1416     0.1514  20.751  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 11.77 on 60 degrees of freedom
Multiple R-squared:  0.8777, Adjusted R-squared:  0.8757 
F-statistic: 430.6 on 1 and 60 DF,  p-value: < 2.2e-16
Call:
lm(formula = sqrt(y) ~ x)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.49948 -0.54761  0.00469  0.53153  1.54350 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 0.932396   0.197909   4.711  1.5e-05 ***
x           0.252466   0.009274  27.223  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.7209 on 60 degrees of freedom
Multiple R-squared:  0.9251, Adjusted R-squared:  0.9239 
F-statistic: 741.1 on 1 and 60 DF,  p-value: < 2.2e-16

제곱근 변환 후의 데이터가 더 뛰어나다.

 

 

- 잔차 산점도 그래프 비교

각각의 오차항이 등분산을 만족하지 않을 경우 제곱근 변환을 통해서 등분상성을 만족하게 할 수 있다.

변환 후 잔차 그래프가 더 랜덤하게 퍼져있다. (등분산)

 

728x90
반응형