als-statistics
Version:
Modular JS statistics toolkit for Node.js and the browser: descriptive stats, correlations (Pearson/Spearman/Kendall), t-tests & ANOVA (Student/Welch), reliability (Cronbach’s alpha), regression (linear/logistic), clustering (DBSCAN/HDBSCAN), and table/co
38 lines (35 loc) • 1.08 kB
JavaScript
export function betacfNR(x, a, b, {EPS,FPMIN}) {
const MAXIT = 200;
let qab = a + b;
let qap = a + 1;
let qam = a - 1; // используется только для инициализации, но оставим для ясности
let c = 1.0;
let d = 1.0 - (qab * x) / qap;
if (Math.abs(d) < FPMIN) d = FPMIN;
d = 1.0 / d;
let h = d;
for (let m = 1; m <= MAXIT; m++) {
const m2 = 2 * m;
// Even step
let aa = m * (b - m) * x / ((a + m2 - 1) * (a + m2));
d = 1.0 + aa * d;
if (Math.abs(d) < FPMIN) d = FPMIN;
c = 1.0 + aa / c;
if (Math.abs(c) < FPMIN) c = FPMIN;
d = 1.0 / d;
h *= (d * c);
// Odd step
aa = - (a + m) * (qab + m) * x / ((a + m2) * (a + m2 + 1));
d = 1.0 + aa * d;
if (Math.abs(d) < FPMIN) d = FPMIN;
c = 1.0 + aa / c;
if (Math.abs(c) < FPMIN) c = FPMIN;
d = 1.0 / d;
let delta = d * c;
h *= delta;
if (Math.abs(delta - 1.0) < EPS) {
break;
}
}
return h;
}