JSFiddle - React, Tailwind, and code Playground

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 = [];
  vf.length = N;
  for (var i = 0; i < N; i++) {
  	vf[i] = (d[i] > 0.1)?1:0;
  }
  
	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;
}

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 = [];
  data.length = N;
  for (var i = 0; i < N; i++) {
  	data[i] = x[i];
  }
  flags = verifyOutliers(data);
  while(hasOutliers(flags)) {
    for (var i = 0; i < data.length; i++) {
    	if (flags[i] == 1) {
        data.splice(i, 1);
        flags.splice(i, 1);
        i--;
      }
    }
    flags = verifyOutliers(data);
  }
  for (var i = 0; i < N; i++) {
  	flags[i] = (data.indexOf(x[i]) == -1)?1:0;
  }
  return flags
}

// Logging in jsFiddle
(function() {
    // Store a copy...