I am asked to conduct a Monte Carlo study to estimate the coverage probabilities of the standard normal bootstrap confidence interval, the basic bootstrap confidence interval, and the percentile confidence interval.
I am using the following code:
------------ START --------------------- B <- 100 # number of replicates mu <- 1 # for generating data: true mean sd <- 1 # for generating data: true sd Data <- rnorm(N, mu, sd) # simulated data: original sample getM <- function(orgDV, idx) {bsM <- mean(orgDV[idx]) # M* bsS2M <- (((N-1) / N) * var(orgDV[idx])) / N # S^2*(M) c(bsM, bsS2M) } library(boot) # for boot(), boot.ci(), R=50 bootstrap replicates bOot = boot(Data, statistic=getM, R=50) boot.ci(bOot, conf=0.95, type=c("basic", "perc")) ---------------- END -----------------
I need to "wrap" this into a function that generates a vector with bootstrap confidence intervals so that I can further determine the proportion of times that the confidence intervals miss on the left, and the proportion of times that the confidence intervals miss on the right.
I am a novice to R programming and played around with some "for loops" without success. Can you direct me to where I need to go.
Best Answer
You may get better answers on stackoverflow, as this question relates more to programming than statistics.
It's not completely clear what you would like the code to produce, since a vector is 1 dimensional, so you could hold 1 item in the vector for each bootstrap confidence interval – but the information you want includes more than 1 thing – the type, the confidence level, the upper bound and the lower bound etc. So one simple way to do this is to use a list
and enclose your code in a for
loop, and add the object (which is in fact another list) returned by boot.ci
like this:
require(boot) # for boot(), boot.ci() N <-100 B <- 100 # number of replicates mu <- 1 # for generating data: true mean sd <- 1 # for generating data: true sd getM <- function(orgDV, idx) {bsM <- mean(orgDV[idx]) # M* bsS2M <- (((N-1) / N) * var(orgDV[idx])) / N # S^2*(M) c(bsM, bsS2M) } N.CI <- 10 # number of botstrap confidence intervals list.CI <- list(N.CI) # a list to hold the objects returned by boot.ci for (i in 1:N.CI ) { Data <- rnorm(N, mu, sd) # simulated data: original sample bOot = boot(Data, statistic=getM, R=50) list.CI[[i]] <- boot.ci(bOot, conf=0.95, type=c("basic", "perc")) }
list.CI
now contains 10 boostrap confidence intervals. You can access each one by list.CI[[1]]
, list.CI[[2]]
etc, and then you can access the components of each CI like this:
> list.CI[[i]]$perc conf [1,] 0.95 1.28 49.73 0.7794841 1.318904 > list.CI[[i]]$basic conf [1,] 0.95 49.73 1.28 0.7980327 1.337453
Perhaps a better way, which will help your subsequent analysis is to store the bootstrap CIs in a matrix or a dataframe instead of a list, but I'll leave that for you to do.
Similar Posts:
- Solved – how can I calculate confidence interval with small sample in R
- Solved – Confidence interval using percentile and computed manually giving different results
- Solved – using bootstrap to calculate t-test p-value and CI in r
- Solved – What could be the reason for potentially unstable bootstrap bca confidence intervals when R=10000
- Solved – Computing confidence intervals for count data