혼합 선형 모델에서 다중 공선 성을 테스트하고 피하는 방법은 무엇입니까?


25

현재 혼합 효과 선형 모델을 사용하고 있습니다.

R에서 "lme4"패키지를 사용하고 있습니다.

내 모델은 다음과 같은 형식을 취합니다.

model <- lmer(response ~ predictor1 + predictor2 + (1 | random effect))

모형을 실행하기 전에 예측 변수 간의 가능한 다중 공선 성을 확인했습니다.

나는 이것을함으로써 이것을했다 :

예측 변수의 데이터 프레임 만들기

dummy_df <- data.frame(predictor1, predictor2)

"cor"함수를 사용하여 예측 변수 간의 Pearson 상관 관계를 계산하십시오.

correl_dummy_df <- round(cor(dummy_df, use = "pair"), 2) 

"correl_dummy_df"가 0.80보다 큰 경우, predictor1과 predictor2가 너무 상관성이 있고 내 모델에 포함되지 않았다고 결정했습니다.

약간의 독서를 할 때, 다중 공선 성을 확인하는 더 객관적인 방법이 나타날 것입니다.

누구든지 이것에 대한 조언이 있습니까?

"VIF (Variance Inflation Factor)"는 하나의 유효한 방법으로 보입니다.

VIF는 AED 패키지 (비 크랜)의 "corvif"기능을 사용하여 계산할 수 있습니다. 패키지는 http://www.highstat.com/book2.htm 에서 찾을 수 있습니다 . 패키지는 다음 책을 지원합니다.

Zuur, AF, Ieno, EN, Walker, N., Saveliev, AA & Smith, GM 2009. R, 1 판의 생태학에서 혼합 효과 모델 및 확장. 스프링거, 뉴욕.

일반적으로 VIF가 5보다 크면 예측 변수간에 다중 공선 성이 높다는 것입니다.

VIF를 사용하는 것이 단순한 Pearson 상관 관계보다 강력합니까?

최신 정보

흥미로운 블로그를 찾았습니다.

http://hlplab.wordpress.com/2011/02/24/diagnosing-collinearity-in-lme4/

블로거는 lme4 패키지에서 모델의 VIF를 계산하는 유용한 코드를 제공합니다.

코드를 테스트했으며 훌륭하게 작동합니다. 이후 분석에서 다중 공선 성이 내 모델의 문제가 아님을 발견했습니다 (모든 VIF 값 <3). 이전에 일부 예측 변수 사이에서 높은 Pearson 상관 관계를 찾았다는 점을 감안할 때 이것은 흥미로 웠습니다.


6
(1) AED패키지 가 중단되었습니다 . 대신에, 단지 source("http://www.highstat.com/Book2/HighstatLibV6.R")에 대한 corvif기능. (2) 실제 답변을 제공하기를 희망하지만 (a) VIF는 다중 공선 성 을 고려 한다고 생각 합니다 (예 : 세 쌍의 예측 변수가있을 수 있지만 쌍 쌍 상관 관계가 강한 것은 아니지만 A와 B의 선형 조합은 C와 밀접한 상관 관계가 있습니다) ) 및 (b) 공선 용어를 삭제하는 지혜에 대해 강력하게 유보했다. Graham Ecology 2003, doi : 10.1890 / 02-3114 참조
Ben Bolker

고마워 벤. 귀하의 제안을 포함하도록 위의 게시물을 업데이트했습니다.
mjburns 2012 년

@BenBolker, 공선 용어를 떨어 뜨리는 것에 반대하는 이유를 아주 간략하게 설명 할 수 있습니까? 나는 참고 문헌에 감사하지만 Cliff Notes 버전을 좋아할 수도 있습니다. 감사!
Bajcz

Ben의 응답에서 수정. URL은http://highstat.com/Books/BGS/GAMM/RCodeP2/HighstatLibV6.R
Manoj Kumar

답변:


10

VIF 계산을 위해 usdm도 패키지로 사용할 수 있습니다 ( "usdm"을 설치해야 함)

library(usdm)
df = # Data Frame
vif(df)

VIF> 4.0이면 일반적으로 다중 공선 성이 모든 예측 변수를 모델에 맞추기 전에 제거합니다.


당신이 필터 변수에 thresold 사용할 수있는 비트 부록은 위의 모든 쇼의 상관 관계를 제외 좋아 .4등을 vifcor(vardata,th=0.4). 마찬가지로 vifstep(vardata,th=10)10보다 큰 것을 모두 버릴 수 있습니다 .
SIslam

HLM에서 작동하지 않음
Mox

7

이 질문이 도움이되었지만 의견을 추가 할 수 없기 때문에 업데이트-

Zuur 의 코드 . (2009)는 또한 보충 자료를 통해 생태학 및 진화론 (Methods in Ecology and Evolution) 저널에 그 이후의 (매우 유용한) 간행물을 통해 이용할 수있다 .

일반적인 통계적 문제를 피하기위한 데이터 탐색 프로토콜 인 이 백서 에서는 VIF 임계 값을 정당화하는 데 유용한 조언과 필요한 참조 자료를 제공합니다 (3 개의 임계 값 권장). 논문은 여기에 있습니다 : http://onlinelibrary.wiley.com/doi/10.1111/j.2041-210X.2009.00001.x/full . R 코드는 보충 자료 탭 (.zip 다운로드)에 있습니다.

빠른 지침 : VIF (분산 인플레이션 계수)를 추출하려면 HighStatLib.r 코드를 실행하고 함수를 사용하십시오 corvif. 이 함수에는 예측 변수가있는 데이터 프레임이 필요합니다 (예를 들어, df = data.frame(Dataset[,2:4])데이터가 예측 변수가 2-4 열인 데이터 세트에 저장된 경우) .


1

아마도 qr()기능이 작동 할 것입니다. 경우 X데이터 프레임 또는 매트릭스, 당신은 사용할 수 있습니다 qr(X)$pivot. 예를 들어, qr(X)$pivot= c(1, 2, 4, 5, 7, 8, 3, 6)열 3과 6은 다중 공선 변수입니다.


1

준설 함수 (MuMIn 패키지)를 실행할 때 예측 변수 간의 다중 공선 성을 평가하려면 "extra"인수로 다음 max.r 함수를 포함하십시오.

max.r <- function(x){
  corm <- cov2cor(vcov(x))
  corm <- as.matrix(corm)
  if (length(corm)==1){
    corm <- 0
    max(abs(corm))
  } else if (length(corm)==4){
  cormf <- corm[2:nrow(corm),2:ncol(corm)]
  cormf <- 0
  max(abs(cormf))
  } else {
    cormf <- corm[2:nrow(corm),2:ncol(corm)]
    diag(cormf) <- 0
    max(abs(cormf))
  }
}

그런 다음 예측 변수 수를 지정하고 max.r 함수를 포함하여 준설선을 실행하십시오.

options(na.action = na.fail)
Allmodels <- dredge(Fullmodel, rank = "AIC", m.lim=c(0, 3), extra= max.r) 
Allmodels[Allmodels$max.r<=0.6, ] ##Subset models with max.r <=0.6 (not collinear)
NCM <- get.models(Allmodels, subset = max.r<=0.6) ##Retrieve models with max.r <=0.6 (not collinear)
model.sel(NCM) ##Final model selection table

이것은 lme4 모델에서 작동합니다. nlme 모델은 https://github.com/rojaff/dredge_mc를 참조하십시오.


1

VIF (분산 인플레이션 계수)는 다음과 같이 간단히 측정 할 수 있습니다.

 library(car)
 vif(yourmodel) #this should work for lme4:lmer mixed models.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.