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

77 lines (65 loc) 3.22 kB
import { it, describe } from 'node:test' import assert from 'assert'; import { frequencies, recode, normalizeRules } from '../../lib/descriptive/frequencies.js'; describe('frequencies', () => { // 1) Метки по точным значениям (пол) const labelsGender = [ ['male', 1], ['female', 2], ]; // 2) Метки по диапазонам (возрастные группы) const labelsAge = [ ['newBorn', 0, 1], ['child', 1, 12], ['young', 12, 18], ['grown', 18, 40], ['adult', 40, 60], ['old', 60, null] // 60+ ]; it('Пример frequencies без меток', () => { const result = frequencies({ values: [1, 2, 1, 3, 2, 2] }) assert.deepStrictEqual(result, { '1': 2, '2': 3, '3': 1 }) }) it('Пример frequencies с метками по значениям', () => { const result = frequencies({ values: [1, 2, 1, 2, 2, 1], labels: labelsGender }) assert.deepStrictEqual(result, { male: 3, female: 3 }) }) it('Пример frequencies с метками по диапазонам', () => { const results = frequencies({ values: [0.5, 1, 4, 12, 17, 18, 40, 85], labels: labelsAge }) const expected = { newBorn: 1, child: 2, young: 2, grown: 1, adult: 1, old: 1 } assert.deepStrictEqual(results, expected) // Пояснение: значение "1" попадает в 'child' (т.к. [1,12)), а 40 — в 'adult' ([40,60)). // 0.5 -> newBorn, 85 -> old, 18 -> grown, 12 и 17 -> young. // Ещё одно значение (зависит от набора) может уйти в _other, если не попало в диапазоны. }) it('normalizeRules: некорректный формат правил → throw', () => { assert.throws(() => normalizeRules([['only-one'], ['too', 'many', 'items', 'here']]), /Wrong rule format/); }); it('recode: eq и range-правила работают', () => { const values = [1, 2, 3, 'x', 'y']; const out = recode({ values }, [ ['low', 1, 3], // [1,3): 1 и 2 → 'low'; 3 останется 3 ['X', 'x'], // точное равенство ]); assert.deepEqual(out, ['low', 'low', 3, 'X', 'y']); }); }) describe('Recode', () => { it('Пример recode по точным значениям: [ [old, new], ... ]', () => { const result = recode({ values: [1, 2, 2, 4] }, [[2, 1], [3, 2]]) const expected = [2, 3, 3, 4] assert.deepStrictEqual(result, expected) }) it('Пример recode по диапазонам: [ [new, min, max], ... ]', () => { // Пусть хотим превратить возраст в коды 1..6: const ageToCode = [ [1, 0, 1], // 0 <= age < 1 [2, 1, 12], // 1 <= age < 12 [3, 12, 18], // 12 <= age < 18 [4, 18, 40], // 18 <= age < 40 [5, 40, 60], // 40 <= age < 60 [6, 60, null] // 60+ ]; assert.deepStrictEqual(recode({ values: [0.5, 1, 12, 18, 40, 60, 85] }, ageToCode), [1, 2, 3, 4, 5, 6, 6]) }) })