Socket
Socket
Sign inDemoInstall

vega-statistics

Package Overview
Dependencies
Maintainers
1
Versions
32
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

vega-statistics - npm Package Compare versions

Comparing version 1.7.8 to 1.7.9

build/vega-statistics.min.js.map

677

build/vega-statistics.js

@@ -7,3 +7,3 @@ (function (global, factory) {

function* numbers(values, valueof) {
function* numbers (values, valueof) {
if (valueof == null) {

@@ -17,4 +17,6 @@ for (let value of values) {

let index = -1;
for (let value of values) {
value = valueof(value, ++index, values);
if (value != null && value !== '' && (value = +value) >= value) {

@@ -27,19 +29,17 @@ yield value;

function quantiles(array, p, f) {
const values = Float64Array.from(numbers(array, f));
function quantiles (array, p, f) {
const values = Float64Array.from(numbers(array, f)); // don't depend on return value from typed array sort call
// protects against undefined sort results in Safari (vega/vega-lite#4964)
// don't depend on return value from typed array sort call
// protects against undefined sort results in Safari (vega/vega-lite#4964)
values.sort(d3Array.ascending);
return p.map(_ => d3Array.quantileSorted(values, _));
}
function quartiles(array, f) {
function quartiles (array, f) {
return quantiles(array, [0.25, 0.50, 0.75], f);
}
// Scott, D. W. (1992) Multivariate Density Estimation:
// Theory, Practice, and Visualization. Wiley.
function estimateBandwidth(array, f) {
function estimateBandwidth (array, f) {
const n = array.length,

@@ -53,3 +53,3 @@ d = d3Array.deviation(array, f),

function bin(_) {
function bin (_) {
// determine range

@@ -59,10 +59,13 @@ const maxb = _.maxbins || 20,

logb = Math.log(base),
div = _.divide || [5, 2];
div = _.divide || [5, 2];
let min = _.extent[0],
max = _.extent[1],
step,
level,
minstep,
v,
i,
n;
const span = _.span || max - min || Math.abs(min) || 1;
let min = _.extent[0],
max = _.extent[1],
step, level, minstep, v, i, n;
const span = _.span || (max - min) || Math.abs(min) || 1;
if (_.step) {

@@ -74,4 +77,6 @@ // if step size is explicitly given, use that

v = span / maxb;
for (i=0, n=_.steps.length; i < n && _.steps[i] < v; ++i);
step = _.steps[Math.max(0, i-1)];
for (i = 0, n = _.steps.length; i < n && _.steps[i] < v; ++i);
step = _.steps[Math.max(0, i - 1)];
} else {

@@ -81,21 +86,20 @@ // else use span to determine step size

minstep = _.minstep || 0;
step = Math.max(
minstep,
Math.pow(base, Math.round(Math.log(span) / logb) - level)
);
step = Math.max(minstep, Math.pow(base, Math.round(Math.log(span) / logb) - level)); // increase step size if too many bins
// increase step size if too many bins
while (Math.ceil(span/step) > maxb) { step *= base; }
while (Math.ceil(span / step) > maxb) {
step *= base;
} // decrease step size if allowed
// decrease step size if allowed
for (i=0, n=div.length; i<n; ++i) {
for (i = 0, n = div.length; i < n; ++i) {
v = step / div[i];
if (v >= minstep && span / v <= maxb) step = v;
}
}
} // update precision, min and max
// update precision, min and max
v = Math.log(step);
const precision = v >= 0 ? 0 : ~~(-v / logb) + 1,
eps = Math.pow(base, -precision - 1);
if (_.nice || _.nice === undefined) {

@@ -109,4 +113,4 @@ v = Math.floor(min / step + eps) * step;

start: min,
stop: max === min ? min + step : max,
step: step
stop: max === min ? min + step : max,
step: step
};

@@ -116,3 +120,2 @@ }

exports.random = Math.random;
function setRandom(r) {

@@ -122,5 +125,4 @@ exports.random = r;

function bootstrapCI(array, samples, alpha, f) {
function bootstrapCI (array, samples, alpha, f) {
if (!array.length) return [undefined, undefined];
const values = Float64Array.from(numbers(array, f)),

@@ -131,6 +133,7 @@ n = values.length,

for (j=0, mu=Array(m); j<m; ++j) {
for (a=0, i=0; i<n; ++i) {
for (j = 0, mu = Array(m); j < m; ++j) {
for (a = 0, i = 0; i < n; ++i) {
a += values[~~(exports.random() * n)];
}
mu[j] = a / n;

@@ -140,7 +143,3 @@ }

mu.sort(d3Array.ascending);
return [
d3Array.quantile(mu, alpha/2),
d3Array.quantile(mu, 1-(alpha/2))
];
return [d3Array.quantile(mu, alpha / 2), d3Array.quantile(mu, 1 - alpha / 2)];
}

@@ -151,3 +150,3 @@

// https://www.cs.uic.edu/~wilkinson/Publications/dotplots.pdf
function dotbin(array, step, smooth, f) {
function dotbin (array, step, smooth, f) {
f = f || (_ => _);

@@ -157,4 +156,4 @@

v = new Float64Array(n);
let i = 0, j = 1,
let i = 0,
j = 1,
a = f(array[0]),

@@ -165,10 +164,14 @@ b = a,

for (; j<n; ++j) {
for (; j < n; ++j) {
x = f(array[j]);
if (x >= w) {
b = (a + b) / 2;
for (; i<j; ++i) v[i] = b;
for (; i < j; ++i) v[i] = b;
w = x + step;
a = x;
}
b = x;

@@ -178,10 +181,10 @@ }

b = (a + b) / 2;
for (; i<j; ++i) v[i] = b;
for (; i < j; ++i) v[i] = b;
return smooth ? smoothing(v, step + step / 4) : v;
}
// perform smoothing to reduce variance
} // perform smoothing to reduce variance
// swap points between "adjacent" stacks
// Wilkinson defines adjacent as within step/4 units
function smoothing(v, thresh) {

@@ -191,5 +194,5 @@ const n = v.length;

b = 1,
c, d;
c,
d; // get left stack
// get left stack
while (v[a] === v[b]) ++b;

@@ -200,13 +203,16 @@

c = b + 1;
while (v[b] === v[c]) ++c;
// are stacks adjacent?
while (v[b] === v[c]) ++c; // are stacks adjacent?
// if so, compare sizes and swap as needed
if (v[b] - v[b-1] < thresh) {
d = b + ((a + c - b - b) >> 1);
if (v[b] - v[b - 1] < thresh) {
d = b + (a + c - b - b >> 1);
while (d < b) v[d++] = v[b];
while (d > b) v[d--] = v[a];
}
} // update left stack indices
// update left stack indices
a = b;

@@ -219,6 +225,6 @@ b = c;

function lcg(seed) {
function lcg (seed) {
// Random numbers using a Linear Congruential Generator with seed value
// Uses glibc values from https://en.wikipedia.org/wiki/Linear_congruential_generator
return function() {
return function () {
seed = (1103515245 * seed + 12345) % 2147483647;

@@ -229,3 +235,3 @@ return seed / 2147483647;

function integer(min, max) {
function integer (min, max) {
if (max == null) {

@@ -237,3 +243,2 @@ max = min;

let a, b, d;
const dist = {

@@ -249,2 +254,3 @@ min(_) {

},
max(_) {

@@ -259,8 +265,11 @@ if (arguments.length) {

},
sample() {
return a + Math.floor(d * exports.random());
},
pdf(x) {
return (x === Math.floor(x) && x >= a && x < b) ? 1 / d : 0;
return x === Math.floor(x) && x >= a && x < b ? 1 / d : 0;
},
cdf(x) {

@@ -270,7 +279,8 @@ const v = Math.floor(x);

},
icdf(p) {
return (p >= 0 && p <= 1) ? a - 1 + Math.floor(p * d) : NaN;
return p >= 0 && p <= 1 ? a - 1 + Math.floor(p * d) : NaN;
}
};
return dist.min(min).max(max);

@@ -283,8 +293,10 @@ }

let nextSample = NaN;
function sampleNormal(mean, stdev) {
mean = mean || 0;
stdev = stdev == null ? 1 : stdev;
let x = 0,
y = 0,
rds,
c;
let x = 0, y = 0, rds, c;
if (nextSample === nextSample) {

@@ -299,9 +311,11 @@ x = nextSample;

} while (rds === 0 || rds > 1);
c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform
x *= c;
nextSample = y * c;
}
return mean + x * stdev;
}
function densityNormal(value, mean, stdev) {

@@ -311,10 +325,8 @@ stdev = stdev == null ? 1 : stdev;

return Math.exp(-0.5 * z * z) / (stdev * SQRT2PI);
}
} // Approximation from West (2009)
// Better Approximations to Cumulative Normal Functions
// Approximation from West (2009)
// Better Approximations to Cumulative Normal Functions
function cumulativeNormal(value, mean, stdev) {
mean = mean || 0;
stdev = stdev == null ? 1 : stdev;
const z = (value - mean) / stdev,

@@ -329,2 +341,3 @@ Z = Math.abs(z);

let sum;
if (Z < 7.07106781186547) {

@@ -355,14 +368,13 @@ sum = 3.52624965998911e-02 * Z + 0.700383064443688;

}
return z > 0 ? 1 - cd : cd;
}
} // Approximation of Probit function using inverse error function.
// Approximation of Probit function using inverse error function.
function quantileNormal(p, mean, stdev) {
if (p < 0 || p > 1) return NaN;
return (mean || 0) + (stdev == null ? 1 : stdev) * SQRT2 * erfinv(2 * p - 1);
}
// Approximate inverse error function. Implementation from "Approximating
} // Approximate inverse error function. Implementation from "Approximating
// the erfinv function" by Mike Giles, GPU Computing Gems, volume 2, 2010.
// Ported from Apache Commons Math, http://www.apache.org/licenses/LICENSE-2.0
function erfinv(x) {

@@ -373,71 +385,72 @@ // beware that the logarithm argument must be

// would induce rounding errors near the boundaries +/-1
let w = - Math.log((1 - x) * (1 + x)), p;
let w = -Math.log((1 - x) * (1 + x)),
p;
if (w < 6.25) {
w -= 3.125;
p = -3.6444120640178196996e-21;
p = -1.685059138182016589e-19 + p * w;
p = 1.2858480715256400167e-18 + p * w;
p = 1.115787767802518096e-17 + p * w;
p = -1.333171662854620906e-16 + p * w;
p = 2.0972767875968561637e-17 + p * w;
p = 6.6376381343583238325e-15 + p * w;
p = -4.0545662729752068639e-14 + p * w;
p = -8.1519341976054721522e-14 + p * w;
p = 2.6335093153082322977e-12 + p * w;
p = -1.2975133253453532498e-11 + p * w;
p = -5.4154120542946279317e-11 + p * w;
p = 1.051212273321532285e-09 + p * w;
p = -4.1126339803469836976e-09 + p * w;
p = -2.9070369957882005086e-08 + p * w;
p = 4.2347877827932403518e-07 + p * w;
p = -1.3654692000834678645e-06 + p * w;
p = -1.3882523362786468719e-05 + p * w;
p = 0.0001867342080340571352 + p * w;
p = -0.00074070253416626697512 + p * w;
p = -0.0060336708714301490533 + p * w;
p = 0.24015818242558961693 + p * w;
p = 1.6536545626831027356 + p * w;
w -= 3.125;
p = -3.6444120640178196996e-21;
p = -1.685059138182016589e-19 + p * w;
p = 1.2858480715256400167e-18 + p * w;
p = 1.115787767802518096e-17 + p * w;
p = -1.333171662854620906e-16 + p * w;
p = 2.0972767875968561637e-17 + p * w;
p = 6.6376381343583238325e-15 + p * w;
p = -4.0545662729752068639e-14 + p * w;
p = -8.1519341976054721522e-14 + p * w;
p = 2.6335093153082322977e-12 + p * w;
p = -1.2975133253453532498e-11 + p * w;
p = -5.4154120542946279317e-11 + p * w;
p = 1.051212273321532285e-09 + p * w;
p = -4.1126339803469836976e-09 + p * w;
p = -2.9070369957882005086e-08 + p * w;
p = 4.2347877827932403518e-07 + p * w;
p = -1.3654692000834678645e-06 + p * w;
p = -1.3882523362786468719e-05 + p * w;
p = 0.0001867342080340571352 + p * w;
p = -0.00074070253416626697512 + p * w;
p = -0.0060336708714301490533 + p * w;
p = 0.24015818242558961693 + p * w;
p = 1.6536545626831027356 + p * w;
} else if (w < 16.0) {
w = Math.sqrt(w) - 3.25;
p = 2.2137376921775787049e-09;
p = 9.0756561938885390979e-08 + p * w;
p = -2.7517406297064545428e-07 + p * w;
p = 1.8239629214389227755e-08 + p * w;
p = 1.5027403968909827627e-06 + p * w;
p = -4.013867526981545969e-06 + p * w;
p = 2.9234449089955446044e-06 + p * w;
p = 1.2475304481671778723e-05 + p * w;
p = -4.7318229009055733981e-05 + p * w;
p = 6.8284851459573175448e-05 + p * w;
p = 2.4031110387097893999e-05 + p * w;
p = -0.0003550375203628474796 + p * w;
p = 0.00095328937973738049703 + p * w;
p = -0.0016882755560235047313 + p * w;
p = 0.0024914420961078508066 + p * w;
p = -0.0037512085075692412107 + p * w;
p = 0.005370914553590063617 + p * w;
p = 1.0052589676941592334 + p * w;
p = 3.0838856104922207635 + p * w;
w = Math.sqrt(w) - 3.25;
p = 2.2137376921775787049e-09;
p = 9.0756561938885390979e-08 + p * w;
p = -2.7517406297064545428e-07 + p * w;
p = 1.8239629214389227755e-08 + p * w;
p = 1.5027403968909827627e-06 + p * w;
p = -4.013867526981545969e-06 + p * w;
p = 2.9234449089955446044e-06 + p * w;
p = 1.2475304481671778723e-05 + p * w;
p = -4.7318229009055733981e-05 + p * w;
p = 6.8284851459573175448e-05 + p * w;
p = 2.4031110387097893999e-05 + p * w;
p = -0.0003550375203628474796 + p * w;
p = 0.00095328937973738049703 + p * w;
p = -0.0016882755560235047313 + p * w;
p = 0.0024914420961078508066 + p * w;
p = -0.0037512085075692412107 + p * w;
p = 0.005370914553590063617 + p * w;
p = 1.0052589676941592334 + p * w;
p = 3.0838856104922207635 + p * w;
} else if (Number.isFinite(w)) {
w = Math.sqrt(w) - 5.0;
p = -2.7109920616438573243e-11;
p = -2.5556418169965252055e-10 + p * w;
p = 1.5076572693500548083e-09 + p * w;
p = -3.7894654401267369937e-09 + p * w;
p = 7.6157012080783393804e-09 + p * w;
p = -1.4960026627149240478e-08 + p * w;
p = 2.9147953450901080826e-08 + p * w;
p = -6.7711997758452339498e-08 + p * w;
p = 2.2900482228026654717e-07 + p * w;
p = -9.9298272942317002539e-07 + p * w;
p = 4.5260625972231537039e-06 + p * w;
p = -1.9681778105531670567e-05 + p * w;
p = 7.5995277030017761139e-05 + p * w;
p = -0.00021503011930044477347 + p * w;
p = -0.00013871931833623122026 + p * w;
p = 1.0103004648645343977 + p * w;
p = 4.8499064014085844221 + p * w;
w = Math.sqrt(w) - 5.0;
p = -2.7109920616438573243e-11;
p = -2.5556418169965252055e-10 + p * w;
p = 1.5076572693500548083e-09 + p * w;
p = -3.7894654401267369937e-09 + p * w;
p = 7.6157012080783393804e-09 + p * w;
p = -1.4960026627149240478e-08 + p * w;
p = 2.9147953450901080826e-08 + p * w;
p = -6.7711997758452339498e-08 + p * w;
p = 2.2900482228026654717e-07 + p * w;
p = -9.9298272942317002539e-07 + p * w;
p = 4.5260625972231537039e-06 + p * w;
p = -1.9681778105531670567e-05 + p * w;
p = 7.5995277030017761139e-05 + p * w;
p = -0.00021503011930044477347 + p * w;
p = -0.00013871931833623122026 + p * w;
p = 1.0103004648645343977 + p * w;
p = 4.8499064014085844221 + p * w;
} else {
p = Infinity;
p = Infinity;
}

@@ -448,5 +461,4 @@

function gaussian(mean, stdev) {
function gaussian (mean, stdev) {
let mu, sigma;
const dist = {

@@ -461,2 +473,3 @@ mean(_) {

},
stdev(_) {

@@ -470,2 +483,3 @@ if (arguments.length) {

},
sample: () => sampleNormal(mu, sigma),

@@ -476,10 +490,8 @@ pdf: value => densityNormal(value, mu, sigma),

};
return dist.mean(mean).stdev(stdev);
}
function kde(support, bandwidth) {
function kde (support, bandwidth) {
const kernel = gaussian();
let n = 0;
const dist = {

@@ -508,6 +520,9 @@ data(_) {

pdf(x) {
let y = 0, i = 0;
for (; i<n; ++i) {
let y = 0,
i = 0;
for (; i < n; ++i) {
y += kernel.pdf((x - support[i]) / bandwidth);
}
return y / bandwidth / n;

@@ -517,6 +532,9 @@ },

cdf(x) {
let y = 0, i = 0;
for (; i<n; ++i) {
let y = 0,
i = 0;
for (; i < n; ++i) {
y += kernel.cdf((x - support[i]) / bandwidth);
}
return y / n;

@@ -528,4 +546,4 @@ },

}
};
return dist.data(support);

@@ -539,3 +557,2 @@ }

}
function densityLogNormal(value, mean, stdev) {

@@ -548,14 +565,10 @@ if (value <= 0) return 0;

}
function cumulativeLogNormal(value, mean, stdev) {
return cumulativeNormal(Math.log(value), mean, stdev);
}
function quantileLogNormal(p, mean, stdev) {
return Math.exp(quantileNormal(p, mean, stdev));
}
function lognormal(mean, stdev) {
function lognormal (mean, stdev) {
let mu, sigma;
const dist = {

@@ -570,2 +583,3 @@ mean(_) {

},
stdev(_) {

@@ -579,2 +593,3 @@ if (arguments.length) {

},
sample: () => sampleLogNormal(mu, sigma),

@@ -585,14 +600,22 @@ pdf: value => densityLogNormal(value, mu, sigma),

};
return dist.mean(mean).stdev(stdev);
}
function mixture(dists, weights) {
let m = 0, w;
function mixture (dists, weights) {
let m = 0,
w;
function normalize(x) {
const w = [];
let sum = 0, i;
for (i = 0; i < m; ++i) { sum += (w[i] = (x[i]==null ? 1 : +x[i])); }
for (i = 0; i < m; ++i) { w[i] /= sum; }
let sum = 0,
i;
for (i = 0; i < m; ++i) {
sum += w[i] = x[i] == null ? 1 : +x[i];
}
for (i = 0; i < m; ++i) {
w[i] /= sum;
}
return w;

@@ -604,5 +627,6 @@ }

if (arguments.length) {
w = normalize(weights = (_ || []));
w = normalize(weights = _ || []);
return dist;
}
return weights;

@@ -620,4 +644,6 @@ },

}
return dist.weights(weights);
}
return dists;

@@ -628,11 +654,14 @@ },

const r = exports.random();
let d = dists[m-1],
let d = dists[m - 1],
v = w[0],
i = 0;
i = 0; // first select distribution
// first select distribution
for (; i<m-1; v += w[++i]) {
if (r < v) { d = dists[i]; break; }
}
// then sample from it
for (; i < m - 1; v += w[++i]) {
if (r < v) {
d = dists[i];
break;
}
} // then sample from it
return d.sample();

@@ -642,6 +671,9 @@ },

pdf(x) {
let p = 0, i = 0;
for (; i<m; ++i) {
let p = 0,
i = 0;
for (; i < m; ++i) {
p += w[i] * dists[i].pdf(x);
}
return p;

@@ -651,6 +683,9 @@ },

cdf(x) {
let p = 0, i = 0;
for (; i<m; ++i) {
let p = 0,
i = 0;
for (; i < m; ++i) {
p += w[i] * dists[i].cdf(x);
}
return p;

@@ -662,4 +697,4 @@ },

}
};
return dist.distributions(dists).weights(weights);

@@ -670,35 +705,34 @@ }

if (max == null) {
max = (min == null ? 1 : min);
max = min == null ? 1 : min;
min = 0;
}
return min + (max - min) * exports.random();
}
function densityUniform(value, min, max) {
if (max == null) {
max = (min == null ? 1 : min);
max = min == null ? 1 : min;
min = 0;
}
return (value >= min && value <= max) ? 1 / (max - min) : 0;
return value >= min && value <= max ? 1 / (max - min) : 0;
}
function cumulativeUniform(value, min, max) {
if (max == null) {
max = (min == null ? 1 : min);
max = min == null ? 1 : min;
min = 0;
}
return value < min ? 0 : value > max ? 1 : (value - min) / (max - min);
}
function quantileUniform(p, min, max) {
if (max == null) {
max = (min == null ? 1 : min);
max = min == null ? 1 : min;
min = 0;
}
return (p >= 0 && p <= 1) ? min + p * (max - min) : NaN;
return p >= 0 && p <= 1 ? min + p * (max - min) : NaN;
}
function uniform(min, max) {
function uniform (min, max) {
let a, b;
const dist = {

@@ -713,2 +747,3 @@ min(_) {

},
max(_) {

@@ -722,2 +757,3 @@ if (arguments.length) {

},
sample: () => sampleUniform(a, b),

@@ -730,5 +766,6 @@ pdf: value => densityUniform(value, a, b),

if (max == null) {
max = (min == null ? 1 : min);
max = min == null ? 1 : min;
min = 0;
}
return dist.min(min).max(max);

@@ -738,7 +775,6 @@ }

// Ordinary Least Squares
function ols(uX, uY, uXY, uX2) {
function ols (uX, uY, uXY, uX2) {
const delta = uX2 - uX * uX,
slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,
intercept = uY - slope * uX;
return [intercept, slope];

@@ -749,3 +785,4 @@ }

data = data.filter(d => {
let u = x(d), v = y(d);
let u = x(d),
v = y(d);
return u != null && (u = +u) >= u && v != null && (v = +v) >= v;

@@ -760,6 +797,11 @@ });

X = new Float64Array(n),
Y = new Float64Array(n);
Y = new Float64Array(n); // extract values, calculate means
// extract values, calculate means
let i = 0, ux = 0, uy = 0, xv, yv, d;
let i = 0,
ux = 0,
uy = 0,
xv,
yv,
d;
for (d of data) {

@@ -771,6 +813,6 @@ X[i] = xv = +x(d);

uy += (yv - uy) / i;
}
} // mean center the data
// mean center the data
for (i=0; i<n; ++i) {
for (i = 0; i < n; ++i) {
X[i] -= ux;

@@ -782,5 +824,6 @@ Y[i] -= uy;

}
function visitPoints(data, x, y, callback) {
let i = -1, u, v;
let i = -1,
u,
v;

@@ -790,2 +833,3 @@ for (const d of data) {

v = y(d);
if (u != null && (u = +u) >= u && v != null && (v = +v) >= v) {

@@ -797,23 +841,24 @@ callback(u, v, ++i);

// Adapted from d3-regression by Harry Stevens
// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE
function rSquared(data, x, y, uY, predict) {
let SSE = 0, SST = 0;
function rSquared (data, x, y, uY, predict) {
let SSE = 0,
SST = 0;
visitPoints(data, x, y, (dx, dy) => {
const sse = dy - predict(dx),
sst = dy - uY;
SSE += sse * sse;
SST += sst * sst;
});
return 1 - SSE / SST;
}
// Adapted from d3-regression by Harry Stevens
// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE
function linear(data, x, y) {
let X = 0, Y = 0, XY = 0, X2 = 0, n = 0;
function linear (data, x, y) {
let X = 0,
Y = 0,
XY = 0,
X2 = 0,
n = 0;
visitPoints(data, x, y, (dx, dy) => {

@@ -837,7 +882,10 @@ ++n;

// Adapted from d3-regression by Harry Stevens
// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE
function log(data, x, y) {
let X = 0, Y = 0, XY = 0, X2 = 0, n = 0;
function log (data, x, y) {
let X = 0,
Y = 0,
XY = 0,
X2 = 0,
n = 0;
visitPoints(data, x, y, (dx, dy) => {

@@ -862,7 +910,13 @@ ++n;

function exp(data, x, y) {
function exp (data, x, y) {
// eslint-disable-next-line no-unused-vars
const [xv, yv, ux, uy] = points(data, x, y);
let YL = 0, XY = 0, XYL = 0, X2Y = 0, n = 0, dx, ly, xy;
let YL = 0,
XY = 0,
XYL = 0,
X2Y = 0,
n = 0,
dx,
ly,
xy;
visitPoints(data, x, y, (_, dy) => {

@@ -872,3 +926,2 @@ dx = xv[n++];

xy = dx * dy;
YL += (dy * ly - YL) / n;

@@ -890,7 +943,11 @@ XY += (xy - XY) / n;

// Adapted from d3-regression by Harry Stevens
// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE
function pow(data, x, y) {
let X = 0, Y = 0, XY = 0, X2 = 0, YS = 0, n = 0;
function pow (data, x, y) {
let X = 0,
Y = 0,
XY = 0,
X2 = 0,
YS = 0,
n = 0;
visitPoints(data, x, y, (dx, dy) => {

@@ -911,3 +968,2 @@ const lx = Math.log(dx),

coef[0] = Math.exp(coef[0]);
return {

@@ -920,10 +976,16 @@ coef: coef,

function quad(data, x, y) {
function quad (data, x, y) {
const [xv, yv, ux, uy] = points(data, x, y),
n = xv.length;
let X2 = 0,
X3 = 0,
X4 = 0,
XY = 0,
X2Y = 0,
i,
dx,
dy,
x2;
let X2 = 0, X3 = 0, X4 = 0, XY = 0, X2Y = 0,
i, dx, dy, x2;
for (i=0; i<n;) {
for (i = 0; i < n;) {
dx = xv[i];

@@ -939,4 +1001,4 @@ dy = yv[i++];

const X2X2 = X4 - (X2 * X2),
d = (X2 * X2X2 - X3 * X3),
const X2X2 = X4 - X2 * X2,
d = X2 * X2X2 - X3 * X3,
a = (X2Y * X2 - XY * X3) / d,

@@ -946,13 +1008,9 @@ b = (XY * X2X2 - X2Y * X3) / d,

predict = x => {
x = x - ux;
return a * x * x + b * x + c + uy;
};
x = x - ux;
return a * x * x + b * x + c + uy;
}; // transform coefficients back from mean-centered space
// transform coefficients back from mean-centered space
return {
coef: [
c - b * ux + a * ux * ux + uy,
b - 2 * a * ux,
a
],
coef: [c - b * ux + a * ux * ux + uy, b - 2 * a * ux, a],
predict: predict,

@@ -963,3 +1021,2 @@ rSquared: rSquared(data, x, y, uy, predict)

// Adapted from d3-regression by Harry Stevens
// License: https://github.com/HarryStevens/d3-regression/blob/master/LICENSE

@@ -969,7 +1026,7 @@ // ... which was adapted from regression-js by Tom Alexander

// License: https://github.com/Tom-Alexander/regression-js/blob/master/LICENSE
function poly(data, x, y, order) {
function poly (data, x, y, order) {
// use more efficient methods for lower orders
if (order === 1) return linear(data, x, y);
if (order === 2) return quad(data, x, y);
const [xv, yv, ux, uy] = points(data, x, y),

@@ -980,20 +1037,23 @@ n = xv.length,

k = order + 1;
let i, j, l, v, c;
for (i=0; i<k; ++i) {
for (l=0, v=0; l<n; ++l) {
for (i = 0; i < k; ++i) {
for (l = 0, v = 0; l < n; ++l) {
v += Math.pow(xv[l], i) * yv[l];
}
lhs.push(v);
c = new Float64Array(k);
c = new Float64Array(k);
for (j=0; j<k; ++j) {
for (l=0, v=0; l<n; ++l) {
for (j = 0; j < k; ++j) {
for (l = 0, v = 0; l < n; ++l) {
v += Math.pow(xv[l], i + j);
}
c[j] = v;
}
rhs.push(c);
}
rhs.push(lhs);

@@ -1003,8 +1063,10 @@

predict = x => {
x -= ux;
let y = uy + coef[0] + coef[1] * x + coef[2] * x * x;
for (i=3; i<k; ++i) y += coef[i] * Math.pow(x, i);
return y;
};
x -= ux;
let y = uy + coef[0] + coef[1] * x + coef[2] * x * x;
for (i = 3; i < k; ++i) y += coef[i] * Math.pow(x, i);
return y;
};
return {

@@ -1019,30 +1081,29 @@ coef: uncenter(k, coef, -ux, uy),

const z = Array(k);
let i, j, v, c;
let i, j, v, c; // initialize to zero
// initialize to zero
for (i=0; i<k; ++i) z[i] = 0;
for (i = 0; i < k; ++i) z[i] = 0; // polynomial expansion
// polynomial expansion
for (i=k-1; i>=0; --i) {
for (i = k - 1; i >= 0; --i) {
v = a[i];
c = 1;
z[i] += v;
for (j=1; j<=i; ++j) {
for (j = 1; j <= i; ++j) {
c *= (i + 1 - j) / j; // binomial coefficent
z[i-j] += v * Math.pow(x, j) * c;
z[i - j] += v * Math.pow(x, j) * c;
}
}
} // bias term
// bias term
z[0] += y;
return z;
}
} // Given an array for a two-dimensional matrix and the polynomial order,
// solve A * x = b using Gaussian elimination.
// Given an array for a two-dimensional matrix and the polynomial order,
// solve A * x = b using Gaussian elimination.
function gaussianElimination(matrix) {
const n = matrix.length - 1,
coef = [];
let i, j, k, r, t;

@@ -1052,2 +1113,3 @@

r = i; // max row
for (j = i + 1; j < n; ++j) {

@@ -1067,3 +1129,3 @@ if (Math.abs(matrix[i][j]) > Math.abs(matrix[i][r])) {

for (k = n; k >= i; k--) {
matrix[k][j] -= (matrix[k][i] * matrix[i][j]) / matrix[i][i];
matrix[k][j] -= matrix[k][i] * matrix[i][j] / matrix[i][i];
}

@@ -1075,5 +1137,7 @@ }

t = 0;
for (k = j + 1; k < n; ++k) {
t += matrix[k][j] * coef[k];
}
coef[j] = (matrix[n][j] - t) / matrix[j][j];

@@ -1086,16 +1150,16 @@ }

const maxiters = 2,
epsilon = 1e-12;
// Adapted from science.js by Jason Davies
epsilon = 1e-12; // Adapted from science.js by Jason Davies
// Source: https://github.com/jasondavies/science.js/blob/master/src/stats/loess.js
// License: https://github.com/jasondavies/science.js/blob/master/LICENSE
function loess(data, x, y, bandwidth) {
function loess (data, x, y, bandwidth) {
const [xv, yv, ux, uy] = points(data, x, y, true),
n = xv.length,
bw = Math.max(2, ~~(bandwidth * n)), // # nearest neighbors
yhat = new Float64Array(n),
bw = Math.max(2, ~~(bandwidth * n)),
// # nearest neighbors
yhat = new Float64Array(n),
residuals = new Float64Array(n),
robustWeights = new Float64Array(n).fill(1);
for (let iter = -1; ++iter <= maxiters; ) {
for (let iter = -1; ++iter <= maxiters;) {
const interval = [0, bw - 1];

@@ -1107,5 +1171,8 @@

i1 = interval[1],
edge = (dx - xv[i0]) > (xv[i1] - dx) ? i0 : i1;
let W = 0, X = 0, Y = 0, XY = 0, X2 = 0;
edge = dx - xv[i0] > xv[i1] - dx ? i0 : i1;
let W = 0,
X = 0,
Y = 0,
XY = 0,
X2 = 0;
const denom = 1 / Math.abs(xv[edge] - dx || 1); // avoid singularity!

@@ -1118,3 +1185,2 @@

xkw = xk * w;
W += w;

@@ -1125,9 +1191,8 @@ X += xkw;

X2 += xk * xkw;
}
} // linear regression fit
// linear regression fit
const [a, b] = ols(X / W, Y / W, XY / W, X2 / W);
yhat[i] = a + b * dx;
residuals[i] = Math.abs(yv[i] - yhat[i]);
updateInterval(xv, i + 1, interval);

@@ -1143,7 +1208,7 @@ }

for (let i = 0, arg, w; i < n; ++i){
arg = residuals[i] / (6 * medianResidual);
// default to epsilon (rather than zero) for large deviations
for (let i = 0, arg, w; i < n; ++i) {
arg = residuals[i] / (6 * medianResidual); // default to epsilon (rather than zero) for large deviations
// keeping weights tiny but non-zero prevents singularites
robustWeights[i] = (arg >= 1) ? epsilon : ((w = 1 - arg * arg) * w);
robustWeights[i] = arg >= 1 ? epsilon : (w = 1 - arg * arg) * w;
}

@@ -1153,10 +1218,9 @@ }

return output(xv, yhat, ux, uy);
}
} // weighting kernel for local regression
// weighting kernel for local regression
function tricube(x) {
return (x = 1 - x * x * x) * x * x;
}
} // advance sliding window interval of nearest neighbors
// advance sliding window interval of nearest neighbors
function updateInterval(xv, i, interval) {

@@ -1166,8 +1230,6 @@ const val = xv[i];

right = interval[1] + 1;
if (right >= xv.length) return; // step right if distance to new right edge is <= distance to old left edge
// step when distance is equal to ensure movement over duplicate x values
if (right >= xv.length) return;
// step right if distance to new right edge is <= distance to old left edge
// step when distance is equal to ensure movement over duplicate x values
while (i > left && (xv[right] - val) <= (val - xv[left])) {
while (i > left && xv[right] - val <= val - xv[left]) {
interval[0] = ++left;

@@ -1177,15 +1239,20 @@ interval[1] = right;

}
}
} // generate smoothed output points
// average points with repeated x values
// generate smoothed output points
// average points with repeated x values
function output(xv, yhat, ux, uy) {
const n = xv.length, out = [];
let i = 0, cnt = 0, prev = [], v;
const n = xv.length,
out = [];
let i = 0,
cnt = 0,
prev = [],
v;
for (; i<n; ++i) {
for (; i < n; ++i) {
v = xv[i] + ux;
if (prev[0] === v) {
// average output values via online update
prev[1] += (yhat[i] - prev[1]) / (++cnt);
prev[1] += (yhat[i] - prev[1]) / ++cnt;
} else {

@@ -1199,4 +1266,4 @@ // add new output point

}
prev[1] += uy;
return out;

@@ -1206,6 +1273,5 @@ }

// subdivide up to accuracy of 0.1 degrees
const MIN_RADIANS = 0.1 * Math.PI / 180;
const MIN_RADIANS = 0.1 * Math.PI / 180; // Adaptively sample an interpolated function over a domain extent
// Adaptively sample an interpolated function over a domain extent
function sampleCurve(f, extent, minSteps, maxSteps) {
function sampleCurve (f, extent, minSteps, maxSteps) {
minSteps = minSteps || 25;

@@ -1225,4 +1291,5 @@ maxSteps = Math.max(minSteps, maxSteps || 200);

for (let i = 1; i < maxSteps; ++i) {
prev.push(point(minX + (i / minSteps) * span));
prev.push(point(minX + i / minSteps * span));
}
prev.push(point(maxX));

@@ -1234,4 +1301,5 @@ return prev;

next.push(point(maxX));
for (let i = minSteps; --i > 0;) {
next.push(point(minX + (i / minSteps) * span));
next.push(point(minX + i / minSteps * span));
}

@@ -1259,2 +1327,3 @@ }

}
p1 = next[next.length - 1];

@@ -1261,0 +1330,0 @@ }

@@ -1,1 +0,2 @@

!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports,require("d3-array")):"function"==typeof define&&define.amd?define(["exports","d3-array"],n):n((t="undefined"!=typeof globalThis?globalThis:t||self).vega={},t.d3)}(this,(function(t,n){"use strict";function*e(t,n){if(null==n)for(let n of t)null!=n&&""!==n&&(n=+n)>=n&&(yield n);else{let e=-1;for(let r of t)r=n(r,++e,t),null!=r&&""!==r&&(r=+r)>=r&&(yield r)}}function r(t,r,o){const l=Float64Array.from(e(t,o));return l.sort(n.ascending),r.map(t=>n.quantileSorted(l,t))}function o(t,n){return r(t,[.25,.5,.75],n)}function l(t,e){const r=t.length,l=n.deviation(t,e),a=o(t,e),u=(a[2]-a[0])/1.34;return 1.06*(Math.min(l,u)||l||Math.abs(a[0])||1)*Math.pow(r,-.2)}t.random=Math.random;const a=Math.sqrt(2*Math.PI),u=Math.SQRT2;let f=NaN;function i(n,e){n=n||0,e=null==e?1:e;let r,o,l=0,a=0;if(f==f)l=f,f=NaN;else{do{l=2*t.random()-1,a=2*t.random()-1,r=l*l+a*a}while(0===r||r>1);o=Math.sqrt(-2*Math.log(r)/r),l*=o,f=a*o}return n+l*e}function s(t,n,e){const r=(t-(n||0))/(e=null==e?1:e);return Math.exp(-.5*r*r)/(e*a)}function c(t,n,e){const r=(t-(n=n||0))/(e=null==e?1:e),o=Math.abs(r);let l;if(o>37)l=0;else{const t=Math.exp(-o*o/2);let n;o<7.07106781186547?(n=.0352624965998911*o+.700383064443688,n=n*o+6.37396220353165,n=n*o+33.912866078383,n=n*o+112.079291497871,n=n*o+221.213596169931,n=n*o+220.206867912376,l=t*n,n=.0883883476483184*o+1.75566716318264,n=n*o+16.064177579207,n=n*o+86.7807322029461,n=n*o+296.564248779674,n=n*o+637.333633378831,n=n*o+793.826512519948,n=n*o+440.413735824752,l/=n):(n=o+.65,n=o+4/n,n=o+3/n,n=o+2/n,n=o+1/n,l=t/n/2.506628274631)}return r>0?1-l:l}function h(t,n,e){return t<0||t>1?NaN:(n||0)+(null==e?1:e)*u*function(t){let n,e=-Math.log((1-t)*(1+t));e<6.25?(e-=3.125,n=-364441206401782e-35,n=n*e-16850591381820166e-35,n=128584807152564e-32+n*e,n=11157877678025181e-33+n*e,n=n*e-1333171662854621e-31,n=20972767875968562e-33+n*e,n=6637638134358324e-30+n*e,n=n*e-4054566272975207e-29,n=n*e-8151934197605472e-29,n=26335093153082323e-28+n*e,n=n*e-12975133253453532e-27,n=n*e-5415412054294628e-26,n=1.0512122733215323e-9+n*e,n=n*e-4.112633980346984e-9,n=n*e-2.9070369957882005e-8,n=4.2347877827932404e-7+n*e,n=n*e-13654692000834679e-22,n=n*e-13882523362786469e-21,n=.00018673420803405714+n*e,n=n*e-.000740702534166267,n=n*e-.006033670871430149,n=.24015818242558962+n*e,n=1.6536545626831027+n*e):e<16?(e=Math.sqrt(e)-3.25,n=2.2137376921775787e-9,n=9.075656193888539e-8+n*e,n=n*e-2.7517406297064545e-7,n=1.8239629214389228e-8+n*e,n=15027403968909828e-22+n*e,n=n*e-4013867526981546e-21,n=29234449089955446e-22+n*e,n=12475304481671779e-21+n*e,n=n*e-47318229009055734e-21,n=6828485145957318e-20+n*e,n=24031110387097894e-21+n*e,n=n*e-.0003550375203628475,n=.0009532893797373805+n*e,n=n*e-.0016882755560235047,n=.002491442096107851+n*e,n=n*e-.003751208507569241,n=.005370914553590064+n*e,n=1.0052589676941592+n*e,n=3.0838856104922208+n*e):Number.isFinite(e)?(e=Math.sqrt(e)-5,n=-27109920616438573e-27,n=n*e-2.555641816996525e-10,n=1.5076572693500548e-9+n*e,n=n*e-3.789465440126737e-9,n=7.61570120807834e-9+n*e,n=n*e-1.496002662714924e-8,n=2.914795345090108e-8+n*e,n=n*e-6.771199775845234e-8,n=2.2900482228026655e-7+n*e,n=n*e-9.9298272942317e-7,n=4526062597223154e-21+n*e,n=n*e-1968177810553167e-20,n=7599527703001776e-20+n*e,n=n*e-.00021503011930044477,n=n*e-.00013871931833623122,n=1.0103004648645344+n*e,n=4.849906401408584+n*e):n=1/0;return n*t}(2*t-1)}function d(t,n){let e,r;const o={mean(t){return arguments.length?(e=t||0,o):e},stdev(t){return arguments.length?(r=null==t?1:t,o):r},sample:()=>i(e,r),pdf:t=>s(t,e,r),cdf:t=>c(t,e,r),icdf:t=>h(t,e,r)};return o.mean(t).stdev(n)}function p(t,n){return t=t||0,n=null==n?1:n,Math.exp(t+i()*n)}function m(t,n,e){if(t<=0)return 0;n=n||0,e=null==e?1:e;const r=(Math.log(t)-n)/e;return Math.exp(-.5*r*r)/(e*a*t)}function M(t,n,e){return c(Math.log(t),n,e)}function g(t,n,e){return Math.exp(h(t,n,e))}function b(n,e){return null==e&&(e=null==n?1:n,n=0),n+(e-n)*t.random()}function w(t,n,e){return null==e&&(e=null==n?1:n,n=0),t>=n&&t<=e?1/(e-n):0}function x(t,n,e){return null==e&&(e=null==n?1:n,n=0),t<n?0:t>e?1:(t-n)/(e-n)}function y(t,n,e){return null==e&&(e=null==n?1:n,n=0),t>=0&&t<=1?n+t*(e-n):NaN}function N(t,n,e,r){const o=r-t*t,l=Math.abs(o)<1e-24?0:(e-t*n)/o;return[n-l*t,l]}function q(t,n,e,r){t=t.filter(t=>{let r=n(t),o=e(t);return null!=r&&(r=+r)>=r&&null!=o&&(o=+o)>=o}),r&&t.sort((t,e)=>n(t)-n(e));const o=t.length,l=new Float64Array(o),a=new Float64Array(o);let u,f,i,s=0,c=0,h=0;for(i of t)l[s]=u=+n(i),a[s]=f=+e(i),++s,c+=(u-c)/s,h+=(f-h)/s;for(s=0;s<o;++s)l[s]-=c,a[s]-=h;return[l,a,c,h]}function v(t,n,e,r){let o,l,a=-1;for(const u of t)o=n(u),l=e(u),null!=o&&(o=+o)>=o&&null!=l&&(l=+l)>=l&&r(o,l,++a)}function A(t,n,e,r,o){let l=0,a=0;return v(t,n,e,(t,n)=>{const e=n-o(t),u=n-r;l+=e*e,a+=u*u}),1-l/a}function F(t,n,e){let r=0,o=0,l=0,a=0,u=0;v(t,n,e,(t,n)=>{++u,r+=(t-r)/u,o+=(n-o)/u,l+=(t*n-l)/u,a+=(t*t-a)/u});const f=N(r,o,l,a),i=t=>f[0]+f[1]*t;return{coef:f,predict:i,rSquared:A(t,n,e,o,i)}}function L(t,n,e){const[r,o,l,a]=q(t,n,e),u=r.length;let f,i,s,c,h=0,d=0,p=0,m=0,M=0;for(f=0;f<u;)i=r[f],s=o[f++],c=i*i,h+=(c-h)/f,d+=(c*i-d)/f,p+=(c*c-p)/f,m+=(i*s-m)/f,M+=(c*s-M)/f;const g=p-h*h,b=h*g-d*d,w=(M*h-m*d)/b,x=(m*g-M*d)/b,y=-w*h,N=t=>w*(t-=l)*t+x*t+y+a;return{coef:[y-x*l+w*l*l+a,x-2*w*l,w],predict:N,rSquared:A(t,n,e,a,N)}}function S(t,n,e,r){const o=Array(t);let l,a,u,f;for(l=0;l<t;++l)o[l]=0;for(l=t-1;l>=0;--l)for(u=n[l],f=1,o[l]+=u,a=1;a<=l;++a)f*=(l+1-a)/a,o[l-a]+=u*Math.pow(e,a)*f;return o[0]+=r,o}function E(t){return(t=1-t*t*t)*t*t}function P(t,n,e){const r=t[n];let o=e[0],l=e[1]+1;if(!(l>=t.length))for(;n>o&&t[l]-r<=r-t[o];)e[0]=++o,e[1]=l,++l}const U=.1*Math.PI/180;function I(t,n,e){const r=Math.atan2(e[1]-t[1],e[0]-t[0]),o=Math.atan2(n[1]-t[1],n[0]-t[0]);return Math.abs(r-o)}t.bandwidthNRD=l,t.bin=function(t){const n=t.maxbins||20,e=t.base||10,r=Math.log(e),o=t.divide||[5,2];let l,a,u,f,i,s,c=t.extent[0],h=t.extent[1];const d=t.span||h-c||Math.abs(c)||1;if(t.step)l=t.step;else if(t.steps){for(f=d/n,i=0,s=t.steps.length;i<s&&t.steps[i]<f;++i);l=t.steps[Math.max(0,i-1)]}else{for(a=Math.ceil(Math.log(n)/r),u=t.minstep||0,l=Math.max(u,Math.pow(e,Math.round(Math.log(d)/r)-a));Math.ceil(d/l)>n;)l*=e;for(i=0,s=o.length;i<s;++i)f=l/o[i],f>=u&&d/f<=n&&(l=f)}f=Math.log(l);const p=f>=0?0:1+~~(-f/r),m=Math.pow(e,-p-1);return(t.nice||void 0===t.nice)&&(f=Math.floor(c/l+m)*l,c=c<f?f-l:f,h=Math.ceil(h/l)*l),{start:c,stop:h===c?c+l:h,step:l}},t.bootstrapCI=function(r,o,l,a){if(!r.length)return[void 0,void 0];const u=Float64Array.from(e(r,a)),f=u.length,i=o;let s,c,h,d;for(h=0,d=Array(i);h<i;++h){for(s=0,c=0;c<f;++c)s+=u[~~(t.random()*f)];d[h]=s/f}return d.sort(n.ascending),[n.quantile(d,l/2),n.quantile(d,1-l/2)]},t.cumulativeLogNormal=M,t.cumulativeNormal=c,t.cumulativeUniform=x,t.densityLogNormal=m,t.densityNormal=s,t.densityUniform=w,t.dotbin=function(t,n,e,r){r=r||(t=>t);const o=t.length,l=new Float64Array(o);let a,u=0,f=1,i=r(t[0]),s=i,c=i+n;for(;f<o;++f){if(a=r(t[f]),a>=c){for(s=(i+s)/2;u<f;++u)l[u]=s;c=a+n,i=a}s=a}for(s=(i+s)/2;u<f;++u)l[u]=s;return e?function(t,n){const e=t.length;let r,o,l=0,a=1;for(;t[l]===t[a];)++a;for(;a<e;){for(r=a+1;t[a]===t[r];)++r;if(t[a]-t[a-1]<n){for(o=a+(l+r-a-a>>1);o<a;)t[o++]=t[a];for(;o>a;)t[o--]=t[l]}l=a,a=r}return t}(l,n+n/4):l},t.quantileLogNormal=g,t.quantileNormal=h,t.quantileUniform=y,t.quantiles=r,t.quartiles=o,t.randomInteger=function(n,e){let r,o,l;null==e&&(e=n,n=0);const a={min(t){return arguments.length?(r=t||0,l=o-r,a):r},max(t){return arguments.length?(o=t||0,l=o-r,a):o},sample:()=>r+Math.floor(l*t.random()),pdf:t=>t===Math.floor(t)&&t>=r&&t<o?1/l:0,cdf(t){const n=Math.floor(t);return n<r?0:n>=o?1:(n-r+1)/l},icdf:t=>t>=0&&t<=1?r-1+Math.floor(t*l):NaN};return a.min(n).max(e)},t.randomKDE=function(n,e){const r=d();let o=0;const a={data(t){return arguments.length?(n=t,o=t?t.length:0,a.bandwidth(e)):n},bandwidth(t){return arguments.length?(!(e=t)&&n&&(e=l(n)),a):e},sample:()=>n[~~(t.random()*o)]+e*r.sample(),pdf(t){let l=0,a=0;for(;a<o;++a)l+=r.pdf((t-n[a])/e);return l/e/o},cdf(t){let l=0,a=0;for(;a<o;++a)l+=r.cdf((t-n[a])/e);return l/o},icdf(){throw Error("KDE icdf not supported.")}};return a.data(n)},t.randomLCG=function(t){return function(){return(t=(1103515245*t+12345)%2147483647)/2147483647}},t.randomLogNormal=function(t,n){let e,r;const o={mean(t){return arguments.length?(e=t||0,o):e},stdev(t){return arguments.length?(r=null==t?1:t,o):r},sample:()=>p(e,r),pdf:t=>m(t,e,r),cdf:t=>M(t,e,r),icdf:t=>g(t,e,r)};return o.mean(t).stdev(n)},t.randomMixture=function(n,e){let r,o=0;const l={weights(t){return arguments.length?(r=function(t){const n=[];let e,r=0;for(e=0;e<o;++e)r+=n[e]=null==t[e]?1:+t[e];for(e=0;e<o;++e)n[e]/=r;return n}(e=t||[]),l):e},distributions(t){return arguments.length?(t?(o=t.length,n=t):(o=0,n=[]),l.weights(e)):n},sample(){const e=t.random();let l=n[o-1],a=r[0],u=0;for(;u<o-1;a+=r[++u])if(e<a){l=n[u];break}return l.sample()},pdf(t){let e=0,l=0;for(;l<o;++l)e+=r[l]*n[l].pdf(t);return e},cdf(t){let e=0,l=0;for(;l<o;++l)e+=r[l]*n[l].cdf(t);return e},icdf(){throw Error("Mixture icdf not supported.")}};return l.distributions(n).weights(e)},t.randomNormal=d,t.randomUniform=function(t,n){let e,r;const o={min(t){return arguments.length?(e=t||0,o):e},max(t){return arguments.length?(r=null==t?1:t,o):r},sample:()=>b(e,r),pdf:t=>w(t,e,r),cdf:t=>x(t,e,r),icdf:t=>y(t,e,r)};return null==n&&(n=null==t?1:t,t=0),o.min(t).max(n)},t.regressionExp=function(t,n,e){const[r,o,l,a]=q(t,n,e);let u,f,i,s=0,c=0,h=0,d=0,p=0;v(t,n,e,(t,n)=>{u=r[p++],f=Math.log(n),i=u*n,s+=(n*f-s)/p,c+=(i-c)/p,h+=(i*f-h)/p,d+=(u*i-d)/p});const[m,M]=N(c/a,s/a,h/a,d/a),g=t=>Math.exp(m+M*(t-l));return{coef:[Math.exp(m-M*l),M],predict:g,rSquared:A(t,n,e,a,g)}},t.regressionLinear=F,t.regressionLoess=function(t,e,r,o){const[l,a,u,f]=q(t,e,r,!0),i=l.length,s=Math.max(2,~~(o*i)),c=new Float64Array(i),h=new Float64Array(i),d=new Float64Array(i).fill(1);for(let t=-1;++t<=2;){const e=[0,s-1];for(let t=0;t<i;++t){const n=l[t],r=e[0],o=e[1],u=n-l[r]>l[o]-n?r:o;let f=0,i=0,s=0,p=0,m=0;const M=1/Math.abs(l[u]-n||1);for(let t=r;t<=o;++t){const e=l[t],r=a[t],o=E(Math.abs(n-e)*M)*d[t],u=e*o;f+=o,i+=u,s+=r*o,p+=r*u,m+=e*u}const[g,b]=N(i/f,s/f,p/f,m/f);c[t]=g+b*n,h[t]=Math.abs(a[t]-c[t]),P(l,t+1,e)}if(2===t)break;const r=n.median(h);if(Math.abs(r)<1e-12)break;for(let t,n,e=0;e<i;++e)t=h[e]/(6*r),d[e]=t>=1?1e-12:(n=1-t*t)*n}return function(t,n,e,r){const o=t.length,l=[];let a,u=0,f=0,i=[];for(;u<o;++u)a=t[u]+e,i[0]===a?i[1]+=(n[u]-i[1])/++f:(f=0,i[1]+=r,i=[a,n[u]],l.push(i));return i[1]+=r,l}(l,c,u,f)},t.regressionLog=function(t,n,e){let r=0,o=0,l=0,a=0,u=0;v(t,n,e,(t,n)=>{++u,t=Math.log(t),r+=(t-r)/u,o+=(n-o)/u,l+=(t*n-l)/u,a+=(t*t-a)/u});const f=N(r,o,l,a),i=t=>f[0]+f[1]*Math.log(t);return{coef:f,predict:i,rSquared:A(t,n,e,o,i)}},t.regressionPoly=function(t,n,e,r){if(1===r)return F(t,n,e);if(2===r)return L(t,n,e);const[o,l,a,u]=q(t,n,e),f=o.length,i=[],s=[],c=r+1;let h,d,p,m,M;for(h=0;h<c;++h){for(p=0,m=0;p<f;++p)m+=Math.pow(o[p],h)*l[p];for(i.push(m),M=new Float64Array(c),d=0;d<c;++d){for(p=0,m=0;p<f;++p)m+=Math.pow(o[p],h+d);M[d]=m}s.push(M)}s.push(i);const g=function(t){const n=t.length-1,e=[];let r,o,l,a,u;for(r=0;r<n;++r){for(a=r,o=r+1;o<n;++o)Math.abs(t[r][o])>Math.abs(t[r][a])&&(a=o);for(l=r;l<n+1;++l)u=t[l][r],t[l][r]=t[l][a],t[l][a]=u;for(o=r+1;o<n;++o)for(l=n;l>=r;l--)t[l][o]-=t[l][r]*t[r][o]/t[r][r]}for(o=n-1;o>=0;--o){for(u=0,l=o+1;l<n;++l)u+=t[l][o]*e[l];e[o]=(t[n][o]-u)/t[o][o]}return e}(s),b=t=>{t-=a;let n=u+g[0]+g[1]*t+g[2]*t*t;for(h=3;h<c;++h)n+=g[h]*Math.pow(t,h);return n};return{coef:S(c,g,-a,u),predict:b,rSquared:A(t,n,e,u,b)}},t.regressionPow=function(t,n,e){let r=0,o=0,l=0,a=0,u=0,f=0;v(t,n,e,(t,n)=>{const e=Math.log(t),i=Math.log(n);++f,r+=(e-r)/f,o+=(i-o)/f,l+=(e*i-l)/f,a+=(e*e-a)/f,u+=(n-u)/f});const i=N(r,o,l,a),s=t=>i[0]*Math.pow(t,i[1]);return i[0]=Math.exp(i[0]),{coef:i,predict:s,rSquared:A(t,n,e,u,s)}},t.regressionQuad=L,t.sampleCurve=function(t,n,e,r){e=e||25,r=Math.max(e,r||200);const o=n=>[n,t(n)],l=n[0],a=n[1],u=a-l,f=u/r,i=[o(l)],s=[];if(e===r){for(let t=1;t<r;++t)i.push(o(l+t/e*u));return i.push(o(a)),i}s.push(o(a));for(let t=e;--t>0;)s.push(o(l+t/e*u));let c=i[0],h=s[s.length-1];for(;h;){const t=o((c[0]+h[0])/2);t[0]-c[0]>=f&&I(c,t,h)>U?s.push(t):(c=h,i.push(h),s.pop()),h=s[s.length-1]}return i},t.sampleLogNormal=p,t.sampleNormal=i,t.sampleUniform=b,t.setRandom=function(n){t.random=n},Object.defineProperty(t,"__esModule",{value:!0})}));
var vega=function(t){"use strict";function*n(t,n){if(null==n)for(let n of t)null!=n&&""!==n&&(n=+n)>=n&&(yield n);else{let r=-1;for(let e of t)e=n(e,++r,t),null!=e&&""!==e&&(e=+e)>=e&&(yield e)}}function r(t,n){return t<n?-1:t>n?1:t>=n?0:NaN}function e(t){return null===t?NaN:+t}function o(t,n){let r;if(void 0===n)for(const n of t)null!=n&&(r<n||void 0===r&&n>=n)&&(r=n);else{let e=-1;for(let o of t)null!=(o=n(o,++e,t))&&(r<o||void 0===r&&o>=o)&&(r=o)}return r}function l(t,n){let r;if(void 0===n)for(const n of t)null!=n&&(r>n||void 0===r&&n>=n)&&(r=n);else{let e=-1;for(let o of t)null!=(o=n(o,++e,t))&&(r>o||void 0===r&&o>=o)&&(r=o)}return r}function u(t,n,e=0,o=t.length-1,l=r){for(;o>e;){if(o-e>600){const r=o-e+1,f=n-e+1,a=Math.log(r),i=.5*Math.exp(2*a/3),s=.5*Math.sqrt(a*i*(r-i)/r)*(f-r/2<0?-1:1);u(t,n,Math.max(e,Math.floor(n-f*i/r+s)),Math.min(o,Math.floor(n+(r-f)*i/r+s)),l)}const r=t[n];let a=e,i=o;for(f(t,e,n),l(t[o],r)>0&&f(t,e,o);a<i;){for(f(t,a,i),++a,--i;l(t[a],r)<0;)++a;for(;l(t[i],r)>0;)--i}0===l(t[e],r)?f(t,e,i):(++i,f(t,i,o)),i<=n&&(e=i+1),n<=i&&(o=i-1)}return t}function f(t,n,r){const e=t[n];t[n]=t[r],t[r]=e}function a(t,n,r){if(e=(t=Float64Array.from(function*(t,n){if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(yield n);else{let r=-1;for(let e of t)null!=(e=n(e,++r,t))&&(e=+e)>=e&&(yield e)}}(t,r))).length){if((n=+n)<=0||e<2)return l(t);if(n>=1)return o(t);var e,f=(e-1)*n,a=Math.floor(f),i=o(u(t,a).subarray(0,a+1));return i+(l(t.subarray(a+1))-i)*(f-a)}}function i(t,o,l){const u=Float64Array.from(n(t,l));return u.sort(r),o.map(t=>function(t,n,r=e){if(o=t.length){if((n=+n)<=0||o<2)return+r(t[0],0,t);if(n>=1)return+r(t[o-1],o-1,t);var o,l=(o-1)*n,u=Math.floor(l),f=+r(t[u],u,t);return f+(+r(t[u+1],u+1,t)-f)*(l-u)}}(u,t))}function s(t,n){return i(t,[.25,.5,.75],n)}function c(t,n){const r=t.length,e=function(t,n){const r=function(t,n){let r,e=0,o=0,l=0;if(void 0===n)for(let n of t)null!=n&&(n=+n)>=n&&(r=n-o,o+=r/++e,l+=r*(n-o));else{let u=-1;for(let f of t)null!=(f=n(f,++u,t))&&(f=+f)>=f&&(r=f-o,o+=r/++e,l+=r*(f-o))}if(e>1)return l/(e-1)}(t,n);return r?Math.sqrt(r):r}(t,n),o=s(t,n),l=(o[2]-o[0])/1.34;return 1.06*(Math.min(e,l)||e||Math.abs(o[0])||1)*Math.pow(r,-.2)}t.random=Math.random;const h=Math.sqrt(2*Math.PI),d=Math.SQRT2;let M=NaN;function m(n,r){n=n||0,r=null==r?1:r;let e,o,l=0,u=0;if(M==M)l=M,M=NaN;else{do{l=2*t.random()-1,u=2*t.random()-1,e=l*l+u*u}while(0===e||e>1);o=Math.sqrt(-2*Math.log(e)/e),l*=o,M=u*o}return n+l*r}function p(t,n,r){const e=(t-(n||0))/(r=null==r?1:r);return Math.exp(-.5*e*e)/(r*h)}function g(t,n,r){const e=(t-(n=n||0))/(r=null==r?1:r),o=Math.abs(e);let l;if(o>37)l=0;else{const t=Math.exp(-o*o/2);let n;o<7.07106781186547?(n=.0352624965998911*o+.700383064443688,n=n*o+6.37396220353165,n=n*o+33.912866078383,n=n*o+112.079291497871,n=n*o+221.213596169931,n=n*o+220.206867912376,l=t*n,n=.0883883476483184*o+1.75566716318264,n=n*o+16.064177579207,n=n*o+86.7807322029461,n=n*o+296.564248779674,n=n*o+637.333633378831,n=n*o+793.826512519948,n=n*o+440.413735824752,l/=n):(n=o+.65,n=o+4/n,n=o+3/n,n=o+2/n,n=o+1/n,l=t/n/2.506628274631)}return e>0?1-l:l}function b(t,n,r){return t<0||t>1?NaN:(n||0)+(null==r?1:r)*d*function(t){let n,r=-Math.log((1-t)*(1+t));r<6.25?(r-=3.125,n=-364441206401782e-35,n=n*r-16850591381820166e-35,n=128584807152564e-32+n*r,n=11157877678025181e-33+n*r,n=n*r-1333171662854621e-31,n=20972767875968562e-33+n*r,n=6637638134358324e-30+n*r,n=n*r-4054566272975207e-29,n=n*r-8151934197605472e-29,n=26335093153082323e-28+n*r,n=n*r-12975133253453532e-27,n=n*r-5415412054294628e-26,n=1.0512122733215323e-9+n*r,n=n*r-4.112633980346984e-9,n=n*r-2.9070369957882005e-8,n=4.2347877827932404e-7+n*r,n=n*r-13654692000834679e-22,n=n*r-13882523362786469e-21,n=.00018673420803405714+n*r,n=n*r-.000740702534166267,n=n*r-.006033670871430149,n=.24015818242558962+n*r,n=1.6536545626831027+n*r):r<16?(r=Math.sqrt(r)-3.25,n=2.2137376921775787e-9,n=9.075656193888539e-8+n*r,n=n*r-2.7517406297064545e-7,n=1.8239629214389228e-8+n*r,n=15027403968909828e-22+n*r,n=n*r-4013867526981546e-21,n=29234449089955446e-22+n*r,n=12475304481671779e-21+n*r,n=n*r-47318229009055734e-21,n=6828485145957318e-20+n*r,n=24031110387097894e-21+n*r,n=n*r-.0003550375203628475,n=.0009532893797373805+n*r,n=n*r-.0016882755560235047,n=.002491442096107851+n*r,n=n*r-.003751208507569241,n=.005370914553590064+n*r,n=1.0052589676941592+n*r,n=3.0838856104922208+n*r):Number.isFinite(r)?(r=Math.sqrt(r)-5,n=-27109920616438573e-27,n=n*r-2.555641816996525e-10,n=1.5076572693500548e-9+n*r,n=n*r-3.789465440126737e-9,n=7.61570120807834e-9+n*r,n=n*r-1.496002662714924e-8,n=2.914795345090108e-8+n*r,n=n*r-6.771199775845234e-8,n=2.2900482228026655e-7+n*r,n=n*r-9.9298272942317e-7,n=4526062597223154e-21+n*r,n=n*r-1968177810553167e-20,n=7599527703001776e-20+n*r,n=n*r-.00021503011930044477,n=n*r-.00013871931833623122,n=1.0103004648645344+n*r,n=4.849906401408584+n*r):n=1/0;return n*t}(2*t-1)}function N(t,n){let r,e;const o={mean(t){return arguments.length?(r=t||0,o):r},stdev(t){return arguments.length?(e=null==t?1:t,o):e},sample:()=>m(r,e),pdf:t=>p(t,r,e),cdf:t=>g(t,r,e),icdf:t=>b(t,r,e)};return o.mean(t).stdev(n)}function v(t,n){return t=t||0,n=null==n?1:n,Math.exp(t+m()*n)}function w(t,n,r){if(t<=0)return 0;n=n||0,r=null==r?1:r;const e=(Math.log(t)-n)/r;return Math.exp(-.5*e*e)/(r*h*t)}function x(t,n,r){return g(Math.log(t),n,r)}function y(t,n,r){return Math.exp(b(t,n,r))}function q(n,r){return null==r&&(r=null==n?1:n,n=0),n+(r-n)*t.random()}function A(t,n,r){return null==r&&(r=null==n?1:n,n=0),t>=n&&t<=r?1/(r-n):0}function F(t,n,r){return null==r&&(r=null==n?1:n,n=0),t<n?0:t>r?1:(t-n)/(r-n)}function L(t,n,r){return null==r&&(r=null==n?1:n,n=0),t>=0&&t<=1?n+t*(r-n):NaN}function S(t,n,r,e){const o=e-t*t,l=Math.abs(o)<1e-24?0:(r-t*n)/o;return[n-l*t,l]}function E(t,n,r,e){t=t.filter(t=>{let e=n(t),o=r(t);return null!=e&&(e=+e)>=e&&null!=o&&(o=+o)>=o}),e&&t.sort((t,r)=>n(t)-n(r));const o=t.length,l=new Float64Array(o),u=new Float64Array(o);let f,a,i,s=0,c=0,h=0;for(i of t)l[s]=f=+n(i),u[s]=a=+r(i),++s,c+=(f-c)/s,h+=(a-h)/s;for(s=0;s<o;++s)l[s]-=c,u[s]-=h;return[l,u,c,h]}function U(t,n,r,e){let o,l,u=-1;for(const f of t)o=n(f),l=r(f),null!=o&&(o=+o)>=o&&null!=l&&(l=+l)>=l&&e(o,l,++u)}function I(t,n,r,e,o){let l=0,u=0;return U(t,n,r,(t,n)=>{const r=n-o(t),f=n-e;l+=r*r,u+=f*f}),1-l/u}function P(t,n,r){let e=0,o=0,l=0,u=0,f=0;U(t,n,r,(t,n)=>{++f,e+=(t-e)/f,o+=(n-o)/f,l+=(t*n-l)/f,u+=(t*t-u)/f});const a=S(e,o,l,u),i=t=>a[0]+a[1]*t;return{coef:a,predict:i,rSquared:I(t,n,r,o,i)}}function k(t,n,r){const[e,o,l,u]=E(t,n,r),f=e.length;let a,i,s,c,h=0,d=0,M=0,m=0,p=0;for(a=0;a<f;)i=e[a],s=o[a++],c=i*i,h+=(c-h)/a,d+=(c*i-d)/a,M+=(c*c-M)/a,m+=(i*s-m)/a,p+=(c*s-p)/a;const g=M-h*h,b=h*g-d*d,N=(p*h-m*d)/b,v=(m*g-p*d)/b,w=-N*h,x=t=>N*(t-=l)*t+v*t+w+u;return{coef:[w-v*l+N*l*l+u,v-2*N*l,N],predict:x,rSquared:I(t,n,r,u,x)}}function C(t,n,r,e){const o=Array(t);let l,u,f,a;for(l=0;l<t;++l)o[l]=0;for(l=t-1;l>=0;--l)for(f=n[l],a=1,o[l]+=f,u=1;u<=l;++u)a*=(l+1-u)/u,o[l-u]+=f*Math.pow(r,u)*a;return o[0]+=e,o}function D(t){return(t=1-t*t*t)*t*t}function R(t,n,r){const e=t[n];let o=r[0],l=r[1]+1;if(!(l>=t.length))for(;n>o&&t[l]-e<=e-t[o];)r[0]=++o,r[1]=l,++l}const K=.1*Math.PI/180;function Q(t,n,r){const e=Math.atan2(r[1]-t[1],r[0]-t[0]),o=Math.atan2(n[1]-t[1],n[0]-t[0]);return Math.abs(e-o)}return t.bandwidthNRD=c,t.bin=function(t){const n=t.maxbins||20,r=t.base||10,e=Math.log(r),o=t.divide||[5,2];let l,u,f,a,i,s,c=t.extent[0],h=t.extent[1];const d=t.span||h-c||Math.abs(c)||1;if(t.step)l=t.step;else if(t.steps){for(a=d/n,i=0,s=t.steps.length;i<s&&t.steps[i]<a;++i);l=t.steps[Math.max(0,i-1)]}else{for(u=Math.ceil(Math.log(n)/e),f=t.minstep||0,l=Math.max(f,Math.pow(r,Math.round(Math.log(d)/e)-u));Math.ceil(d/l)>n;)l*=r;for(i=0,s=o.length;i<s;++i)a=l/o[i],a>=f&&d/a<=n&&(l=a)}a=Math.log(l);const M=a>=0?0:1+~~(-a/e),m=Math.pow(r,-M-1);return(t.nice||void 0===t.nice)&&(a=Math.floor(c/l+m)*l,c=c<a?a-l:a,h=Math.ceil(h/l)*l),{start:c,stop:h===c?c+l:h,step:l}},t.bootstrapCI=function(e,o,l,u){if(!e.length)return[void 0,void 0];const f=Float64Array.from(n(e,u)),i=f.length,s=o;let c,h,d,M;for(d=0,M=Array(s);d<s;++d){for(c=0,h=0;h<i;++h)c+=f[~~(t.random()*i)];M[d]=c/i}return M.sort(r),[a(M,l/2),a(M,1-l/2)]},t.cumulativeLogNormal=x,t.cumulativeNormal=g,t.cumulativeUniform=F,t.densityLogNormal=w,t.densityNormal=p,t.densityUniform=A,t.dotbin=function(t,n,r,e){e=e||(t=>t);const o=t.length,l=new Float64Array(o);let u,f=0,a=1,i=e(t[0]),s=i,c=i+n;for(;a<o;++a){if(u=e(t[a]),u>=c){for(s=(i+s)/2;f<a;++f)l[f]=s;c=u+n,i=u}s=u}for(s=(i+s)/2;f<a;++f)l[f]=s;return r?function(t,n){const r=t.length;let e,o,l=0,u=1;for(;t[l]===t[u];)++u;for(;u<r;){for(e=u+1;t[u]===t[e];)++e;if(t[u]-t[u-1]<n){for(o=u+(l+e-u-u>>1);o<u;)t[o++]=t[u];for(;o>u;)t[o--]=t[l]}l=u,u=e}return t}(l,n+n/4):l},t.quantileLogNormal=y,t.quantileNormal=b,t.quantileUniform=L,t.quantiles=i,t.quartiles=s,t.randomInteger=function(n,r){let e,o,l;null==r&&(r=n,n=0);const u={min(t){return arguments.length?(e=t||0,l=o-e,u):e},max(t){return arguments.length?(o=t||0,l=o-e,u):o},sample:()=>e+Math.floor(l*t.random()),pdf:t=>t===Math.floor(t)&&t>=e&&t<o?1/l:0,cdf(t){const n=Math.floor(t);return n<e?0:n>=o?1:(n-e+1)/l},icdf:t=>t>=0&&t<=1?e-1+Math.floor(t*l):NaN};return u.min(n).max(r)},t.randomKDE=function(n,r){const e=N();let o=0;const l={data(t){return arguments.length?(n=t,o=t?t.length:0,l.bandwidth(r)):n},bandwidth(t){return arguments.length?(!(r=t)&&n&&(r=c(n)),l):r},sample:()=>n[~~(t.random()*o)]+r*e.sample(),pdf(t){let l=0,u=0;for(;u<o;++u)l+=e.pdf((t-n[u])/r);return l/r/o},cdf(t){let l=0,u=0;for(;u<o;++u)l+=e.cdf((t-n[u])/r);return l/o},icdf(){throw Error("KDE icdf not supported.")}};return l.data(n)},t.randomLCG=function(t){return function(){return(t=(1103515245*t+12345)%2147483647)/2147483647}},t.randomLogNormal=function(t,n){let r,e;const o={mean(t){return arguments.length?(r=t||0,o):r},stdev(t){return arguments.length?(e=null==t?1:t,o):e},sample:()=>v(r,e),pdf:t=>w(t,r,e),cdf:t=>x(t,r,e),icdf:t=>y(t,r,e)};return o.mean(t).stdev(n)},t.randomMixture=function(n,r){let e,o=0;const l={weights(t){return arguments.length?(e=function(t){const n=[];let r,e=0;for(r=0;r<o;++r)e+=n[r]=null==t[r]?1:+t[r];for(r=0;r<o;++r)n[r]/=e;return n}(r=t||[]),l):r},distributions(t){return arguments.length?(t?(o=t.length,n=t):(o=0,n=[]),l.weights(r)):n},sample(){const r=t.random();let l=n[o-1],u=e[0],f=0;for(;f<o-1;u+=e[++f])if(r<u){l=n[f];break}return l.sample()},pdf(t){let r=0,l=0;for(;l<o;++l)r+=e[l]*n[l].pdf(t);return r},cdf(t){let r=0,l=0;for(;l<o;++l)r+=e[l]*n[l].cdf(t);return r},icdf(){throw Error("Mixture icdf not supported.")}};return l.distributions(n).weights(r)},t.randomNormal=N,t.randomUniform=function(t,n){let r,e;const o={min(t){return arguments.length?(r=t||0,o):r},max(t){return arguments.length?(e=null==t?1:t,o):e},sample:()=>q(r,e),pdf:t=>A(t,r,e),cdf:t=>F(t,r,e),icdf:t=>L(t,r,e)};return null==n&&(n=null==t?1:t,t=0),o.min(t).max(n)},t.regressionExp=function(t,n,r){const[e,o,l,u]=E(t,n,r);let f,a,i,s=0,c=0,h=0,d=0,M=0;U(t,n,r,(t,n)=>{f=e[M++],a=Math.log(n),i=f*n,s+=(n*a-s)/M,c+=(i-c)/M,h+=(i*a-h)/M,d+=(f*i-d)/M});const[m,p]=S(c/u,s/u,h/u,d/u),g=t=>Math.exp(m+p*(t-l));return{coef:[Math.exp(m-p*l),p],predict:g,rSquared:I(t,n,r,u,g)}},t.regressionLinear=P,t.regressionLoess=function(t,n,r,e){const[o,l,u,f]=E(t,n,r,!0),i=o.length,s=Math.max(2,~~(e*i)),c=new Float64Array(i),h=new Float64Array(i),d=new Float64Array(i).fill(1);for(let t=-1;++t<=2;){const n=[0,s-1];for(let t=0;t<i;++t){const r=o[t],e=n[0],u=n[1],f=r-o[e]>o[u]-r?e:u;let a=0,i=0,s=0,M=0,m=0;const p=1/Math.abs(o[f]-r||1);for(let t=e;t<=u;++t){const n=o[t],e=l[t],u=D(Math.abs(r-n)*p)*d[t],f=n*u;a+=u,i+=f,s+=e*u,M+=e*f,m+=n*f}const[g,b]=S(i/a,s/a,M/a,m/a);c[t]=g+b*r,h[t]=Math.abs(l[t]-c[t]),R(o,t+1,n)}if(2===t)break;const r=a(h,.5,void 0);if(Math.abs(r)<1e-12)break;for(let t,n,e=0;e<i;++e)t=h[e]/(6*r),d[e]=t>=1?1e-12:(n=1-t*t)*n}return function(t,n,r,e){const o=t.length,l=[];let u,f=0,a=0,i=[];for(;f<o;++f)u=t[f]+r,i[0]===u?i[1]+=(n[f]-i[1])/++a:(a=0,i[1]+=e,i=[u,n[f]],l.push(i));return i[1]+=e,l}(o,c,u,f)},t.regressionLog=function(t,n,r){let e=0,o=0,l=0,u=0,f=0;U(t,n,r,(t,n)=>{++f,t=Math.log(t),e+=(t-e)/f,o+=(n-o)/f,l+=(t*n-l)/f,u+=(t*t-u)/f});const a=S(e,o,l,u),i=t=>a[0]+a[1]*Math.log(t);return{coef:a,predict:i,rSquared:I(t,n,r,o,i)}},t.regressionPoly=function(t,n,r,e){if(1===e)return P(t,n,r);if(2===e)return k(t,n,r);const[o,l,u,f]=E(t,n,r),a=o.length,i=[],s=[],c=e+1;let h,d,M,m,p;for(h=0;h<c;++h){for(M=0,m=0;M<a;++M)m+=Math.pow(o[M],h)*l[M];for(i.push(m),p=new Float64Array(c),d=0;d<c;++d){for(M=0,m=0;M<a;++M)m+=Math.pow(o[M],h+d);p[d]=m}s.push(p)}s.push(i);const g=function(t){const n=t.length-1,r=[];let e,o,l,u,f;for(e=0;e<n;++e){for(u=e,o=e+1;o<n;++o)Math.abs(t[e][o])>Math.abs(t[e][u])&&(u=o);for(l=e;l<n+1;++l)f=t[l][e],t[l][e]=t[l][u],t[l][u]=f;for(o=e+1;o<n;++o)for(l=n;l>=e;l--)t[l][o]-=t[l][e]*t[e][o]/t[e][e]}for(o=n-1;o>=0;--o){for(f=0,l=o+1;l<n;++l)f+=t[l][o]*r[l];r[o]=(t[n][o]-f)/t[o][o]}return r}(s),b=t=>{t-=u;let n=f+g[0]+g[1]*t+g[2]*t*t;for(h=3;h<c;++h)n+=g[h]*Math.pow(t,h);return n};return{coef:C(c,g,-u,f),predict:b,rSquared:I(t,n,r,f,b)}},t.regressionPow=function(t,n,r){let e=0,o=0,l=0,u=0,f=0,a=0;U(t,n,r,(t,n)=>{const r=Math.log(t),i=Math.log(n);++a,e+=(r-e)/a,o+=(i-o)/a,l+=(r*i-l)/a,u+=(r*r-u)/a,f+=(n-f)/a});const i=S(e,o,l,u),s=t=>i[0]*Math.pow(t,i[1]);return i[0]=Math.exp(i[0]),{coef:i,predict:s,rSquared:I(t,n,r,f,s)}},t.regressionQuad=k,t.sampleCurve=function(t,n,r,e){r=r||25,e=Math.max(r,e||200);const o=n=>[n,t(n)],l=n[0],u=n[1],f=u-l,a=f/e,i=[o(l)],s=[];if(r===e){for(let t=1;t<e;++t)i.push(o(l+t/r*f));return i.push(o(u)),i}s.push(o(u));for(let t=r;--t>0;)s.push(o(l+t/r*f));let c=i[0],h=s[s.length-1];for(;h;){const t=o((c[0]+h[0])/2);t[0]-c[0]>=a&&Q(c,t,h)>K?s.push(t):(c=h,i.push(h),s.pop()),h=s[s.length-1]}return i},t.sampleLogNormal=v,t.sampleNormal=m,t.sampleUniform=q,t.setRandom=function(n){t.random=n},t}({});
//# sourceMappingURL=vega-statistics.min.js.map
{
"name": "vega-statistics",
"version": "1.7.8",
"version": "1.7.9",
"description": "Statistical routines and probability distributions.",

@@ -14,18 +14,16 @@ "keywords": [

"main": "build/vega-statistics.js",
"module": "index",
"module": "build/vega-statistics.module.js",
"unpkg": "build/vega-statistics.min.js",
"repository": "vega/vega",
"scripts": {
"rollup": "rollup -g d3-array:d3 -f umd -n vega -o build/vega-statistics.js -- index.js",
"prebuild": "rimraf build && mkdir build",
"build": "yarn rollup",
"postbuild": "terser build/vega-statistics.js -c -m -o build/vega-statistics.min.js",
"pretest": "yarn prebuild && yarn rollup",
"prebuild": "rimraf build",
"build": "rollup -c",
"pretest": "yarn build --config-test",
"test": "tape 'test/**/*-test.js'",
"prepublishOnly": "yarn test && yarn build",
"postpublish": "git push && git push --tags"
"prepublishOnly": "yarn test && yarn build"
},
"dependencies": {
"d3-array": "^2.7.0"
"d3-array": "^2.7.1"
},
"gitHead": "8d6793f4ca7eaaf2d22186764e9ce2dae687cf52"
"gitHead": "4affcbedb9d14815dbb6d3b250ed231b54fc95c0"
}
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc