जब आरएम का अनुमानित मूल्य में कोई भिन्नता नहीं है, तो आर ^ 2 मान (और इसे क्या निर्धारित कर रहा है) क्यों है?


10

निम्नलिखित आर कोड पर विचार करें:

example <- function(n) {
    X <- 1:n
    Y <- rep(1,n)
    return(lm(Y~X))
}
#(2.13.0, i386-pc-mingw32)
summary(example(7))    #R^2 = .1963
summary(example(62))   #R^2 = .4529
summary(example(4540)) #R^2 = .7832
summary(example(104))) #R^2 = 0
#I did a search for n 6:10000, the result for R^2 is NaN for
#n = 2, 4, 16, 64, 256, 1024, 2085 (not a typo), 4096, 6175 (not a typo), and 8340 (not a typo)

Http://svn.r-project.org/R/trunk/src/appl/dqrls.f ) को देखकर मुझे यह समझने में मदद नहीं मिली कि क्या चल रहा है, क्योंकि मैं फोरट्रान को नहीं जानता। एक अन्य प्रश्न में यह उत्तर दिया गया था कि फ्लोटिंग पॉइंट मशीन टॉलरेंस त्रुटियां एक्स के लिए गुणांक के लिए दोषी हैं जो कि करीब हैं, लेकिन काफी 0 नहीं हैं।

अधिक है जब मान0 के करीब होता है लेकिन ...R2coef(example(n))["X"]

  1. मान क्यों है ? R2
  2. क्या (विशेष रूप से) यह निर्धारित कर रहा है?
  3. NaNपरिणामों की क्रमबद्ध प्रगति क्यों प्रतीत होती है ?
  4. उस प्रगति के उल्लंघन क्यों?
  5. यह 'अपेक्षित' व्यवहार क्या है?

नोट: 7 का R ^ 2 कुछ और रचनात्मक देखने के लिए 0.4542 होना चाहिए, मेरा उत्तर देखें। :-)

1
ठीक है, निष्पक्ष होने के लिए, उपयोगकर्ता को वास्तव में टूल का उपयोग करने से पहले सांख्यिकीय तरीकों के बारे में कुछ पता होना चाहिए (इसके विपरीत, एक्सेल उपयोगकर्ता (ठीक है, सस्ते शॉट के बारे में क्षमा करें))। चूंकि यह स्पष्ट है कि R ^ 2 दृष्टिकोण 1 के रूप में त्रुटि शून्य के करीब है, हम एक फ़ंक्शन की सीमा के साथ NaN मान को भ्रमित करने से बेहतर जानते हैं। अब, यदि R ^ 2 के साथ कोई समस्या थी तो ynoise -> 0 (कहते हैं, Y स्टेटमेंट को ऊपर से बदलें Y <- rep(1,n)+runif(n)*ynoise), यह दिलचस्प होगा :-)
कार्ल विट्ठॉफ्ट

@eznme: मुझे लगता है कि परिणाम मशीन विशिष्ट हैं, या कम से कम 32 या 64 बिट विशिष्ट हैं; मेरे पास 32-बिट मशीन है जो 7 के लिए 0.1963 देती है, लेकिन मेरी 64-बिट मशीन NaN देती है। दिलचस्प है, 64-बिट मशीन पर, आर ^ 2s जो कि NaN नहीं हैं, सभी 0.5 के बहुत करीब हैं। जब मैं इसके बारे में सोचता हूं तो यह समझ में आता है, लेकिन इसने मुझे सबसे पहले हैरान कर दिया।
हारून ने

1
आप दोहरी परिशुद्धता राउंडिंग त्रुटि का अध्ययन कर रहे हैं। गुणांक पर एक नज़र रखना; जैसे, apply(as.matrix(2:17), 1, function(n){example(n)$coefficients[-1]})। (मेरे परिणाम, एक जीत 7 x64 Xeon पर, -8e-17 से + 3e-16 तक, लगभग आधा सच शून्य हैं।) BTW, फोरट्रान स्रोत से कोई मदद नहीं मिलती है: यह सिर्फ drrdc के लिए एक आवरण है; वह कोड जिसे आप देखना चाहते हैं।
व्हीबर

