SAMPLE_EQTAIL_CI
This function computes an equal-tailed Bayesian credible interval directly from posterior samples without assuming a closed-form distribution.
For confidence level c and posterior samples \{x_i\}_{i=1}^{n}, the interval uses empirical quantiles at probabilities \frac{1-c}{2} and 1-\frac{1-c}{2}.
[x_L, x_U] = [\hat{Q}((1-c)/2),\; \hat{Q}(1-(1-c)/2)]
where \hat{Q} is the sample quantile function computed from the posterior draws.
Excel Usage
=SAMPLE_EQTAIL_CI(samples, confidence)
samples(list[list], required): 2D array of posterior sample draws (unitless).confidence(float, optional, default: 0.95): Credible interval probability level (0 to 1).
Returns (list[list]): 2D table with sample median and lower/upper equal-tailed credible bounds.
Example 1: Equal-tailed interval from symmetric posterior samples
Inputs:
| samples | confidence | ||||
|---|---|---|---|---|---|
| -2 | -1 | 0 | 1 | 2 | 0.8 |
Excel formula:
=SAMPLE_EQTAIL_CI({-2,-1,0,1,2}, 0.8)
Expected output:
| Median | Lower | Upper |
|---|---|---|
| 0 | -1.6 | 1.6 |
Example 2: Equal-tailed interval from positive posterior samples
Inputs:
| samples | confidence | ||
|---|---|---|---|
| 0.5 | 0.9 | 1.2 | 0.95 |
| 1.6 | 2 | 2.4 |
Excel formula:
=SAMPLE_EQTAIL_CI({0.5,0.9,1.2;1.6,2,2.4}, 0.95)
Expected output:
| Median | Lower | Upper |
|---|---|---|
| 1.4 | 0.55 | 2.35 |
Example 3: Equal-tailed interval from right-skewed posterior draws
Inputs:
| samples | confidence | |||||
|---|---|---|---|---|---|---|
| 0.2 | 0.3 | 0.4 | 0.8 | 1.5 | 3 | 0.9 |
Excel formula:
=SAMPLE_EQTAIL_CI({0.2,0.3,0.4,0.8,1.5,3}, 0.9)
Expected output:
| Median | Lower | Upper |
|---|---|---|
| 0.6 | 0.225 | 2.625 |
Example 4: Multi-row sample layout is flattened
Inputs:
| samples | confidence | |
|---|---|---|
| 1 | 2 | 0.85 |
| 3 | 4 | |
| 5 | 6 |
Excel formula:
=SAMPLE_EQTAIL_CI({1,2;3,4;5,6}, 0.85)
Expected output:
| Median | Lower | Upper |
|---|---|---|
| 3.5 | 1.375 | 5.625 |
Python Code
import numpy as np
def sample_eqtail_ci(samples, confidence=0.95):
"""
Compute an equal-tailed credible interval from posterior samples using empirical quantiles.
See: https://numpy.org/doc/stable/reference/generated/numpy.quantile.html
This example function is provided as-is without any representation of accuracy.
Args:
samples (list[list]): 2D array of posterior sample draws (unitless).
confidence (float, optional): Credible interval probability level (0 to 1). Default is 0.95.
Returns:
list[list]: 2D table with sample median and lower/upper equal-tailed credible bounds.
"""
try:
def to2d(x):
return [[x]] if not isinstance(x, list) else x
samples = to2d(samples)
if not isinstance(samples, list) or not all(isinstance(row, list) for row in samples):
return "Error: Invalid input - samples must be a 2D list"
if not (0 < confidence < 1):
return "Error: confidence must be between 0 and 1"
flat = []
for row in samples:
for value in row:
try:
flat.append(float(value))
except (TypeError, ValueError):
continue
if len(flat) < 2:
return "Error: samples must contain at least two numeric values"
sorted_samples = np.sort(np.array(flat, dtype=float))
tail_probability = (1 - confidence) / 2
lower = float(np.quantile(sorted_samples, tail_probability))
upper = float(np.quantile(sorted_samples, 1 - tail_probability))
median = float(np.quantile(sorted_samples, 0.5))
return [
["Median", "Lower", "Upper"],
[median, lower, upper]
]
except Exception as e:
return f"Error: {str(e)}"Online Calculator
2D array of posterior sample draws (unitless).
Credible interval probability level (0 to 1).