Làm thế nào để kiểm tra và tránh đa cộng tuyến trong mô hình tuyến tính hỗn hợp?


25

Tôi hiện đang chạy một số mô hình tuyến tính hiệu ứng hỗn hợp.

Tôi đang sử dụng gói "lme4" trong R.

Mô hình của tôi có dạng:

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

Trước khi chạy các mô hình của mình, tôi đã kiểm tra tính đa hình có thể có giữa các yếu tố dự đoán.

Tôi đã làm điều này bằng cách:

Tạo một khung dữ liệu của các yếu tố dự đoán

dummy_df <- data.frame(predictor1, predictor2)

Sử dụng hàm "cor" để tính toán tương quan Pearson giữa các yếu tố dự đoán.

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

Nếu "tương ứng_dummy_df" lớn hơn 0,80, thì tôi đã quyết định rằng dự đoán1 và dự đoán2 có mối tương quan quá cao và chúng không được đưa vào các mô hình của tôi.

Khi thực hiện một số bài đọc, sẽ xuất hiện nhiều cách khách quan hơn để kiểm tra tính đa hình.

Có ai có lời khuyên nào về điều này?

"Yếu tố lạm phát phương sai (VIF)" có vẻ như là một phương pháp hợp lệ.

VIF có thể được tính bằng cách sử dụng chức năng "corvif" trong gói AED (không phải cran). Gói này có thể được tìm thấy tại http://www.highstat.com/book2.htm . Gói hỗ trợ cuốn sách sau:

Zuur, AF, Ieno, EN, Walker, N., Saveliev, AA & Smith, GM 2009. Các mô hình hiệu ứng hỗn hợp và các phần mở rộng trong hệ sinh thái với R, phiên bản 1. Springer, New York.

Có vẻ như một quy tắc chung là nếu VIF> 5, thì tính đa hình cao giữa các yếu tố dự đoán.

Là sử dụng VIF mạnh hơn tương quan Pearson đơn giản?

Cập nhật

Tôi tìm thấy một blog thú vị tại:

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

Blogger cung cấp một số mã hữu ích để tính toán VIF cho các mô hình từ gói lme4.

Tôi đã kiểm tra mã và nó hoạt động rất tốt. Trong phân tích tiếp theo của tôi, tôi đã thấy rằng tính đa hình không phải là vấn đề đối với các mô hình của tôi (tất cả các giá trị VIF <3). Điều này thật thú vị, trước đây tôi đã tìm thấy mối tương quan Pearson cao giữa một số dự đoán.


6
(1) AEDGói đã bị ngưng ; thay vào đó, chỉ source("http://www.highstat.com/Book2/HighstatLibV6.R")cho corvifchức năng. (2) Hy vọng sẽ cung cấp một câu trả lời thực sự, nhưng (a) Tôi tin rằng VIF tính đến tính đa hình (ví dụ: bạn có thể có ba yếu tố dự đoán, không có yếu tố nào có mối tương quan cặp đôi mạnh mẽ, nhưng sự kết hợp tuyến tính của A và B có tương quan mạnh với C ) và (b) Tôi có sự bảo lưu mạnh mẽ về sự khôn ngoan của việc bỏ các điều khoản cộng tuyến; xem Graham Ecology 2003, doi: 10.1890 / 02-3114
Ben Bolker

Cảm ơn Ben. Tôi đã cập nhật bài viết trên của tôi để bao gồm các đề xuất của bạn.
mjburns

@BenBolker, bạn có thể giải thích rất ngắn gọn lý do tại sao bạn chống lại các điều khoản cộng tác không? Tôi đánh giá cao tài liệu tham khảo nhưng cũng có thể thích phiên bản Cliff Notes. Cảm ơn!
Bajcz

sửa lỗi trong phản hồi của Ben .. URL làhttp://highstat.com/Books/BGS/GAMM/RCodeP2/HighstatLibV6.R
Manoj Kumar

Câu trả lời:


10

Đối với tính toán VIF, usdm cũng có thể là gói (tôi cần cài đặt "usdm")

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

Nếu VIF> 4.0 thì tôi thường giả định tính đa hướng loại bỏ tất cả các Biến dự đoán đó trước khi đưa chúng vào mô hình của tôi


Một phụ lục bit bạn có thể sử dụng thresold để lọc các biến như loại trừ tất cả những gì thể hiện mối tương quan ở trên .4như vifcor(vardata,th=0.4). Tương tự như vậy, bạn có thể sử dụng vifstep(vardata,th=10)để loại bỏ tất cả lớn hơn 10.
SIslam

Không hoạt động cho HLM
Mox

7

Một bản cập nhật, vì tôi thấy câu hỏi này hữu ích nhưng không thể thêm nhận xét -

Mã từ Zuur et al. (2009) cũng có sẵn thông qua các tài liệu bổ sung cho một ấn phẩm tiếp theo (và rất hữu ích) của chúng trên tạp chí Phương pháp trong Sinh thái học và Tiến hóa .

Bài viết - Một giao thức để khám phá dữ liệu để tránh các vấn đề thống kê phổ biến - cung cấp lời khuyên hữu ích và tài liệu tham khảo rất cần thiết để chứng minh các ngưỡng VIF (họ khuyến nghị ngưỡng 3). Bài viết ở đây: http : // onlinel Library.wiley.com/doi/10.1111/j.2041-210X.2009.00001.x/full và mã R nằm trong tab tài liệu bổ sung (tải xuống .zip).

Hướng dẫn nhanh : để trích xuất các yếu tố lạm phát phương sai (VIF) chạy mã HighStatLib.r của họ và sử dụng hàm corvif. Hàm yêu cầu khung dữ liệu chỉ có các yếu tố dự đoán (ví dụ: df = data.frame(Dataset[,2:4])nếu dữ liệu của bạn được lưu trữ trong Bộ dữ liệu với các yếu tố dự đoán trong các cột từ 2 đến 4.


1

Có lẽ qr()chức năng sẽ hoạt động. Nếu Xlà khung dữ liệu hoặc ma trận của bạn, bạn có thể sử dụng qr(X)$pivot. Ví dụ, qr(X)$pivot= c(1, 2, 4, 5, 7, 8, 3, 6)sau đó cột 3 và 6 là biến đa hướng.


1

Để đánh giá tính đa hình giữa các yếu tố dự đoán khi chạy chức năng nạo vét (gói MuMIn), hãy bao gồm hàm max.r sau đây làm đối số "phụ":

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

sau đó chỉ cần chạy nạo vét chỉ định số lượng biến dự đoán và bao gồm hàm 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

Điều này làm việc cho các mô hình lme4. Đối với các mô hình nlme xem: https://github.com/rojaff/dredge_mc


1

VIF (hệ số lạm phát phương sai) có thể được đo lường đơn giản bằng cách:

 library(car)
 vif(yourmodel) #this should work for lme4:lmer mixed models.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.