में एक बहुत ही सरल रैखिक प्रतिगमन करना चाहता हूँ R
। सूत्र जितना ही सरल है । हालाँकि, मैं चाहूंगा कि ढलान ( ) एक अंतराल के अंदर हो, मान लें कि, 1.4 और 1.6 के बीच है।a
यह कैसे किया जा सकता है?
में एक बहुत ही सरल रैखिक प्रतिगमन करना चाहता हूँ R
। सूत्र जितना ही सरल है । हालाँकि, मैं चाहूंगा कि ढलान ( ) एक अंतराल के अंदर हो, मान लें कि, 1.4 और 1.6 के बीच है।a
यह कैसे किया जा सकता है?
जवाबों:
मैं प्रदर्शन करना चाहता हूं ... आर में रैखिक प्रतिगमन ... मैं चाहूंगा कि ढलान एक अंतराल के अंदर हो, चलो कहते हैं, 1.4 और 1.6 के बीच। यह कैसे किया जा सकता है?
(i) सरल तरीका:
प्रतिगमन फिट है। यदि यह सीमा में है, तो आप कर रहे हैं।
यदि यह सीमा में नहीं है, तो ढलान को निकटतम बाउंड पर सेट करें, और
के औसत के रूप अवरोधन का अनुमान सभी टिप्पणियों से अधिक।
(ii) अधिक जटिल तरीका: ढलान पर बॉक्स की कमी के साथ कम से कम वर्ग; कई optimizaton दिनचर्या बॉक्स की कमी को लागू करते हैं, जैसे nlminb
(जो R के साथ आता है) करता है।
संपादित करें: वास्तव में (जैसा कि नीचे दिए गए उदाहरण में बताया गया है), वेनिला आर में, nls
बॉक्स की कमी कर सकते हैं; जैसा कि उदाहरण में दिखाया गया है, यह वास्तव में करना बहुत आसान है।
आप विवश प्रतिगमन का अधिक सीधे उपयोग कर सकते हैं; मुझे लगता pcls
है कि पैकेज "mgcv" से nnls
फ़ंक्शन और पैकेज "nnls" दोनों से फ़ंक्शन करता है।
-
अनुवर्ती प्रश्न का उत्तर देने के लिए संपादित करें -
मैं आपको यह दिखाने जा रहा हूं nlminb
कि आर के साथ आने के बाद से इसका उपयोग कैसे किया जाए , लेकिन मैंने महसूस किया कि nls
पहले से ही विवश कम से कम वर्गों को लागू करने के लिए समान दिनचर्या (पोर्ट रूटीन) का उपयोग करता है, इसलिए नीचे मेरा उदाहरण उस मामले में है।
सबसे पहले, सीमा के अंदर 'सही' ढलान के साथ कुछ डेटा सेट करें:
set.seed(seed=439812L)
x=runif(35,10,30)
y = 5.8 + 1.53*x + rnorm(35,s=5) # population slope is in range
plot(x,y)
lm(y~x)
Call:
lm(formula = y ~ x)
Coefficients:
(Intercept) x
12.681 1.217
... लेकिन एलएस अनुमान इसके बाहर अच्छी तरह से है, बस यादृच्छिक भिन्नता के कारण। तो विवश प्रतिगमन का उपयोग करने देता है nls
:
nls(y~a+b*x,algorithm="port",
start=c(a=0,b=1.5),lower=c(a=-Inf,b=1.4),upper=c(a=Inf,b=1.6))
Nonlinear regression model
model: y ~ a + b * x
data: parent.frame()
a b
9.019 1.400
residual sum-of-squares: 706.2
Algorithm "port", convergence message: both X-convergence and relative convergence (5)
जैसा कि आप देखते हैं, आपको सीमा पर एक ढलान मिलता है। यदि आप फिट किए गए मॉडल को पास करते हैं, तो summary
यह मानक त्रुटियों और टी-मूल्यों को भी पैदा करेगा लेकिन मुझे यकीन नहीं है कि ये कितने सार्थक / व्याख्यात्मक हैं।
b=1.4
c(a=mean(y-x*b),b=b)
a b
9.019376 1.400000
यह एक ही अनुमान है ...
नीचे दिए गए प्लॉट में, ब्लू लाइन कम से कम वर्ग है और रेड लाइन कम से कम चौकोर है:
nls
इसे करने के लिए इसका उपयोग करता हूं।
ग्लेन_ बी की दूसरी विधि, एक बॉक्स बाधा के साथ कम से कम वर्गों का उपयोग करके रिज रिग्रेशन के माध्यम से अधिक आसानी से लागू किया जा सकता है। रिज रिग्रेशन का समाधान वेट वेक्टर के मानदंड (और इसलिए इसके ढलान) के परिमाण के साथ एक प्रतिगमन के लिए लैग्रैनिज के रूप में देखा जा सकता है। तो नीचे दिए गए व्हीलर के सुझाव के बाद, दृष्टिकोण (1.6 + 1.4) / 2 = 1.5 की प्रवृत्ति को घटाना होगा और फिर रिज प्रतिगमन लागू करना होगा और धीरे-धीरे रिज पैरामीटर को बढ़ाना होगा जब तक कि ढलान का परिमाण 0.1 से कम या बराबर नहीं होता है।
इस दृष्टिकोण का लाभ यह है कि किसी भी फैंसी ऑप्टिमाइज़ेशन टूल की आवश्यकता नहीं है, बस रिज रेग्रेसन, जो पहले से ही आर (और कई अन्य पैकेज) में उपलब्ध है।
हालाँकि Glen_b का सरल समाधान (i) मुझे समझ में आता है (+1)
एक और तरीका यह होगा कि रेजिमेंट को फिट करने और पूर्व वितरण को चुनने के लिए बायेसियन विधियों का उपयोग किया जाए
वेब पर और रिग्रेशन के लिए बायेसियन तरीकों का उपयोग करने के सॉफ्टवेयर में कई उदाहरण हैं, आप बस उन उदाहरणों में से एक का पालन कर सकते हैं और आगे चल सकते हैं
यह परिणाम अभी भी ब्याज के मापदंडों का विश्वसनीय अंतराल देगा (निश्चित रूप से इन अंतरालों की सार्थकता ढलान के बारे में आपकी पूर्व सूचना के तर्क पर आधारित होगी)।
एक और दृष्टिकोण एक अनुकूलन समस्या के रूप में अपने प्रतिगमन को सुधारने और एक अनुकूलक का उपयोग करने के लिए हो सकता है। मुझे यकीन नहीं है कि यह इस तरह से सुधार किया जा सकता है, लेकिन मैंने इस सवाल के बारे में सोचा जब मैंने आर ऑप्टिमाइज़र पर इस ब्लॉग पोस्टिंग को पढ़ा:
http://zoonek.free.fr/blosxom/R/2012-06-01_Optimization.html