2015-10-09 8 views
5

मैंने एक पोस्ट पढ़ा है (आर में सिग्मोडाइड वक्र फिट)। इसे डुप्लिकेट किया गया था, लेकिन मैं पदों से संबंधित कुछ भी नहीं देख सकता। और पदों के लिए दिया गया जवाब पर्याप्त नहीं था।एक सिग्मोइडल वक्र फिट करने के लिए आर का उपयोग

मैंने पढ़ा एक webpage

दूसरों की तरह, वह इस प्रारूप का उपयोग करता लाइन फिट करने के लिए:

fitmodel <- nls(y~a/(1 + exp(-b * (x-c))), start=list(a=1,b=.5,c=25)) 

समस्या यह है कि, एक, ख, ग अधिकांश मामलों में दिए गए है और मेरे पास कोई सुराग नहीं है जो ए, बी, सी के सेट का उपयोग मेरे डेटा के सेट के लिए करना चाहिए। क्या कोई मुझे पैरामीटर प्राप्त करने के बारे में कुछ सलाह दे सकता है?

x <- c(3.9637878,3.486667,3.0095444,2.5324231,2.0553019,1.5781806,1.1010594,0.6242821) 
y <- c(6491.314,6190.092,2664.021,2686.414,724.707,791.243,1809.586,541.243) 
+0

