[R] Loess CI

sw1 oosw1oo at comcast.net
Sat Mar 24 12:28:16 CET 2012

I am trying to (semi) calculate the confidence intervals for a loess smoother
(function: loess()), but  have been thus far unsuccessful. 

The CI for the loess predicted values, yhat, are apparently

yhat +- t*s * sqrt(w^2), where s is the residual sum of squares and w is the
weight function

Correct me of I'm wrong, but R uses the tricubic function (1-abs(z)^3)^3,
where z = (x-xi)/h, where h is the the number of neighboring values within
the bandwidth. Assuming that's correct, here is my code (for the first
observation in x1:

x1 <- 1:156 								# x
y <- arima.sim(list(order=c(2,0,0), ar=c(1,-.1)), n=156)	# randomly
generated y
lo1 <- loess(y ~ x1, span=0.4)					# loess smoother for y ~ x

df <- lo1$one.delta							# estimated df from r
wconstant <- summary(lo1)[17]$weights				# set weight; otherwise 1 (as in
this case)
res <- residuals(lo1)							# y-yhat
ss <- sum(wconstant *res^2)
s <- sqrt(ss/df)								# r terms this residual standard error

x0 <- x1[1]					# focal x for first observation
dist1 <- abs(x1 - x0)			# distance from focal x
h <- sort(dist1)[.4*length(x1)]	# bandwidth for span: bandwidth =
inwindow <- dist1 <= h			# observations within window
d <- dist1[dist1 <= h]
z <- d/h
w1 <- (1-abs(z)^3)^3			
w2 <- sum(w1^2)
s*sqrt(w2)					# calculated sefit

> s*sqrt(w2)
[1] 8.052887

this is quite high, and r gives me

> predict(lo1, se=T)$se.fit[1]

although I did calculate s correctly

> lo1$s
[1] 1.484307
> s
[1] 1.484307

So clearly something is wrong with the weight part of my equation. I'm not
sure whether my CI equation doesn't match R's, my weight function is wrong,
R does things quite differently than above, or simply my code is off. Any
help would be great.

View this message in context: http://r.789695.n4.nabble.com/Loess-CI-tp4501215p4501215.html
Sent from the R help mailing list archive at Nabble.com.

More information about the R-help mailing list