상관과 회귀

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


수강중

10. 모형 점검

회귀 분석의 가정

  • 선형성
  • 등분산성
  • 독립성

선형성

  • 선형 회귀 분석에서는 자료가 선형인 경우 그 자료를 가장 잘 설명하는 모형을 만들 수 있음
  • 잔차: 실제 회귀 모형에서 나온 예측값과 실제값 사이의 거리
  • 선형이면 잔차가 적절하게 흩어져 있고 비선형이면 특정한 패턴을 보이면서 흩어져 있음

등분산성

  • x가 증가함에 따라 분산이 증가하거나 감소하는 관계가 존재함
  • 등분산성을 만족하면 잔차가 적절하게 흩어져 있고 비선형이면 x가 커질수록 분산이 커짐

독립성

  • 선형이면 잔차가 적절하게 흩어져 있고 비선형이면 특정한 패턴을 보이면서 흩어져 있음
  • 대부분의 자료는 독립성을 만족함
  • 경제학, 지리학 자료를 다룰 때 독립성을 만족하지 않는 문제가 발생하기도 함

실습

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

library(corrgram)
vars2 <- c("Assists","Atbat","Errors","Hits", "Homer", "logSal", "Putouts","RBI","Runs","Walks","Years")
cor.data <- baseball[,vars2]
train.data <- cor.data[-100,]
lm.model = lm(logSal ~ RBI, data = train.data)
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

plot함수를 이용해 잔차 그림 그리기

par(mfrow = c(2, 2))
plot(lm.model)
  • 그림 창을 2x2로 분리
  • 잘 피팅이 된 모형이라고 볼 수 있음
  • 좌측 상단 그래프
    • 각각의 y 값에서 얼마나 잔차가 차이가 나는지 보여줌
    • 빨간 선이 점선을 잘 따라가기 때문에 선형성을 잘 만족함
  • 우측 상단 그래프
    • 잔차 점선을 잘 따라가기 때문에 정규 분포를 따름
  • 우측 하단 그래프
    • Leverage: 자료 하나가 회귀 모형에 얼마나 영향을 미치는가, 아웃라이어를 찾아 줌
    • 218과 같이 일정 거리를 벗어난 데이터를 표시함
  • 수치가 없으니 정확한 확인을 할 수 없음

resudialPlots함수를 이용해 잔차 그림과 수치 확인

패키지 설치

install.packages('car')

불러오기

library(car)
Loading required package: carData

그래프

par(mfrow = c(1, 1))
residualPlots(lm.model)
           Test stat Pr(>|Test stat|)
RBI          -1.3747           0.1704
Tukey test   -1.3747           0.1692
  • 그래프: 독립 변수가 변함에 따라 잔차가 어떻게 변하는지 보여줌 $$sal = RBI + RBI^2$$
  • 2차항을 추가하면 곡선 형태를 잘 잡아낼 수 있음
  • 따라서 2차항을 추가했을 때 모형이 얼마나 더 좋아지는가에 대한 테스트
  • 비선형 관계가 강하지는 않음
  • p값이 0.05보다 작으면 2차항을 집어 넣는 것이 더 좋은 모형이 되고 선형성의 문제가 있다는 것임
  • p값이 0.05보다 크기 때문에 2차항을 추가하지 않아도 됨

연차로 연봉 예측하는 모델 만들기

lm.model_y <- lm(logSal ~ Years, data = train.data)
lm.model_y
Call:
lm(formula = logSal ~ Years, data = train.data)

Coefficients:
(Intercept)        Years  
    2.25725      0.04329  

더 많은 정보 보기

summary(lm.model_y)
Call:
lm(formula = logSal ~ Years, data = train.data)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.82194 -0.24001 -0.03355  0.24178  0.98394 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 2.257253   0.036824   61.30   <2e-16 ***
Years       0.043286   0.004211   10.28   <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 0.3268 on 260 degrees of freedom
  (59 observations deleted due to missingness)
Multiple R-squared:  0.2889,	Adjusted R-squared:  0.2862 
F-statistic: 105.6 on 1 and 260 DF,  p-value: < 2.2e-16
  • 모형과 회귀 계수 모두 유의함

잔차 그림 그리기

residualPlots(lm.model_y)
           Test stat Pr(>|Test stat|)    
Years        -9.1408        < 2.2e-16 ***
Tukey test   -9.1408        < 2.2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
  • 비선형 관계가 강함
  • 연차가 오른다고 해서 연봉이 올라가는 것은 아님
  • 10년차 때 가장 연봉을 많이 받고 그 이후로는 떨어짐 $$logSal = Years + Years^2$$
  • 2차항을 더해 문제를 해결할 수 있음
  • p값이 0.05보다 작기 때문에 2차항을 추가하는 것이 좋음