function generateBivariateDataset(
n = 100,
rho = 0.5,
xMean = 50,
xStdDev = 20,
yMean = 100,
yStdDev = 20,
seed = 1337
) {
const rngX = d3.randomNormal.source(seedrandom(seed))(0, 1);
const rngY = d3.randomNormal.source(seedrandom(seed + 145))(0, 1);
const rngColor = d3.randomUniform.source(seedrandom(seed + 200))(0, 1);
const colors = ["red", "blue"];
const dataset = Array.from({ length: n }, () => {
const Zx = rngX();
const Zy = rngY();
const X = xMean + xStdDev * Zx;
const Y = yMean + yStdDev * (rho * Zx + Math.sqrt(1 - rho ** 2) * Zy);
const color = colors[Math.floor(rngColor() * colors.length)];
return {
X,
Y,
color
};
});
return dataset;
}