상관과 회귀

예측 분석의 기본이 되는 상관과 회귀의 개념을 알아봅니다


수강중

13. 중다회귀의 문제

다중공선성

  • 여러 개의 변수를 사용하면 비슷한 변수가 포함될 수 있음
  • 이 때 서로 상관이 높은 변수들이 분석에 포함되면 회귀 계수가 불안정하게 추정되는 것을 다중공선성 문제라고 함
  • 다중공선성 문제가 발생할 경우 변수를 적절히 제거할 필요가 있음
  • 예) 홈런 수와 타점 수, 안타 수와 타점 수, 안타 수와 출루 수 사이에 유의미한 관계가 존재함
  • 변수를 빼거나 차원 축소 방법을 이용해 변수의 수를 적절히 줄여 줄 필요가 있음

다중공선성 파악하는 법

  • 산점도 그리기
  • 상관계수 계산하기
  • 분산 팽창 지수 계산하기

실습

지난 시간에 했던 데이터 그대로 사용

library(corrgram)
vars2 <- c("Assists","Atbat","Errors","Hits", "Homer", "logSal", "Putouts","RBI","Runs","Walks","Years")
cor.data <- baseball[,vars2]
train.data <- cor.data[-100,]
Registered S3 methods overwritten by 'ggplot2':
  method         from 
  [.quosures     rlang
  c.quosures     rlang
  print.quosures rlang
Registered S3 method overwritten by 'seriation':
  method         from 
  reorder.hclust gclus

변수를 전부 사용해 모델 생성

lm.model.all <- lm(logSal ~., data = train.data)
summary(lm.model.all)
Call:
lm(formula = logSal ~ ., data = train.data)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.98506 -0.18998  0.01486  0.18059  1.30892 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)  1.9187028  0.0605503  31.688  < 2e-16 ***
Assists      0.0002322  0.0001849   1.256  0.21027    
Atbat       -0.0011888  0.0004837  -2.458  0.01466 *  
Errors      -0.0041812  0.0037292  -1.121  0.26327    
Hits         0.0055791  0.0017333   3.219  0.00146 ** 
Homer        0.0023742  0.0046387   0.512  0.60922    
Putouts      0.0001515  0.0000658   2.302  0.02214 *  
RBI          0.0002919  0.0020013   0.146  0.88417    
Runs         0.0007937  0.0021541   0.368  0.71283    
Walks        0.0028484  0.0011941   2.385  0.01781 *  
Years        0.0402624  0.0037449  10.751  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.2724 on 251 degrees of freedom
  (59 observations deleted due to missingness)
Multiple R-squared:  0.523,	Adjusted R-squared:  0.504 
F-statistic: 27.52 on 10 and 251 DF,  p-value: < 2.2e-16
  • 유의미한 변수가 많지 않음(5개)

상관계수 구하기

cor(train.data, use = 'complete.obs')
        Assists     Atbat      Errors      Hits       Homer       logSal     
Assists  1.00000000 0.34293853  0.70276184 0.30447212 -0.16068419  0.05092150
Atbat    0.34293853 1.00000000  0.32648576 0.96398320  0.55507653  0.41484186
Errors   0.70276184 0.32648576  1.00000000 0.28041878 -0.00850515 -0.01985864
Hits     0.30447212 0.96398320  0.28041878 1.00000000  0.53071006  0.44958995
Homer   -0.16068419 0.55507653 -0.00850515 0.53071006  1.00000000  0.33954488
logSal   0.05092150 0.41484186 -0.01985864 0.44958995  0.33954488  1.00000000
Putouts -0.04342672 0.30961636  0.07542443 0.29968803  0.25099635  0.22454423
RBI      0.06246145 0.79618213  0.14980686 0.78855904  0.84965524  0.44444446
Runs     0.18137036 0.90016116  0.19494715 0.91114700  0.63080376  0.42524612
Walks    0.10195022 0.62466202  0.08129372 0.58741892  0.44097468  0.43281988
Years   -0.08541100 0.01276051 -0.15693983 0.01861031  0.11361797  0.53752334
        Putouts     RBI        Runs        Walks      Years      
Assists -0.04342672 0.06246145  0.18137036 0.10195022 -0.08541100
Atbat    0.30961636 0.79618213  0.90016116 0.62466202  0.01276051
Errors   0.07542443 0.14980686  0.19494715 0.08129372 -0.15693983
Hits     0.29968803 0.78855904  0.91114700 0.58741892  0.01861031
Homer    0.25099635 0.84965524  0.63080376 0.44097468  0.11361797
logSal   0.22454423 0.44444446  0.42524612 0.43281988  0.53752334
Putouts  1.00000000 0.31208560  0.27133484 0.28088948 -0.02001823
RBI      0.31208560 1.00000000  0.77966693 0.56944164  0.12963326
Runs     0.27133484 0.77966693  1.00000000 0.69810536 -0.01183429
Walks    0.28088948 0.56944164  0.69810536 1.00000000  0.13474943
Years   -0.02001823 0.12963326 -0.01183429 0.13474943  1.00000000

분산 팽창 지수 구하기

library(car)
Loading required package: carData

Attaching package: ‘car’

The following object is masked from ‘package:boot’:

    logit

The following object is masked from ‘package:psych’:

    logit

vif(lm.model.all)
  Assists     Atbat    Errors      Hits     Homer   Putouts       RBI      Runs 
 2.534964 17.925381  2.137505 21.601028  5.823460  1.198036  9.473516 10.672883 
    Walks     Years 
 2.374512  1.137910 
  • 5 이상이면 다중공선성을 일으키는 원인이 될 수 있음
  • 10 이상이면 다중공선성의 심각한 문제를 일으킬 수 있음

과잉 적합

  • 많은 변수를 사용할수록 내가 가지고 있는 자료를 잘 설명할 수 있음
  • 이 모형으로 예측을 한다면 좋은 결과를 얻을 수 있을까?
  • 각 변수들은 조금씩 노이즈를 포함하고 있기 때문에 각 변수들의 설명력이 적절한 수준 이상이 아니라면 노이즈로 인해 더 안 좋은 결과를 얻을 수도 있음
  • 때로는 훨씬 간단한 모형이 더 예측력이 좋을 수도 있음
  • 그 이유는?

  • 파란 점: 데이터 포인트
  • 초록 선: 원래 자료의 실제 분포
  • 빨간 선: 회귀 모형을 만들어 자료를 잘 설명하기 위해 만든 선
  • 우리가 배운 모형의 좋고 나쁨의 기준: 실제 값과 추정된 값 간의 잔차가 적은 것
  • 우측 하단 그림
    • 빨간 선이 파란 점을 잘 지나고 있기 때문에 잔차가 0인 완벽한 모형임
    • 그러나 새롭게 데이터가 추가된다면 실제 예측 값과 실제 자료 값은 차이가 많아짐
    • 잔차는 작지만 예측력은 낮음
  • 좌측 상단 그림
    • 우측 하단 그림에 비해 잔차는 크지만 예측력은 좋음
  • 조정된 결정 계수를 이용해 과잉 적합을 막을 수 있음