Re: [R] Cycle Regression Analysis in R?

From: Greg Snow <>
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 )  

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: for some basic functions to do this.  

Hope this helps,

From: on behalf of Carson Farmer Sent: Thu 1/10/2008 3:27 PM
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 mailing list PLEASE do read the posting guide and provide commented, minimal, self-contained, reproducible code.

        [[alternative HTML version deleted]] mailing list PLEASE do read the posting guide 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 Please read the posting guide before posting to the list.

list of date sections of archive