다중 회귀분석(Multiple Regression Analysis)

ddoddo·2023년 1월 9일
0

데이터분석 with R

목록 보기
11/21

다중 회귀분석

다중 회귀분석(Multiple Regression Analysis)은 독립변수가 2개 이상일 경우에 사용하며 수식으로 표현하면 y = ax1 + ax2 + c 형태로 나타낼 수 있다.

weight를 종속변수로, egg_weight, movement, food를 독립변수로 활용하여 회귀분석을 진행해보자.

lm() 함수에서는 변수가 추가될 경우 기호 +를 사용한다.

Data Load

> df <- read.csv('ch5-1.csv', header=TRUE)
> df_n <- subset(df, select=-c(chick_nm))
> head(df_n)
  weight egg_weight movement food
1    140         65      146   14
2    128         62      153   12
3    140         65      118   13
4    135         65      157   13
5    145         69      157   13
6    138         65      143   13

다중 회귀분석

summary() 함수를 통해 회귀모델 결과를 확인한다.

# lm(weight ~ ., data=df_n)을 사용해도 같은 결과가 나타난다.
> df_mlm <- lm(weight ~ egg_weight + movement + food, data=df_n)
> summary(df_mlm)

Call:
lm(formula = weight ~ egg_weight + movement + food, data = df_n)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.2037 -1.3079  0.1826  1.2572  2.3647 

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
(Intercept)  2.974830   8.587203   0.346 0.731811    
egg_weight   1.776350   0.194845   9.117  1.4e-09 ***
movement    -0.008674   0.016631  -0.522 0.606417    
food         1.584729   0.404757   3.915 0.000583 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.681 on 26 degrees of freedom
Multiple R-squared:  0.9479,	Adjusted R-squared:  0.9419 
F-statistic: 157.7 on 3 and 26 DF,  p-value: < 2.2e-16

회귀모델의 통계적 유의성

p-value: < 2.2e-16 이므로 회귀모델이 통계적으로 유의하다.

개별 독립변수의 통계적 유의성

  • egg_weight : 1.4e-09으로 통계적으로 유의하다.
  • movement : 0.606417으로 통계적으로 유의하지 않다.
  • food : 0.000583으로 통계적으로 유의하다.

movement 변수는 독립변수에서 제거하는 것이 좋다.

수정된 결정계수

Adjusted R-squared: 0.9419


유의하지 않은 독립변수를 제외하거 다중 회귀분석을 다시 실행한다.

> df_mlm2 <- lm(weight ~ egg_weight + food, data=df_n)
> summary(df_mlm2)

Call:
lm(formula = weight ~ egg_weight + food, data = df_n)

Residuals:
    Min      1Q  Median      3Q     Max 
-3.0231 -1.2124  0.2445  1.3607  2.2352 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   3.6638     8.3698   0.438 0.665052    
egg_weight    1.7453     0.1830   9.536 3.89e-10 ***
food          1.5955     0.3987   4.001 0.000441 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 1.658 on 27 degrees of freedom
Multiple R-squared:  0.9474,	Adjusted R-squared:  0.9435 
F-statistic:   243 on 2 and 27 DF,  p-value: < 2.2e-16

수정된 결정계수

수정된 결정계수가 Adjusted R-squared: 0.9435로 이전에 비해 조금 올라갔다. 게다가 독립변수는 하나 줄어들어 회귀모델은 더 간단해졌다.

다중 회귀분석 변수 선택법

  • 전진선택법(Forward Selection) : y절편만 있는 상수모형부터 시작하여 중요한 독립변수를 하나씩 추가해가는 방법이다.
  • 후진선택법(Backward Selection) : 독립변수를 모두 포함한 상태에서 가장 적은 영향을 주는 변수를 하나씩 제거하는 방법이다.

step() 함수를 통해 실행할 수 있으며 아래 코드가 그 예시이다.

step_min <- step(df_mlm, direction='backward')

다중공선성

다중 회귀분석의 경우 단순 회귀분석과 달리 독립변수가 많기 때문에 예상치 못한 변수들 간의 강한 상관관계로 인해 제대로 된 회귀분석이 실행되지 못할 수도 있다. 이런 현상을 다중공선성(Multicollinearity) 라고 한다.

다중공선성 문제는 분산팽창요인(VIF)을 계산해 구할 수 있는데 일반적으로 10 이상이면 다중공선성 문제가 있다고 판단하며 30을 초과하면 심각한 다중공선성 문제가 있다고 판단한다.

car 패키지를 설치하면 쉽게 구할 수 있다.

> install.packages('car')
> library(car)
> vif(df_mlm2)
egg_weight       food 
  2.882685   2.882685 

두 변수 모두 2.88 수준으로 10보다 매우 작기 때문에 다중공선성 문제가 없는 것으로 판단된다.

추정된 회귀식

weight = 1.7453*egg_weight + 1.5955*food + 3.6638

잔차 산점도

> hist(df_mlm2$residuals, col='skyblue', xlab='residuals')

0개의 댓글