UNPKG

@ai-on-browser/data-analysis-models

Version:

Data analysis model package without any dependencies

45 lines (39 loc) 968 B
/** * Tukey's fences */ export default class TukeysFences { // https://en.wikipedia.org/wiki/Outlier#Tukey's_fences /** * @param {number} k Tuning parameter */ constructor(k) { this._k = k } /** * Returns a list of the data predicted as outliers or not. * @param {Array<Array<number>>} data Training data * @returns {boolean[]} Predicted values */ predict(data) { const n = data.length const outliers = Array(n).fill(false) for (let i = 0; i < data[0].length; i++) { const x = data.map(v => v[i]) x.sort((a, b) => a - b) const q = p => { const np = (n - 1) * p const np_l = Math.floor(np) const np_h = Math.ceil(np) return x[np_l] + (np - np_l) * (x[np_h] - x[np_l]) } const q1 = q(0.25) const q3 = q(0.75) const l = q1 - this._k * (q3 - q1) const h = q3 + this._k * (q3 - q1) for (let k = 0; k < n; k++) { outliers[k] ||= data[k][i] < l || h < data[k][i] } } return outliers } }