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
JavaScript
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);
});
});