How to calculate confidence interval using the “bootstrap function” in R

丶灬走出姿态 提交于 2019-12-01 12:39:52

You could do this by hand.

library(bootstrap) 
data('law')
names(law) <- tolower(names(law))

set.seed(1)
theta <- function(ind) cor(law[ind, 1], law[ind, 2], method = "pearson")
law.boot <- bootstrap(1:15, 1000, theta) 

ci1 <- qnorm(p=c(.025, .975), 
            mean=mean(law.boot$thetastar), 
            sd=sd(law.boot$thetastar))

Gives:

> ci1
[1] 0.5055894 1.0268053

Compared to bootstrap from the scratch:

set.seed(1)
FX <- function(x) with(x, cor(lsat, gpa))
boot <- replicate(1000, FX(law[sample(nrow(law), round(nrow(law)), 
                                     replace=TRUE), ]))

ci2 <- qnorm(p=c(.025, .975), 
            mean=mean(boot), 
            sd=sd(boot))

Gives:

> ci2
[1] 0.5065656 1.0298412

Thus ci1 and ci2 seem to be similar.

However, note: I've adapted the bootstrap to 1,000 repetitions. With just 100 repetitions the difference is naturally somewhat larger.

Note 2: My answer considers CIs as asked. However, probably it's more appropriate to use the percentiles. See the thothal's answer how to obtain them.

There are different ways of calculating the CI for the bootstrap estimator (cf. to this Wikipedia article for instance.

The easiest is to tale the 2.5% and 97.5% quantiles from the bootstrapped coefficients (Percentile Bootstrap in the Wikipedia article):

quantile(law.boot$thetastar, c(0.025, 0.975))
#      2.5%     97.5% 
# 0.4528745 0.9454483 

Basic Bootstrap would be calculated as

2 * mean(law.boot$thetastar) - quantile(law.boot$thetastar, c(0.975, 0.025))
#     97.5%      2.5% 
# 0.5567887 1.0493625
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!