@formant/ava
Version:
A framework for automated visual analytics.
61 lines (60 loc) • 3.01 kB
JavaScript
;
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;