16
votes

I didn't find any satisfactory answer to the confidence intervals (CIs) for LOWESS regression line of the 'stats' package of R:

plot(cars, main = "lowess(cars)")
lines(lowess(cars), col = 2)

But I'm unsure how to draw a 95% CI around it?? However, I know I could get the estimated variance from

V = s^2*sum(w^2)

where, s2= estimated error variance, and w=weights applied to the X. Therefore, the 95% CIs should be

Y plus/minus 2*sqrt(V(Y))

I know there's a way of getting the CIs from loess fit, but I'd rather prefer LOWESS because it is robust. Thanks for your suggestions.

1
Take a look at the ellipse package - Rich Scriven
Oh, right. Good point @rawr. Do you want the confidence bands or confidence ellipse? - Rich Scriven
Why do you say loess isn't robust? ?loess.control for example documents the number of iterations to use in robust fitting. If you want SEs from a LO(W)ESS fit, I'd probably use loess() and predict.loess(). - Gavin Simpson

1 Answers

33
votes

You can do this with predict() and loess(). lowess is older than loess and has fewer features, though it is a bit faster. But in this context, I'd use loess as follows.

plot(cars)
plx<-predict(loess(cars$dist ~ cars$speed), se=T)

lines(cars$speed,plx$fit)
lines(cars$speed,plx$fit - qt(0.975,plx$df)*plx$se, lty=2)
lines(cars$speed,plx$fit + qt(0.975,plx$df)*plx$se, lty=2)

lowess example