सही शुरुआत मूल्यों के साथ nls में विलक्षण ढाल त्रुटि


19

मैं कुछ डेटा के लिए एक लाइन + घातीय वक्र फिट करने की कोशिश कर रहा हूं। एक शुरुआत के रूप में, मैंने कुछ कृत्रिम डेटा पर ऐसा करने की कोशिश की। समारोह है: यह प्रभावी रूप से एक रैखिक खंड के साथ-साथ एक अतिरिक्त क्षैतिज पारी पैरामीटर ( एम ) के साथ एक घातीय वक्र है । हालांकि, जब मैं आर के फ़ंक्शन का उपयोग करता हूं तो मुझे प्रारंभिक पैरामीटर अनुमानों में " खतरनाक ढाल मैट्रिक्स " मिलता है , भले ही मैं उसी पैरामीटर का उपयोग करता हूं जो मैंने पहली बार में डेटा उत्पन्न करने के लिए उपयोग किया था। मैंने अलग-अलग एल्गोरिदम, अलग-अलग शुरुआती मूल्य और उपयोग करने की कोशिश की है

y=a+br(xm)+cएक्स
nls()
optimवर्गों के अवशिष्ट राशि को कम करने के लिए, कोई फायदा नहीं हुआ। मैंने पढ़ा है कि इसका एक संभावित कारण सूत्र का ओवर-पैरामीट्रेशन हो सकता है, लेकिन मुझे नहीं लगता कि यह है (यह है?)
क्या किसी को इस समस्या के लिए कोई सुझाव है? या यह सिर्फ एक अजीब मॉडल है?

एक छोटा उदाहरण:

#parameters used to generate the data
reala=-3
realb=5
realc=0.5
realr=0.7
realm=1
x=1:11 #x values - I have 11 timepoint data
#linear+exponential function
y=reala + realb*realr^(x-realm) + realc*x
#add a bit of noise to avoid zero-residual data
jitter_y = jitter(y,amount=0.2)
testdat=data.frame(x,jitter_y)

#try the regression with similar starting values to the the real parameters
linexp=nls(jitter_y~a+b*r^(x-m)+c*x, data=testdat, start=list(a=-3, b=5, c=0.5, r=0.7, m=1), trace=T)

धन्यवाद!


2
संकेत: (एक निश्चित ) के गुणांक को देखें और ध्यान दें कि में साथ समाधान एक आयामी परिवार है । आर बी आर - मीटर = निरंतर ( , मीटर ) = आर एमनिरंतरआरएक्सआरआर-=लगातार(,)=आरलगातार
whuber

1
यह एक पहचाना हुआ मॉडल नहीं है, जब तक कि या किसी तरह विवश न हों। मुझे लगता है कि को काम करने की आवश्यकता होगी। आर आर ( 0 , 1 )आरआर(0,1)
मैक्रो

जवाबों:


16

मैंने हाल ही में इससे काट लिया है। मेरे इरादे एक जैसे थे, कुछ कृत्रिम मॉडल बनाएं और उसका परीक्षण करें। मुख्य कारण @whuber और @marco द्वारा दिया गया है। ऐसे मॉडल की पहचान नहीं की जाती है। यह देखने के लिए, याद रखें कि एनएलएस फ़ंक्शन को कम करता है:

Σमैं=1n(yमैं--आरएक्समैं--सीएक्समैं)2

मान लें कि यह मापदंडों के सेट से कम से कम है । यह देखना मुश्किल नहीं है कि मापदंडों का सेट फ़ंक्शन के समान मूल्य को कम से कम करने के लिए देगा। इसलिए मॉडल की पहचान नहीं की जाती है, अर्थात कोई अनूठा समाधान नहीं है।(,,,आर,सी)(,आर-,0,आर,सी)

यह देखना भी मुश्किल नहीं है कि ढाल विलक्षण क्यों है। निरूपित

f(a,b,r,m,c,x)=a+brxm+cx

फिर

fb=rxm

fm=blnrrxm

और हम सभी लिए मिलता हैx

blnrfb+fm=0.

इसलिए मैट्रिक्स

(f(x1)f(xn))

