2016-05-07 5 views
12

मैं एक मिश्रित प्रभाव मॉडल है कि भविष्यफल बताने वाले कॉलम के बाकी के साथ F2_difference भविष्यवाणी को चलाने के लिए कोशिश कर रहा हूँ, लेकिन मुझे लगता है कि कहते हैंlme4 :: lmer रिपोर्ट "निश्चित-प्रभाव मॉडल मैट्रिक्स रैंक की कमी है", क्या मुझे एक फिक्स की आवश्यकता है और कैसे करें?

निश्चित प्रभाव मॉडल मैट्रिक्स रैंक की कमी है एक त्रुटि संदेश इसलिए 7 कॉलम छोड़ने मिल/गुणांक।

इस लिंक, Fixed-effects model is rank deficient से, मुझे लगता है कि मैं आर पैकेज caret में findLinearCombos उपयोग करना चाहिए। हालांकि, जब मैं findLinearCombos(data.df) कोशिश, यह मेरे त्रुटि संदेश देता है qr.default (वस्तु) में

त्रुटि: NA/NaN/Inf विदेशी समारोह कॉल में (आर्ग 1) इसके अलावा: चेतावनी संदेश: में qr.default (ऑब्जेक्ट): एनएआर द्वारा दबाव

मेरे डेटा में कोई एनएएस नहीं है - इसका कारण क्या हो सकता है? (क्षमा करें अगर उत्तर विभिन्न स्पष्ट है - मैं आर के लिए नया हूँ)।

मेरे सभी डेटा संख्यात्मक मान को छोड़कर कारक हैं जिन्हें मैं भविष्यवाणी करने की कोशिश कर रहा हूं। यहां मेरे डेटा का एक छोटा सा नमूना है।

sex <- c("f", "m", "f", "m") 
nasal <- c("TRUE", "TRUE", "FALSE", "FALSE") 
vowelLabel <- c("a", "e", "i", "o") 
speaker <- c("Jim", "John", "Ben", "Sally") 
word_1 <- c("going", "back", "bag", "back") 
type <- c("coronal", "coronal", "labial", "velar") 
F2_difference <- c(345.6, -765.8, 800, 900.5) 
data.df <- data.frame(sex, nasal, vowelLabel, speaker, 
         word_1, type, F2_difference 
         stringsAsFactors = TRUE) 

संपादित करें: यहां कुछ और कोड हैं, यदि यह मदद करता है।

formula <- F2_difference ~ sex + nasal + type + vowelLabel + 
      type * vowelLabel + nasal * type + 
      (1|speaker) + (1|word_1) 

lmer(formula, REML = FALSE, data = data.df) 

संपादक संपादित करें:

ओपी एक वास्तविक पाठक के लिए lmer में मॉडल के रन अनुमति देने के लिए परीक्षण डाटा की पर्याप्त संख्या नहीं प्रदान की थी। लेकिन यह एक मुद्दा बहुत बड़ा नहीं है। यह अभी भी एक बहुत अच्छी पोस्ट है!

+1

यह है कह रहे हैं कि या तो शून्य से विभाजन या नकारात्मक संख्या का लॉग लेना या कुछ अन्य गणितीय रोगजनक स्थिति हो रही है। कोड और डेटा के बिना यह असंभव है कि कोई भी सार्थक टिप्पणियां कर सकता है। –

+0

मुझे खेद है, लेकिन मुझे नहीं पता कि मैं आपके लिए अपना डेटा कैसे प्रदान कर सकता हूं क्योंकि यह कई टेक्स्ट फ़ाइलों से आता है जो आर में निर्भर हैं। निर्भर चर, 'F2_difference' नकारात्मक हो सकता है। क्या यह समस्या है? यदि हां, तो क्या मैं सभी चरों में कुछ संख्या जोड़ सकता हूं ताकि कुछ भी नकारात्मक न हो? – Lisa

+0

ऐसा नहीं है। मॉडल मैट्रिक्स की रैंक कमी मॉडल के आरएचएस ("स्वतंत्र चर") में कठिनाई का संकेत है। –

उत्तर

13

