Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- export class filter {
- // Gets the median of a list of numbers
- private median(...arr: number[]): number {
- if (arr.length == 1) return arr[0];
- arr = arr.sort();
- if (arr.length % 2 == 0) {
- return (arr[(arr.length / 2) - 1] + arr[arr.length / 2]) / 2;
- } else {
- return arr[(arr.length - 1) / 2]
- };
- }
- // Gets the MAD of a list of numbers
- private medianAbsoluteDeviation(...arr: number[]): number {
- if (arr.length == 1) return 0;
- let med = this.median(...arr);
- return this.median(...arr.map(x => Math.abs(med - x)));
- }
- // Removes values that are greater than threshold times different from the MAD
- private removeNoise(arr: number[], threshold: number): number[] {
- let med = this.median(...arr);
- let mad = this.medianAbsoluteDeviation(...arr);
- return arr.filter(x => Math.abs(med - x) <= (threshold * mad));
- }
- // Returns the mean of a list of numbers,
- // filtering outliers that are greater than threshold times different from the list's MAD
- public filteredMean(arr: number[], threshold: number): number {
- let filtered = this.removeNoise(arr, threshold);
- return filtered.reduce((agg, x) => agg + x, 0) / arr.length;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement