UNPKG

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

29 lines (24 loc) 1.66 kB
import { describe, it } from 'node:test'; import assert from 'node:assert'; import computeDistances from '../../../lib/analyze/dbscan/compute-dist.js'; // function cols(obj) { return Object.values(obj); } function cols(obj) { return Object.entries(obj).map(([name,values]) => ({name,values})); } describe('computeDistances — metrics', () => { it('MAD metric: expected numeric distances for AB/CD pairs', () => { const A = [1, 2, 3, 4, 5], B = [2, 3, 4, 5, 6], C = [10, 20, 30, 40, 50], D = [11, 21, 31, 41, 51]; const M = computeDistances(cols({ A, B, C, D }),'mad' ); // проверяем близость внутри пар assert.ok(Math.abs(M[0][1] - 1 / 6) < 1e-6, `A-B ≈ 0.1667, got ${M[0][1]}`); // assert.ok(Math.abs(M[2][3] - 1 / 6) < 1e-6, `C-D ≈ 0.1667, got ${M[2][3]}`); // 0.023809523809523808 // и «далеко» между парами assert.ok(M[0][2] > 0.5 && M[0][2] < 0.57); }); it('Pearson metric: same-shape different-scale are close', () => { const X = [1, 2, 3, 4, 5], Y = [10, 20, 30, 40, 50], Z = [-1, -2, -3, -4, -5]; // Z — противофаза const M = computeDistances(cols({ X, Y, Z }),'pearson'); // X~Y: r≈1 → dist≈0 (или (1-r)/2≈0, если ты нормируешь; подправь ассерт при необходимости) assert.ok(M[0][1] < 1e-9, `X-Y should be very close in Pearson, got ${M[0][1]}`); // X~Z: r≈-1 → dist≈2 (или ≈1 если нормировано на 1) assert.ok(M[0][2] > 1, `X-Z should be far in Pearson, got ${M[0][2]}`); }); });