ch0nny_log

[빅데이터분석] R _ 61. 다중 공선성 본문

빅데이터 분석(with 아이티윌)/R

[빅데이터분석] R _ 61. 다중 공선성

chonny 2024. 7. 18. 13:47
※ 머신러닝의 종류3가지
1. 지도학습 정답이 있는 데이터로 기계를 학습
 1.1 분류: knn, naivebayes, decesion tree
 1.2 회귀: 단순회귀(수치예측), 다중회귀
2. 비지도학습 정답이 없는 데이터로 기계를 학습
3. 강화학습 환경만 주고 알아서 데이터를 만들어서 학습

 

■ 다중회귀분석에 앞서서 다중공선성 문제를 확인해야됨

 

다중회귀 분석을 결과를 봤더니 유의한 변수들을 발견할 수 없었다고 한다면 다중공선성을 의심해봐야 됨.

특히 어떤 특정 변수의 p-value 가 너무 터무니 없이 높으면서 통계적으로 유의한 변수가 아니라는 해석이 나온다면 더더욱 다중공선성을 의심해 봐야됨.

 

예를들어, 시험점수가 종속변수이고 독립변수로 공부시간, 주간 음주횟수, 평상시 혈중 알코올농도가 있다고 할때  다중 회귀 분석을 돌려보면 주간 음주횟수 또는 평상시 혈중알코올농도 중에 하나가 시험점수에 영향이 없다는 결과가 나옴. 

 독립변수들끼리 서로 강한 상관관계를 보이게 되면 다중 공선성 문제가 발생함. 
 만약에 독립변수들끼리 상관관계가 아주 강하여 절대값 1에 가까워지면 최소제곱법(수학 스터디) 적용자체가 매우 심각한 국면을 맞이하게 됨. 이때 나타나는 현상을 다중 공선성이라고 함. 

 

■ R 을 활용해서 다중 공선성 테스트 하기
- 귀무가설: 아이큐는 시험점수와 관계가 없다. 공부시간은 시험점수와 관계가 없다.
- 대립가설: 아이큐는 시험점수와 관계가 있다. 공부시간은 시험점수와 관계가 있다.
#1. 다중 공선성  vif(팽창계수) 를 확인할 수 있는 패키지를 설치합니다.
install.packages("car")
library(car)

#2. 데이터를 불러옵니다. 
test <-read.csv('c:\\data\\test_vif1.csv',header =T, fileEncoding ='euc-kr') 
test

#3. pairs 패키지를 이용하여 독립변수들끼리의 상관관계를 확인합니다.
library(psych)
pairs.panels(test, pch= '.')
test
#4. 다중 회귀모델을 생성합니다. 
model <- lm (시험점수~아이큐 +공부시간, data=test)
summary(model)

#5. 다중 공선성 문제를 보이는지 확인합니다.

library(car)
vif(model)>10​

종속변수인 시험점수와 독립변수인 아이큐와 공부시간은 강한 상관관계를 보이고 있음. (그런데 독립변수끼리도 양의 상관관계를 보이고 있음)

결정계수도 0.9로 1에 가까운 설명력을 보이고 있고 아이큐, 공부시간 둘다 p-value가 0.02로 유의수준 0.05보다 작으므로 유의미한 변수임을 확인이 되고 있음. 그래서 대립가설을 채택할 충분한 근거가 있음.

결론: 공부시간과 아이큐는 서로 상관관계는 높았으나 (0.77) 팽창계수가 높지 않아 이 회귀모델은 적절한 모형임을 확인이 됩니다.

실습. test_vif2.csv 를 불러와서 시험점수를 종속변수로 하고 공부시간, 아이큐, 등급평균을 독립변수로 해서 다중 회귀분석을 하는데 다음의 가설검정을 하시오.
- 귀무가설: 아이큐는 시험점수에 영향이 없다.
- 대립가설: 아이큐는 시험점수에 영향이 있다.
#1. 다중 공선성  vif(팽창계수) 를 확인할 수 있는 패키지를 설치합니다.
install.packages("car")
library(car)

#2. 데이터를 불러옵니다. 
test2 <-read.csv('c:\\data\\test_vif2.csv',header =T, fileEncoding ='euc-kr') 
test2

#3. pairs 패키지를 이용하여 독립변수들끼리의 상관관계를 확인합니다.
library(psych)
pairs.panels(test2, pch= '.')
test2
#4. 다중 회귀모델을 생성합니다. 
model2 <- lm (시험점수~ 아이큐+ 공부시간+등급평균, data=test2)
summary(model2)

#5. 다중 공선성 문제를 보이는지 확인합니다.
library(car)
vif(model2)>10​


아이큐와 시험점수간 강한 상관관계를 보이고 있으나 아이큐와 등급평균을 봤을때 0.97로 너무 높은 상관계수를 나타내고 있음 -> 다중공선선 문제가 있음을 알고 다중회귀분석을 확인해야함

결정계수는 0.8054로 1에 가까운 설명력을 보이고 있으나 공부시간만 p-value가 유의수준 0.05보다 작고(유의미o) 나머지는 크게(유의미x) 나타나고 있음.

따라서 아이큐와 등급편균 둘다 시험점수에 영향이 없거나 또는 두 변수의 다중 공선성을 의심해봐야됨


아이큐와 등급평균 팽창계수가 10 이 넘으므로 다중 공선성에 문제가 있음을 알 수 있음. 


※ 이럴때 해결방법?
-> 둘중 하나를 제외하고 회귀분석을 해야됨 (따로 따로 회귀분석을 돌려야됨)
# 아이큐+ 공부시간
model5 <-lm(시험점수~아이큐+공부시간,data=test2)
summary(model5)
# 등급평균+공부시간
model6 <-lm(시험점수~등급평균+공부시간,data=test2)
summary(model6)​
위와 같이 다중 공선성 문제를 보이는 변수들을 따로따로 돌려봤을 때 대립가설을 채택할 충분한 근거가 있는 결과가 출력 되었습니다.