File size: 635 Bytes
661b2db | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | """Grouped bootstrap utilities."""
from __future__ import annotations
import numpy as np
def grouped_indices(groups: np.ndarray, rng: np.random.Generator) -> np.ndarray:
groups = np.asarray(groups)
unique = np.unique(groups)
sampled = rng.choice(unique, size=len(unique), replace=True)
return np.concatenate([np.flatnonzero(groups == group) for group in sampled])
def percentile_interval(values: np.ndarray, level: float = 0.95) -> tuple[float, float]:
tail = (1.0 - level) / 2.0
values = np.asarray(values, dtype=float)
return float(np.quantile(values, tail)), float(np.quantile(values, 1.0 - tail))
|