독립변수들 사이에 강한 상관관계가 존재할 때 발생하는 문제로 일반적으로 vif가 2( or 10) 보다 크면 다중공선성이 존재한다고 본다.
일반적으로 다중공선성 문제해결을 위해 변수선택법을 활용하거나 주성분회귀분석을 사용한다.
head(iris)
## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1 5.1 3.5 1.4 0.2 setosa
## 2 4.9 3.0 1.4 0.2 setosa
## 3 4.7 3.2 1.3 0.2 setosa
## 4 4.6 3.1 1.5 0.2 setosa
## 5 5.0 3.6 1.4 0.2 setosa
## 6 5.4 3.9 1.7 0.4 setosa
formula=paste(names(iris)[-c(1,5)],collapse = '+')
formula=paste(c('Sepal.Length',formula),collapse = '~')
step(lm(Sepal.Length~1,data=iris[,-5]),scope=formula,direction ='forward')
## Start: AIC=-55.6
## Sepal.Length ~ 1
##
## Df Sum of Sq RSS AIC
## + Petal.Length 1 77.643 24.525 -267.641
## + Petal.Width 1 68.353 33.815 -219.460
## + Sepal.Width 1 1.412 100.756 -55.690
## <none> 102.168 -55.602
##
## Step: AIC=-267.64
## Sepal.Length ~ Petal.Length
##
## Df Sum of Sq RSS AIC
## + Sepal.Width 1 8.1963 16.329 -326.66
## + Petal.Width 1 0.6443 23.881 -269.63
## <none> 24.525 -267.64
##
## Step: AIC=-326.66
## Sepal.Length ~ Petal.Length + Sepal.Width
##
## Df Sum of Sq RSS AIC
## + Petal.Width 1 1.8834 14.445 -343.04
## <none> 16.329 -326.66
##
## Step: AIC=-343.04
## Sepal.Length ~ Petal.Length + Sepal.Width + Petal.Width
##
## Call:
## lm(formula = Sepal.Length ~ Petal.Length + Sepal.Width + Petal.Width,
## data = iris[, -5])
##
## Coefficients:
## (Intercept) Petal.Length Sepal.Width Petal.Width
## 1.8560 0.7091 0.6508 -0.5565
step(lm(Sepal.Length~.,data=iris[,-5]),direction ='backward')
## Start: AIC=-343.04
## Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width
##
## Df Sum of Sq RSS AIC
## <none> 14.445 -343.04
## - Petal.Width 1 1.8834 16.329 -326.66
## - Sepal.Width 1 9.4353 23.881 -269.63
## - Petal.Length 1 15.4657 29.911 -235.86
##
## Call:
## lm(formula = Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width,
## data = iris[, -5])
##
## Coefficients:
## (Intercept) Sepal.Width Petal.Length Petal.Width
## 1.8560 0.6508 0.7091 -0.5565
step(lm(Sepal.Length~.,data=iris[,-5]),direction ='both')
## Start: AIC=-343.04
## Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width
##
## Df Sum of Sq RSS AIC
## <none> 14.445 -343.04
## - Petal.Width 1 1.8834 16.329 -326.66
## - Sepal.Width 1 9.4353 23.881 -269.63
## - Petal.Length 1 15.4657 29.911 -235.86
##
## Call:
## lm(formula = Sepal.Length ~ Sepal.Width + Petal.Length + Petal.Width,
## data = iris[, -5])
##
## Coefficients:
## (Intercept) Sepal.Width Petal.Length Petal.Width
## 1.8560 0.6508 0.7091 -0.5565
주성분 분석의 경우 cor matrix혹은 cov matrix에 대하여 고유 벡터를 통해 데이터를 선형변환한다. 따라서 새로운 변수들은 선형 독립이 되나 factor가 존재하는 데이터에 대해서 거리를 구할 수 없다는 단점이 있다.
또한 pca 외에도 딥러닝 기법 중 하나인 autoencoder나 음수미포함분해nnf나 위상수학의 tda가 성능면에서 우수한 성능을 보인다.
Propertion of Variance: 분산비율, 각 주성분의 차지하는 비율을 말하며 클 수록 영향을 많이 미친다는 것을 의미한다. Cumulative Proportion: 분산의 누적 합계
prcomp 의 경우 SVD(특이값 분해)를 사용하고, princomp의 경우 스팩트럼 분해를 사용한다는 측면에서 prcomp의 수치 정확도가 더 높다.
summary(prcomp(iris[,-5], scale = F))
## Importance of components:
## PC1 PC2 PC3 PC4
## Standard deviation 2.0563 0.49262 0.2797 0.15439
## Proportion of Variance 0.9246 0.05307 0.0171 0.00521
## Cumulative Proportion 0.9246 0.97769 0.9948 1.00000
summary(princomp(iris[,-5]),cor=T,scores=T)
## Importance of components:
## Comp.1 Comp.2 Comp.3 Comp.4
## Standard deviation 2.0494032 0.49097143 0.27872586 0.153870700
## Proportion of Variance 0.9246187 0.05306648 0.01710261 0.005212184
## Cumulative Proportion 0.9246187 0.97768521 0.99478782 1.000000000
PC1과 PC2를 사용하면 0.7296+0.2285 인 원래식의 0.9581%가량 설명