Bagaimana cara menguji dan menghindari multikolinearitas dalam model linier campuran?

25

Saat ini saya menjalankan beberapa model linear efek campuran.

Saya menggunakan paket "lme4" di R.

Model saya mengambil bentuk:

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

Sebelum menjalankan model saya, saya memeriksa kemungkinan multikolinieritas antara prediktor.

Saya melakukan ini dengan:

Buat kerangka data prediksi

dummy_df <- data.frame(predictor1, predictor2)

Gunakan fungsi "cor" untuk menghitung korelasi Pearson antara prediktor.

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

Jika "korelasi_dummy_df" lebih besar dari 0,80, maka saya memutuskan bahwa prediktor1 dan prediktor2 terlalu berkorelasi tinggi dan tidak dimasukkan dalam model saya.

Dalam melakukan beberapa bacaan, akan muncul cara yang lebih objektif untuk memeriksa multikolinieritas.

Adakah yang punya saran tentang ini?

"Variance Inflation Factor (VIF)" tampaknya seperti satu metode yang valid.

VIF dapat dihitung menggunakan fungsi "corvif" dalam paket AED (non-cran). Paket ini dapat ditemukan di http://www.highstat.com/book2.htm . Paket mendukung buku berikut:

Zuur, AF, Ieno, EN, Walker, N., Saveliev, AA & Smith, GM 2009. Model efek campuran dan ekstensi dalam ekologi dengan R, edisi pertama. Springer, New York.

Sepertinya aturan umum adalah bahwa jika VIF> 5, maka multikolinieritas tinggi antara prediktor.

Apakah menggunakan VIF lebih kuat daripada korelasi Pearson sederhana?

Memperbarui

Saya menemukan blog yang menarik di:

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

Blogger menyediakan beberapa kode yang berguna untuk menghitung VIF untuk model dari paket lme4.

Saya telah menguji kodenya dan hasilnya bagus. Dalam analisis saya selanjutnya, saya telah menemukan bahwa multikolinieritas bukan masalah bagi model saya (semua nilai VIF <3). Ini menarik, mengingat bahwa saya sebelumnya telah menemukan korelasi Pearson yang tinggi antara beberapa prediktor.

mjburns
sumber
6
(1) AEDPaket telah dihentikan ; sebagai gantinya, hanya source("http://www.highstat.com/Book2/HighstatLibV6.R")untuk corviffungsi. (2) Harapan untuk memberikan jawaban yang nyata, tetapi (a) Saya percaya VIF memperhitungkan multikolinieritas (misalnya Anda mungkin memiliki tiga prediktor, tidak ada yang memiliki korelasi berpasangan yang kuat, tetapi kombinasi linear A dan B berkorelasi kuat dengan C ) dan (b) Saya memiliki keraguan kuat tentang kebijaksanaan menjatuhkan istilah-istilah collinear; lihat Graham Ecology 2003, doi: 10.1890 / 02-3114
Ben Bolker
Ben terima kasih. Saya telah memperbarui posting saya di atas untuk memasukkan saran Anda.
mjburns
@ BenBolker, dapatkah Anda menjelaskan secara singkat mengapa Anda menentang menjatuhkan istilah collinear? Saya menghargai referensi tetapi mungkin juga menyukai versi Cliff Notes. Terima kasih!
Bajcz
koreksi dalam tanggapan Ben .. URL-nyahttp://highstat.com/Books/BGS/GAMM/RCodeP2/HighstatLibV6.R
Manoj Kumar

Jawaban:

10

Untuk perhitungan VIF, usdm juga bisa berupa paket (saya harus menginstal "usdm")

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

Jika VIF> 4.0 maka saya biasanya menganggap multikolinieritas menghapus semua Variabel Prediktor sebelum memasangnya ke dalam model saya

Sohsum
sumber
Sedikit tambahan Anda dapat menggunakan penjualan untuk menyaring variabel seperti mengecualikan semua yang menunjukkan korelasi di atas .4sebagai vifcor(vardata,th=0.4). Demikian juga, Anda dapat menggunakan vifstep(vardata,th=10)untuk membuang semuanya yang lebih besar dari 10.
SIslam
Tidak bekerja untuk HLM
Mox
7

Pembaruan, karena saya menemukan pertanyaan ini bermanfaat tetapi tidak dapat menambahkan komentar -

Kode dari Zuur et al. (2009) juga tersedia melalui bahan pelengkap untuk publikasi mereka selanjutnya (dan sangat berguna) dalam jurnal Methods in Ecology and Evolution .

Makalah - Protokol untuk eksplorasi data untuk menghindari masalah statistik umum - memberikan saran yang bermanfaat dan referensi yang sangat dibutuhkan untuk membenarkan ambang VIF (mereka merekomendasikan ambang 3). Makalahnya ada di sini: http://onlinelibrary.wiley.com/doi/10.1111/j.2041-210X.2009.00001.x/full dan kode R ada di tab bahan pelengkap (unduhan .zip).

Panduan cepat : untuk mengekstrak varians inflation factor (VIF), jalankan kode HighStatLib.r mereka dan gunakan fungsinya corvif. Fungsi ini membutuhkan bingkai data hanya dengan prediktor (jadi, misalnya, df = data.frame(Dataset[,2:4])jika data Anda disimpan di Dataset dengan prediktor di kolom 2 hingga 4.

litik
sumber
1

Mungkin qr()fungsi akan bekerja. Jika Xframe atau matriks data Anda, Anda dapat menggunakan qr(X)$pivot. Misalnya,, qr(X)$pivot= c(1, 2, 4, 5, 7, 8, 3, 6)maka kolom 3 dan 6 adalah variabel multikolinier.

JunhuiLi
sumber
1

Untuk menilai multikolinieritas antara prediktor ketika menjalankan fungsi kapal keruk (paket MuMIn), sertakan fungsi maks.r berikut sebagai argumen "ekstra":

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

kemudian jalankan keruk yang menentukan jumlah variabel prediktor dan termasuk fungsi 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

Ini berfungsi untuk model lme4. Untuk model nlme, lihat: https://github.com/rojaff/dredge_mc

r.jaffe
sumber
1

VIF (variance inflation factor) dapat diukur hanya dengan:

 library(car)
 vif(yourmodel) #this should work for lme4:lmer mixed models.
Hassan.JFRY
sumber