@formant/ava
Version:
A framework for automated visual analytics.
39 lines (38 loc) • 1.35 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.calcPValue = exports.pettittTest = void 0;
var lodash_1 = require("lodash");
var common_1 = require("../../insight/utils/common");
/**
* Pettitt's (1979) method is a rank-based nonparametric test for abrupt changes in a time series.
* */
function pettittTest(data) {
var n = data === null || data === void 0 ? void 0 : data.length;
var rankArr = (0, common_1.rank)(data);
var Umax = 0;
var UmaxIndex = -1;
for (var k = 0; k < n; k += 1) {
var U = Math.abs(2 * (0, lodash_1.sumBy)(rankArr.slice(0, k)) - k * (n + 1));
if (U > Umax) {
Umax = U;
UmaxIndex = k;
}
}
var pvalue = 2 * Math.exp((-6 * Math.pow(Umax, 2)) / (Math.pow(n, 2) + Math.pow(n, 3)));
return {
index: UmaxIndex,
significance: 1 - pvalue,
};
}
exports.pettittTest = pettittTest;
/**
* p-value calc in Pettitt
*/
function calcPValue(data, index) {
var n = data === null || data === void 0 ? void 0 : data.length;
var rankArr = (0, common_1.rank)(data);
var U = Math.abs(2 * (0, lodash_1.sumBy)(rankArr.slice(0, index)) - index * (n + 1));
var pvalue = 2 * Math.exp((-6 * Math.pow(U, 2)) / (Math.pow(n, 2) + Math.pow(n, 3)));
return pvalue;
}
exports.calcPValue = calcPValue;