[R] VIF (Variance Inflation Factors)를 활용한 다중공선성 확인 (with correlation matrix)
하단의 목차에서 원하는 내용을 클릭하여 바로 이동하실 수 있습니다 :)
1. $R^2$
1-1. 필요 개념 설명
1-2. $R^2$ formula
2. VIF (Variance Inflation Factors)
2-1. 왜 VIF를 사용해야하는지
2-2. VIF formula
3. R 실습 - corrplot::corrplot(), car::vif()
3-1. Correlation matrix - corrplot::corrplot()
3-2. VIF 확인 - car::vif()
3-3. 다중공선성을 고려한 분석
4. Reference
다중공선성이란 예측변수들 간 상관관계가 존재하는 현상을 이야기한다. 회귀 분석을 수행할 시 다중공선성이 존재한다면 회귀 분석을 신뢰하기가 어렵다. 예를 들어 두 예측변수 A와 B가 상관관계를 갖는다면 A 혹은 B 둘 중 하나가 결과변수에 미치는 영향에 문제가 생길 가능성이 존재한다. 이번 포스팅에서는 VIF (Variance Inflation Factors)를 활용하여 회귀 모형 내의 다중공선성 문제를 식별하는 방법을 정리한다.
1. $R^2$
1-1. 필요 개념 설명
$R^2$
- $R^2$란 얼마나 모델이 잘 적합되었는지를 측정하는 지표 중 하나이다.
- 예를 들어 회귀모형에 100 크기의 정보가 있을 때 $R^2$가 70이라면 예측변수들로 회귀모형에 존재하는 70의 정보량을 설명할 수 있음을 의미한다. (자연스럽게 남은 30은 설명할 수 없는 정보가 된다).
잔차(residual)와 편차(deviation) 그리고 SSR, SST
- 정보란 잔차(residual)와 편차(deviation)를 의미한다. 오해하지 말아야 할 점은 잔차와 편차는 모델(혹은 평균)이 실제 값을 얼마나 설명하지 못하는가를 의미한다. (모델과 실제 값이 갖는 차이이기 때문).
쉽게 이해하기 위해 반례를 들면 잔차, 그리고 편차가 0이라는 것은 우리가 적합한 회귀 모형(혹은 평균)이 완전히 실제 값과 일치함을 의미한다. (완전 일치하기에 설명하지 못하는 오차가 없다).
- 잔차(residual) : 적합한 회귀 모형과 실제 값(y)의 차이.
- 편차(deviation) : 평균과 실제 값(y)의 차이.
- 마지막으로 잔차들의 제곱합을 SSR (sum squared regression), 그리고 편차들의 제곱합을 SST (total sum of squares)라 한다.
- SST의 'total'에서 알 수 있듯이 설명해야 하는 전체 정보량은 편차(deviation)이다. 이는 후에 $R^2$의 식을 이해하는데 필요하다.
1-2. $R^2$ formula
- SST : 1-1의 설명을 기반으로 하면 SST는 설명할 수 없는 전체 정보량을 의미한다. (100%).
- SSR : 1-1의 설명을 기반으로 하면 SSR은 회귀 모형으로 설명할 수 없는 정보량을 의미한다.
- 따라서 $SSR\over SST$란 설명할 수 없는 전체 정보량 대비 회귀 모형으로 설명할 수 없는 정보량이 된다.
- 위의 내용을 종합하면 $1-{SSR\over SST}$는 회귀 모형으로 설명할 수 있는 정보량이된다. 따라서 $R^2$는 회귀 모형이 설명하는 정보량이다.
P.S. $R^2$ 해석에 관해서는 newcastle university의 학습 자료를 활용하면 쉽게 이해할 수 있다. (이미지 자료로 인해 링크를 대신 첨부 https://www.ncl.ac.uk/webtemplate/ask-assets/external/maths-resources/statistics/regression-and-correlation/coefficient-of-determination-r-squared.html)
2. VIF (Variance Inflation Factors)
2-1. 왜 VIF를 사용해야하는지
상관관계를 활용한 다중공선성 확인
- 대표적으로 correlation matrix를 활용하는 방법이 있다.
- 상관관계를 활용하는 경우 두 개의 예측변수를 활용한다는 점이 문제가 된다.
- 예를 들어 5 개의 예측변수 A, B, C, D, 그리고 E가 있는 경우 예측변수 A의 다중공선성을 확인하기 위해서는 (A, B), (A, C), (A, D), 그리고 (A, E) 총 네 쌍의 상관관계를 확인해야 한다.
- gif로 표현하면 아래와 같다.
VIF
- VIF는 대상이되는 (다중공선성을 확인하려는) 예측변수를 결과변수로 하여 회귀분석을 수행한다.
- 따라서 개별 예측변수마다 한 번의 연산을 통해 다중공선성을 확인할 수 있다.
- 결론부터 이야기하면 다중공선성이 존재하지 않는다면 예측변수들 간의 회귀 모형의 설명력($R^2$)은 0에 근사해야 한다.
- 예측변수들은 독립적이기 때문에 예측변수들 끼리는 어떠한 정보도 설명할 수 없기 때문이다.
2-2. VIF formula
- 가장 이상적인 결과는 VIF가 1에 근사하는 것이다.
- VIF가 1에 근사한다는 것은 j 번째 예측변수를 결과변수로한 회귀 모형의 $R^2$가 0에 근사함을 의미한다. 즉, j 번째 예측변수를 제외한 모든 예측변수를 통해 j 번째 예측변수를 설명할 수 없다. (한마디로 독립적이다).
- 일반적인 기준. (Pennsylvaniza state university 자료를 참고하였습니다).
- VIF 4 초과 : 회귀 모형에 대한 추가적인 조사가 필요하다.
- VIF 10 초과 : 다중공선성이 존재한다.
3. R 실습 - corrplot::corrplot(), car::vif()
3-1. Correlation matrix - corrplot::corrplot()
Correlation matrix를 생성하는 방법은 몇 가지가 있지만 해당 포스팅에서는 corrplot::corrplot()을 활용하겠습니다. corrplot 함수 자체는 필요한 arguments 중 어려운 것들은 없으며 코드를 그대로 copy 해서 사용할 수도 있기에 CRAN의 링크만 첨부하겠습니다.
- corrplot https://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html
- 저의 경우 직관적인 확인과 수치확인이 동시에 수행되도록 하기 위해서 원과 수치를 동시에 출력하는 방법을 선택하였습니다.
- 데이터를 바로 적용하는 것이 아니라 cor() 함수를 통해 데이터에서 상관관계를 추출한 뒤 corrplot() 함수에 입력해야합니다.
# package 설치
install.packages("corrplot")
#libaray 불러오기
library(corrplot)
library(dplyr)
# 실습을 위한 데이터 불러오기.
data("BostonHousing")
Boston_d <- BostonHousing %>%
select(-chas)
summary(Boston_d)
# Correlation plot을 생성하기 위해 dataframe의 상관관계를 저장합니다.
Boston_cor <- cor(Boston_d)
# Correlation matrix
# 직관적으로 확인함과 동시에 수치 또한 확인할 수 있도록
# 원과 상관관계 수치를 보여주는 방법을 활용하였습니다.
corrplot.mixed(Boston_cor, order = 'AOE')
3-2. VIF 확인 - car::vif()
vif(생성한 회귀 모형)
- car::vif() 함수는 입력 argument로 생성해 둔 회귀모형만 입력하면 vif를 계산해 줍니다.
# library 불러오기
library(car)
# vif 계산을 위한 선형 회귀 모형 생성
model <- lm(medv~., data=Boston_d)
summary(model)
# vif 확인
vif(model)
3-3. 다중공선성을 고려한 분석
- 'rad'와 'tax' 두 예측변수가 VIF 확인 결과 다중공선성이 존재할 가능성이 크다는 것을 확인하였다.
- 좀 더 자세한 확인을 위해 correlation matrix를 확인하면 'rad'와 'tax' 두 변수의 상관관계가 크다는 것을 확인할 수 있다.
- 이 경우 다음과 같은 해결 방안을 고려할 수 있다.
- 두 변수를 활용하여 파생변수를 생성한다. 즉, 두 변수의 정보를 대표하는 새로운 지표를 생성한다.
- 연구결과(혹은 도메인)를 활용할 경우 정보의 손실을 최소화하면서 의미있는 분석 지표를 추출 할 수 있다.
- PCA를 수행한다.
- 장점 : 선형대수학적으로 공통된 차원을 찾기에 수학적으로 의미 있는 변수가 생성될 가능성이 있다.
- 단점 : 수학적 기준으로 생성되는 변수이기에 해당 변수가 의미하는 것이 무엇인지 알기 어렵다.
- 하나의 변수를 제거한다.
- 변수 선택법과 동일한 방법이다. (즉, 그다지 좋지 못한 방법이다).
- 제거되는 변수가 제공하는 정보가 소실된다.
- 제거되는 변수와 연관이 있는 다른 변수(e.g. 억제인자 효과가 있는)들의 영향이 변할 수 있다.
- 두 변수를 활용하여 파생변수를 생성한다. 즉, 두 변수의 정보를 대표하는 새로운 지표를 생성한다.
P.S. 방법론을 설명하는 게시물이기에 추가적인 분석은 수행하지 않았습니다.
4. Reference
- VIF 내용 참고 1 https://www.investopedia.com/terms/v/variance-inflation-factor.asp
- VIF 내용 참고 2 https://online.stat.psu.edu/stat462/node/180/
- $R^2$ https://www.ncl.ac.uk/webtemplate/ask-assets/external/maths-resources/statistics/regression-and-correlation/coefficient-of-determination-r-squared.html
- 전체적인 내용은 <앤디 필드의 유쾌한 R 통계학> 참고
'♧ 통계' 카테고리의 다른 글
[R] 회귀 분석 변수 선택법 | step() (2) | 2024.07.21 |
---|