Dear R-users, I'd like to fit a sine function to my data. The result should have a format (and thus the formula, too) y ~ a + sin(x+b) where y and x are vectors, and a and b are (yet) unknown values. The data sets (vectors x and y) are OK, and I can do a simple lm fitting lm(y~x), or lm(y~I(sin(2*pi*x/360))), succesfully My issue is that I'm not able to do the optional linear shift in x (e.g. x+b). What other possibilities should I use instead of lm? I looked searched the R-seek for terms: fit, sine, lm, and combinations, but I could not find anything useful. Anybody would be so kind and point me to the right direction where I can find other fitting possibilities? Thank you for listening and kind answers upfront. Regards, Milan [[alternative HTML version deleted]]
i guess nls or gnls should work.... JM El Viernes, 23 de Mayo de 2008 10:47, Zroutik Zroutik escribi?:> Dear R-users, > > I'd like to fit a sine function to my data. The result should have a format > (and thus the formula, too) > > y ~ a + sin(x+b) > > where y and x are vectors, and a and b are (yet) unknown values. > > The data sets (vectors x and y) are OK, and I can do a simple lm fitting > lm(y~x), or lm(y~I(sin(2*pi*x/360))), succesfully My issue is that I'm not > able to do the optional linear shift in x (e.g. x+b). What other > possibilities should I use instead of lm? I looked searched the R-seek for > terms: fit, sine, lm, and combinations, but I could not find anything > useful. Anybody would be so kind and point me to the right direction where > I can find other fitting possibilities? > > Thank you for listening and kind answers upfront. > > Regards, > Milan > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html and provide commented, minimal, > self-contained, reproducible code.
Milan, This is a fairly standard trick. Let us generalize your equation slightly: y ~ a + c*sin(x+b) so the amplitude of the sine wave is adjustable (otherwise, you assume (or know) that the amplitude is 1). Then y ~ a + c*sin(b)*cos(x) + c*cos(b)*sin(x) or y ~ b0 + b1*x1 + b2*x2 which is a linear regression form that you can do using the lm function. After you get b0, b1 and b2 you do a = b0 b1^2 + b2^2 = c^2*(sin^2(b) + cos^2(b)) = c^2 ====> c = sqrt(b1^2 + b2^2) b1/b2 = tan(b) ====> b = arctan(b1/b2) Hope this helps, Andy __________________________________ Andy Jaworski 518-1-01 Process Laboratory 3M Corporate Research Laboratory ----- E-mail: apjaworski at mmm.com Tel: (651) 733-6092 Fax: (651) 736-3122 "Zroutik Zroutik" <zroutik at gmail.co m> To Sent by: r-help at r-project.org r-help-bounces at r- cc project.org Subject [R] Fit a sine to data 05/23/2008 08:49 AM Dear R-users, I'd like to fit a sine function to my data. The result should have a format (and thus the formula, too) y ~ a + sin(x+b) where y and x are vectors, and a and b are (yet) unknown values. The data sets (vectors x and y) are OK, and I can do a simple lm fitting lm(y~x), or lm(y~I(sin(2*pi*x/360))), succesfully My issue is that I'm not able to do the optional linear shift in x (e.g. x+b). What other possibilities should I use instead of lm? I looked searched the R-seek for terms: fit, sine, lm, and combinations, but I could not find anything useful. Anybody would be so kind and point me to the right direction where I can find other fitting possibilities? Thank you for listening and kind answers upfront. Regards, Milan [[alternative HTML version deleted]] ______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.