peeksafe 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +325 -0
- package/LICENSE +190 -0
- package/NOTICE +78 -0
- package/README.md +490 -2
- package/RESEARCH-NOTES.md +274 -0
- package/dist/baseline.d.ts +45 -0
- package/dist/baseline.d.ts.map +1 -0
- package/dist/baseline.js +49 -0
- package/dist/baseline.js.map +1 -0
- package/dist/check.d.ts +64 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +172 -0
- package/dist/check.js.map +1 -0
- package/dist/cluster.d.ts +328 -0
- package/dist/cluster.d.ts.map +1 -0
- package/dist/cluster.js +606 -0
- package/dist/cluster.js.map +1 -0
- package/dist/errors.d.ts +108 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +192 -0
- package/dist/errors.js.map +1 -0
- package/dist/evidence.d.ts +15 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +30 -0
- package/dist/evidence.js.map +1 -0
- package/dist/frontier.d.ts +271 -0
- package/dist/frontier.d.ts.map +1 -0
- package/dist/frontier.js +505 -0
- package/dist/frontier.js.map +1 -0
- package/dist/gate.d.ts +175 -0
- package/dist/gate.d.ts.map +1 -0
- package/dist/gate.js +200 -0
- package/dist/gate.js.map +1 -0
- package/dist/index.d.ts +60 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/plan.d.ts +280 -0
- package/dist/plan.d.ts.map +1 -0
- package/dist/plan.js +626 -0
- package/dist/plan.js.map +1 -0
- package/dist/rand.d.ts +17 -0
- package/dist/rand.d.ts.map +1 -0
- package/dist/rand.js +104 -0
- package/dist/rand.js.map +1 -0
- package/dist/stats.d.ts +401 -0
- package/dist/stats.d.ts.map +1 -0
- package/dist/stats.js +1304 -0
- package/dist/stats.js.map +1 -0
- package/dist/stop.d.ts +164 -0
- package/dist/stop.d.ts.map +1 -0
- package/dist/stop.js +270 -0
- package/dist/stop.js.map +1 -0
- package/package.json +62 -3
- package/src/baseline.ts +72 -0
- package/src/check.ts +238 -0
- package/src/cluster.ts +842 -0
- package/src/errors.ts +275 -0
- package/src/evidence.ts +62 -0
- package/src/frontier.ts +837 -0
- package/src/gate.ts +363 -0
- package/src/index.ts +206 -0
- package/src/plan.ts +968 -0
- package/src/rand.ts +137 -0
- package/src/stats.ts +1663 -0
- package/src/stop.ts +464 -0
package/dist/plan.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|
package/dist/rand.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface Rand {
|
|
2
|
+
(): number;
|
|
3
|
+
/** A single Bernoulli draw at rate `p`. */
|
|
4
|
+
bernoulli(p: number): boolean;
|
|
5
|
+
/** A uniform integer in `[0, nExclusive)`. */
|
|
6
|
+
int(nExclusive: number): number;
|
|
7
|
+
/** A uniform choice. Throws on an empty array rather than returning undefined. */
|
|
8
|
+
pick<T>(xs: readonly T[]): T;
|
|
9
|
+
/** A standard normal draw, via Box-Muller. */
|
|
10
|
+
normal(): number;
|
|
11
|
+
}
|
|
12
|
+
/** FNV-1a. Used to derive an independent seed per named stream. */
|
|
13
|
+
export declare function hash32(s: string): number;
|
|
14
|
+
export declare function makeRand(seed: number | string): Rand;
|
|
15
|
+
/** A stream keyed by name, reproducible regardless of call order elsewhere. */
|
|
16
|
+
export declare const streamFor: (...parts: Array<string | number>) => Rand;
|
|
17
|
+
//# sourceMappingURL=rand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rand.d.ts","sourceRoot":"","sources":["../src/rand.ts"],"names":[],"mappings":"AAwBA,MAAM,WAAW,IAAI;IACnB,IAAI,MAAM,CAAC;IACX,2CAA2C;IAC3C,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,8CAA8C;IAC9C,GAAG,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAChC,kFAAkF;IAClF,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;IAC7B,8CAA8C;IAC9C,MAAM,IAAI,MAAM,CAAC;CAClB;AAgCD,mEAAmE;AACnE,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAOxC;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwDpD;AAED,+EAA+E;AAC/E,eAAO,MAAM,SAAS,aAAc,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,KAAG,IAC1B,CAAC"}
|
package/dist/rand.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* rand.ts: deterministic randomness.
|
|
3
|
+
*
|
|
4
|
+
* Everything stochastic in peeksafe (the Monte Carlo checks in `test/`, and any
|
|
5
|
+
* simulation a caller wants to run) draws from here.
|
|
6
|
+
*
|
|
7
|
+
* The generator is a linear congruential generator feeding an integer avalanche.
|
|
8
|
+
* The LCG alone is not good enough: consecutive outputs of an LCG sit on a
|
|
9
|
+
* lattice, which visibly biases Bernoulli streams, and a Bernoulli stream is the
|
|
10
|
+
* only thing this library ever simulates. The mixer decorrelates without adding
|
|
11
|
+
* a dependency and without losing determinism.
|
|
12
|
+
*
|
|
13
|
+
* Both sets of constants are published parameters rather than anybody's source
|
|
14
|
+
* code, and both are named in NOTICE.
|
|
15
|
+
*
|
|
16
|
+
* The exact stream matters. The measurements in the README and in
|
|
17
|
+
* `test/paper.test.ts` were produced by this generator, so replacing it with a
|
|
18
|
+
* better one (sfc32, pcg) would change every reported figure. That is a fine
|
|
19
|
+
* thing to do deliberately, with the numbers re-derived and the README updated.
|
|
20
|
+
* It is not a fine thing to do by accident, which is why the constants are
|
|
21
|
+
* spelled out here rather than imported.
|
|
22
|
+
*/
|
|
23
|
+
import { PeeksafeError, requireProbability } from "./errors.js";
|
|
24
|
+
/**
|
|
25
|
+
* LCG with Knuth's multiplier 1664525 and increment 1013904223, modulo 2^32.
|
|
26
|
+
*
|
|
27
|
+
* These are tabulated constants (Knuth, TAOCP vol. 2), reprinted in most
|
|
28
|
+
* numerical texts. Exact in float64: 2^32 * 1664525 sits under 2^53, so the
|
|
29
|
+
* product never loses a bit before the mask.
|
|
30
|
+
*/
|
|
31
|
+
function lcg(seed) {
|
|
32
|
+
let s = seed >>> 0;
|
|
33
|
+
return () => {
|
|
34
|
+
s = (s * 1664525 + 1013904223) >>> 0;
|
|
35
|
+
return s / 0x100000000;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 32-bit avalanche: the `lowbias32` multipliers from Chris Wellons' hash
|
|
40
|
+
* function prospector, which he placed in the public domain. Two rounds of
|
|
41
|
+
* xor-shift-multiply, chosen by search for low bias rather than derived.
|
|
42
|
+
*/
|
|
43
|
+
function mix32(x) {
|
|
44
|
+
let h = x >>> 0;
|
|
45
|
+
h ^= h >>> 16;
|
|
46
|
+
h = Math.imul(h, 0x7feb352d) >>> 0;
|
|
47
|
+
h ^= h >>> 15;
|
|
48
|
+
h = Math.imul(h, 0x846ca68b) >>> 0;
|
|
49
|
+
h ^= h >>> 16;
|
|
50
|
+
return h >>> 0;
|
|
51
|
+
}
|
|
52
|
+
/** FNV-1a. Used to derive an independent seed per named stream. */
|
|
53
|
+
export function hash32(s) {
|
|
54
|
+
let h = 0x811c9dc5;
|
|
55
|
+
for (let i = 0; i < s.length; i++) {
|
|
56
|
+
h ^= s.charCodeAt(i);
|
|
57
|
+
h = Math.imul(h, 0x01000193) >>> 0;
|
|
58
|
+
}
|
|
59
|
+
return h >>> 0;
|
|
60
|
+
}
|
|
61
|
+
export function makeRand(seed) {
|
|
62
|
+
// `>>> 0` folded NaN, Infinity, 1.5 and 2^32 onto 0, and the old 0-to-1 remap put seed 1 there too.
|
|
63
|
+
if (typeof seed === "number" && !(Number.isInteger(seed) && seed >= 0 && seed < 0x100000000)) {
|
|
64
|
+
throw new PeeksafeError("PEEKSAFE_E_STAT_DOMAIN", `makeRand: a numeric seed must be an integer in [0, 2^32), got ${seed}`, {
|
|
65
|
+
detail: { seed },
|
|
66
|
+
hint: "pass a string to key a stream by name; it is hashed with hash32",
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const s = typeof seed === "string" ? hash32(seed) : seed;
|
|
70
|
+
// Hull-Dobell: an odd increment and a multiplier of 1 mod 4 give a full period from every seed, 0 included.
|
|
71
|
+
const base = lcg(s);
|
|
72
|
+
const next = (() => mix32(Math.floor(base() * 0x100000000)) / 0x100000000);
|
|
73
|
+
// `next() < p` is false for every draw at NaN, so a rate that failed to compute simulated a case that never passes.
|
|
74
|
+
next.bernoulli = (p) => {
|
|
75
|
+
requireProbability(p, "p", "rand.bernoulli");
|
|
76
|
+
return next() < p;
|
|
77
|
+
};
|
|
78
|
+
next.int = (n) => {
|
|
79
|
+
if (!Number.isInteger(n) || n < 1) {
|
|
80
|
+
throw new PeeksafeError("PEEKSAFE_E_STAT_DOMAIN", `rand.int: n must be a positive integer, got ${n}`, {
|
|
81
|
+
detail: { n },
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return Math.floor(next() * n) % n;
|
|
85
|
+
};
|
|
86
|
+
// Typed `T`, so it must never hand back `undefined`. Returning `xs[0]` for an
|
|
87
|
+
// empty array is `undefined` wearing a `T`, which is how a fail-open bug gets
|
|
88
|
+
// past the type checker.
|
|
89
|
+
next.pick = (xs) => {
|
|
90
|
+
if (xs.length === 0) {
|
|
91
|
+
throw new PeeksafeError("PEEKSAFE_E_STAT_DOMAIN", "rand.pick: cannot pick from an empty array");
|
|
92
|
+
}
|
|
93
|
+
return xs[next.int(xs.length)];
|
|
94
|
+
};
|
|
95
|
+
next.normal = () => {
|
|
96
|
+
const u = Math.max(1e-12, next());
|
|
97
|
+
const v = next();
|
|
98
|
+
return Math.sqrt(-2 * Math.log(u)) * Math.cos(2 * Math.PI * v);
|
|
99
|
+
};
|
|
100
|
+
return next;
|
|
101
|
+
}
|
|
102
|
+
/** A stream keyed by name, reproducible regardless of call order elsewhere. */
|
|
103
|
+
export const streamFor = (...parts) => makeRand(hash32(parts.join("|")));
|
|
104
|
+
//# sourceMappingURL=rand.js.map
|
package/dist/rand.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rand.js","sourceRoot":"","sources":["../src/rand.ts"],"names":[],"mappings":"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"}
|
package/dist/stats.d.ts
ADDED
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
/** Lanczos approximation to log Γ(x), x > 0. ~15 significant digits. */
|
|
2
|
+
export declare function logGamma(x: number): number;
|
|
3
|
+
export declare const logBeta: (a: number, b: number) => number;
|
|
4
|
+
/** Regularized lower incomplete gamma P(a,x), accurate to ~1e-15. */
|
|
5
|
+
export declare function gammaP(a: number, x: number): number;
|
|
6
|
+
/**
|
|
7
|
+
* erf(x) = sign(x)·P(½, x²).
|
|
8
|
+
* Built on the incomplete gamma rather than a rational fit: the usual 7-digit
|
|
9
|
+
* approximation is visible in a p-value and we compare p-values to thresholds.
|
|
10
|
+
*/
|
|
11
|
+
export declare function erf(x: number): number;
|
|
12
|
+
/** Φ(x): standard normal CDF. */
|
|
13
|
+
export declare const normalCdf: (x: number) => number;
|
|
14
|
+
/** Φ⁻¹(p): Acklam's inverse normal CDF, refined by one Halley step. */
|
|
15
|
+
export declare function normalQuantile(p: number): number;
|
|
16
|
+
/** Regularized incomplete beta Iₓ(a,b) = P(Beta(a,b) ≤ x). */
|
|
17
|
+
export declare function ibeta(a: number, b: number, x: number): number;
|
|
18
|
+
export interface Interval {
|
|
19
|
+
low: number;
|
|
20
|
+
high: number;
|
|
21
|
+
point: number;
|
|
22
|
+
/**
|
|
23
|
+
* How many observations the interval rests on, when the producer knows.
|
|
24
|
+
* `0` means the interval is vacuous and `point` is a placeholder, not an
|
|
25
|
+
* estimate, check it before printing the point as a number.
|
|
26
|
+
*/
|
|
27
|
+
observations?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Wilson score interval for a binomial proportion.
|
|
31
|
+
* Correct at the boundaries (0/n and n/n) where Wald is degenerate, which is
|
|
32
|
+
* exactly where eval cases live.
|
|
33
|
+
*/
|
|
34
|
+
export declare function wilsonInterval(successes: number, n: number, z?: number): Interval;
|
|
35
|
+
export interface BetaPosterior {
|
|
36
|
+
alpha: number;
|
|
37
|
+
beta: number;
|
|
38
|
+
mean: number;
|
|
39
|
+
mode: number;
|
|
40
|
+
variance: number;
|
|
41
|
+
sd: number;
|
|
42
|
+
n: number;
|
|
43
|
+
successes: number;
|
|
44
|
+
}
|
|
45
|
+
/** Conjugate Beta posterior for a per-case latent success probability. */
|
|
46
|
+
export declare function betaPosterior(successes: number, failures: number, prior?: {
|
|
47
|
+
alpha: number;
|
|
48
|
+
beta: number;
|
|
49
|
+
}): BetaPosterior;
|
|
50
|
+
/** Inverse of the Beta CDF by bisection on ibeta (monotone, so this is exact to 1e-10). */
|
|
51
|
+
export declare function betaQuantile(alpha: number, beta: number, q: number): number;
|
|
52
|
+
/**
|
|
53
|
+
* Student-t quantile, from the Beta inverse CDF.
|
|
54
|
+
*
|
|
55
|
+
* Needed because the cluster-robust suite interval has a *small* number of
|
|
56
|
+
* degrees of freedom, one per case family, not one per case, and at 39 df the
|
|
57
|
+
* difference between t and z is already 3.2% of the half-width. Using z there
|
|
58
|
+
* would reintroduce, in miniature, exactly the too-narrow-interval bug that
|
|
59
|
+
* clustering exists to fix.
|
|
60
|
+
*
|
|
61
|
+
* The identity is the standard one: for T ~ t_ν and t > 0,
|
|
62
|
+
* P(|T| > t) = I_x(ν/2, ½) with x = ν/(ν + t²)
|
|
63
|
+
* so inverting `ibeta` in x inverts the t CDF. Exact to the ~1e-10 of
|
|
64
|
+
* `betaQuantile`, and it degenerates to `normalQuantile` as ν → ∞.
|
|
65
|
+
*/
|
|
66
|
+
export declare function tQuantile(p: number, df: number): number;
|
|
67
|
+
/** Equal-tailed credible interval of a Beta posterior. */
|
|
68
|
+
export declare function betaCredibleInterval(post: BetaPosterior, level?: number): Interval;
|
|
69
|
+
/** P(a < θ < b) under a Beta posterior. */
|
|
70
|
+
export declare function betaMassBetween(post: BetaPosterior, a: number, b: number): number;
|
|
71
|
+
/**
|
|
72
|
+
* Newcombe's hybrid-score interval for a difference of proportions (p₂ − p₁).
|
|
73
|
+
* Built from the two Wilson intervals, so it stays inside [-1,1] and behaves at
|
|
74
|
+
* the boundaries. This is the "effect size with a CI" that replaces "-4.5%".
|
|
75
|
+
*/
|
|
76
|
+
export declare function diffInterval(s1: number, n1: number, s2: number, n2: number, z?: number): Interval;
|
|
77
|
+
/** Cohen's h, the scale-free effect size for proportions (arcsine transform). */
|
|
78
|
+
export declare function cohensH(p1: number, p2: number): number;
|
|
79
|
+
export interface TestResult {
|
|
80
|
+
statistic: number;
|
|
81
|
+
p: number;
|
|
82
|
+
}
|
|
83
|
+
/** Pooled two-proportion z-test, two-sided. */
|
|
84
|
+
export declare function twoProportionZTest(s1: number, n1: number, s2: number, n2: number): TestResult;
|
|
85
|
+
/**
|
|
86
|
+
* Fisher's exact test on a 2×2 table [[a,b],[c,d]], two-sided by the
|
|
87
|
+
* sum-of-small-probabilities convention. Exact, which matters because eval
|
|
88
|
+
* cases are run 8 to 30 times, not 8000.
|
|
89
|
+
*/
|
|
90
|
+
export declare function fisherExact2x2(a: number, b: number, cc: number, d: number): TestResult;
|
|
91
|
+
export type SprtDecision = "ACCEPT_H0" | "ACCEPT_H1" | "CONTINUE";
|
|
92
|
+
export interface SprtResult {
|
|
93
|
+
decision: SprtDecision;
|
|
94
|
+
logLR: number;
|
|
95
|
+
upper: number;
|
|
96
|
+
lower: number;
|
|
97
|
+
/** How far through the [lower, upper] corridor we are: -1 = H0 wall, +1 = H1 wall. */
|
|
98
|
+
progress: number;
|
|
99
|
+
}
|
|
100
|
+
export interface SprtOpts {
|
|
101
|
+
successes: number;
|
|
102
|
+
trials: number;
|
|
103
|
+
/** null hypothesis success probability (e.g. the baseline rate) */
|
|
104
|
+
p0: number;
|
|
105
|
+
/** alternative worth detecting (e.g. baseline − minimum detectable regression) */
|
|
106
|
+
p1: number;
|
|
107
|
+
alpha?: number;
|
|
108
|
+
beta?: number;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Wald's Sequential Probability Ratio Test for a Bernoulli stream.
|
|
112
|
+
*
|
|
113
|
+
* logLR = s·log(p₁/p₀) + (n−s)·log((1−p₁)/(1−p₀))
|
|
114
|
+
* accept H₁ when logLR ≥ log((1−β)/α); accept H₀ when logLR ≤ log(β/(1−α)).
|
|
115
|
+
*
|
|
116
|
+
* The whole point: it is evaluated after *every* batch, so a case that is
|
|
117
|
+
* obviously fine (or obviously broken) stops consuming samples immediately.
|
|
118
|
+
*/
|
|
119
|
+
export declare function sprtDecision(opts: SprtOpts): SprtResult;
|
|
120
|
+
/**
|
|
121
|
+
* Expected sample number for Wald's SPRT under a true rate p (Wald's
|
|
122
|
+
* approximation).
|
|
123
|
+
*
|
|
124
|
+
* `(L₁·log A + (1−L₁)·log B) / E_p[log λ]`, where `L₁` is the probability of
|
|
125
|
+
* finishing at the H₁ wall. Exactness here is about `L₁` and not about the
|
|
126
|
+
* result: the formula treats the test as stopping exactly on a wall, where a
|
|
127
|
+
* real one overshoots it, so the answer under-states the true expected sample
|
|
128
|
+
* number. `L₁` is Wald's operating characteristic in exact form,
|
|
129
|
+
* `(1 − B^h) / (A^h − B^h)` at the tilt `h` above, rather than the
|
|
130
|
+
* textbook three-point interpolation: both the numerator and the drift have to
|
|
131
|
+
* change sign at the same rate, and an interpolation that misses that rate by
|
|
132
|
+
* even a little returns a *negative* number of runs. The version this replaces
|
|
133
|
+
* interpolated `L₁` as `(p − p1)/(p0 − p1)`, which rises from 0 at `p1` to 1 at
|
|
134
|
+
* `p0` where the OC falls from `1 − β` to `α`, so it matched neither hypothesis
|
|
135
|
+
* and came out negative over most of the corridor. Every caller here tests the
|
|
136
|
+
* result for `> 0` and falls back to `maxTrials`, so a case landing in the
|
|
137
|
+
* corridor was priced at the per-case cap: a 9/30 baseline, whose posterior
|
|
138
|
+
* median sits above its own rate, costs 32 runs and was quoted at 96.
|
|
139
|
+
* `test/exports.test.ts` pins both the positivity and that case.
|
|
140
|
+
*/
|
|
141
|
+
export declare function sprtExpectedN(p: number, p0: number, p1: number, alpha?: number, beta?: number): number;
|
|
142
|
+
export interface BhResult {
|
|
143
|
+
/** rejected[i] === true ⇒ case i is a discovery at FDR ≤ q */
|
|
144
|
+
rejected: boolean[];
|
|
145
|
+
/** BH-adjusted p-values (monotone step-up), aligned with the input order */
|
|
146
|
+
adjusted: number[];
|
|
147
|
+
/** the largest raw p-value that was rejected, or 0 if none */
|
|
148
|
+
cutoff: number;
|
|
149
|
+
discoveries: number;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Benjamini-Hochberg FDR control.
|
|
153
|
+
* With 200 cases at α=0.05 you expect ~10 false alarms per clean run; BH is why
|
|
154
|
+
* a green suite stays green.
|
|
155
|
+
*/
|
|
156
|
+
export declare function bhCorrect(pvalues: number[], q?: number): BhResult;
|
|
157
|
+
/**
|
|
158
|
+
* Log marginal likelihood of s successes in n Bernoulli trials when the rate
|
|
159
|
+
* carries a Beta(a,b) prior, the beta-binomial, minus the C(n,s) term (which
|
|
160
|
+
* cancels in every ratio we take).
|
|
161
|
+
*/
|
|
162
|
+
export declare function logMarginalBetaBinomial(s: number, n: number, a: number, b: number): number;
|
|
163
|
+
/**
|
|
164
|
+
* A **two-sample e-value** for "the candidate is worse than the baseline".
|
|
165
|
+
*
|
|
166
|
+
* The one-sample alternative, test the candidate against the baseline's point
|
|
167
|
+
* estimate, quietly assumes the baseline rate is known. It is not: it came
|
|
168
|
+
* from 24 noisy runs, and a baseline that got lucky manufactures regressions
|
|
169
|
+
* that were never there.
|
|
170
|
+
*
|
|
171
|
+
* So the null keeps the baseline's uncertainty: p ~ Beta(1+s_b, 1+f_b), and the
|
|
172
|
+
* alternative is the same amount of information centred `mde` lower. The ratio
|
|
173
|
+
* of the two marginal likelihoods is a Bayes factor, and a Bayes factor between
|
|
174
|
+
* two joint distributions of the same sequence is a non-negative martingale
|
|
175
|
+
* with mean 1 under the null's own marginal, here the shared rate drawn from
|
|
176
|
+
* the uniform prior. At a fixed rate the mean can exceed 1, so the frequentist
|
|
177
|
+
* type I error is checked exactly in `test/error-control.test.ts` instead.
|
|
178
|
+
*/
|
|
179
|
+
export declare function twoSampleLogE(candidateSuccesses: number, candidateTrials: number, baselineSuccesses: number, baselineTrials: number, mde: number,
|
|
180
|
+
/**
|
|
181
|
+
* Concentration of the alternative prior. Low values spread the alternative
|
|
182
|
+
* over "anything materially worse", which is what actually happens when a
|
|
183
|
+
* change breaks a case, it rarely lands exactly `mde` below.
|
|
184
|
+
*/
|
|
185
|
+
altConcentration?: number): number;
|
|
186
|
+
/**
|
|
187
|
+
* e-BH, Benjamini-Hochberg for **e-values** (Wang & Ramdas).
|
|
188
|
+
*
|
|
189
|
+
* Why this exists: a p-value computed after optional stopping is not a
|
|
190
|
+
* p-value. The likelihood ratio a sequential test accumulates *is* a valid
|
|
191
|
+
* e-value under H₀ (it is a non-negative martingale, so Ville's inequality
|
|
192
|
+
* gives P(sup LR ≥ 1/α) ≤ α), and it stays valid if you keep sampling, which
|
|
193
|
+
* is exactly what peeksafe does to confirm a flagged case.
|
|
194
|
+
*
|
|
195
|
+
* Reject the k largest e-values where k* = max{ k : e₍ₖ₎ ≥ m / (q·k) }.
|
|
196
|
+
* Controls FDR at q under *arbitrary* dependence between cases.
|
|
197
|
+
*/
|
|
198
|
+
export interface EbhResult {
|
|
199
|
+
rejected: boolean[];
|
|
200
|
+
discoveries: number;
|
|
201
|
+
/** the e-value a case had to beat, given how many discoveries were made */
|
|
202
|
+
threshold: number;
|
|
203
|
+
}
|
|
204
|
+
export declare function ebhCorrect(evalues: number[], q?: number): EbhResult;
|
|
205
|
+
/**
|
|
206
|
+
* The e-value a case must reach to be certain of rejection whatever the others do.
|
|
207
|
+
*
|
|
208
|
+
* `q` is checked as `ebhCorrect` checks it, so a level of 0 answers Infinity.
|
|
209
|
+
*/
|
|
210
|
+
export declare function ebhSoloThreshold(m: number, q?: number): number;
|
|
211
|
+
/**
|
|
212
|
+
* Fixed-N sample size per arm for detecting a `delta` drop from `p0` at the
|
|
213
|
+
* given error rates. This is the "naive approach" peeksafe is measured against.
|
|
214
|
+
*
|
|
215
|
+
* Returns **Infinity** when the effect is one the case cannot suffer, a case
|
|
216
|
+
* whose baseline rate is 10% cannot lose 15 points, and no number of samples
|
|
217
|
+
* will find a drop that is arithmetically impossible. The old version clamped
|
|
218
|
+
* `p1` to 1e-6 and answered "44 runs", which is a plausible-looking lie
|
|
219
|
+
* and exactly the sort of thing a budget planner must not do.
|
|
220
|
+
*/
|
|
221
|
+
export declare function sampleSizeTwoProportion(p0: number, delta: number, alpha?: number, beta?: number): number;
|
|
222
|
+
/** Shannon entropy in bits of a Bernoulli(p), used as a raw instability signal. */
|
|
223
|
+
export declare function bernoulliEntropy(p: number): number;
|
|
224
|
+
/** log of the Beta(a,b) density at p. */
|
|
225
|
+
export declare function logBetaPdf(p: number, a: number, b: number): number;
|
|
226
|
+
/** The two prior shapes `twoSampleLogE` compares. Exposed so the planner can
|
|
227
|
+
* reason about the *limit* of the evidence, not just its value at some n. */
|
|
228
|
+
export declare function twoSamplePriors(baselineSuccesses: number, baselineTrials: number, mde: number, altConcentration?: number): {
|
|
229
|
+
nullPrior: {
|
|
230
|
+
a: number;
|
|
231
|
+
b: number;
|
|
232
|
+
};
|
|
233
|
+
altPrior: {
|
|
234
|
+
a: number;
|
|
235
|
+
b: number;
|
|
236
|
+
};
|
|
237
|
+
};
|
|
238
|
+
/**
|
|
239
|
+
* The **evidence ceiling** of the unpaired two-sample e-value.
|
|
240
|
+
*
|
|
241
|
+
* This is the single most useful number the planner has, and it is not
|
|
242
|
+
* obvious: the two-sample Bayes factor does *not* grow without bound in the
|
|
243
|
+
* number of candidate runs. Both marginals are the same binomial likelihood
|
|
244
|
+
* under different priors, so by Laplace approximation
|
|
245
|
+
*
|
|
246
|
+
* log m_a(s, n) = n·h(p̂) + log f_a(p̂) + ½log(2π p̂(1−p̂)/n) + O(1/n)
|
|
247
|
+
*
|
|
248
|
+
* and every term except `log f(p̂)` is common to numerator and denominator.
|
|
249
|
+
* The ratio therefore converges to the **prior density ratio at the observed
|
|
250
|
+
* rate**:
|
|
251
|
+
*
|
|
252
|
+
* lim_{n→∞} log E = log f_alt(p) − log f_null(p)
|
|
253
|
+
*
|
|
254
|
+
* Consequences `gate` and `makePlan` report directly:
|
|
255
|
+
* - a case whose ceiling sits below the e-BH bar `m/(q·k)` is **undetectable
|
|
256
|
+
* at any budget**: buying more candidate runs cannot certify it;
|
|
257
|
+
* - the remedy is more *baseline* runs, which sharpen f_null and raise the
|
|
258
|
+
* ceiling, that is the amortised baseline, quantified;
|
|
259
|
+
* - the paired design (`pairedLogE`) has no such ceiling, because its null is
|
|
260
|
+
* an exact point mass at ½ rather than an estimated prior.
|
|
261
|
+
*/
|
|
262
|
+
export declare function evidenceCeilingLogE(pTrue: number, baselineSuccesses: number, baselineTrials: number, mde: number, altConcentration?: number): number;
|
|
263
|
+
/**
|
|
264
|
+
* The **rate** at which the evidence ceiling grows in baseline runs: the
|
|
265
|
+
* Kullback-Leibler divergence `KL(p_b ‖ p)` in nats, with the *baseline* rate
|
|
266
|
+
* as the first argument.
|
|
267
|
+
*
|
|
268
|
+
* This is not the obvious direction, and getting it the wrong way round gives a
|
|
269
|
+
* materially different number (at 85% losing 15 points: 0.0611 the right way,
|
|
270
|
+
* 0.0720 the wrong way). It falls out of the Laplace expansion of the null
|
|
271
|
+
* prior's own density, see `evidenceCeilingAsymptotic`.
|
|
272
|
+
*/
|
|
273
|
+
export declare function evidenceCeilingSlope(pBaseline: number, pCandidate: number): number;
|
|
274
|
+
/**
|
|
275
|
+
* The evidence ceiling in closed form, to O(1/n_b).
|
|
276
|
+
*
|
|
277
|
+
* `evidenceCeilingLogE` evaluates the exact prior density ratio. This says what
|
|
278
|
+
* that ratio *is*, as a function of the baseline size, and it is the useful
|
|
279
|
+
* form because it inverts:
|
|
280
|
+
*
|
|
281
|
+
* ceiling(n_b) ≈ n_b · KL(p̄_b ‖ p) + log f_alt(p) + ½·log(2π p̄_b(1−p̄_b)/n_b)
|
|
282
|
+
*
|
|
283
|
+
* The leading term comes from Stirling on the null prior's normaliser:
|
|
284
|
+
* `f_null` is a Beta posterior, its log density at `p` is
|
|
285
|
+
* `−n_b·KL(p̄_b ‖ p) − ½log(2π p̄_b(1−p̄_b)/n_b) + O(1/n_b)`, and the alternative
|
|
286
|
+
* prior does not move with `n_b` at all.
|
|
287
|
+
*
|
|
288
|
+
* Two consequences that are the practical point of the whole ceiling result:
|
|
289
|
+
*
|
|
290
|
+
* - **the ceiling grows linearly in baseline runs**, at a rate that is a
|
|
291
|
+
* property of the case's pass rate and the MDE and of nothing else;
|
|
292
|
+
* - so the baseline size a case needs to be detectable at all is roughly
|
|
293
|
+
* `log(m/q) / KL(p̄_b ‖ p̄_b − δ)`, an O(1) formula where `plan.ts` searches.
|
|
294
|
+
* It is a *lower* bound: the two lower-order terms are negative at realistic
|
|
295
|
+
* `n_b`, so the honest quote is that rule of thumb plus about 20%, and
|
|
296
|
+
* `makePlan` keeps reporting the exact search.
|
|
297
|
+
*
|
|
298
|
+
* Matches `evidenceCeilingLogE` to better than 0.1% for `n_b ≥ 240`; checked in
|
|
299
|
+
* `test/paper.test.ts`.
|
|
300
|
+
*/
|
|
301
|
+
export declare function evidenceCeilingAsymptotic(baselineSuccesses: number, baselineTrials: number, pTrue: number, mde: number, altConcentration?: number): number;
|
|
302
|
+
/**
|
|
303
|
+
* The two-sample log e-value along the **mean trajectory**: the value it takes
|
|
304
|
+
* when the candidate scores exactly its expected `pTrue·n` successes in `n`
|
|
305
|
+
* runs. Fractional successes are legal, the beta-binomial marginal is a ratio
|
|
306
|
+
* of Beta functions, which is defined on the reals.
|
|
307
|
+
*
|
|
308
|
+
* This is a plug-in for E[log E], not E[log E] itself. `expectedLogEExact`
|
|
309
|
+
* computes the true expectation by summing over the binomial.
|
|
310
|
+
*/
|
|
311
|
+
export declare function expectedLogE(pTrue: number, n: number, baselineSuccesses: number, baselineTrials: number, mde: number, altConcentration?: number): number;
|
|
312
|
+
/** E[log E] computed exactly, by summing over every binomial outcome. O(n). */
|
|
313
|
+
export declare function expectedLogEExact(pTrue: number, n: number, baselineSuccesses: number, baselineTrials: number, mde: number, altConcentration?: number): number;
|
|
314
|
+
/**
|
|
315
|
+
* Smallest number of candidate runs whose mean-trajectory log e-value clears
|
|
316
|
+
* `logThreshold`. Returns **Infinity** when the ceiling is below the threshold
|
|
317
|
+
*, the honest answer to "how many runs would it take", when the answer is
|
|
318
|
+
* that no number of runs will do.
|
|
319
|
+
*/
|
|
320
|
+
export declare function samplesForEvidence(pTrue: number, baselineSuccesses: number, baselineTrials: number, mde: number, logThreshold: number, maxN?: number, altConcentration?: number): number;
|
|
321
|
+
/**
|
|
322
|
+
* The two-sample e-value for "the candidate is worse than the baseline", valid
|
|
323
|
+
* at every pair of rates and at any stopping time. Same arguments as
|
|
324
|
+
* `twoSampleLogE`, which it never exceeds.
|
|
325
|
+
*/
|
|
326
|
+
export declare function universalTwoSampleLogE(candidateSuccesses: number, candidateTrials: number, baselineSuccesses: number, baselineTrials: number, mde: number, altConcentration?: number): number;
|
|
327
|
+
/**
|
|
328
|
+
* An upper bound on `universalTwoSampleLogE` over every future candidate run
|
|
329
|
+
* count, for a candidate observed at rate `pTrue`. It plays the part
|
|
330
|
+
* `evidenceCeilingLogE` plays for the default statistic.
|
|
331
|
+
*
|
|
332
|
+
* The alternative's marginal is at most the candidate's maximum likelihood, and
|
|
333
|
+
* the pooled likelihood ratio is at most `n_b · KL(p̂_b ‖ pTrue)`, so the bound
|
|
334
|
+
* is the baseline's mixture over its maximum likelihood plus that term.
|
|
335
|
+
*/
|
|
336
|
+
export declare function universalCeilingLogE(pTrue: number, baselineSuccesses: number, baselineTrials: number): number;
|
|
337
|
+
export interface PairedCounts {
|
|
338
|
+
/** both arms passed */
|
|
339
|
+
bothPass: number;
|
|
340
|
+
/** baseline passed, candidate failed, the direction that indicates a regression */
|
|
341
|
+
worse: number;
|
|
342
|
+
/** candidate passed, baseline failed */
|
|
343
|
+
better: number;
|
|
344
|
+
/** both arms failed */
|
|
345
|
+
bothFail: number;
|
|
346
|
+
}
|
|
347
|
+
export declare function discordant(p: PairedCounts): number;
|
|
348
|
+
/**
|
|
349
|
+
* Phi coefficient of the 2×2 pair table, how well the pairing actually
|
|
350
|
+
* coupled the two arms. 0 means the seeds bought nothing (the arms are
|
|
351
|
+
* independent and you may as well not have paired); 1 means perfect coupling.
|
|
352
|
+
* This is the number the variance-reduction claim has to be measured against,
|
|
353
|
+
* not assumed.
|
|
354
|
+
*/
|
|
355
|
+
export declare function pairPhi(p: PairedCounts): number;
|
|
356
|
+
/**
|
|
357
|
+
* A **paired e-value** for "the candidate is worse".
|
|
358
|
+
*
|
|
359
|
+
* Null: each discordant pair points the wrong way with probability at most ½.
|
|
360
|
+
* Alternative: it points the wrong way with probability θ ~ Beta centred on
|
|
361
|
+
* `thetaAlt`, truncated to θ > ½. Every θ in that support gives a likelihood
|
|
362
|
+
* ratio against ½ that is a supermartingale whenever the true probability is
|
|
363
|
+
* ½ or less, so the mixture is an e-value valid under optional stopping for a
|
|
364
|
+
* candidate that is unchanged or better, not only for one that is unchanged.
|
|
365
|
+
*/
|
|
366
|
+
export declare function pairedLogE(worse: number, discordantPairs: number, thetaAlt?: number, concentration?: number): number;
|
|
367
|
+
/**
|
|
368
|
+
* The discordance model a paired plan runs on.
|
|
369
|
+
*
|
|
370
|
+
* With probability `rho` the two arms see the same random draw and a
|
|
371
|
+
* discordance can only occur inside the (p_c, p_b) gap, always in the "worse"
|
|
372
|
+
* direction. With probability 1−rho they are independent and discordances go
|
|
373
|
+
* both ways. `rho` is *measured* from a pilot (see `pairPhi`), not assumed.
|
|
374
|
+
*/
|
|
375
|
+
export declare function pairedDiscordance(pBaseline: number, mde: number, rho: number): {
|
|
376
|
+
rate: number;
|
|
377
|
+
theta: number;
|
|
378
|
+
};
|
|
379
|
+
/**
|
|
380
|
+
* Expected number of **pairs** for the paired e-value to clear `logThreshold`.
|
|
381
|
+
* One pair costs one candidate run plus one baseline run, so the caller must
|
|
382
|
+
* double it before comparing with `samplesForEvidence`. Even so it usually
|
|
383
|
+
* wins, and unlike the unpaired design it never returns Infinity for a real
|
|
384
|
+
* effect.
|
|
385
|
+
*/
|
|
386
|
+
export declare function mcnemarSamplesForEvidence(pBaseline: number, mde: number, rho: number, logThreshold: number, maxPairs?: number, concentration?: number): number;
|
|
387
|
+
/**
|
|
388
|
+
* P(p_candidate ≤ p_baseline − mde) under independent Beta posteriors, the
|
|
389
|
+
* posterior probability that a case *moved*, given whatever handful of runs it
|
|
390
|
+
* has so far.
|
|
391
|
+
*
|
|
392
|
+
* This is the screening score: cheap (one quadrature over `ibeta`), needs only
|
|
393
|
+
* 3 to 4 candidate runs to be informative, and orders cases by where the
|
|
394
|
+
* expensive sequential test can actually pay. It is deliberately **not** a
|
|
395
|
+
* decision, screening decides where to spend, the e-value decides what is
|
|
396
|
+
* true, and the FDR guarantee is unaffected by which cases you chose to look
|
|
397
|
+
* at (e-BH is valid under arbitrary dependence, including a data-dependent
|
|
398
|
+
* choice of which cases to sample further).
|
|
399
|
+
*/
|
|
400
|
+
export declare function probabilityMoved(baselineSuccesses: number, baselineTrials: number, candidateSuccesses: number, candidateTrials: number, mde: number, nodes?: number): number;
|
|
401
|
+
//# sourceMappingURL=stats.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../src/stats.ts"],"names":[],"mappings":"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"}
|