Skip to content

Stats

jnlr.stats

clopper_pearson_intervals

clopper_pearson_intervals(k: int, n: int, alpha: float = 0.05)

Compute Clopper-Pearson confidence intervals for a binomial proportion. Args: k: number of successes n: number of trials alpha: significance level (default 0.05 for 95% CI)

Returns:

Type Description
(lower_bound, upper_bound)

tuple of lower and upper bounds of the confidence interval

Source code in src/jnlr/stats.py
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
@jax.jit
def clopper_pearson_intervals(k:int, n:int, alpha:float=0.05):
    """
    Compute Clopper-Pearson confidence intervals for a binomial proportion.
    Args:
        k: number of successes
        n: number of trials
        alpha: significance level (default 0.05 for 95% CI)

    Returns:
        (lower_bound, upper_bound): tuple of lower and upper bounds of the confidence interval

    """
    k = jnp.asarray(k, dtype=jnp.float32)
    n = jnp.asarray(n, dtype=jnp.float32)

    def case_k0(_):
        upper = beta_ppf_approx(1 - alpha / 2, 1.0, n - k + 1)
        return 0.0, upper

    def case_kn(_):
        lower = beta_ppf_approx(alpha / 2, k + 1, 1.0)
        return lower, 1.0

    def case_else(_):
        lower = beta_ppf_approx(alpha / 2, k, n - k + 1)
        upper = beta_ppf_approx(1 - alpha / 2, k + 1, n - k)
        return lower, upper

    return lax.cond(
        k == 0,
        case_k0,
        lambda _: lax.cond(k == n, case_kn, case_else, None),
        operand=None
    )