Search code examples
rplotcurve-fitting

How to fit a smooth curve to my data in R?


I'm trying to draw a smooth curve in R. I have the following simple toy data:

> x
 [1]  1  2  3  4  5  6  7  8  9 10
> y
 [1]  2  4  6  8  7 12 14 16 18 20

Now when I plot it with a standard command it looks bumpy and edgy, of course:

> plot(x,y, type='l', lwd=2, col='red')

How can I make the curve smooth so that the 3 edges are rounded using estimated values? I know there are many methods to fit a smooth curve but I'm not sure which one would be most appropriate for this type of curve and how you would write it in R.


Solution

  • I like loess() a lot for smoothing:

    x <- 1:10
    y <- c(2,4,6,8,7,12,14,16,18,20)
    lo <- loess(y~x)
    plot(x,y)
    lines(predict(lo), col='red', lwd=2)
    

    Venables and Ripley's MASS book has an entire section on smoothing that also covers splines and polynomials -- but loess() is just about everybody's favourite.