# [R] fitting periodic 'sine wave' model

Tue Jun 10 16:54:55 CEST 2008

In addition to Gabor's suggestion, note the following warning from ?nls

Warning

Do not use nls on artificial "zero-residual" data.

The nls function uses a relative-offset convergence criterion that
compares the numerical imprecision at the current parameter estimates
to the residual sum-of-squares. This performs well on data of the form

y = f(x, theta) + eps

(with var(eps) > 0). It fails to indicate convergence on data of the
form

y = f(x, theta)

because the criterion amounts to comparing two components of the
round-off error. If you wish to test nls on artificial data please
add a noise component, as shown in the example below.

So for instance if you try with:

r<-nls(y ~ A*sin(2*pi*F*x), start=list(A = 1, F = .5), trace=T)

You will get convergence.

Department of Mathematics and Computer Science
Hanover College

On Jun 10, 2008, at 10:25 AM, Jon Loehrke wrote:

> I have been attempting to estimate the periodic contribution of an
> effect to some data but have not been able to fit a sine wave
> within R.
> It would be nice to start by being able to fit a sine wave with an
> amplitude and frequency.
>
> x<-seq(0,20,by=0.5)
> y<-2*sin(2*pi*.5*x) #amplitude =2, frequency=0.5
>
> # This failed to converge
> r<-nls(y ~ A*sin(2*pi*F*x), start=list(A = 1, F = 1), trace=T)
>
>
> # even this gave a max iteration error
> r<-nls(y ~ A*sin(2*pi*F*x), start=list(A = 1, F = .5), trace=T)
>
> I have a feeling I am approaching this incorrectly.  Thank you all
> very much for the guidance.
>
> Jon
> R 2.7.0
> mac os 10.5
>
>
> Jon Loehrke