Advertisement
Guest User

Untitled

a guest
Jun 24th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. export class filter {
  2.     // Gets the median of a list of numbers
  3.     private median(...arr: number[]): number {
  4.         if (arr.length == 1) return arr[0];
  5.         arr = arr.sort();
  6.    
  7.         if (arr.length % 2 == 0) {
  8.             return (arr[(arr.length / 2) - 1] + arr[arr.length / 2]) / 2;
  9.         } else {
  10.             return arr[(arr.length - 1) / 2]
  11.         };
  12.     }
  13.  
  14.     // Gets the MAD of a list of numbers
  15.     private medianAbsoluteDeviation(...arr: number[]): number {
  16.         if (arr.length == 1) return 0;
  17.         let med = this.median(...arr);
  18.  
  19.         return this.median(...arr.map(x => Math.abs(med - x)));
  20.     }
  21.  
  22.     // Removes values that are greater than threshold times different from the MAD
  23.     private removeNoise(arr: number[], threshold: number): number[] {
  24.         let med = this.median(...arr);
  25.         let mad = this.medianAbsoluteDeviation(...arr);
  26.  
  27.         return arr.filter(x => Math.abs(med - x) <= (threshold * mad));
  28.     }
  29.  
  30.     // Returns the mean of a list of numbers,
  31.     // filtering outliers that are greater than threshold times different from the list's MAD
  32.     public filteredMean(arr: number[], threshold: number): number {
  33.         let filtered = this.removeNoise(arr, threshold);
  34.         return filtered.reduce((agg, x) => agg + x, 0) / arr.length;
  35.     }
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement