hypertune
Version:
[Hypertune](https://www.hypertune.com/) is the most flexible platform for feature flags, A/B testing, analytics and app configuration. Built with full end-to-end type-safety, Git-style version control and local, synchronous, in-memory flag evaluation. Opt
50 lines (43 loc) • 1.07 kB
text/typescript
import logbeta from "./logbeta";
function probabilityBbeatsA(
successA: number,
failureA: number,
successB: number,
failureB: number
): number {
let total = 0.0;
for (let i = 0; i < successB; i += 1) {
total += Math.exp(
logbeta(successA + i, failureB + failureA) -
Math.log(failureB + i) -
logbeta(1 + i, failureB) -
logbeta(successA, failureA)
);
}
return total;
}
export default function calculateBayesianProbability(
successes: number[],
failures: number[],
controlIndex: number
): number[] | null {
if (
controlIndex < 0 ||
controlIndex >= successes.length ||
controlIndex >= failures.length
) {
return null;
}
const numArms = successes.length;
const probabilities = Array(numArms).fill(0);
for (let i = 0; i < numArms; i += 1) {
const probIbeatsControl = probabilityBbeatsA(
successes[controlIndex] + 1,
failures[controlIndex] + 1,
successes[i] + 1,
failures[i] + 1
);
probabilities[i] = probIbeatsControl;
}
return probabilities;
}