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

76 lines (58 loc) 3.37 kB
import { describe, it } from 'node:test'; import assert from 'node:assert/strict'; import Statistics from '../lib/index.js'; const { Table, Analyze } = Statistics; const { CompareMeans } = Analyze; describe('Pipeline: sort → split → pre/post tests', () => { it('до/после внутри групп + сравнение дельт между группами', () => { // Сгенерим табличку: группа, пол, pre, post const T = new Table({ group: [1, 1, 1, 2, 2, 2, 2], gender: [1, 2, 1, 1, 2, 2, 1], // 1=male, 2=female pre: [50, 55, 48, 52, 58, 59, 54], post: [60, 60, 55, 54, 61, 64, 52], }, { name: 'Exp' }); // 1) Сортировка (например, по pre по возрастанию) T.sortBy('pre', true); // 2) Разбиение по group const newStats = T.splitBy('group', { 1: 'G1', 2: 'G2' }); const t1 = newStats.columns('Comparing', 'pre', 'post') const { tables: groups } = newStats // 3) Paired: pre vs post в каждой группе const pairG1 = new CompareMeans({ pre: groups.G1.columns.pre.values, post: groups.G1.columns.post.values }).paired('pre', 'post'); const pairG2 = new CompareMeans({ pre: groups.G2.columns.pre.values, post: groups.G2.columns.post.values }).paired('pre', 'post'); assert(t1.compareMeans('G1_pre', 'G1_post').paired().t === pairG1.t) assert(t1.compareMeans('G2_pre', 'G2_post').paired().t === pairG2.t) // Проверим, что эффект в G1 заметен assert.ok(pairG1.t !== undefined); assert.ok(pairG1.p >= 0 && pairG1.p <= 1); // 4) Сравнение дельт между группами (независимый t-test) const d1 = groups.G1.columns.post.values.map((v, i) => v - groups.G1.columns.pre.values[i]); const d2 = groups.G2.columns.post.values.map((v, i) => v - groups.G2.columns.pre.values[i]); const indep = new CompareMeans({ d1, d2 }).independent('d1', 'd2'); assert.ok(indep.t !== undefined); assert.ok(indep.p >= 0 && indep.p <= 1); }); it('Сравнение мужчин и женщин + ANOVA по трём группам', () => { const T = new Table({ gender: [1, 2, 1, 2, 1, 2, 1, 2], // 1=male,2=female score: [60, 62, 65, 68, 70, 66, 72, 70], group3: [1, 1, 2, 2, 3, 3, 2, 1] }, { name: 'G' }); // Разделим на муж/жен и сравним score const males = T.clone('males').filterRowsBy('gender', v => v === 1); const females = T.clone('females').filterRowsBy('gender', v => v === 2); const cm = new CompareMeans({ males: males.columns.score.values, females: females.columns.score.values }); const it = cm.independent('males', 'females'); assert.ok(it.p >= 0 && it.p <= 1); // ANOVA по трём группам group3 const { tables } = T.splitBy('group3', { 1: 'A', 2: 'B', 3: 'C' }); const a = new CompareMeans({ A: tables.A.columns.score.values, B: tables.B.columns.score.values, C: tables.C.columns.score.values }).anova('A', 'B', 'C'); assert.equal(a.k, 3); assert.ok(a.p >= 0 && a.p <= 1); }); });