Karma doğrusal modelde çoklu bağlantı doğrusallığı nasıl test edilir ve önlenir?


25

Şu anda bazı karışık efektli doğrusal modeller kullanıyorum.

R içinde "lme4" paketini kullanıyorum.

Modellerim şu formu alıyor:

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

Modellerimi çalıştırmadan önce, öngörücüler arasında olası çoklu bağlantı olup olmadığını kontrol ettim.

Bunu ben yaptım:

Tahmin edicilerin bir veri çerçevesi oluşturun

dummy_df <- data.frame(predictor1, predictor2)

Prediktörler arasındaki Pearson korelasyonunu hesaplamak için "cor" fonksiyonunu kullanın.

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

"Correl_dummy_df" 0,80'den büyükse, yordayıcı1 ve yordayıcı2'nin çok yüksek korelasyonlu olduğuna ve modellerime dahil edilmediğine karar verdim.

Bazı okumalar yaparken, çoklu doğrusallığı kontrol etmenin daha nesnel yolları görünecektir.

Bunun hakkında bir tavsiyesi olan var mı?

"Varyans Enflasyon Faktörü (VIF)" geçerli bir yöntem gibi gözüküyor.

VIF, AED paketindeki (vinçsiz) "corvif" işlevi kullanılarak hesaplanabilir. Paket http://www.highstat.com/book2.htm adresinde bulunabilir . Paket aşağıdaki kitabı desteklemektedir:

Zuur, AF, İeno, EN, Walker, N., Saveliev, AA ve Smith, GM 2009. R, ekolojide karışık etki modelleri ve uzantıları, 1. baskı. Springer, New York.

Genel bir kural gibi gözüküyorsa, VIF> 5 ise, yordayıcılar arasında çoklu doğrusallık yüksek olur.

VIF kullanmak basit Pearson korelasyonundan daha mı sağlam?

Güncelleştirme

Şurada ilginç bir blog buldum:

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

Blogcu, lme4 paketindeki modeller için VIF değerini hesaplamak için bazı yararlı kodlar sağlar.

Kodu test ettim ve harika çalışıyor. Daha sonraki analizlerimde, çoklu bağlantı bağlantısının modellerim için bir sorun olmadığını tespit ettim (tüm VIF değerleri <3). Bazı tahminciler arasında daha önce yüksek Pearson korelasyonu bulduğum göz önüne alındığında bu ilginçti.


6
(1) AEDPaketin üretimine son verildi ; bunun yerine, sadece source("http://www.highstat.com/Book2/HighstatLibV6.R")için corvifişlevi. (2) Gerçek bir cevap vermeyi ümit ediyorum, ancak (a) VIF'in çoklu bağlayıcılığı dikkate aldığına inanıyorum (örneğin, hiçbiri güçlü ikili bağıntılara sahip olmayan üç öngörücünüz olabilir, ancak A ve B'nin doğrusal kombinasyonu C ile güçlü bir şekilde ilişkilendirilir. ) ve (b) collinear koşullarını bırakma bilgisine dair güçlü çekincelerim var; bkz. Graham Ecology 2003, doi: 10.1890 / 02-3114
Ben Bolker

Sağol Ben. Önerilerinizi eklemek için yukarıdaki yayınımı güncelledim.
Ocak'ta mjburns

@BenBolker, neden genel terimlerden vazgeçtiğinize karşı çok kısaca detaylandırabilir misiniz? Referansı takdir ediyorum ama aynı zamanda bir Cliff Notes sürümü gibi olabilir. Teşekkürler!
Bajcz

Ben'in cevabında düzeltme .. URLhttp://highstat.com/Books/BGS/GAMM/RCodeP2/HighstatLibV6.R
Manoj Kumar

Yanıtlar:


10

VIF hesaplama için usdm de paket olabilir ("usdm" kurmam gerekiyor)

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

Eğer VIF> 4.0 ise, çoklu-doğrusallığın, varsayımsal değişkenleri modelime yerleştirmeden önce kaldırdığını varsayarım.


Eğer filtre değişkenlere thresold kullanabilirsiniz Biraz zeyilname yukarıda tüm bu gösteri korelasyon dışlamak gibi .4olarak vifcor(vardata,th=0.4). Aynı şekilde vifstep(vardata,th=10)10'dan büyük olanları da silmek için kullanabilirsiniz
SIslam

HLM için çalışmıyor
Mox,

7

Bir güncelleme, bu soruyu yararlı bulduğumdan ancak yorum ekleyemiyorum -

Zuur ve diğ. (2009) ek materyaller vasıtasıyla Ekoloji ve Evrim Yöntemleri dergisinde yayımlanan (ve çok faydalı) bir yayına da hazırdır .

Bildiri - ortak istatistiksel sorunlardan kaçınmak için veri araştırması için bir protokol - VIF eşiklerini haklı çıkarmak için yararlı tavsiyeler ve çok gerekli referanslar sağlar (3 eşiğini tavsiye ederler). Makale burada: http://onlinelibrary.wiley.com/doi/10.1111/j.2041-210X.2009.00001.x/full ve R kodu ek malzemeler sekmesindedir (.zip indir).

Hızlı bir kılavuz : Varyans enflasyon faktörlerini (VIF) çıkarmak için HighStatLib.r kodunu çalıştırın ve işlevi kullanın corvif. Bu işlev, sadece öngörücüler içeren bir veri çerçevesi gerektirir (örneğin, df = data.frame(Dataset[,2:4])verileriniz veri kümesinde yordayıcılar ile 2 ila 4 arasındaki sütunlarda saklanıyorsa) .


1

Belki qr()fonksiyon çalışacaktır. Eğer Xveri çerçevesi veya matristir, kullanabilirsiniz qr(X)$pivot. Örneğin, qr(X)$pivot= c(1, 2, 4, 5, 7, 8, 3, 6)sütun 3 ve 6, çok hücreli değişkendir.


1

Tarama işlevini (MuMIn paketi) çalıştırırken yordayıcılar arasındaki çoklu bağlantı ilişkisini değerlendirmek için, "max" argümanı olarak aşağıdaki max.r işlevini ekleyin:

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))
  }
}

Daha sonra, yordayıcı değişkenlerinin sayısını belirterek ve max.r işlevini içeren tarama işlemini çalıştırın:

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

Bu lme4 modelleri için çalışıyor. Nlme modelleri için bakınız: https://github.com/rojaff/dredge_mc


1

VIF (varyans enflasyon faktörü) basitçe şu şekilde ölçülebilir:

 library(car)
 vif(yourmodel) #this should work for lme4:lmer mixed models.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.