---
title: "get-started"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{get-started}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
## Installation
The package is available from [GitHub](https://github.com/hoehleatsu/quantileCI), [R-universe](https://hoehleatsu.r-universe.dev/ui#builds) or CRAN.
Once installed the package needs to be loaded:
```{r setup}
library(quantileCI)
```
## Minimal working example
A very simple example to compute two different 95% confidence intervals for the 25th percentile based on a sample of size 25 from a standard normal distribution. The true value is `qnorm(0.25)`=`r qnorm(0.25)`.
```{r}
x <- rnorm(25)
#Compute 25% quantile of the sample as inverse of ECDF (i.e. type=1)
quantile(x, prob=0.25, type=1)
#Compute confidence interval for it (two methods)
quantileCI::quantile_confint_exact(x=x, p=0.25, conf.level=0.95)
quantileCI::quantile_confint_nyblom(x=x, p=0.25, conf.level=0.95)
```
## Flint Water Monitoring
In this example we look at the use of quantile as part of the water monitoring in the city of Fling. For details see the blog post [Beware the Argument: The Flint Water Crisis and Quantiles](https://staff.math.su.se/hoehle/blog/2017/06/18/quantiles.html).
```{r}
# Load Flint data, see blog post for details
data(flint)
#Compute type=5 quantile as in https://www.youtube.com/watch?v=9pql00zr700
quantile(flint$lead, probs=0.9, type=5)
##Compute type=1
quantile(flint$lead, probs=0.9, type=1)
##Compute corresponding non-parametric 90% CI
quantileCI::quantile_confint_exact(flint$lead, p=0.9, conf.level=0.9)
```
## Coverage
The `qci_coverage_one_sim` function can be used to investigate the coverage of the confidence interval method using simulation. Below a small example showing that the exact method is too conservative, i.e. the coverage is larger than the nominal level. This means that the intervals wider than necessary.
```{r}
# Investigate coverage of the exact CIs
quantile_confints <- function(x, p, conf.level, x_is_sorted=FALSE) {
if (!x_is_sorted) { x <- sort(x)}
data.frame(exact=quantile_confint_exact(x=x, p=p, conf.level=conf.level))
}
# Coverage is above the nominal 90%
set.seed(123)
sim <- unlist(replicate(1000,qci_coverage_one_sim(quantile_confints, n=nrow(flint), rfunc=rnorm, qfunc=qnorm, p=0.9, conf.level=0.9)))
mean(sim)
```