पूर्ण रैंक का नहीं होगा और यही कारण है कि nlsविलक्षण ढाल संदेश देगा।

मैंने एक सप्ताह से अधिक समय तक अपने कोड में कीड़े ढूंढने में बिताया है जब तक कि मैंने देखा कि मुख्य बग मॉडल में था :)


2
यह वह उम्र है जो मुझे पता है, लेकिन बस सोच रहा था, क्या इसका मतलब यह नहीं है कि nls उन मॉडलों पर इस्तेमाल नहीं किया जा सकता है जो पहचानने योग्य नहीं हैं? उदाहरण के लिए, एक तंत्रिका नेटवर्क?
शून्य

वसा मौका, मुझे पता है, लेकिन क्या आप कम कैल्क-याद करने वाले लोगों के लिए इसे तोड़ सकते हैं? :)। भी, ओपी की समस्या का हल क्या है? हार मान कर घर जाना है?
theforestecologist

2
ओपी समस्या का समाधान दो के बजाय एक पैरामीटर का उपयोग करना है, अर्थात बजाय । के बाद से यह में विलीन हो जाती पैरामीटर, superflous है , यानी । बीटा आर एक्स मीटर बीटा बीटा = आर - मीटरआरएक्स-βआरएक्सββ=आर-
mpiktas

@CountZero, मूल रूप से हाँ, सामान्य अनुकूलन विधियाँ विफल हो जाएँगी यदि पैरामीटर अनइंडेंटेड हैं। तंत्रिका नेटवर्क इस समस्या को कम करते हैं, हालांकि अतिरिक्त विरोधाभासों को जोड़कर और अन्य दिलचस्प चाल का उपयोग करके।
mpiktas

मुझे लगता है कि ? उत्तर में एक चंद्र गायब है? =-lnआर आरएक्स-
बुद्धिमानी

17

उपरोक्त उत्तर, निश्चित रूप से, सही हैं। दिए गए स्पष्टीकरण के अतिरिक्त, यदि आप किसी कृत्रिम डेटा सेट पर यह कोशिश कर रहे हैं, तो इसके अलावा, nls सहायता पृष्ठ पर पाया गया: http://stat.ethz.ch/R-manual/R-patched/ पुस्तकालय / आँकड़े / html / nls.html

आर के नेल्स इसे संभालने में सक्षम नहीं होंगे। सहायता पृष्ठ विशेष रूप से बताता है:

चेतावनी

कृत्रिम "शून्य-अवशिष्ट" डेटा पर नेल्स का उपयोग न करें।

एनएलएस फ़ंक्शन एक रिश्तेदार-ऑफसेट अभिसरण मानदंड का उपयोग करता है जो कि वर्तमान पैरामीटर अनुमानों पर संख्यात्मक संसेचन की तुलना अवशिष्ट राशि-वर्ग में करता है। यह प्रपत्र के डेटा पर अच्छा प्रदर्शन करता है

y = f (x, θ) + eps

(var (eps) के साथ> 0)। यह प्रपत्र के डेटा पर अभिसरण इंगित करने में विफल रहता है

y = f (x,,)

क्योंकि मानदंड राउंड-ऑफ त्रुटि के दो घटकों की तुलना करने के लिए है। यदि आप कृत्रिम डेटा पर nls का परीक्षण करना चाहते हैं, तो कृपया एक शोर घटक जोड़ें, जैसा कि नीचे दिए गए उदाहरण में दिखाया गया है।

तो, कोई शोर == आर के नेल्स के लिए अच्छा नहीं है।


साइट पर आपका स्वागत है, @B_D_Dubbya। मैंने आपके उत्तर को स्वरूपित करने की स्वतंत्रता ली, मुझे आशा है कि आप बुरा नहीं मानेंगे। आप सीवी पर अपने जवाब संपादित करने के बारे में अधिक जानकारी पा सकते हैं यहाँ
गुंग - को पुनः स्थापित मोनिका

1
मैं इस मुद्दे के बारे में पता कर रहा हूँ - इसलिए कुछ शोर जोड़ने के लिए "घबराना" समारोह का उपयोग कर
steiny
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.