2012-02-11 15 views
6

निम्नलिखित आर कोड पर विचार करें (जो, मुझे लगता है, अंत में कुछ फोरट्रान कॉल):पूर्वानुमानित मूल्य में कोई अंतर नहीं होने पर एलएम मूल्यों को वापस क्यों करता है?

X <- 1:1000 
Y <- rep(1,1000) 
summary(lm(Y~X)) 

क्यों मान सारांश द्वारा वापस कर रहे हैं? क्या यह मॉडल फिट नहीं हो सकता है क्योंकि वाई में कोई अंतर नहीं है? सबसे महत्वपूर्ण बात यह है कि मॉडल आर^2 ~ = .5 क्यों है?

z <- .Fortran("dqrls", qr = x, n = n, p = p, y = y, ny = ny, 
    tol = as.double(tol), coefficients = mat.or.vec(p, ny), residuals = y, 
    effects = y, rank = integer(1L), pivot = 1L:p, qraux = double(p), 
    work = double(2 * p), PACKAGE = "base") 

है यही कारण है कि जहां वास्तविक फिट होने के लिए लगता है:

संपादित

मैं lm.fit करने के लिए और इस कॉल देख सकते हैं एल एम से कोड पर नज़र रखी। http://svn.r-project.org/R/trunk/src/appl/dqrls.f पर देखकर) मुझे यह समझने में मदद नहीं मिली कि क्या हो रहा है, क्योंकि मुझे फोर्टन नहीं पता है।

+1

आह, 0.5 का आर^2 काफी दिलचस्प सवाल है। – Iterator

+0

मुझे लगता है कि मैं इसे एक अलग प्रश्न के रूप में बंद कर दूंगा ... – russellpierce

उत्तर

5

सांख्यिकीय रूप से बोलते हुए, हमें क्या उम्मीद करनी चाहिए (मैं "उम्मीद" कहना चाहूंगा, लेकिन यह एक बहुत ही विशिष्ट शब्द है ;-))? गुणांक "फिट होने में विफल" के बजाय (0,1) होना चाहिए। (एक्स, वाई) का कॉन्वर्सिस एक्स के भिन्नता के समान आनुपातिक माना जाता है, न कि दूसरी तरफ। चूंकि एक्स में शून्य-शून्य भिन्नता है, इसलिए कोई समस्या नहीं है। चूंकि कॉन्वर्सिस 0 है, एक्स के लिए अनुमानित गुणांक 0 होना चाहिए। इसलिए, मशीन सहिष्णुता के भीतर, यह वह उत्तर है जिसे आप प्राप्त कर रहे हैं।

यहां कोई सांख्यिकीय विसंगति नहीं है। एक सांख्यिकीय गलतफहमी हो सकती है। मशीन सहिष्णुता का मुद्दा भी है, लेकिन भविष्यवाणी और प्रतिक्रिया मूल्यों के पैमाने को देखते हुए 1 ई -19 के आदेश पर एक गुणांक नगण्य है।

अद्यतन 1: सरल रैखिक प्रतिगमन की त्वरित समीक्षा this Wikipedia page पर मिल सकती है। ध्यान देने योग्य कुंजी यह है कि Var(x) संख्या में है, Cov(x,y) संख्या में। इस मामले में, संख्या 0 है, denominator गैर-शून्य है, इसलिए NaN या NA की अपेक्षा करने का कोई कारण नहीं है। हालांकि, कोई पूछ सकता है कि x0 के लिए परिणामी गुणांक क्यों नहीं है, और इसे क्यूआर अपघटन के संख्यात्मक परिशुद्धता मुद्दों के साथ करना है।

+0

मैं आपका पॉइंट देखता हूं। मशीन सहिष्णुता छोटी एन समस्याओं के लिए 1 ई -17 के करीब है, लेकिन अभी भी 'नगण्य' है। मुझे लगता है कि मुझे उम्मीद है कि फ़ंक्शन बस विफल हो जाएगा क्योंकि यह एन = 4 (लेकिन फिर से, (मेरे लिए) अजीब रूप से एन = 3 के लिए असफल नहीं होता है)। – russellpierce

2

मेरा मानना ​​है कि यह केवल इसलिए है क्योंकि क्यूआर अपघटन फ्लोटिंग पॉइंट अंकगणितीय के साथ लागू किया गया है।

singular.ok पैरामीटर वास्तव में डिज़ाइन मैट्रिक्स (यानी एक्स केवल) को संदर्भित करता है। प्रयास करें

lm.fit(cbind(X, X), Y) 

बनाम

lm.fit(cbind(X, X), Y, singular.ok=F) 
2

मैं मानता हूँ कि समस्या चल बिन्दु का हो सकता है। लेकिन मुझे नहीं लगता कि एकवचन है।

आप QR के बजाय solve(t(x1)%*%x1)%*%(t(x1)%*%Y) का उपयोग कर चेक करते हैं, (t(x1)%*%x1) क्योंकि lm(Y~X) अवरोधन शामिल नहीं विलक्षण

उपयोग x1 = cbind(rep(1,1000,X) है।