|
1 | | -// create MAD & M estimator algorithms |
2 | | -function getStandardDeviation (arr: number[]) { |
3 | | - const n = arr.length |
4 | | - const mean = arr.reduce((a, b) => a + b) / n |
5 | | - return Math.sqrt(arr.map(x => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n) |
| 1 | +function getStandardDeviation(arr: number[]) { |
| 2 | + const n = arr.length; |
| 3 | + const mean = arr.reduce((a, b) => a + b) / n; |
| 4 | + return Math.sqrt(arr.map((x) => Math.pow(x - mean, 2)).reduce((a, b) => a + b) / n); |
6 | 5 | } |
7 | | -const median = (arr: number[]): number => { |
| 6 | +function calculateMedian(arr: number[]) { |
8 | 7 | const s = [...arr].sort((a, b) => a - b); |
9 | 8 | const mid = Math.floor(s.length / 2); |
10 | | - return s.length % 2 === 0 ? ((s[mid - 1] + s[mid]) / 2) : s[mid]; |
11 | | -}; |
12 | | -function mad(arr: number[]) { |
13 | | - const med = median(arr); |
14 | | - const abs = arr.map((x) => Math.abs(x - med)); |
15 | | - return median(abs); |
| 9 | + return s.length % 2 === 0 ? (s[mid - 1] + s[mid]) / 2 : s[mid]; |
| 10 | +} |
| 11 | +function Mestimator(arr: number[], x: number) { |
| 12 | + var sumSeries = 0; |
| 13 | + for (var i = arr.length - 1; i >= 0; i--) { |
| 14 | + sumSeries += Number(Math.abs(arr[i] - x)); |
| 15 | + } |
| 16 | + return (1 / (0.798 * arr.length)) * sumSeries; |
| 17 | +} |
| 18 | +function Uvalue(s: number, arr: number[]) { |
| 19 | + return (1.25 * s) / Math.sqrt(arr.length); |
16 | 20 | } |
17 | | -var arr = [1, 4, 3, 4, 5, 6, 7, 8, 9, 10]; // median is 5.5 |
18 | | -console.log(mad(arr)); // median absolute deviation is 2.5 |
19 | | -console.log( getStandardDeviation(arr) * 1.4826 ); |
20 | 21 |
|
| 22 | +var arr = [1, 2, 3, 4, 5, 6, 3, 8, 2, 20]; |
| 23 | +var standartDeviation = getStandardDeviation(arr); |
| 24 | +var madex = Math.abs(standartDeviation - calculateMedian(arr)) * 1.483; |
21 | 25 |
|
| 26 | +var result = Uvalue(Mestimator(arr, madex), arr); |
| 27 | +console.log(result); |
0 commit comments