[R] grid search with failed evaluations (and nonlinear start values as a secondary consideration)

Brian Scholl brianscholl at yahoo.com
Thu May 16 16:34:17 CEST 2002


Hello,

Please copy all replies directly to me (my account is having difficulty with receiving lists these days).

This is primarily a programming question, but the specifics regard start values for a nonlinear regression (if you have suggestions on alternative ways to obtain start values they are welcome as well).

I'm using nls to estimate a nonlinear time series equation of the form:

y=p*cos(w*t+a)

where p,w and a are amplitude, frequency and phase.  Really I eventually want a sum of cosines model - i.e. multiple cosine terms, with the number of cosines determined by Quinn's (1989) AIC-like statistic (roughly, T*log(RSS)+2K, with k= number of cosines).  A reference for this sort of model is Brillinger (1987) "Fitting Cosines: Some Procedures and Some Physical Examples."  My main interest in estimating the frequency parameter(s). 

Starting values are not so easy to come by for such a model.  If I were to arbitrarily plug in values, I'll typically either get convergence somewhere in the neighborhood of the starting w (actually sometimes they can be far from this as well), or an error something like this:

Error in nls(y ~ rho * cos(omega * tau + phi), start = list(rho = 1, omega = grid[i],  : 

number of iterations exceeded maximum of 5.32761e-306

One very simple way to think about this is to try a bunch of different start values and pick the one that minimized the regression's RSS.  I could make a grid to search on, then simply pick the minimizer.  The problem though is that when a bad start value is used (i.e. the error above), the program stops entirely, so we don't do more than a few trials in the grid search.   My main question is how can I get around this to complete the search? 

Just for discussion, another (simple-minded) way might be to look at the periodogram, but this has provided little success. Most of the peaks of interest are at the very low frequency range (e.g. w=.01).  But convergence is not generally achieved for the model in this range.  A priori knowledge/deductions are generally consistent with the periodogram's results.

Again, if people have other ideas for obtaining starting values, they are entirely welcome and encouraged - estimates are highly sensitive to the start values, so I'm interested in trying a number of approaches.  My main question, however, is on completing the simple grid search. If it is helpful, here is simple grid search code:

for (i in 1:length(grid)){

      n<-nls(y~rho*cos(omega*tau+phi),start=list(rho=1,omega=grid[i],phi=1))

      summ<-summary(n)

      resids<-summ$resid

      SSR<-sum(resids^2)

   }

 Thank you,

(Please remember to cc this message directly to me.)

 Brian



---------------------------------

LAUNCH - Your Yahoo! Music Experience
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://stat.ethz.ch/pipermail/r-help/attachments/20020516/efbdd32e/attachment.html


More information about the R-help mailing list