मिश्रित रैखिक मॉडल में मल्टीकोलिनरिटी का परीक्षण और परीक्षण कैसे करें?


25

मैं वर्तमान में कुछ मिश्रित प्रभाव रैखिक मॉडल चला रहा हूं।

मैं आर में पैकेज "lme4" का उपयोग कर रहा हूं।

मेरे मॉडल फॉर्म लेते हैं:

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

अपने मॉडल को चलाने से पहले, मैंने भविष्यवाणियों के बीच संभावित बहुरूपता की जाँच की।

मैंने यह किया है:

भविष्यवक्ताओं का डेटाफ़्रेम बनाएं

dummy_df <- data.frame(predictor1, predictor2)

भविष्यवक्ताओं के बीच पियर्सन सहसंबंध की गणना करने के लिए "कोर" फ़ंक्शन का उपयोग करें।

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

यदि "correl_dummy_df" 0.80 से अधिक था, तो मैंने फैसला किया कि predictor1 और predictor2 बहुत अधिक सहसंबद्ध थे और वे मेरे मॉडल में शामिल नहीं थे।

कुछ पढ़ने में, बहुउद्देशीयता की जांच करने के लिए अधिक उद्देश्यपूर्ण तरीके दिखाई देंगे।

किसी को भी इस पर कोई सलाह है?

"वैरियनस इन्फ्लेशन फैक्टर (VIF)" एक वैध विधि की तरह लगता है।

VIF की गणना AED पैकेज (गैर-क्रानिक) में "corvif" फ़ंक्शन का उपयोग करके की जा सकती है। पैकेज http://www.highstat.com/book2.htm पर पाया जा सकता है । पैकेज निम्नलिखित पुस्तक का समर्थन करता है:

ज़्यूर, एएफ, इनेनो, एन, वॉकर, एन।, सेलेव, एए एंड स्मिथ, जीएम 2009। मिश्रित प्रभाव मॉडल और आर के साथ पारिस्थितिकी में एक्सटेंशन, 1 संस्करण। स्प्रिंगर, न्यूयॉर्क।

ऐसा लगता है कि अंगूठे का एक सामान्य नियम यह है कि यदि VIF> 5 है, तो भविष्यवाणियों के बीच बहुसंख्यात्मकता अधिक है।

क्या सरल Pearson सहसंबंध की तुलना में VIF अधिक मजबूत है?

अद्यतन करें

मुझे एक दिलचस्प ब्लॉग मिला:

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

ब्लॉगर lme4 पैकेज से मॉडल के लिए VIF की गणना करने के लिए कुछ उपयोगी कोड प्रदान करता है।

मैंने कोड का परीक्षण किया है और यह बहुत अच्छा काम करता है। मेरे बाद के विश्लेषण में, मैंने पाया है कि मल्टीकोलिनरिटी मेरे मॉडल (सभी VIF मान <3) के लिए कोई समस्या नहीं थी। यह दिलचस्प था, यह देखते हुए कि मैंने पहले कुछ भविष्यवक्ताओं के बीच उच्च पियरसन सहसंबंध पाया था।


6
(1) AEDपैकेज बंद कर दिया गया है ; बजाय, बस source("http://www.highstat.com/Book2/HighstatLibV6.R")के लिए corvifकार्य करते हैं। (2) आशा कोई वास्तविक उत्तर देने के लिए है, लेकिन (क) मेरा मानना है कि वीआईएफ लेता multicollinearity खाते (जैसे में तीन भविष्यवक्ताओं, जिनमें से कोई भी मजबूत जोड़ो में सह-संबंध है हो सकता है, लेकिन एक के रैखिक संयोजन और बी दृढ़ता से सी के साथ जोड़ा जाता ) और (बी) मुझे कोलिन की शर्तों को छोड़ने के बारे में मजबूत आरक्षण है; ग्राहम इकोलॉजी २००३, डोई देखें: १०.१ham ९ ० / ०२-३१०४
बेन बोल्कर

धन्यवाद बेन। मैंने आपके सुझावों को शामिल करने के लिए अपने उपरोक्त पोस्ट को अपडेट किया है।
mjburns

@BenBolker, क्या आप बहुत संक्षेप में बता सकते हैं कि आप कोलियर की शर्तों को छोड़ने के खिलाफ क्यों हैं? मैं संदर्भ की सराहना करता हूं, लेकिन क्लिफ नोट्स संस्करण भी पसंद कर सकता हूं। धन्यवाद!
बजाज

बेन की प्रतिक्रिया में सुधार .. URL हैhttp://highstat.com/Books/BGS/GAMM/RCodeP2/HighstatLibV6.R
मनोज कुमार

जवाबों:


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) पूरक और बाद के (और बहुत उपयोगी) पूरक सामग्री के माध्यम से पत्रिका में उनके पारिस्थितिकी और विकास में तरीके से उपलब्ध है

कागज - आम सांख्यिकीय समस्याओं से बचने के लिए डेटा की खोज के लिए एक प्रोटोकॉल - 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

ड्रेजेग फ़ंक्शन (म्यूएमिन पैकेज) को चलाने के दौरान भविष्यवक्ताओं के बीच बहुस्तरीयता का आकलन करने के लिए, "max" तर्क के रूप में निम्नलिखित 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))
  }
}

इसके बाद केवल पूर्वसूचक चर की संख्या निर्दिष्ट करते हुए और अधिकतम फ़ंक्शन सहित ड्रेज चलाएं:

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.
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.