Fictitious data. Suppose you have a sample x
of size $n = 50$ from a population
with an unknown mean and distribution. Then in R we have:
x
[1] 7.1 26.9 41.1 22.8 18.2 19.5 37.7 39.1 17.5 3.3
[11] 6.1 2.3 12.5 11.7 29.1 9.5 6.5 26.1 33.0 9.5
[21] 6.5 0.5 8.0 24.1 79.4 4.3 39.8 0.3 36.8 2.2
[31] 2.1 3.0 9.9 5.0 9.4 181.3 0.7 4.3 14.8 0.4
[41] 3.1 7.3 4.7 1.6 26.5 6.9 2.7 3.6 10.1 0.4
summary(x)
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.300 3.375 8.700 17.584 23.775 181.300
stripchart(x, pch="|")
There are many styles of nonparametric and parametric bootstrap confidence intervals. I will compare three of them with two "traditional" CIs.
Questionable t CI. Obviously, the observations are strongly right-skewed. But suppose
we believe, somewhat too naively and strongly, in the legendary robustness of
t methods against departure from normality. So we try a 95% t confidence interval, which is $(9.57, 25.59).$ In R, this is part of the t.test
procedure.
t.test(x)$conf.int
[1] 9.574129 25.593871
attr(,"conf.level")
[1] 0.95
Nonparametric bootstrap CI. Not knowing the family of distributions from which this sample was randomly chosen, we might try a 95% nonparametric
confidence interval for the population mean $\mu$ (which we
assume exists). To get an idea how variable the sample mean
$\bar X$ is as an estimate of $\mu,$ we re-sample many samples of size $50$ from x
with replacement. For each re-sample,
we find the the distance between the observed mean $\bar X = 17.584$ and the mean of the re-sample. The distribution of
these many differences d.re
can be used to find the
95% nonparametric bootstrap CI $(9.12, 23.82).$
set.seed(2021)
# non-parametric bootstrap, re-sample from sample
d.re = replicate(3000, mean(sample(x, 50, rep=T))-a.obs)
UL = quantile(d.re,c(.975,.025))
a.obs - UL
97.5% 2.5%
9.12105 23.81885
Parametric bootstrap CI. Now suppose that we know that the population is exponentially distributed, so that $X_i \stackrel{iid}{\sim}\mathsf{EXP = \mathrm{rate}} = 1/20,$ with $\mu = 20.$ Then we can make
a 95% parametric CI for $\mu$ by taking re-samples from
a population with mean $1/\bar X = 1/17.584.$ [Instead of
re-sampling from the sample x
, we re-sample from
an exponential distribution 'suggested by' the sample x
.]
For my fictitious data x
the resulting 95% parametric
bootstrap CI is $(12.44, 22.13).$ This interval is narrower
than the nonparametric bootstrap CI because it is based
on the additional information that the population is exponential. [I did more re-samples here because
parametric bootstrap CIs with larger numbers of resamples
may be noticably more accurate.]
set.seed(2021)
# parametric bootstrap, sample 50 from EXP(rate=1/a)
d.re = replicate(10000, mean(rexp(50,1/obs.a))-a.obs)
UL = quantile(d.re,c(.975,.025))
a.obs - UL
97.5% 2.5%
12.44381 22.13479
Parametric CI, treating the mean as a scale parameter. For some right-skewed distributions, the mean $\mu$ is more accurately viewed as a scale parameter than a location parameter. If we take this point of view, it makes more sense to look at ratios of re-sampled means to observed means $\bar X^*/\bar X_{obs}$ rather than differences $\bar X^* - \bar X_{obs},$ for each re-sample. This style of parametric bootstrap gives the reault $(13.66, 23.77).$
set.seed(2021)
# parametric bootstrap of ratios, sample 50 from EXP(rate=1/a)
r.re = replicate(3000, mean(rexp(50,1/obs.a))/a.obs)
UL = quantile(r.re,c(.975,.025))
a.obs / UL
97.5% 2.5%
13.66134 23.76732
If you know it: Exact CI. However, if the population is known to be exponential, then we know that $\frac{\bar X}{\mu} \sim\mathsf{Gamma}(\mathrm{shape}=1/n, \mathrm{rate}=1/n).$ We can 'pivot' this relationship to make an exact 95% CI for $\mu$ of the form $\left(\frac{\bar X}{U}, \frac{\bar X}{L}\right),$ where $L$ and $U$ cut probability $0.025$ from the lower and upper tails of $\mathsf{Gamma}(1/50, 1/50).$ This exact 95% CI for $\mu$ is $(13.57, 23.69).$
mean(x)/qgamma(c(.975,.025), 50, 50)
[1] 13.57196 23.69111
Of course, this is the best 95% CI of the four on this page because is strictly based on statistical theory. Sometimes one may not know (or remember) that an exact CI is available.
Note: The following R code was used to sample the fictitious data used in this illustration:
set.seed(1203)
x = round(rexp(50,1/20),1)