आर में डेटा के लिए बहुपद मॉडल फिटिंग


83

मैंने इस प्रश्न के उत्तर पढ़े हैं और वे काफी मददगार हैं, लेकिन मुझे विशेष रूप से आर में मदद की ज़रूरत है।

मेरे पास R में एक उदाहरण डेटा सेट है:

x <- c(32,64,96,118,126,144,152.5,158)  
y <- c(99.5,104.8,108.5,100,86,64,35.3,15)

मुझे लगता है कि इसलिए इन आंकड़ों के एक मॉडल फिट करने के लिए चाहते हैं y = f(x)। मैं चाहता हूं कि यह एक 3 जी बहुपद मॉडल हो।

आर में मैं कैसे कर सकता हूं?

इसके अतिरिक्त, क्या R मुझे सर्वश्रेष्ठ फिटिंग मॉडल खोजने में मदद कर सकता है?

जवाबों:


98

X (x ^ 3) में तीसरा क्रम बहुपद प्राप्त करने के लिए, आप कर सकते हैं

lm(y ~ x + I(x^2) + I(x^3))

या

lm(y ~ poly(x, 3, raw=TRUE))

आप एक 10 वें क्रम के बहुपद को फिट कर सकते हैं और एक निकट-पूर्ण फिट प्राप्त कर सकते हैं, लेकिन क्या आपको चाहिए?

संपादित करें: पाली (x, 3) शायद एक बेहतर विकल्प है (नीचे @hadley देखें)।


6
"आप चाहिए" पूछने में हाजिर है। नमूना डेटा में केवल 8 अंक हैं। स्वतंत्रता की डिग्री यहाँ बहुत कम हैं। वास्तविक जीवन डेटा में और भी बहुत कुछ हो सकता है।
JD लॉन्ग

1
आपके उत्तर के लिए धन्यवाद। सबसे अच्छा फिटिंग मॉडल खोजने के लिए आर के बारे में क्या? क्या इसके लिए कोई कार्य हैं?
मेहपर सी। पलुवज़लर

5
यह "सर्वश्रेष्ठ मॉडल" की आपकी परिभाषा पर निर्भर करता है। वह मॉडल जो आपको सबसे बड़ा R ^ 2 देता है (जो कि 10 वां क्रम बहुपद है) जरूरी "सर्वश्रेष्ठ" मॉडल नहीं है। आपके मॉडल की शर्तों को यथोचित रूप से चुना जाना चाहिए। आप बहुत सारे मापदंडों के साथ एक पूर्ण-परिपूर्ण फिट हो सकते हैं लेकिन मॉडल में कोई पूर्वानुमानित शक्ति नहीं होगी और अंकों के माध्यम से सबसे अच्छी फिट रेखा खींचने के अलावा किसी भी चीज़ के लिए बेकार हो जाएगा।
ग्रेग

10
क्यों इस्तेमाल कर रहे हो raw = T? असंबद्ध चर का उपयोग करना बेहतर है।
हैडली

2
मैंने इसे उसी तरह से परिणाम प्राप्त करने के लिए किया था lm(y ~ x + I(x^2) + I(x^3))। शायद इष्टतम नहीं, बस एक ही छोर पर दो साधन देना।
ग्रेग

45

कौन सा मॉडल "सर्वश्रेष्ठ फिटिंग मॉडल" है, इस पर निर्भर करता है कि आप "सर्वश्रेष्ठ" से क्या मतलब है। R के पास मदद करने के लिए उपकरण हैं, लेकिन आपको उनके बीच चयन करने के लिए "सर्वश्रेष्ठ" की परिभाषा प्रदान करने की आवश्यकता है। निम्नलिखित उदाहरण डेटा और कोड पर विचार करें:

x <- 1:10
y <- x + c(-0.5,0.5)

plot(x,y, xlim=c(0,11), ylim=c(-1,12))

