On 12-01-02 04:09 PM, David Winsemius wrote: > > On Jan 2, 2012, at 11:49 AM, Ben Bolker wrote: > >> Jonas Stein <news <at> jonasstein.de> writes: >> >>> >>> i have a list of values like this >>> >>> x y >>> 1 3 >>> 2 2 >> >> [snip] >> >>> >>> and need the inflexion [sic] points (and all max and min). >>> Is there a nice way to get the local max, min and inflexion points? >> >> diff(y) gives you the first difference, the analogue of the gradient >> diff(diff(y)) gives the second difference, the analogue of the second >> derivative. >> >> dy <- diff(y) >> d2y <- diff(dy) >> which(dy==0) ## critical values >> sign(s2y)[which(dy==0)] ## test for max/min/saddle >> which(d2y==0) ## inflection points > > I would think that testing for d2y==0 would be akin to the error in > numeric analysis warned about in FAQ 7.31. Seems unlikely that in real > data that there would always be three points in a row with equal > differences at a "true" inflection and even then, many of the ones you > did find satisfying that criterion would not be in fact inflection > points. Wouldn't it be better to fit a spline and then do your testing > on the spline approximation? > > Counter-example: > x=1:10 >> y=c(1,2,3,5,7,10,13,16,20,24) >> dy <- diff(y) >> d2y <- diff(dy) >> which(d2y==0) > [1] 1 3 5 6 8 > > And actually the original data was a pretty good counter-example as well.
The original post wasn't entirely clear, but I thought the data were indeed integers and that the discrete-state version of min/max/inflection point was indeed what was wanted. Yes, if the underlying variable is continuous you might want to use splinefun(), with its deriv= argument, and uniroot(), to find maxima and minima. Might be a little tricky in general, although with an interpolation spline between a finite set of points you can at least deal with it exhaustively. Ben ______________________________________________ R-help@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.