मुझे मैनुअल बहुपद विस्तार और R `पॉली 'फ़ंक्शन का उपयोग करने के लिए अलग-अलग भविष्यवाणियां क्यों मिल रही हैं?


10

मुझे मैनुअल बहुपद विस्तार और आर polyफ़ंक्शन का उपयोग करने के लिए अलग-अलग भविष्यवाणियां क्यों मिल रही हैं ?

set.seed(0)
x <- rnorm(10)
y <- runif(10)
plot(x,y,ylim=c(-0.5,1.5))
grid()

# xp is a grid variable for ploting
xp <- seq(-3,3,by=0.01)
x_exp <- data.frame(f1=x,f2=x^2)
fit <- lm(y~.-1,data=x_exp)
xp_exp <- data.frame(f1=xp,f2=xp^2)
yp <- predict(fit,xp_exp)
lines(xp,yp)

# using poly function
fit2 <- lm(y~ poly(x,degree=2) -1)
yp <- predict(fit2,data.frame(x=xp))
lines(xp,yp,col=2)

यहां छवि विवरण दर्ज करें

मेरा प्रयास:

  • यह इंटरसेप्ट के साथ एक समस्या लगती है, जब मैं मॉडल को इंटरसेप्ट के साथ फिट करता हूं, यानी -1मॉडल में नहीं formula, दो लाइनें समान हैं। लेकिन इंटरसेप्ट के बिना दोनों लाइनें अलग-अलग क्यों हैं?

  • एक अन्य "फिक्स" rawऑर्थोगोनल बहुपद के बजाय बहुपद विस्तार का उपयोग कर रहा है । यदि हम कोड को बदलते हैं fit2 = lm(y~ poly(x,degree=2, raw=T) -1), तो 2 पंक्तियाँ समान हो जाएंगी। लेकिन क्यों?


4
यह आपके प्रश्न से हटकर विषय है, लेकिन आप अक्सर टिप्पणी के लिए बहुत खुले हैं। आपके कोड को पढ़ते समय, पहली बात जो मैंने नोटिस की वह यह है कि आप असंगत रूप से उपयोग करते हैं =और <-असाइनमेंट के लिए। मैं वास्तव में ऐसा नहीं करूंगा, यह बिल्कुल भ्रामक नहीं है, लेकिन यह बिना किसी लाभ के आपके कोड में बहुत सारे दृश्य शोर जोड़ता है। आपको अपने व्यक्तिगत कोड में उपयोग करने के लिए एक या दूसरे पर बसना चाहिए, और बस इसके साथ रहना चाहिए।
मैथ्यू

कोडिंग में मेरी मदद करने के लिए धन्यवाद! सवाल तय। @ मट्टू ड्रीरी
हायतौ डू

3
<-टाइप करने के लिए कम परेशानी बनाने के लिए यादृच्छिक अनुवर्ती टिप alt+-:।
JAD

@JarkoDubbeldam कोडिंग टिप के लिए धन्यवाद। मुझे मुख्य बोर्ड शॉर्ट कट्स से प्यार है
Haitao Du

जवाबों:


12

जैसा कि आप मूल अंतर को सही ढंग से नोट करते हैं क्योंकि पहले मामले में आप "कच्चे" बहुपद का उपयोग करते हैं जबकि दूसरे मामले में आप ऑर्थोगोनल बहुपद का उपयोग करते हैं। इसलिए यदि बाद में lmकॉल को बदल दिया गया: fit3<-lm(y~ poly(x,degree=2, raw = TRUE) -1)हम fitऔर के बीच एक ही परिणाम प्राप्त करेंगे fit3। कारण क्यों हम इस मामले में एक ही परिणाम प्राप्त "तुच्छ" है; हम ठीक उसी मॉडल को फिट करते हैं जैसा कि हमने फिट किया था fit<-lm(y~.-1,data=x_exp), कोई आश्चर्य नहीं।

एक आसानी से जांच कर सकता है कि दो मॉडल द्वारा मॉडल की मैट्रिक्स समान हैं all.equal( model.matrix(fit), model.matrix(fit3) , check.attributes= FALSE) # TRUE)।


अधिक दिलचस्प यह है कि एक अवरोधन का उपयोग करते समय आपको एक ही भूखंड क्यों मिलेगा। नोटिस करने के लिए पहली बात यह है कि, एक अवरोधन के साथ एक मॉडल फिटिंग करते समय

  • के मामले में fit2हम केवल मॉडल भविष्यवाणियों लंबवत स्थानांतरित; वक्र का वास्तविक आकार समान है।

  • fitपरिणाम के मामले में एक अवरोधन सहित दूसरी तरफ ऊर्ध्वाधर प्लेसमेंट के मामले में न केवल एक अलग रेखा है, बल्कि समग्र रूप से एक अलग आकार है।

हम आसानी से यह देख सकते हैं कि मौजूदा प्लॉट पर निम्नलिखित फिट बैठता है।

fit_b<-lm(y~. ,data=x_exp)
yp=predict(fit_b,xp_exp)
lines(xp,yp, col='green', lwd = 2)

fit2_b<-lm(y~ poly(x,degree=2, raw = FALSE) )
yp=predict(fit2_b,data.frame(x=xp))
lines(xp,yp,col='blue')

यहां छवि विवरण दर्ज करें

ठीक है ... क्यों नहीं अवरोधक फिट अलग थे जबकि अवरोधन-युक्त फिट समान हैं? कैच एक बार फिर ऑर्थोगोनलिटी कंडीशन पर है।

fit_bउपयोग किए जाने वाले मॉडल मैट्रिक्स के मामले में गैर-ऑर्थोगोनल तत्व शामिल हैं, ग्राम मैट्रिक्स crossprod( model.matrix(fit_b) )विकर्ण से दूर है; fit2_bतत्वों के मामले में ऑर्थोगोनल ( crossprod( model.matrix(fit2_b) )प्रभावी रूप से विकर्ण है)।

fitfit_b एक्सटीएक्सfitfit2fit2_b

दिलचस्प उप-प्रश्न ऐसा क्यों है fit_bऔर fit2_bसमान हैं; के बाद से सभी मॉडल परिपक्व होते हैं fit_bऔर अंकित मूल्य मेंfit2_b समान नहीं होते हैं । यहाँ हम सिर्फ इतना है कि अंत में याद रखने की आवश्यकता है और एक ही जानकारी है। अनिवार्य रूप से उनके परिणामी फिट के समान ही एक रैखिक संयोजन होगा। फिट किए गए गुणांक में मनाया गया अंतर उन्हें ओर्थोगोनल प्राप्त करने के क्रम में मूल्यों के रैखिक पुनर्संयोजन को दर्शाता है । (देखें जी। ग्रोथेंडिक का जवाब यहां भी अलग-अलग उदाहरणों के लिए दिया गया है।)fit_bfit2_bfit2_bfit_bfit_b


+2.5 महान जवाब के लिए धन्यवाद। अंतिम ग्राफ के लिए, मैंने @kjetilb halvorsen से सीखा: इसका वर्णन करने का एक और सार तरीका यह है कि मॉडल केवल एक निश्चित रैखिक उप-स्थान पर निर्भर करता है, अर्थात डिज़ाइन मैट्रिक्स द्वारा परिभाषित स्तंभ स्थान। लेकिन पैरामीटर, न केवल इस उप-स्थान पर निर्भर करते हैं, बल्कि उस उप-स्थान के आधार पर, उपयोग किए जाने वाले विशिष्ट चर द्वारा दिए गए हैं, जो कि कॉलम ही है। उदाहरण के लिए, मॉडल से भविष्यवाणियां केवल रैखिक उप-स्थान पर निर्भर करेंगी, न कि चुने हुए आधार पर।
हाइताओ डू

आशा है कि आप बुरा नहीं मानेंगे, मैंने थोड़ा सुधार किया ..
Haitao Du

@ hxd1011: कोई समस्या नहीं है, थोड़ा "कंघी" करने के लिए समय निकालने के लिए धन्यवाद।
us --r11852
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.