Thank you very much for your help, Greg!

Here's my ludicrous vision/attempt/whatever :o)


### Idea for making a density() with confidence interval ###

xx <- faithful$eruptions

xx.hist <- hist(xx, breaks="FD", freq=F)

# plot(xx.hist$mids, xx.hist$density)
# gives a rough "plot(density(xx))" output

# xx.hist$counts is later used to "repeat" observations
# for loess(), making the CI band narrower where there
# are more observations (or data in each histogram "bin")

x <- c() # preparing variables...
y <- c()

for (i in 1:length(xx.hist$mids)) {
        # going through each xx.hist$mids/xx.hist$density pair
        for (j in 1:xx.hist$counts[i]) {
        # ...and repeating observations according to xx.hist$counts
                x <- append(x, xx.hist$mids[i])
                y <- append(y, xx.hist$density[i])              
                }
        }

xx.loess <- loess(y ~ x, span=1)
xx.predict <- predict(xx.loess, se=T)

plot(x,y)
lines(x, xx.predict$fit, col="red")
lines(x, xx.predict$fit + 1.96 * xx.predict$s, col="red", lty=5)
lines(x, xx.predict$fit - 1.96 * xx.predict$s, col="red", lty=5)


# Kind regards, David

> Here is a simple approach that uses bootstrapping (this could
> probably be improved by using better bootstrap estimates and not
> ignoring the dependence between points):
> 
> xx <- faithful$eruptions
> 
> fit1 <- density(xx)
> 
> fit2 <- replicate(10000, { x <- sample(xx, replace=TRUE); density(x,
> from=min(fit1$x), to=max(fit1$x))$y } )
> 
> fit3 <- apply(fit2, 1, quantile, c(0.025,0.975) )
> 
> plot(fit1, ylim=range(fit3)) polygon( c(fit1$x, rev(fit1$x)),
> c(fit3[1,], rev(fit3[2,])), col='grey', border=F) lines(fit1)
> 
>

______________________________________________
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.

Reply via email to