@tensorflow/tfjs-core
Version:
Hardware-accelerated JavaScript library for machine intelligence
76 lines (75 loc) • 2.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var test_util_1 = require("../test_util");
var tensor_1 = require("../tensor");
function jarqueBeraNormalityTest(a) {
var values;
if (a instanceof tensor_1.Tensor) {
values = a.dataSync();
}
else {
values = a;
}
var n = values.length;
var s = skewness(values);
var k = kurtosis(values);
var jb = n / 6 * (Math.pow(s, 2) + 0.25 * Math.pow(k - 3, 2));
var CHI_SQUARE_2DEG = 5.991;
if (jb > CHI_SQUARE_2DEG) {
throw new Error("Invalid p-value for JB: " + jb);
}
}
exports.jarqueBeraNormalityTest = jarqueBeraNormalityTest;
function expectArrayInMeanStdRange(actual, expectedMean, expectedStdDev, epsilon) {
if (epsilon === void 0) { epsilon = test_util_1.TEST_EPSILON; }
var actualValues;
if (actual instanceof tensor_1.Tensor) {
actualValues = actual.dataSync();
}
else {
actualValues = actual;
}
var actualMean = mean(actualValues);
test_util_1.expectNumbersClose(actualMean, expectedMean, epsilon);
test_util_1.expectNumbersClose(standardDeviation(actualValues, actualMean), expectedStdDev, epsilon);
}
exports.expectArrayInMeanStdRange = expectArrayInMeanStdRange;
function mean(values) {
var sum = 0;
for (var i = 0; i < values.length; i++) {
sum += values[i];
}
return sum / values.length;
}
function standardDeviation(values, mean) {
var squareDiffSum = 0;
for (var i = 0; i < values.length; i++) {
var diff = values[i] - mean;
squareDiffSum += diff * diff;
}
return Math.sqrt(squareDiffSum / values.length);
}
function kurtosis(values) {
var valuesMean = mean(values);
var n = values.length;
var sum2 = 0;
var sum4 = 0;
for (var i = 0; i < n; i++) {
var v = values[i] - valuesMean;
sum2 += Math.pow(v, 2);
sum4 += Math.pow(v, 4);
}
return (1 / n) * sum4 / Math.pow((1 / n) * sum2, 2);
}
function skewness(values) {
var valuesMean = mean(values);
var n = values.length;
var sum2 = 0;
var sum3 = 0;
for (var i = 0; i < n; i++) {
var v = values[i] - valuesMean;
sum2 += Math.pow(v, 2);
sum3 += Math.pow(v, 3);
}
return (1 / n) * sum3 / Math.pow((1 / (n - 1)) * sum2, 3 / 2);
}