UNPKG

als-statistics

Version:

A powerful and lightweight JavaScript library for descriptive statistics, regression, clustering, outlier detection, and noise analysis using a flexible table/column architecture.

74 lines (62 loc) 3.13 kB
const { describe, it } = require('node:test'); const assert = require('node:assert'); const Comparative = require('../../lib/table/instruments/comparative'); const RatioColumn = require('../../lib/ratio-column/index'); describe('Comparative', () => { const sample1 = new RatioColumn([10, 20, 30, 40, 50]); const sample2 = new RatioColumn([15, 25, 35, 45, 55]); const analysis = new Comparative(sample1, sample2); it('should calculate sum of covariance (sumCov)', () => { assert.strictEqual(analysis.sumCov.toFixed(2), '1000.00'); }); it('should calculate covariance for population', () => { assert.strictEqual(analysis.covariancePopulation.toFixed(2), '200.00'); }); it('should calculate covariance for sample', () => { assert.strictEqual(analysis.covarianceSample.toFixed(2), '250.00'); }); it('should calculate correlation coefficient for population', () => { assert.strictEqual(analysis.correlationPopulation.toFixed(2), '1.00'); }); it('should calculate correlation coefficient for sample', () => { assert.strictEqual(analysis.correlationSample.toFixed(2), '1.00'); }); it('should perform two-sample t-test', () => { const { t, df, F } = analysis.twoSampleTTest(); assert.strictEqual(t.toFixed(2), '-0.50'); assert.strictEqual(df, 8); assert.strictEqual(F.toFixed(2), '1.00'); }); it('should throw an error if sample sizes do not match', () => { const sample3 = new RatioColumn([10, 20, 30]); assert.throws(() => new Comparative(sample1, sample3), /Length of samples must match/); }); it('should return correlation as 0 if one sample has zero variance', () => { const sample1 = new RatioColumn([1, 1, 1, 1, 1]); const sample2 = new RatioColumn([10, 20, 30, 40, 50]); const comparison = new Comparative(sample1, sample2); assert.strictEqual(comparison.correlationPopulation, 0); }); it('should handle zero variance in two-sample t-test', () => { const sample1 = new RatioColumn([1, 1, 1, 1, 1]); const sample2 = new RatioColumn([10, 20, 30, 40, 50]); const comparison = new Comparative(sample1, sample2); const { t, df, F } = comparison.twoSampleTTest(); assert.ok(!isNaN(t)); // Проверяем, что t определён assert.strictEqual(df, 8); assert.strictEqual(F, 0); // Одна из дисперсий 0 }); it('should return 0 correlationSample with zero variance', () => { const sample1 = new RatioColumn([1, 1, 1]); const sample2 = new RatioColumn([10, 20, 30]); const comparison = new Comparative(sample1, sample2); assert.strictEqual(comparison.correlationSample, 0); }); it('should return zero t-statistic when means are equal', () => { const sample1 = new RatioColumn([1, 2, 3]); const sample2 = new RatioColumn([1, 2, 3]); const comparison = new Comparative(sample1, sample2); const { t } = comparison.twoSampleTTest(); assert.strictEqual(t, 0); }); });