aboutsummaryrefslogtreecommitdiff
path: root/gn2/wqflask/static/new/javascript/stats.js
diff options
context:
space:
mode:
Diffstat (limited to 'gn2/wqflask/static/new/javascript/stats.js')
-rw-r--r--gn2/wqflask/static/new/javascript/stats.js176
1 files changed, 176 insertions, 0 deletions
diff --git a/gn2/wqflask/static/new/javascript/stats.js b/gn2/wqflask/static/new/javascript/stats.js
new file mode 100644
index 00000000..6c443ab3
--- /dev/null
+++ b/gn2/wqflask/static/new/javascript/stats.js
@@ -0,0 +1,176 @@
+// Generated by CoffeeScript 1.8.0
+var Stats, bxd_only;
+
+Stats = (function() {
+ function Stats(the_values) {
+ this.the_values = the_values;
+ }
+
+ Stats.prototype.add_value = function(value) {
+ return this.the_values.push(value);
+ };
+
+ Stats.prototype.n_of_samples = function() {
+ return this.the_values.length;
+ };
+
+ Stats.prototype.sum = function() {
+ var total, value, _i, _len, _ref;
+ total = 0;
+ _ref = this.the_values;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ value = _ref[_i];
+ total += value;
+ }
+ return total;
+ };
+
+ Stats.prototype.mean = function() {
+ return this.sum() / this.n_of_samples();
+ };
+
+ Stats.prototype.median = function() {
+ var is_odd, median_position, the_values_sorted;
+ is_odd = this.the_values.length % 2;
+ median_position = Math.floor(this.the_values.length / 2);
+ the_values_sorted = this.the_values.sort(function(a, b) {
+ return a - b;
+ });
+ if (is_odd) {
+ return the_values_sorted[median_position];
+ } else {
+ return (the_values_sorted[median_position] + the_values_sorted[median_position - 1]) / 2;
+ }
+ };
+
+ Stats.prototype.std_dev = function() {
+ var step_a, step_b, sum, value, _i, _len, _ref;
+ sum = 0;
+ _ref = this.the_values;
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ value = _ref[_i];
+ step_a = Math.pow(value - this.mean(), 2);
+ sum += step_a;
+ }
+ step_b = sum / this.the_values.length;
+ return Math.sqrt(step_b);
+ };
+
+ Stats.prototype.std_error = function() {
+ return this.std_dev() / Math.sqrt(this.n_of_samples());
+ };
+
+ Stats.prototype.min = function() {
+ return Math.min.apply(Math, this.the_values);
+ };
+
+ Stats.prototype.max = function() {
+ return Math.max.apply(Math, this.the_values);
+ };
+
+ Stats.prototype.range = function() {
+ if (js_data.dataset_type == "ProbeSet"){
+ if (js_data.data_scale == "linear_positive"){
+ return Math.log2(this.max()) - Math.log2(this.min());
+ } else {
+ return this.max() - this.min()
+ }
+ } else {
+ return this.max() - this.min()
+ }
+ };
+
+ Stats.prototype.range_fold = function() {
+ if (js_data.dataset_type == "ProbeSet"){
+ return Math.pow(2, this.range());
+ } else {
+ return this.range()
+ }
+ };
+
+ Stats.prototype.interquartile = function() {
+ var iq, length, q1, q3;
+ length = this.the_values.length;
+ if (js_data.dataset_type == "ProbeSet" && js_data.data_scale == "linear_positive") {
+ q1 = Math.log2(this.the_values[Math.floor(length * .25)]);
+ q3 = Math.log2(this.the_values[Math.floor(length * .75)]);
+ } else {
+ q1 = this.the_values[Math.floor(length * .25)];
+ q3 = this.the_values[Math.floor(length * .75)];
+ }
+ iq = q3 - q1;
+ if (js_data.dataset_type == "ProbeSet") {
+ return Math.pow(2, iq);
+ } else {
+ return iq;
+ }
+ };
+
+ Stats.prototype.skewness = function() {
+ var len = this.the_values.length,
+ delta = 0,
+ delta_n = 0,
+ term1 = 0,
+ N = 0,
+ mean = 0,
+ M2 = 0,
+ M3 = 0,
+ g;
+
+ for ( var i = 0; i < len; i++ ) {
+ N += 1;
+
+ delta = this.the_values[ i ] - mean;
+ delta_n = delta / N;
+
+ term1 = delta * delta_n * (N-1);
+
+ M3 += term1*delta_n*(N-2) - 3*delta_n*M2;
+ M2 += term1;
+ mean += delta_n;
+ }
+ // Calculate the population skewness:
+ g = Math.sqrt( N )*M3 / Math.pow( M2, 3/2 );
+
+ // Return the corrected sample skewness:
+ return Math.sqrt( N*(N-1))*g / (N-2);
+ };
+
+ Stats.prototype.kurtosis = function() {
+ var len = this.the_values.length,
+ delta = 0,
+ delta_n = 0,
+ delta_n2 = 0,
+ term1 = 0,
+ N = 0,
+ mean = 0,
+ M2 = 0,
+ M3 = 0,
+ M4 = 0,
+ g;
+
+ for ( var i = 0; i < len; i++ ) {
+ N += 1;
+
+ delta = this.the_values[ i ] - mean;
+ delta_n = delta / N;
+ delta_n2 = delta_n * delta_n;
+
+ term1 = delta * delta_n * (N-1);
+
+ M4 += term1*delta_n2*(N*N - 3*N + 3) + 6*delta_n2*M2 - 4*delta_n*M3;
+ M3 += term1*delta_n*(N-2) - 3*delta_n*M2;
+ M2 += term1;
+ mean += delta_n;
+ }
+ // Calculate the population excess kurtosis:
+ g = N*M4 / (M2*M2) - 3;
+ //Return the corrected sample excess kurtosis:
+ return (N-1) / ( (N-2)*(N-3) ) * ( (N+1)*g + 6 );
+ };
+
+ return Stats;
+
+})();
+
+window.Stats = Stats;