ans = matrix(0,4,4, dimnames = list(c("\'TRUTH\'", "CLT", "boot.norm", "boot.quant"), c("mean", "se", "L", "U"))) ## generate 50 observations from exponential distribution ## n = 50 data = rexp(n) hist(data) ## use law of large numbers to find 'true' population ## sample.truth = matrix(0,6000) for (i in 1:length(sample.truth)) { sample.truth[i] = mean(rexp(n)) } ans[1,1] = mean(sample.truth) ans[1,2] = sd(sample.truth) ans[1,3] = quantile(sample.truth, .025) ans[1,4] = quantile(sample.truth, .0975) ## construct classical Z confidence interval, using CLT ## ans[2,1] = mean(data) ans[2,2] = sd(data) / sqrt(n) ans[2,3] = ans[2,1] - qnorm(.975)*ans[2,2] ans[2,4] = ans[2,1] + qnorm(.975)*ans[2,2] ## obtain 1000 bootstrap samples ## B = 1000 sample.boot = matrix(0, B) for (i in 1:B) { sample.boot[i] = mean(sample(data, replace=TRUE)) } ## use bootstrap standard error for CI ### ans[3,1] = mean(sample.boot); ans[3,2] = sd(sample.boot) ans[3,3] = ans[3,1] - qnorm(.975)*ans[3,2] ans[3,4] = ans[3,1] + qnorm(.975)*ans[3,2] ## use bootstrap quantiles for CI ## ans[4,1] = mean(sample.boot) ## not used for CI ans[4,2] = sd(sample.boot) ## not used for CI ans[4,3] = quantile(sample.boot, .025) ans[4,4] = quantile(sample.boot, .975)