1
R2

जवाबों:


6

जैसा कि बेन बोल्कर कहते हैं, इस प्रश्न का उत्तर कोड के लिए मिल सकता है summary.lm()

यहाँ हैडर है:

function (object, correlation = FALSE, symbolic.cor = FALSE, 
    ...) 
{

तो, चलो x <- 1:1000; y <- rep(1,1000); z <- lm(y ~ x)और फिर इस थोड़ा संशोधित निकालने पर एक नज़र डालें:

    p <- z$rank
    rdf <- z$df.residual
    Qr <- stats:::qr.lm(z)
    n <- NROW(Qr$qr)
    r <- z$residuals
    f <- z$fitted.values
    w <- z$weights
    if (is.null(w)) {
        mss <- sum((f - mean(f))^2)
        rss <- sum(r^2)
    }
    ans <- z[c("call", "terms")]
    if (p != attr(z$terms, "intercept")) {
        df.int <- 1L
        ans$r.squared <- mss/(mss + rss)
        ans$adj.r.squared <- 1 - (1 - ans$r.squared) * ((n - 
            df.int)/rdf)
    }

0.4998923

एक प्रश्न के साथ एक प्रश्न का उत्तर देने के लिए: हम इससे क्या आकर्षित करते हैं? :)

mssrssR2mssrss0/0NaN2^(1:k)


अद्यतन 1: यहाँ R- मदद से एक अच्छा सूत्र है जो कुछ कारणों को संबोधित करता है जो आर में बहने वाली चेतावनी को संबोधित नहीं करते हैं।

इसके अलावा, इस एसओ प्रश्नोत्तर में कई दिलचस्प पोस्ट और अंडरफ़्लो, उच्च परिशुद्धता अंकगणित, आदि के बारे में उपयोगी लिंक हैं।


8

मैं सवाल पूछने के लिए आपकी प्रेरणा के बारे में उत्सुक हूं। मैं एक व्यावहारिक कारण के बारे में नहीं सोच सकता हूं यह व्यवहार मायने रखता है; बौद्धिक जिज्ञासा एक वैकल्पिक (और IMO अधिक समझदार) कारण है। मुझे लगता है कि इस सवाल का जवाब देने के लिए आपको फोरट्रान को समझने की आवश्यकता नहीं है, लेकिन मुझे लगता है कि आपको क्यूआर अपघटन और रैखिक प्रतिगमन में इसके उपयोग के बारे में जानने की आवश्यकता है। यदि आप dqrlsएक ब्लैक बॉक्स के रूप में व्यवहार करते हैं जो एक क्यूआर अपघटन की गणना करता है और इसके बारे में विभिन्न जानकारी देता है, तो आप चरणों का पता लगाने में सक्षम हो सकते हैं ... या सीधे जाकर summary.lmपता लगा सकते हैं कि आर ^ 2 की गणना कैसे की जाती है। विशेष रूप से:

mss <- if (attr(z$terms, "intercept")) 
          sum((f - mean(f))^2)
       else sum(f^2)
rss <- sum(r^2)
## ... stuff ...
ans$r.squared <- mss/(mss + rss)

फिर आपको वापस जाना होगा lm.fitऔर देखना होगा कि फिट किए गए मानों की गणना की जाती है r1 <- y - z$residuals(यानी प्रतिक्रिया शून्य से अवशिष्ट के रूप में)। अब आप यह पता लगा सकते हैं कि अवशिष्टों का मूल्य क्या निर्धारित करता है और क्या इसका मूल्य शून्य से बिल्कुल शून्य है या नहीं, और वहां से कम्प्यूटेशनल परिणामों का पता चलता है ...


