UNPKG

@formant/ava

Version:

A framework for automated visual analytics.

61 lines (60 loc) 3.01 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getChangePointInfo = exports.findChangePoints = void 0; var lodash_1 = require("lodash"); var algorithms_1 = require("../../algorithms"); var util_1 = require("../util"); var constant_1 = require("../../constant"); var findChangePoints = function (series, changePointsParameter) { var _a; var results = algorithms_1.changePoint.Bayesian(series); var changePointsResult = []; // significanceBenchmark is equivalent to the confidence interval in hypothesis testing var significanceBenchmark = 1 - ((_a = changePointsParameter === null || changePointsParameter === void 0 ? void 0 : changePointsParameter.threshold) !== null && _a !== void 0 ? _a : constant_1.CHANGE_POINT_SIGNIFICANCE_BENCHMARK); results.forEach(function (item) { // item.significance is similar to confidence interval if ((item === null || item === void 0 ? void 0 : item.index) >= 0 && (item === null || item === void 0 ? void 0 : item.significance) >= significanceBenchmark) { changePointsResult.push(item); } }); return changePointsResult; }; exports.findChangePoints = findChangePoints; var getChangePointInfo = function (props) { var valid = (0, util_1.preValidation)(props); var insightType = 'change_point'; if ((0, lodash_1.isString)(valid)) return (0, util_1.getNonSignificantInsight)({ detailInfo: valid, insightType: insightType, infoType: 'verificationFailure' }); var data = props.data; var _a = (0, util_1.getAlgorithmCommonInput)(props), dimension = _a.dimension, values = _a.values, measure = _a.measure; if ((0, lodash_1.isNil)(dimension) || (0, lodash_1.isNil)(measure)) return (0, util_1.getNonSignificantInsight)({ detailInfo: 'Measure or dimension is empty.', insightType: insightType, infoType: 'verificationFailure', }); var changePointsParameter = (0, lodash_1.get)(props, 'options.algorithmParameter.changePoint'); var changePoints = (0, exports.findChangePoints)(values, changePointsParameter); if (changePoints.length === 0) { var info = 'Bayesian Online Changepoint Detection does not pass.'; return (0, util_1.getNonSignificantInsight)({ insightType: insightType, infoType: 'noInsight', customInfo: { info: info } }); } var outliers = []; changePoints.forEach(function (item) { var index = item.index, significance = item.significance; if (!(0, lodash_1.isNil)(data[index])) { outliers.push({ type: insightType, dimension: dimension, measure: measure, significance: significance, index: index, x: data[index][dimension], y: data[index][measure], significantInsight: true, }); } }); return outliers; }; exports.getChangePointInfo = getChangePointInfo;