Outlier Calculation

Outlier Calculation for Data Bridges, done by Samir converting code from R script made by Friederike (WFP)

by brainsengineering

JavaScript

function variance(values) {
  var avg = mean(values);

  var squareDiffs = values.map(function(value) {
    var diff = value - avg;
    var sqrDiff = diff * diff;
    return sqrDiff;
  });

  var sum = 0;
  for (var i = 0; i < squareDiffs.length; i++) {
    sum = sum + squareDiffs[i];
  }

  var variance = sum / (values.length - 1);

  return variance;
}

function mean(data) {
  var sum = 0;
  for (var i = 0; i < data.length; i++) {
    sum = sum + data[i];
  }

  var avg = sum / data.length;
  return avg;
}

function verifyOutliers(x) {
  var N = x.length
  var x_mean = mean(x);

  var e = [];
  e.length = N;
  for (var i = 0; i < N; i++) {
    e[i] = x[i] - x_mean;
  }
  var e_var = variance(e);

  var d = [];
  d.length = N;
  for (var i = 0; i < N; i++) {
    d[i] = Math.abs(e[i] / x_mean);
  }

  var vf = [];
  var differenceTenPercent = false;

  vf.length = N;
  for (var i = 0; i < N; i++) {
    if (d[i] > 0.1) {
      vf[i] = 1;
      differenceTenPercent = true;
    } else {
      vf[i] = 0;
    }
  }


  //console.log('> differenceTenPercent:' + differenceTenPercent);
  console.log(x);
  console.log(d);
  if (N == 3 && differenceTenPercent === false) {
    console.log('10% diff false and N===3: ' + vf);
    return vf;
  } else if (N > 2 && differenceTenPercent === true) {

    var N_1 = N - 1;
    var N_2 = N - 2;

    var s = [];
    s.length = N;
    for (var i = 0; i < N; i++) {
      s[i] = Math.sqrt((e_var * N_1 / N_2) - e[i] * e[i] * N / (N_1 * N_2));
    }

    var r = [];
    r.length = N;
    var N_sqrt = Math.sqrt((N_1 / N))

    for (i = 0; i < N; i++) {
      r[i] = e[i] / (s[i] * N_sqrt)
    }

    for (var i = 0; i < N; i++) {
      vf[i] = (r[i] > (3 + ((N <= 6) ? 1 : 0)) ? 1 : 0);
    }
    return vf;
  }else{
  return vf;
  }
}

function hasOutliers(flags) {
  for (var i = 0; i < flags.length; i++) {
    if (flags[i] == 1) {
      return true;
    }
  }
  return false;
}

function verifyAllOutliers(x) {
  var N = x.length;
  var data =...