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