2010-06-15 14 views
59

मुझे उम्मीद है कि यह "पूछने और उत्तर" प्रश्न नहीं होगा ... यहां जाता है: (बहु) कॉललाइनरिटी भविष्यवाणियों के बीच अत्यधिक उच्च सहसंबंधों को संदर्भित करती है प्रतिगमन मॉडल। उन्हें ठीक करने के लिए ... ठीक है, कभी-कभी आपको कॉललाइनरिटी को "ठीक" करने की आवश्यकता नहीं होती है, क्योंकि यह खुद को रिग्रेशन मॉडल को प्रभावित नहीं करती है, बल्कि व्यक्तिगत भविष्यवाणियों के प्रभाव की व्याख्या करती है।एक रिग्रेशन मॉडल में स्क्रीनिंग (बहु) कॉललाइनरिटी

एक तरह से समरैखिकता को पहचानना एक आश्रित चर के रूप में प्रत्येक भविष्यवक्ता डाल करने के लिए है, और अन्य भविष्यवक्ताओं स्वतंत्र चर के रूप में, आर निर्धारित करते हैं, और अगर यह .9 (या .95) की तुलना में बड़ा है, हम भविष्यवक्ता अनावश्यक विचार कर सकते हैं । यह एक "विधि" है ... अन्य दृष्टिकोणों के बारे में क्या? उनमें से कुछ समय लेने वाले हैं, जैसे मॉडल से भविष्यवाणियों को छोड़कर और बी-गुणांक परिवर्तनों को देखने के लिए - वे ध्यान से अलग होना चाहिए।

बेशक, हमें हमेशा विश्लेषण के विशिष्ट संदर्भ/लक्ष्य को ध्यान में रखना चाहिए ... कभी-कभी, केवल एक शोध को दोहराना है, लेकिन अभी, मुझे अनावश्यक भविष्यवाणियों को स्क्रीनिंग के विभिन्न तरीकों में रुचि है (बहु) कॉललाइनरिटी एक रिग्रेशन मॉडल में होती है।

+5

मुझे बहुत प्रसन्नता है कि किसी ने इसे "प्रोग्रामी" के रूप में चिह्नित नहीं किया है और कई लोगों ने इसे वोट दिया है। यह एक बहुत अच्छा सवाल है कि हम में से कई जो "डेटा के साथ कार्यक्रम" के साथ संघर्ष करते हैं। –

+0

महान प्रश्न, और अद्भुत जवाब। एक बहुत ही पुरस्कृत पढ़ा - धन्यवाद। –

+0

क्रेडिट मेरे दोस्त के पास जाना चाहिए ... उसने मुझे कॉललाइनरिटी के बारे में पूछा, और एसओ पर विषयों को खोजने के बाद, मुझे पता चला कि इसके बारे में कोई सवाल नहीं है ... जो काफी अजीब था, क्योंकि कॉललाइनरिटी समस्या सांख्यिकीय में गूढ़ है विश्लेषण। इन महान उत्तरों के लिए धन्यवाद! – aL3xa

उत्तर

38

kappa() फ़ंक्शन सहायता कर सकता है। यहाँ एक नकली उदाहरण है:

> set.seed(42) 
> x1 <- rnorm(100) 
> x2 <- rnorm(100) 
> x3 <- x1 + 2*x2 + rnorm(100)*0.0001 # so x3 approx a linear comb. of x1+x2 
> mm12 <- model.matrix(~ x1 + x2)  # normal model, two indep. regressors 
> mm123 <- model.matrix(~ x1 + x2 + x3) # bad model with near collinearity 
> kappa(mm12)       # a 'low' kappa is good 
[1] 1.166029 
> kappa(mm123)       # a 'high' kappa indicates trouble 
[1] 121530.7 

और हम तीसरे regressor अधिक से अधिक समरेख बनाकर आगे जाना:

> x4 <- x1 + 2*x2 + rnorm(100)*0.000001 # even more collinear 
> mm124 <- model.matrix(~ x1 + x2 + x4) 
> kappa(mm124) 
[1] 13955982 
> x5 <- x1 + 2*x2      # now x5 is linear comb of x1,x2 
> mm125 <- model.matrix(~ x1 + x2 + x5) 
> kappa(mm125) 
[1] 1.067568e+16 
> 

यह अनुमानों पर विचार किया, जानकारी के लिए help(kappa) देखते हैं।

+0

शानदार ... इस के लिए धन्यवाद! – aL3xa

8

इस पुस्तक में धारा 9.4 भी देखें: Practical Regression and Anova using R [Faraway 2002]

Collinearity कई मायनों में पता लगाया जा सकता:

  1. भविष्यवक्ताओं के सहसंबंध मैट्रिक्स बड़े जोड़ो में collinearities का पता चलता है की परीक्षा।

  2. अन्य सभी भविष्यवाणियों पर x_i का एक रिग्रेशन आर^2_i देता है। सभी भविष्यवाणियों के लिए दोहराना। आर^2_i एक के करीब एक समस्या इंगित करता है - अपमानजनक रैखिक संयोजन पाया जा सकता है।

  3. t(X) %*% X के eigenvalues ​​की जांच करें, जहां X मॉडल मैट्रिक्स को इंगित करता है; छोटे eigenvalues ​​एक समस्या इंगित करता है। 2-मानक स्थिति संख्या को मैट्रिक्स ($ \ kappa = \ sqrt {\ lambda_1/\ lambda_p} $ $ के सबसे छोटे गैर-शून्य एकवचन मूल्य के अनुपात के रूप में दिखाया जा सकता है; ?kappa देखें); \kappa >= 30 बड़ा माना जाता है।

