The original code comes from https://stats.stackexchange.com/questions/99829/how-to-obtain-a-confidence-interval-for-a-percentile/284970#284970
test.coverage.via.simulation <- function(lu, n, p, alpha = 0.1) { ## Purpose: ## Use simulation to estimate the coverage probability of the quantile rank-based CI. ## ## Reference (code origin): ## https://stats.stackexchange.com/questions/99829/how-to-obtain-a-confidence-interval-for-a-percentile/284970#284970 ## ## Arguments: ## - lu: a vector of two numbers for the lower and upper limit of the CI in ranks. ## - n: sample size ## - p: quantile probability cutpoint (between 0 and 1) ## - alpha: type I error level (default to 0.1 so a 90% CI is calculated) ## ## Return: ## Average coverage probability from 10,000 simulated samples. ## ________________________________________________ ## Generate many random samples of size "n" from a known distribution ## and compute actual CI's from those samples using the given rank-based CI. set.seed(1) n.sim <- 1e4 index <- function(x, i) ifelse(i == Inf, Inf, ifelse(i == -Inf, -Inf, x[i])) sim <- replicate(n.sim, index(sort(rnorm(n)), lu)) ## Compute the actual proportion of those intervals that cover the theoretical quantile. F.q <- qnorm(p) covers <- sim[1, ] <= F.q & F.q <= sim[2, ] mean.coverage <- mean(covers) message("Mean Coverage Over 10,000 Simulated Samples = ", signif(mean.coverage, 4)) } if (F) { # Unit Test lu <- c(85, 97) n <- 100 p <- 0.9 alpha <- 0.05 test.coverage.via.simulation(lu, n, p, alpha) ## Mean Coverage Over 10,000 Simulated Samples = 0.9528 }