From: Greg Snow <Greg.Snow_at_imail.org>

Date: Fri, 11 Jan 2008 14:23:17 -0700

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.

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. Received on Fri 11 Jan 2008 - 21:28:22 GMT

Date: Fri, 11 Jan 2008 14:23:17 -0700

Here are a couple of thoughts,

The basic idea of the sine function is:

y = a + b * sin( c + d*x )

where:

a is a vertical offset from 0

b is the amplitude

c is the phase shift

d is related to the period.

You could put this function into nls or other non-linear optimization problem, however with a few assumptions this can be turned into a linear regression problem:

*>From the sound of it you already know the period you want to use (1 day or 1 year) so d is determined by that and does not need to be estimated. The other nonlinear parameter which may be of interest to estimate is c. The rule from trig is that:
*

sin( c+dx ) = cos(c) * sin(dx) + sin(c) * cos(dx)

so if you calculate sin(dx) (call this x1) and cos(dx) (call this x2) from fixed values and call b*cos(x) beta1 and b*sin(x) beta2 then the model becomes:

y= a + beta1 * x1 + beta2 * x2

Now that is a linear regression model and you don't need to fight with non-linear issues, just calculate sin(dx) and cos(dx) and use those as the predictors. If you are interested in the values of b and c then you can use trig and algebra to back transform the estimates of beta1 and beta2 back to b and c (may not have a unique solution in all cases, but should be able to find a good approximation).

Another option if you don't want to restrict yourself to sine curves (maybe it climbs faster than it drops) is periodic splines. See: http://www.biostat.wustl.edu/archives/html/s-news/1999-06/msg00235.html for some basic functions to do this.

Hope this helps,

From: r-help-bounces_at_r-project.org on behalf of Carson Farmer
Sent: Thu 1/10/2008 3:27 PM

To: r-help_at_r-project.org

Subject: [R] Cycle Regression Analysis in R?

Hello R community,

Does anyone know of a package that will perform cycle regression
analysis? I have searched the R-help archives etc. but have come up with
nothing so far.

If I am unable to find an existing R package to do so, is there anyone
familiar with fitting sine functions to data. My problem is this:
I have a long time-series of daily SWE estimates (SWE = snow water
equivalence, or the amount of water stored in a snowpack) which follows
a sinusoidal pattern, and I need to estimate the parameters of the sine
function that best fits this data. While there may be many contributing
sine functions and/or linear trends, I am only interested in a single
sine function that most closely fits the data (trends can be removed
separately if need be). Perhaps some sort of non-linear least squares
method would be best?

Any help, or suggestions to get me on the right track are greatly appreciated.

Carson

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.

[[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. Received on Fri 11 Jan 2008 - 21:28:22 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Fri 11 Jan 2008 - 21:30:06 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*