आप 'ए, बी, c' अनुमान लगाना है। यदि आपको पता है कि वक्र कैसा दिखता है तो यह हमेशा यादृच्छिक गुणांक के साथ वक्र खींचने में मदद करता है (उदा। 'ए = 20, बी = 0.1, सी = 0.2, वक्र (ए/(1 + एक्सपी (-बी * (xc))), 0, 100) 'और देखें कि आपके अनुमान कैसे जांचते हैं कि' xc' सही है या नहीं। यह नहीं होना चाहिए 'x^(- c) ' – Mateusz1981

+0

यह एक संभावित तरीका है लेकिन वहां हैं मेरे लिए इसे "सांख्यिकीय रूप से समझदार" तरीके से करने के लिए कोई अन्य संभावित तरीका? उदाहरण के लिए, क्या ए, बी, सी। या, अगर कोई है, तो संयोजन के इष्टतम सेट को खोजने के लिए लूप बनाना संभव है, क्या मैं इसका उपयोग कर सकता हूं कुछ फ़ंक्शंस या कमांड प्रोग्राम के लिए इसे मेरे लिए गणना करने के लिए छोड़ देते हैं? – FunnyFunkyBuggy

+0

एक बार जब मैं इस "ग्रल" की तलाश भी कर रहा था। मुझे अभी तक नहीं मिला है। मैं सांख्यिकीविद् नहीं हूं लेकिन मुझे लगता है कि मूल्यों का अनुमान लगाना अनुमान लगाने का एक आम तरीका है 'nlm' – Mateusz1981

उत्तर

5

सौभाग्य से आर रसद मॉडल के लिए एक selfstarting मॉडल प्रदान करता है:

यहाँ नंबरों की मेरी तरह तैयार है। यह एक मामूली reparametrization का उपयोग करता है, लेकिन वास्तव में तुम्हारा के रूप में एक ही मॉडल है: Asym/(1+exp((xmid-input)/scal))

एक selfstarting मॉडल आप के लिए अच्छा प्रारंभिक मूल्य का अनुमान कर सकते हैं, ताकि आप उन्हें निर्दिष्ट करने के लिए नहीं है।

plot(y ~ x) 
fit <- nls(y ~ SSlogis(x, Asym, xmid, scal), data = data.frame(x, y)) 

summary(fit) 
#Formula: y ~ SSlogis(x, Asym, xmid, scal) 
# 
#Parameters: 
#  Estimate Std. Error t value Pr(>|t|) 
#Asym 1.473e+04 2.309e+04 0.638 0.551 
#xmid 4.094e+00 2.739e+00 1.495 0.195 
#scal 9.487e-01 5.851e-01 1.622 0.166 
# 
#Residual standard error: 941.9 on 5 degrees of freedom 
# 
#Number of iterations to convergence: 0 
#Achieved convergence tolerance: 4.928e-06 

lines(seq(0.5, 4, length.out = 100), 
     predict(fit, newdata = data.frame(x = seq(0.5, 4, length.out = 100)))) 

resulting plot

बेशक अपने डेटा वास्तव में मॉडल का समर्थन नहीं करता। अनुमानित मध्य बिंदु केवल आपकी डेटा सीमा की दाहिनी सीमा पर है और इस प्रकार पैरामीटर अनुमान (विशेष रूप से एसिम्पटोट के लिए) बहुत अनिश्चित हैं।

+0

में समीकरण पैरामीटर धन्यवाद, आपका उत्तर मेरे लिए बहुत उपयोगी है। एक और सवाल है: क्यों वक्र का आकार नहीं है एक 'एस' आकार? यह मेरे लिए एक घातीय वक्र की तरह है। मैं देखता हूं कि आपका समीकरण मेरा ही है लेकिन समस्या कहां है? – FunnyFunkyBuggy

+0

मॉडल एक सिग्मोडाइड वक्र है। आप बस एस के ऊपरी भाग को नहीं देखते हैं क्योंकि यह साजिश सीमा से बाहर है। – Roland

1

मुझे दो मुद्दे दिखाई देते हैं।

  1. NLS के डिफ़ॉल्ट एल्गोरिथ्म प्रारंभिक पैरामीटर के लिए बहुत ही संवेदनशील है। आपके उदाहरण डेटा में मुझे algorithm='port' का उपयोग करने में उपयोगी पाया गया। वैकल्पिक रूप से "मजबूत" कार्यान्वयन पर स्विच करने से भी मदद मिल सकती है।

  2. यह आपके मॉडल में पैरामीटर की भूमिका को समझने में मदद करता है।

अपने मॉडल के लिए सरल व्याख्या है: अवग्रह 0 से एक करने के लिए y में चला जाता है। यह x = c पर "आधे रास्ते" बिंदु तक पहुंचता है। बी में ढलान की भूमिका है, और यदि ऋणात्मक मॉडल इसके बजाय 0 से 0 तक जाएगा। - अपने डेटा तो शायद इसे जोड़ने के लिए उपयोगी हो सकता है शून्य करने के लिए वास्तव में 'बंद' नहीं है

  • पहली बात मैं नोटिस:

    विशेष रूप से परीक्षण डेटा आपके द्वारा पोस्ट मैं निम्नलिखित के रूप में शुरू करने के लिए मूल्य का अनुमान होता

    से एक्स 2 3.5 अपने सिग्नल 1000 6000 के लिए देता है कूदता करने के लिए - हो सकता है 3

  • बी एक अनुमान करने की जरूरत है - एक ऑफसेट घ है जो चारों ओर 1000
  • एक तो 5000 या अधिक से अधिक
  • ग कहीं अधिक से अधिक 2 है 5000 अंतर - एक द्वारा विभाजित - 1/1.5 = 0.66 या उससे अधिक की ढलान ... एल एक के लिए गोल करता है।

तो अंत में फार्मूला

fitmodel <- nls(y ~a/(1 + exp(-b * (x-c))) + d, start=list(a=5000,b=1,c=3, d=1000)) 

एक फिट देता है (यह भी घ बिना काम करता है) का उपयोग कर। मुझे पता चला कि algorithm='port' सेटिंग शुरू करने से कमांड मूल्यों को कम संवेदनशील बना दिया गया है।

2

कोड मैं अपने डेटा फिट करने के लिए प्रयोग किया है:

df <- data.frame(x=c(3.9637878,3.486667,3.0095444,2.5324231,2.0553019,1.5781806,1.1010594,0.6242821),      
        y=c(6491.314,6190.092,2664.021,2686.414,724.707,791.243,1809.586,541.243)) 

library(drc) 
fm <- drm(y ~ x, data = df, fct = G.3()) 

plot(fm) 
summary(fm) 

जिस तरह से यह फिटिंग के बाद लग रहा है: enter image description here

संबंधित मुद्दे