+1

[लिंक-केवल उत्तर SO पर बहिष्कृत किए गए हैं] (http://meta.stackexchange.com/questions/8231/are-answers-that-just-contain-links- कहीं और-really-good-answers) –

33

बस क्या एक प्रकार की कटार स्थिति संख्या विधि के बारे में कहा में जोड़ने के लिए, अंगूठे का एक नियम है कि CN > 30 indicate severe collinearity के मूल्यों है।अन्य तरीकों के अलावा हालत नंबर से, शामिल हैं:

1) सहप्रसरण मैट्रिक्स जो 1 से 0 (बिल्कुल सही Collinearity) पर्वतमाला के निर्धारक (कोई collinearity)

# using Dirk's example 
> det(cov(mm12[,-1])) 
[1] 0.8856818 
> det(cov(mm123[,-1])) 
[1] 8.916092e-09 

2) इस तथ्य का उपयोग करना कि एक विकर्ण मैट्रिक्स के निर्धारक eigenvalues ​​का उत्पाद है => एक या अधिक छोटे eigenvalues ​​की उपस्थिति समरैखिकता

> eigen(cov(mm12[,-1]))$values 
[1] 1.0876357 0.8143184 

> eigen(cov(mm123[,-1]))$values 
[1] 5.388022e+00 9.862794e-01 1.677819e-09 

3) विचरण मुद्रास्फीति की दर फैक्टर (VIF) का मान इंगित करता है। भविष्यवाणियों के लिए वीआईएफ मैं 1/(1-आर_आई^2) है, जहां आर_आई^2 शेष भविष्यवाणियों के खिलाफ पूर्वानुमानकर्ता के एक रिग्रेशन से आर^2 है। Collinearity मौजूद है जब कम से कम एक स्वतंत्र चर के लिए वीआईएफ बड़ा है। अंगूठे का नियम: VIF > 10 is of concern। आर में कार्यान्वयन के लिए here देखें। मैं यह भी टिप्पणी करना चाहूंगा कि कॉललाइनरिटी को निर्धारित करने के लिए आर^2 का उपयोग स्कैटरप्लॉट की दृश्य परीक्षा के साथ हाथ में जाना चाहिए क्योंकि एक बाहरी बाहरीता "कारण" हो सकती है जहां यह अस्तित्व में नहीं है, या कॉललाइनरिटी जहां यह मौजूद है छुपा सकता है ।

+1

धन्यवाद Γιώργος, इस के लिए +2! बहुत बढ़िया जवाब! – aL3xa

+1

कॉन्वर्सिस मैट्रिक्स का निर्धारक 1 पर कैप्चर क्यों किया जाएगा ?? – kevinykuo

17

आप वीटो रिक्की के संदर्भ कार्ड पसंद कर सकते हैं "प्रतिगमन विश्लेषण के लिए अनुसंधान कार्य" http://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf

यह संक्षेप नैदानिक ​​कार्यों सहित आर में कई उपयोगी प्रतिगमन संबंधित कार्यों सूचीबद्ध करता है। विशेष रूप से, यह vif फ़ंक्शन को car पैकेज से सूचीबद्ध करता है जो बहुविकल्पीयता का आकलन कर सकता है। http://en.wikipedia.org/wiki/Variance_inflation_factor

बहुविकल्पीयता का विचार प्रायः चरम महत्व का आकलन करने के मुद्दों के साथ हाथ में जाता है। यदि यह आपके लिए लागू होता है, तो शायद relaimpo पैकेज देखें: http://prof.beuth-hochschule.de/groemping/relaimpo/

+1

तकनीकी रूप से, और अंकगणितीय रूप से, वीआईएफ = 1 (1 - आर^2), जहां आर^2 उदाहरण के लिए संदर्भित करता है मैंने अपने प्रश्न में कहा था। मैं वीआईएफ का उल्लेख करना भूल गया, इसलिए इस पर मदद करने के लिए धन्यवाद! 'relaimpo' एक महान खोज है! – aL3xa

7

चूंकि अब तक वीआईएफ का कोई उल्लेख नहीं है, इसलिए मैं अपना जवाब जोड़ूंगा। भिन्नता मुद्रास्फीति फैक्टर> 10 आमतौर पर predictor चर के बीच गंभीर अनावश्यकता इंगित करता है। वीआईएफ कारक को इंगित करता है कि एक चर के सह-कुशलता का भिन्नता बढ़ेगा यदि यह अन्य चर के साथ अत्यधिक सहसंबंधित नहीं था।

vif() पैकेज cars में उपलब्ध है और कक्षा (एलएम) की एक वस्तु पर लागू है। यह x1, x2 का vif देता है। । । ऑब्जेक्ट में xn lm()। Vif> 10 के साथ चर को बाहर करना या vif> 10 के साथ चर के रूप में परिवर्तनों को प्रस्तुत करना एक अच्छा विचार है।

+1

असल में, यह कई अन्य उत्तरों में उल्लिखित है ... –

+0

बकवास अभी ध्यान दिया। । खुशी है कि मैं इसके लिए मतदान नहीं किया था! – vagabond

संबंधित मुद्दे