[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