2013-06-14 7 views
5

के साथ फिट करने के लिए कैसे एक माप एक सिग्नल दिखाता है जो ऑफसेट और कारक के साथ स्क्वायर रूट फ़ंक्शन की तरह बनता है। मैं गुणांक कैसे पा सकता हूं और एक साजिश में कच्चे डेटा और फिट वक्र को साजिश कैसे दे सकता हूं?गैर रेखीय फ़ंक्शन और साजिश डेटा के साथ डेटा को फिट करने और ggplot()

require(ggplot2) 
require(nlmrt) # may be this will help later..? 

# generate simulated measurement data 

time <- seq(-10,20,0.2) 

signal <- sqrt(time + 2) # generate sqrt signal; includes some NA 
signal[is.na(signal)] <- 0 # set all NA to zero 
signal <- signal + rnorm(length(time)) * 0.1 # add noise 

df <- data.frame(x=time, y=signal) 

# find coefficiants for y ~ b * sqrt(x - a) 
# no idea how... 

# plot raw data and fitted curve in one ggplot diagram 

ggplot()+ 
    geom_point(data=df, aes(x=x, y=y)) 

enter image description here

+1

बस एक संकेत, तो आप शायद 'y फिट करने के लिए चाहते हैं ~ b * sqrt (एक्स - एक)', के रूप में विरोध करने के लिए 'अ + ब * sqrt (ग * x)'। –

+1

यदि आप कटऑफ पॉइंट * एक प्राथमिक * निर्दिष्ट नहीं कर सकते हैं (यानी यदि यह एक फिट पैरामीटर है), तो आपको शायद इसे अलग से फिट करना होगा (यह एक रैखिक मॉडल ढांचे में फिट नहीं होगा, और विशेष रूप से डेटाफॉइंट्स के बीच अंतराल पर भलाई के अनुकूल होने के बाद कटऑफ को फिट करने के लिए मुश्किल पहलू)। यदि आप कटऑफ निर्दिष्ट कर सकते हैं तो मुझे लगता है कि आप एक डमी चर बना सकते हैं और ऐसा कर सकते हैं ... –

+0

पहले चरण के रूप में मैं मैन्युअल रूप से कटऑफ के लिए निरंतर परिभाषित कर सकता हूं। बाद में मैं यह स्वचालित खोजना चाहूंगा। लेकिन यह तब एक और सवाल का विषय हो सकता है। –

उत्तर

5

परंतु क्या आप जानते हैं जहां cutpoint है और cutpoint से पहले मान शून्य है:

sfun <- function(x,brk,a=1) { 
    ifelse(x<brk,0,suppressWarnings(a*sqrt(x-brk))) 
} 

(suppressWarnings() है क्योंकि ifelse का मूल्यांकन करता है दोनों अगर और अन्यx के सभी मूल्यों के लिए मामले, और हम स्क्वायर लेने के बारे में चेतावनियां नहीं चाहते हैं) ऋणात्मक संख्याओं के ई रूट)

टेस्ट (नहीं दिखाया गया:,

x <- seq(0,10,length=101) 
set.seed(1) 
y <- rnorm(length(x),sfun(x,1,1),sd=0.25) 
DF <- data.frame(x,y) 

सब हम यह पता लगाने की है कि कैसे वर्गमूल समारोह को मापे जाने की जरूरत है के बाद से:

curve(sfun(x,1,1),from=0,to=10) ## test (not shown) 

कुछ डेटा अनुकरण हम मूल के माध्यम से एक प्रतिगमन के साथ ऐसा कर सकते हैं (-1 बाहर निकालें यदि आप कटपॉइंट के नीचे मान को शून्य होने की अनुमति देना चाहते हैं):

library("ggplot2") 
theme_set(theme_bw()) 
ggplot(DF,aes(x,y))+geom_point()+ 
    geom_smooth(method="lm", 
       formula=y~sfun(x,brk=1)-1) 
ggsave("truncsqrt.png") 

enter image description here

+0

ओह, मैंने यह भी ध्यान नहीं दिया कि आपने अपना सिमुलेशन कोड प्रदान किया होगा। कोई भी जो ओपी के उदाहरण में संपादित करने के लिए स्वतंत्र महसूस कर सकता है। –

+0

बिल्कुल सही! ग्रे बैंड की चौड़ाई कैसे परिभाषित की जाती है? और क्या मैं गुणांक संख्याओं के रूप में भी प्राप्त कर सकता हूं? –

+1

ग्रे बैंड 95% आत्मविश्वास अंतराल है। यदि आप गुणांक चाहते हैं, तो बस 'एलएम (वाई ~ sfun (एक्स, brk = 1) -1, डेटा = डीएफ) ' –

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