fit1 <- lm( y~offset(x) -1 )
fit2 <- lm( y~x )
fit3 <- lm( y~poly(x,3) )
fit4 <- lm( y~poly(x,9) )
library(splines)
fit5 <- lm( y~ns(x, 3) )
fit6 <- lm( y~ns(x, 9) )

fit7 <- lm( y ~ x + cos(x*pi) )

xx <- seq(0,11, length.out=250)
lines(xx, predict(fit1, data.frame(x=xx)), col='blue')
lines(xx, predict(fit2, data.frame(x=xx)), col='green')
lines(xx, predict(fit3, data.frame(x=xx)), col='red')
lines(xx, predict(fit4, data.frame(x=xx)), col='purple')
lines(xx, predict(fit5, data.frame(x=xx)), col='orange')
lines(xx, predict(fit6, data.frame(x=xx)), col='grey')
lines(xx, predict(fit7, data.frame(x=xx)), col='black')

उन मॉडलों में से कौन सा सबसे अच्छा है? उनमें से किसी के लिए भी तर्क दिए जा सकते हैं (लेकिन मैं एक के लिए प्रक्षेप के लिए बैंगनी एक का उपयोग नहीं करना चाहता)।


15

प्रश्न के बारे में 'आर मुझे सबसे अच्छा फिटिंग मॉडल खोजने में मदद कर सकता है', ऐसा करने के लिए संभवतः एक फ़ंक्शन है, यह मानते हुए कि आप मॉडल के सेट को परीक्षण करने के लिए कह सकते हैं, लेकिन यह n-1 के सेट के लिए एक अच्छा पहला दृष्टिकोण होगा। डिग्री बहुपद:

polyfit <- function(i) x <- AIC(lm(y~poly(x,i)))
as.integer(optimize(polyfit,interval = c(1,length(x)-1))$minimum)

टिप्पणियाँ

  • इस दृष्टिकोण की वैधता अपने उद्देश्यों पर निर्भर करेगा, की मान्यताओं optimize()और AIC()और अगर AIC कसौटी यह है कि आप उपयोग करना चाहते है,

  • polyfit()एक भी न्यूनतम नहीं हो सकता है। कुछ इस तरह की जाँच करें:

    for (i in 2:length(x)-1) print(polyfit(i))
    
  • मैंने as.integer()फ़ंक्शन का उपयोग किया क्योंकि यह मेरे लिए स्पष्ट नहीं है कि मैं एक गैर-पूर्णांक बहुपद की व्याख्या कैसे करूंगा।

  • गणितीय समीकरणों के एक मनमाने सेट का परीक्षण करने के लिए, एंड्रयू जेलमैन द्वारा यहां 'यूरेका' कार्यक्रम की समीक्षा करें

अपडेट करें

stepAICमॉडल चयन को स्वचालित करने के लिए फ़ंक्शन (एमएएस पैकेज में) भी देखें ।


मैं यूरेका को आर के साथ कैसे इंटरफेस कर सकता हूं?
adam.888

@ adam.888 महान प्रश्न - मुझे उत्तर नहीं पता है लेकिन आप इसे अलग से पोस्ट कर सकते हैं। वह आखिरी बिंदु थोड़ा विषयांतर था।
डेविड लेबॉयर

नोट: AIC Akaike Information Criterion है , जो एक नजदीकी फिट को पुरस्कृत करता है और एक मॉडल के बड़ी संख्या में मापदंडों को दंडित करता है, एक तरह से जिसे विभिन्न इंद्रियों में इष्टतम दिखाया गया है। en.wikipedia.org/wiki/Akaike_information_criterion
इवगेनी सर्गेव

5

R को सबसे अच्छे तरीके से खोजने का सबसे आसान तरीका मॉडल को कोड करना है:

lm.1 <- lm(y ~ x + I(x^2) + I(x^3) + I(x^4) + ...)

एआईसी रिग्रेशन नीचे कदम का उपयोग करने के बाद

lm.s <- step(lm.1)

5
उपयोग करना I(x^2), आदि उचित रूप से फिटिंग के लिए रूढ़िवादी बहुपद नहीं देता है।
ब्रायन डिग्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.