Note
Go to the end to download the full example code.
Estimate a confidence interval of a quantileΒΆ
In this example, we introduce two methods to estimate a confidence interval of the level quantile () of the distribution of a scalar random variable . Both methods use the order statistics to estimate:
an asympotic confidence interval with confidence level ,
an exact upper bounded confidence interval with confidence level .
In this example, we consider the quantile of level , with a confidence level of .
import openturns as ot
import math as m
ot.Log.Show(ot.Log.NONE)
We consider a random vector which is the output of a model and an input distribution.
model = ot.SymbolicFunction(["x1", "x2"], ["x1^2+x2"])
R = ot.CorrelationMatrix(2)
R[0, 1] = -0.6
inputDist = ot.Normal([0.0, 0.0], R)
inputDist.setDescription(["X1", "X2"])
inputVector = ot.RandomVector(inputDist)
# Create the output random vector
output = ot.CompositeRandomVector(model, inputVector)
We define the level of the quantile and the confidence level .
alpha = 0.95
beta = 0.90
We generate a sample of the variable.
n = 10**4
sample = output.getSample(n)
We get the empirical estimator of the level quantile which is the -th order statistics evaluated on the sample.
empiricalQuantile = sample.computeQuantile(alpha)
print(empiricalQuantile)
[4.27602]
The asymptotic confidence interval of level is such that:
where is the level quantile of the standard normal distribution (see [delmas2006] proposition 11.1.13).
Then we have:
a_beta = ot.Normal(1).computeQuantile((1.0 + beta) / 2.0)[0]
i_n = int(n * alpha - a_beta * m.sqrt(n * alpha * (1.0 - alpha)))
j_n = int(n * alpha + a_beta * m.sqrt(n * alpha * (1.0 - alpha)))
print(i_n, j_n)
# Get the sorted sample
sortedSample = sample.sort()
# Get the asymptotic confidence interval :math:`\left[ X_{(i_n)}, X_{(j_n)}\right]`
# Care: the index in the sorted sample is :math:`i_n-1` and :math:`j_n-1`
infQuantile = sortedSample[i_n - 1]
supQuantile = sortedSample[j_n - 1]
print(infQuantile, empiricalQuantile, supQuantile)
9464 9535
[4.13944] [4.27602] [4.39912]
The empirical quantile was estimated with the -th order statistics evaluated on the sample of size . We define and we evaluate the minimum sample size that ensures that the order statistics is greater than with the confidence .
i = n - int(n * alpha)
minSampleSize = ot.Wilks.ComputeSampleSize(alpha, beta, i)
print(minSampleSize)
10583
Here we directly ask for the evaluation of the upper bounded confidence interval: the Wilks class estimates the previous minimum sample size, generates a sample with that size and extracts the empirical quantile of order .
algo = ot.Wilks(output)
upperBoundQuantile = algo.computeQuantileBound(alpha, beta, i)
print(upperBoundQuantile)
[4.47055]