बौद्धिक जिज्ञासा मेरे प्रश्न का सबसे बड़ा कारण है। एक सहकर्मी ने व्यवहार की सूचना दी और मैं इधर-उधर झांकना चाहता था कि क्या मैं इसका पता लगा सकता हूँ। अपने कौशल से परे मुद्दे का पता लगाने के बाद, मैंने सवाल पूछने का फैसला किया। व्यावहारिक मुद्दे के रूप में, कभी-कभी विश्लेषण बैच द्वारा किया जाता है, या अन्य त्रुटियां होती हैं, और यह व्यवहार मुझे निश्चित रूप से 'विषम' के रूप में प्रभावित करता है।
रुसलपिएरेस

1
mms और rss दोनों z के परिणाम हैं, जो समरी के अंदर lm ऑब्जेक्ट का नाम है। तो, एक उत्तर को संभवतः क्यूआर अपघटन की व्याख्या की आवश्यकता होती है, रैखिक प्रतिगमन में इसका उपयोग, और विशेष रूप से क्यूआर अपघटन के रूप में कुछ विवरण क्यूआर कोड में तत्काल के रूप में अंतर्निहित है, यह समझाने के लिए कि क्यूआर अपघटन 0 से अधिक के अनुमानों के साथ समाप्त होता है क्यों 0 से ही ।
russellpierce

mssrssR2R2

R2

0

R2R2=1SSerrSStot


1
क्या आप एक व्यावहारिक स्थिति दे सकते हैं जहां यह व्यवहार मायने रखता है?
बेन बॉकर

3
@ ब्रेंडन - Iterator ने स्माइली को वहां डाल दिया और आप अभी भी जोश में आ गए!
कार्ल विटथॉफ्ट

2
@eznme जबकि एक त्रुटि अच्छी है, सभी प्रकार के स्थानों को पकड़ना काफी मुश्किल है जहां फ्लोटिंग पॉइंट इश्यू उत्पन्न होते हैं, विशेष रूप से IEEE-754 अंकगणित की दुनिया में। यहां सबक यह है कि आर के साथ रोटी और मक्खन की गणना भी नाजुक ढंग से की जानी चाहिए।
इटरेटर

2
ये विचार विशेष रूप से महत्वपूर्ण हैं क्योंकि उनके लेखन में, जॉन चैम्बर्स (एस के मूल में से एक और इसलिए आर के एक "दादा") विश्वसनीय कंप्यूटिंग के लिए आर के उपयोग पर जोर देते हैं उदाहरण के लिए, चैंबर्स, डेटा एनालिसिस के लिए सॉफ्टवेयर देखें : आर (स्प्रिंगर वर्लग 2008) के साथ प्रोग्रामिंग : "डेटा विश्लेषण के लिए गणना और सॉफ़्टवेयर विश्वसनीय होना चाहिए: उन्हें वही करना चाहिए जो वे दावा करते हैं, और ऐसा करने के लिए देखा जाना चाहिए।" [पी पर। 3.]
whuber

2
समस्या यह है कि बेहतर या बदतर के लिए, आर-कोर प्रतिरोधी है (जैसा कि वे इसे देखते हैं) कई के साथ कोड को उत्सर्जित करते हैं, कई चेक जो सभी कोने के मामलों और संभावित अजीब उपयोगकर्ता त्रुटियों को रोकते हैं - वे डरते हैं (मुझे लगता है) कि यह विल (ए) अपने समय की बड़ी मात्रा में लेते हैं, (बी) कोड आधार को पढ़ने के लिए बहुत बड़ा और कठिन बनाते हैं (क्योंकि इन विशेष मामलों के हजारों हैं), और (ग) हर समय इस तरह की जांचों को मजबूर करके निष्पादन को धीमा कर देते हैं। यहां तक ​​कि उन स्थितियों में जहां गणना कई बार दोहराई जा रही है।
बेन बोल्कर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.