मैं कहूँगा कि आप थोड़ा अधिक-चिंतित चेतावनी संदेश के साथ कर रहे हैं:

निश्चित प्रभाव मॉडल मैट्रिक्स इतना गिर 7 कॉलम/गुणांक रैंक कमी है।

यह केवल एक चेतावनी नहीं है एक त्रुटि है। मॉडल फार्मूला के न तो 'लमर और न ही गैर-विनिर्देशन का दुरुपयोग है, इस प्रकार आप अनुमानित मॉडल प्राप्त करेंगे। लेकिन जब से आपने पूछा, मैं इसके पीछे की कहानी को समझाने के लिए अपनी पूरी कोशिश करूंगा। और यादृच्छिक प्रभाव सूत्रनिश्चित प्रभाव सूत्र:


lmer के निष्पादन के दौरान, अपने मूल मॉडल सूत्र भागों में बांट दिया गया है। प्रत्येक भाग के लिए, मॉडल मैट्रिक्स का निर्माण किया गया है। निश्चित भाग के लिए निर्माण मानक मॉडल मैट्रिक्स कन्स्ट्रक्टर model.matrix पर पास किया गया है, जबकि यादृच्छिक भाग का निर्माण थोड़ा अधिक जटिल है लेकिन आपके प्रश्न से संबंधित नहीं है, इसलिए मैं इसे छोड़ देता हूं।

अपने मॉडल के लिए, आप जाँच कर सकते हैं निश्चित प्रभाव मॉडल मैट्रिक्स द्वारा कैसा दिखता है:

fix.formula <- F2_difference ~ sex + nasal + type + vowelLabel + 
       type * vowelLabel + nasal * type 
X <- model.matrix (fix.formula, data.df) 

सभी अपने चर कारक हैं तो X द्विआधारी हो जाएगा। हालांकि model.matrix प्रत्येक कारक और उनकी बातचीत के लिए contrasts लागू होता है, फिर भी यह संभावना है कि X पूर्ण कॉलम रैंक के साथ समाप्त नहीं होता है, क्योंकि कुछ कॉलम रैखिक रूप से सहसंबंधित हो सकते हैं। आपके मामले में, एक कारक के कुछ स्तर किसी अन्य कारक के कुछ स्तरों में घोंसला लगाया जा सकता है। यद्यपि एक अच्छा मॉडेलर मॉडल को फ़िट करने से पहले इस तरह के मुद्दे से बचने के लिए अपना सर्वश्रेष्ठ प्रयास करना चाहिए, लेकिन इस पर पूर्ण नियंत्रण रखना हमेशा संभव नहीं है, क्योंकि चर के बीच सहसंबंध वास्तविक दुनिया सांख्यिकीय मॉडलिंग में अक्सर होता है।

इस प्रकार, किसी अच्छी तरह से लिखा मॉडल फिटिंग दिनचर्या, lm, glm, mgcv::gam की तरह, QR अपघटन X के लिए केवल मॉडल फिटिंग के लिए अपनी पूरी रैंक उपस्पेस उपयोग करते हैं, 0 या NA करने के लिए अन्य गुणांक सिकुड़ पर लागू होंगे। आपको प्राप्त चेतावनी संदेश इसका संकेत है। मूल रूप से ncol(X) गुणांक अनुमान लगाने के लिए हैं, लेकिन रैंक-कमी के कारण, केवल ncol(X) - 7 अनुमानित होंगे, शेष 0 या NA होंगे। इस तरह का संकोचन अच्छा संकेत है क्योंकि यह समीकरण समीकरणों को हल करने में संख्यात्मक स्थिरता सुनिश्चित करता है। तो आपको इसके साथ परेशान नहीं होना चाहिए। ,

fix.fit <- lm (fix.formula, data.df, method = "qr", singular.ok = TRUE) 

method = "qr" और singular.ok = TRUE डिफ़ॉल्ट हैं तो वास्तव में हम डॉन ':


आप बेहतर देखने में मदद करने के लिए, के अगर हम fix.formula साथ एक रेखीय मॉडल फिट क्या होगा की जाँच करने के lm समारोह का उपयोग करते हैं इसे स्थापित करने की जरूरत नहीं है। दूसरी ओर, यदि सेट singular.ok = FALSE:

