วิธีการทดสอบและหลีกเลี่ยงความหลากสีในโมเดลเชิงเส้นผสม?


25

ฉันกำลังใช้โมเดลเชิงเส้นเชิงเส้นผสม

ฉันใช้แพ็คเกจ "lme4" ใน R

แบบจำลองของฉันอยู่ในรูปแบบ:

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 แล้วฉันตัดสินใจว่าตัวทำนาย 1 และทำนาย 2 มีความสัมพันธ์สูงเกินไปและไม่รวมอยู่ในแบบจำลองของฉัน

ในการอ่านหนังสือบางส่วนจะมีวิธีที่เป็นไปได้มากกว่าในการตรวจสอบความหลากหลายของสี

ใครมีคำแนะนำเกี่ยวกับเรื่องนี้หรือไม่?

"Variance Inflation Factor (VIF)" ดูเหมือนเป็นวิธีการที่ถูกต้องวิธีหนึ่ง

สามารถคำนวณ VIF ได้โดยใช้ฟังก์ชั่น "corvif" ในแพ็คเกจ AED (ไม่ใช่ cran) แพคเกจที่สามารถพบได้ที่http://www.highstat.com/book2.htm แพคเกจรองรับหนังสือดังต่อไปนี้:

Zuur, AF, Ieno, EN, Walker, N. , Saveliev, AA & Smith, GM 2009 โมเดลผสมเอฟเฟกต์และส่วนขยายในระบบนิเวศน์พร้อม R, รุ่นที่ 1 สปริงเกอร์นิวยอร์ก

ดูเหมือนว่ากฎทั่วไปของหัวแม่มือคือถ้า VIF เป็น> 5 แล้วความสัมพันธ์ระหว่างกันหลายค่าสูงระหว่างตัวทำนาย

การใช้ VIF นั้นแข็งแกร่งกว่าความสัมพันธ์แบบเพียร์สันอย่างง่าย ๆ หรือไม่?

ปรับปรุง

ฉันพบบล็อกที่น่าสนใจที่:

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

Blogger มีรหัสที่เป็นประโยชน์ในการคำนวณ VIF สำหรับรุ่นจากแพ็คเกจ lme4

ฉันทดสอบโค้ดแล้วและใช้งานได้ดี ในการวิเคราะห์ที่ตามมาของฉันฉันพบว่า multicollinearity ไม่ใช่ปัญหาสำหรับโมเดลของฉัน (ค่า VIF ทั้งหมด <3) สิ่งนี้น่าสนใจเนื่องจากก่อนหน้านี้ฉันพบความสัมพันธ์เพียร์สันสูงระหว่างผู้ทำนายบางคน


6
(1) AEDแพคเกจได้ถูกยกเลิก ; แทนเพียง source("http://www.highstat.com/Book2/HighstatLibV6.R")สำหรับcorvifฟังก์ชั่น (2) หวังว่าจะให้คำตอบที่แท้จริง แต่ (a) ฉันเชื่อว่า VIF คำนึงถึงความหลากหลายทางชีวภาพ (เช่นคุณอาจมีตัวทำนายสามตัวซึ่งไม่มีความสัมพันธ์แบบคู่ที่แข็งแกร่ง แต่การรวมเชิงเส้นของ A และ B นั้นสัมพันธ์กับ C มาก ) และ (b) ฉันมีการจองที่ดีเกี่ยวกับภูมิปัญญาของการวางเงื่อนไข collinear; ดู Graham Ecology 2003, ดอย: 10.1890 / 02-3114
Ben Bolker

ขอบคุณเบ็น ฉันได้อัปเดตโพสต์ด้านบนเพื่อรวมข้อเสนอแนะของคุณ
mjburns

@BenBolker คุณสามารถอธิบายรายละเอียดสั้น ๆ ว่าทำไมคุณถึงต่อต้านการตกลงข้อกำหนด collinear? ฉันชื่นชมการอ้างอิง แต่อาจชอบรุ่น 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 ฉันมักจะคิดว่า multicollinearity จะลบตัวแปร Predictor ทั้งหมดก่อนที่จะนำไปใช้กับโมเดล


บิตภาคผนวกคุณสามารถใช้ thresold ตัวแปรกรองชอบยกเว้นทั้งหมดที่แสดงความสัมพันธ์ดังกล่าวข้างต้นเป็น.4 vifcor(vardata,th=0.4)ในทำนองเดียวกันคุณสามารถใช้vifstep(vardata,th=10)เพื่อละทิ้งทั้งหมดที่มากกว่า 10
SIslam

ใช้งานไม่ได้กับ HLM
Mox

7

อัปเดตเนื่องจากฉันพบว่าคำถามนี้มีประโยชน์ แต่ไม่สามารถเพิ่มความคิดเห็น -

รหัสจาก Zuur et al (2009) นอกจากนี้ยังสามารถใช้ได้ผ่านทางวัสดุเสริมที่จะตามมา (และมีประโยชน์มาก) สิ่งพิมพ์ของพวกเขาในวารสารวิธีในนิเวศวิทยาและวิวัฒนาการ

กระดาษ - โปรโตคอลสำหรับการสำรวจข้อมูลเพื่อหลีกเลี่ยงปัญหาทางสถิติที่พบบ่อย - ให้คำแนะนำที่เป็นประโยชน์และการอ้างอิงที่จำเป็นมากสำหรับการปรับค่า VIF ให้เหมาะสม บทความอยู่ที่นี่: http://onlinelibrary.wiley.com/doi/10.1111/j.2041-210X.2009.00001.x/fullและรหัส R อยู่ในแท็บวัสดุเสริม (ดาวน์โหลด. zip)

คู่มือฉบับย่อ : ปัจจัยเงินเฟ้อสารสกัดจากความแปรปรวน (VIF) ทำงานของพวกเขาHighStatLib.rcorvifรหัสและใช้ฟังก์ชั่น ฟังก์ชันต้องการกรอบข้อมูลที่มีเพียงตัวทำนาย (ตัวอย่างเช่น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) ให้รวมฟังก์ชัน 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.