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
41 lines (34 loc) • 1.83 kB
JavaScript
import { EPS } from "../settings.js";
import { Analyze } from "../../lib/index.js";
const { Correlate } = Analyze
import { describe, it } from 'node:test';
import assert from 'node:assert/strict';
import { nearlyEqual, hasDataOrSkip, splitGroups, toRecordFromArray } from '../helpers.js'
export function testCorrelation(g) {
const { X, Y, group, score, before, after, Q1, Q2, Q3, Q4 } = g.data;
describe('Correlations (Correlate)', () => {
it('Pearson/Spearman/Kendall for X~Y', () => {
const corr = new Correlate({ X, Y });
const p = corr.pearson('X', 'Y');
nearlyEqual(p.r, g.correlate.pearson.r, EPS.r, 'pearson.r');
nearlyEqual(p.p, g.correlate.pearson.p, EPS.p, 'pearson.p');
assert.equal(p.df, g.correlate.pearson.df, 'pearson.df');
const s = corr.spearman('X', 'Y');
nearlyEqual(s.r, g.correlate.spearman.r, 5e-6, 'spearman.r');
nearlyEqual(s.p, g.correlate.spearman.p, 5e-6, 'spearman.p');
const k = corr.kendall('X', 'Y');
// ALS Kendall exposes tau, p (and z/t); compare tau and p
nearlyEqual(k.tau, g.correlate.kendall.tau, 5e-6, 'kendall.tau');
nearlyEqual(k.p, g.correlate.kendall.p, 5e-6, 'kendall.p');
});
it('Pearson matrix (X|Y|score)', () => {
const all = new Correlate({ X, Y, score }).pearson(); // returns map
for (const [key, val] of Object.entries(g.correlate.matrix_pearson)) {
assert.ok(all[key], `missing pair ${key}`);
nearlyEqual(all[key].r, val.r, EPS.r, `matrix pearson r ${key}`);
nearlyEqual(all[key].p, val.p, EPS.p, `matrix pearson p ${key}`);
assert.equal(all[key].df, val.df, `matrix pearson df ${key}`);
}
});
});
}