@formant/ava
Version:
A framework for automated visual analytics.
61 lines (60 loc) • 2.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.calcPValue = exports.windowBasedMean = void 0;
var lodash_1 = require("lodash");
var constant_1 = require("../../insight/constant");
var util_1 = require("../../insight/insights/util");
var DEFAULT_WINDOW_SIZE = 4;
/**
* Window-based change point detection
*/
function windowBasedMean(data, params) {
var len = data === null || data === void 0 ? void 0 : data.length;
var K = (params === null || params === void 0 ? void 0 : params.windowSize) || DEFAULT_WINDOW_SIZE;
if (len <= 2 * K + 3)
return [];
var significanceLimit = (params === null || params === void 0 ? void 0 : params.significanceLimit) || constant_1.SIGNIFICANCE_BENCHMARK;
var diff = Array(len).fill(0);
for (var i = K; i <= len - K; i += 1) {
var meanLeft = (0, lodash_1.mean)(data.slice(i - K, i));
var meanRight = (0, lodash_1.mean)(data.slice(i, i + K));
diff[i] = Math.abs(meanLeft - meanRight);
}
var differences = diff.slice(K, len - K + 1);
var sorted = differences.sort(function (a, b) { return b - a; });
var result = [];
var _loop_1 = function (i) {
var difference = sorted[i];
var index = diff.findIndex(function (item) { return item === difference; });
var significance = 1 - (0, util_1.calculatePValue)(differences, difference);
if (significance >= significanceLimit) {
result.push({
index: index,
significance: significance,
});
}
};
for (var i = 0; i < sorted.length; i += 1) {
_loop_1(i);
}
return result;
}
exports.windowBasedMean = windowBasedMean;
/**
* Window-based change point test
*/
function calcPValue(data, index, window) {
var len = data === null || data === void 0 ? void 0 : data.length;
var K = window || DEFAULT_WINDOW_SIZE;
if (len <= 2 * K + 3)
return 0;
var diff = Array(len).fill(0);
for (var i = K; i <= len - K; i += 1) {
var meanLeft = (0, lodash_1.mean)(data.slice(i - K, i));
var meanRight = (0, lodash_1.mean)(data.slice(i, i + K));
diff[i] = Math.abs(meanLeft - meanRight);
}
var p = (0, util_1.calculatePValue)(diff.slice(K, len - K + 1), diff[index]);
return p;
}
exports.calcPValue = calcPValue;