Nice programing

회귀 모델에서 스크리닝 (다중) 공선 성

nicepro 2020. 11. 24. 19:54
반응형

회귀 모델에서 스크리닝 (다중) 공선 성


이 질문이 "질문 및 답변"질문이되지 않기를 바랍니다. 여기에 있습니다. (다중) 공선 성은 회귀 모델에서 예측 변수 간의 매우 높은 상관 관계를 나타냅니다. 그것들을 치료하는 방법 ... 글쎄, 때로는 회귀 모델 자체에 영향을 미치지 않고 개별 예측 변수의 효과 해석에 영향을 미치기 때문에 공선 성을 "치료"할 필요가 없습니다.

공선 성을 파악하는 한 가지 방법은 각 예측 변수를 종속 변수로, 다른 예측 변수를 독립 변수로 지정하고 R 2를 결정 하고 .9 (또는 .95)보다 크면 예측 변수가 중복 된 것으로 간주 할 수 있습니다. 이것은 하나의 "방법"입니다 ... 다른 접근법은 어떻습니까? 그들 중 일부는 모델에서 예측 변수를 제외하고 b- 계수 변화를 관찰하는 것과 같이 시간이 많이 걸립니다. 눈에 띄게 달라야합니다.

물론 우리는 분석의 특정 맥락 / 목표를 항상 염두에 두어야합니다. 때로는 연구를 반복하는 것이 해결책 일 뿐이지 만 지금은 (다중) 공선 성이있을 때 중복 예측자를 선별하는 다양한 방법에 관심이 있습니다. 회귀 모델에서 발생합니다.


kappa()기능이 도움 될 수 있습니다. 다음은 시뮬레이션 된 예입니다.

> set.seed(42)
> x1 <- rnorm(100)
> x2 <- rnorm(100)
> x3 <- x1 + 2*x2 + rnorm(100)*0.0001    # so x3 approx a linear comb. of x1+x2
> mm12 <- model.matrix(~ x1 + x2)        # normal model, two indep. regressors
> mm123 <- model.matrix(~ x1 + x2 + x3)  # bad model with near collinearity
> kappa(mm12)                            # a 'low' kappa is good
[1] 1.166029
> kappa(mm123)                           # a 'high' kappa indicates trouble
[1] 121530.7

그리고 우리는 세 번째 회귀자를 점점 더 공 선적으로 만들어서 더 나아갑니다.

> x4 <- x1 + 2*x2 + rnorm(100)*0.000001  # even more collinear
> mm124 <- model.matrix(~ x1 + x2 + x4)
> kappa(mm124)
[1] 13955982
> x5 <- x1 + 2*x2                        # now x5 is linear comb of x1,x2
> mm125 <- model.matrix(~ x1 + x2 + x5)
> kappa(mm125)
[1] 1.067568e+16
> 

이것은 근사치를 사용했습니다 help(kappa). 자세한 내용 은를 참조 하십시오.


Dirk가 Condition Number 방법에 대해 말한 것에 추가하기 위해 경험적으로 CN > 30 indicate severe collinearity. 조건 번호를 제외한 다른 방법은 다음과 같습니다.

1) 0 (완벽한 공선 성)에서 1 (공선 성 없음) 범위의 공분산 행렬의 행렬식

# using Dirk's example
> det(cov(mm12[,-1]))
[1] 0.8856818
> det(cov(mm123[,-1]))
[1] 8.916092e-09

2) 대각 행렬의 행렬식이 고유 값의 곱이라는 사실 사용 => 하나 이상의 작은 고유 값이 있으면 공선 성을 나타냅니다.

> eigen(cov(mm12[,-1]))$values
[1] 1.0876357 0.8143184

> eigen(cov(mm123[,-1]))$values
[1] 5.388022e+00 9.862794e-01 1.677819e-09

3) VIF (Variance Inflation Factor)의 값. 예측 변수 i에 대한 VIF는 1 / (1-R_i ^ 2)이며, 여기서 R_i ^ 2는 나머지 예측 변수에 대한 예측 변수 i의 회귀에서 얻은 R ^ 2입니다. 하나 이상의 독립 변수에 대한 VIF가 클 때 공선 성이 존재합니다. 경험 법칙 : VIF > 10 is of concern. R의 구현은 여기를 참조 하십시오 . 또한 공선 성을 결정하기 위해 R ^ 2를 사용하는 것은 산점도의 시각적 검사와 함께 진행되어야한다고 언급하고 싶습니다. 단일 특이 치가 존재하지 않는 경우 공선 성을 "유발"하거나 존재하는 경우 공선 성을 숨길 수 있기 때문입니다. .


Vito Ricci의 참조 카드 "회귀 분석을위한 R 함수" http://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf

진단 기능을 포함하여 R의 많은 유용한 회귀 관련 기능을 간결하게 나열합니다. 특히 다중 공선 성을 평가할 수 vif있는 car패키지 함수를 나열합니다 . http://en.wikipedia.org/wiki/Variance_inflation_factor

다중 공선성에 대한 고려는 종종 변수 중요도 평가 문제와 함께 진행됩니다. 이것이 당신에게 해당된다면 아마도 relaimpo패키지를 확인하십시오 : http://prof.beuth-hochschule.de/groemping/relaimpo/


지금까지 VIF에 대한 언급이 없기 때문에 답변을 추가하겠습니다. 분산 인플레이션 계수> 10은 일반적으로 예측 변수 간의 심각한 중복을 나타냅니다. VIF는 변수 계수의 분산이 다른 변수와 높은 상관 관계가없는 경우 증가하는 요인을 나타냅니다.

vif() is available in package cars and applied to an object of class(lm). It returns the vif of x1, x2 . . . xn in object lm(). It is a good idea to exclude variables with vif >10 or introduce transformations to the variables with vif>10.


See also Section 9.4 in this Book: Practical Regression and Anova using R [Faraway 2002].

Collinearity can be detected in several ways:

  1. Examination of the correlation matrix of the predictors will reveal large pairwise collinearities.

  2. A regression of x_i on all other predictors gives R^2_i. Repeat for all predictors. R^2_i close to one indicates a problem — the offending linear combination may be found.

  3. Examine the eigenvalues of t(X) %*% X, where X denotes the model matrix; Small eigenvalues indicate a problem. The 2-norm condition number can be shown to be the ratio of the largest to the smallest non-zero singular value of the matrix ($\kappa = \sqrt{\lambda_1/\lambda_p}$; see ?kappa); \kappa >= 30 is considered large.

참고URL : https://stackoverflow.com/questions/3042117/screening-multicollinearity-in-a-regression-model

반응형