@turnbuckle/aprs-calculator-services
Version:
Anchorpoint Risk Calculator Service.
96 lines (95 loc) • 3.87 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.lambda = exports.dlambda = exports.nlambda = exports.nthPowerMatrix = exports.diagonalMatrix = exports.createMatrix = exports.createNumberArray = exports.applyAgeAnalysisCalculations = void 0;
var mathjs_1 = require("mathjs");
var date_and_time_module_1 = require("./date-and-time.module");
var sort_module_1 = require("./sort.module");
/**
* Dependencies on mathjs v11.x
*/
function applyAgeAnalysisCalculations(ageAnalysis) {
if (ageAnalysis.length > 0) {
(0, sort_module_1.sortByDateAscending)(ageAnalysis);
var maxDate = ageAnalysis[ageAnalysis.length - 1].date;
(0, sort_module_1.sortByTransactionNumberAndThenDate)(ageAnalysis);
for (var i = 0; i < ageAnalysis.length; i++) {
ageAnalysis[i].rating2 = 0;
ageAnalysis[i].dlambda = 0;
if (i < ageAnalysis.length - 1) {
if (ageAnalysis[i].transactionNumber === ageAnalysis[i + 1].transactionNumber) {
ageAnalysis[i].rating2 = ageAnalysis[i + 1].rating;
ageAnalysis[i].dlambda = (0, date_and_time_module_1.daysDiff)(ageAnalysis[i].date, ageAnalysis[i + 1].date) / 365;
}
else {
ageAnalysis[i].dlambda = (0, date_and_time_module_1.daysDiff)(ageAnalysis[i].date, maxDate) / 365;
}
}
}
}
return ageAnalysis;
}
exports.applyAgeAnalysisCalculations = applyAgeAnalysisCalculations;
function createNumberArray(dimension, defaultValue) {
if (defaultValue === void 0) { defaultValue = 0; }
return new Array(dimension).fill(defaultValue);
}
exports.createNumberArray = createNumberArray;
function createMatrix(dimension, defaultValue) {
if (defaultValue === void 0) { defaultValue = 0; }
return createNumberArray(dimension).map(function () { return createNumberArray(dimension, defaultValue); });
}
exports.createMatrix = createMatrix;
function diagonalMatrix(dimension, diagonalValue) {
var output = createMatrix(dimension);
for (var i = 0; i < output.length; i++) {
output[i][i] = diagonalValue;
}
return output;
}
exports.diagonalMatrix = diagonalMatrix;
function nthPowerMatrix(matrix, k) {
var output = matrix;
for (var i = 1; i < k; i++) {
output = (0, mathjs_1.multiply)(output, matrix);
}
return output;
}
exports.nthPowerMatrix = nthPowerMatrix;
function nlambda(ageAnalysis, maxRating, absorbingStates) {
var output = createMatrix(maxRating);
var absorbingRowStart = maxRating - absorbingStates;
for (var i = 0; i < ageAnalysis.length; i++) {
var item = ageAnalysis[i];
if (item.rating2 !== 0) {
if (item.rating <= absorbingRowStart) {
output[item.rating - 1][item.rating2 - 1]++;
}
}
}
return output;
}
exports.nlambda = nlambda;
function dlambda(ageAnalysis, maxRating) {
var output = new Array(maxRating).fill(0);
for (var i = 0; i < ageAnalysis.length; i++) {
output[ageAnalysis[i].rating - 1] += ageAnalysis[i].dlambda;
}
return output;
}
exports.dlambda = dlambda;
function lambda(nlambdaMatrix, dlambdaMatrix) {
var output = createMatrix(nlambdaMatrix.length);
for (var row = 0; row < output.length; row++) {
for (var col = 0; col < output[row].length; col++) {
if (row !== col) {
if (dlambdaMatrix[row] !== 0) {
var lValue = nlambdaMatrix[row][col] / dlambdaMatrix[row];
output[row][col] = lValue;
output[row][row] -= output[row][col];
}
}
}
}
return output;
}
exports.lambda = lambda;