oo <- lm (fix.formula, data.df, method = "qr", singular.ok = FALSE) 

lm बंद करो और रैंक की कमी के बारे में शिकायत करेंगे।

अब fix.fit में लौटाए गए मानों की जांच करें।

coef <- fix.fit$coef 
p <- length(coef) 

यह गारंटी है कि p = ncol(X)। हालांकि, अगर आप से

no.NA <- sum(is.na(coef)) 

coef जाँच अगर आप 7 NA देखना चाहिए। चौंका देने वाला? अब चलिए रैंक

rank <- fix.fit$rank 

यह X के लिए संख्यात्मक रैंक है। आपको rank + no.NA = p सत्यापित करना चाहिए।

बिल्कुल वही बात lmer के अंदर होती है। lm रैंक-कमी की रिपोर्ट नहीं करेगा जबकि lmer करता है। यह वास्तव में जानकारीपूर्ण है। अक्सर, मैं लोगों को यह पूछता हूं कि क्यों lm कुछ गुणांक के लिए NA लौट रहा है।


अद्यतन 1 (2016/05/07):

anova या BIC के उपयोग के बारे में चिंता मत करो, पैकेज ठीक तरह से कार्य उनकी देखभाल करेगा।

मैं अपने मूल पोस्ट संपादित, टैग [lme4], [रैखिक प्रतिगमन], [प्रतिगमन] जोड़कर, और शीर्षक का नाम बदलकर अधिक जानकारीपूर्ण किया जाना है। उम्मीद है कि, एक ही संदेह वाले लोग आसानी से आपकी पोस्ट ढूंढ सकते हैं।

अद्यतन 2 (2016/11/06):

चलो भी सुना है क्या lme4 के पैकेज लेखक कहेंगे: rank deficiency warning mixed model lmer। बेन बोल्कर ने का भी उल्लेख किया है, खासकर क्योंकि ओपी वहां कमी की समस्या को हल करना चाहते हैं।

आज इस मुद्दे पर एक और सवाल है: rank defficient model reports an error when doing post hoc analysis। और मेरी टिप्पणी वहाँ पर:

देखो, जब से तुम दोनों POS और DISTANCE कारक मजबूर है, वहाँ उच्च संभावना है कि POS के कुछ स्तर DISTANCE के कुछ स्तर में नेस्ट किया जाता है। यदि आप निश्चित प्रभाव भाग fit <- lm(total ~ DISTANCE + POS, data = dat) पर एक रैखिक मॉडल पर विचार करते हैं (मैंने आपके डेटा के लिए वैरिएबल डेटा का उपयोग किया है), तो आप 2 NA गुणांक देखेंगे!

+0

आपके बहुत अच्छी तरह से समझाए गए उत्तर के लिए बहुत बहुत धन्यवाद! हालांकि, मुझे स्वीकार करना है कि अभी भी मेरे सिर पर है।मुझे देखने दो कि मेरे पास यह अधिकार है: लघु संस्करण यह है कि मेरे भविष्यवाणियों में से एक चर के साथ सहसंबंधित है, लेकिन मुझे इसके बारे में चिंता नहीं करनी चाहिए। कारकों का उपयोग करना उचित है, सही? और मैं अभी भी 'anova() 'या बीआईसी को देखकर मॉडल की तुलना कर सकता हूं? – Lisa

2

यह response रैंक की कमी की व्याख्या करने का एक उत्कृष्ट काम करता है, और संभावित कारण क्या हो सकते हैं।

अर्थात:

  1. बहुत कम डेटा: आप विशिष्ट n डेटा बिंदुओं से कम के साथ n मानकों अनुमान नहीं कर सकते
  2. बहुत अधिक पॉइंट प्रतिकृति है।
  3. गलत जगहों पर जानकारी।
  4. जटिल मॉडल (बहुत चर)
  5. इकाइयों और स्केलिंग संख्या में
  6. रूपांतर: 12.001 बनाम 12.005 & 44,566 बनाम 44555
  7. डाटा परिशुद्धता: यहां तक ​​कि डबल परिशुद्धता चर सीमा
संबंधित मुद्दे