chatterjee = (data, { x = (d) => d[0], y = (d) => d[1] } = {}) => {
const X = d3.map(data, x);
const Y = d3.map(data, y);
const N = X.length;
const I = d3.sort(d3.range(N), (i) => X[i]);
const rank = d3.rank(Y);
return (
1 -
(3 / (N * N - 1)) *
d3.sum(d3.pairs(I), ([a, b]) => Math.abs(rank[a] - rank[b]))
);
}