I have some data that I smooth using
loess. I’d like to find the inflection points of the smoothed line. Is this possible? I’m sure someone has made a fancy method to solve this…I mean…after all, it’s R!
I’m fine with changing the smoothing function I use. I just used
loessbecause that’s what I was have used in the past. But any smoothing function is fine. I do realize that the inflection points will be dependent on the smoothing function I use. I’m okay with that. I’d like to get started by just having any smoothing function that can help spit out the inflection points.
Here’s the code I use:
x = seq(1,15) y = c(4,5,6,5,5,6,7,8,7,7,6,6,7,8,9) plot(x,y,type="l",ylim=c(3,10)) lo <- loess(y~x) xl <- seq(min(x),max(x), (max(x) - min(x))/1000) out = predict(lo,xl) lines(xl, out, col='red', lwd=2)
From the perspective of using R to find the inflections in the smoothed curve, you just need to find those places in the smoothed y values where the change in y switches sign.
infl <- c(FALSE, diff(diff(out)>0)!=0)
Then you can add points to the graph where these inflections occur.
points(xl[infl ], out[infl ], col="blue")
From the perspective of finding statistically meaningful inflection points, I agree with @nico that you should look into change-point analysis, sometimes also referred to as segmented regression.