changeset 1275:b4a0244bf5ed

Analysis: Percentile calculation interpolates. Use mean, not 50th percentile for box plot.
author Nicholas Jillings <n.g.r.jillings@se14.qmul.ac.uk>
date Thu, 24 Mar 2016 13:01:52 +0000
parents f22a6240fb51
children a411eb98f2b3
files analysis/analysis.js
diffstat 1 files changed, 12 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/analysis/analysis.js	Thu Mar 24 12:29:39 2016 +0000
+++ b/analysis/analysis.js	Thu Mar 24 13:01:52 2016 +0000
@@ -18,11 +18,19 @@
     return mean;
 }
 
-function percentile(values, n) {
+function percentile(values, p) {
+    //http://web.stanford.edu/class/archive/anthsci/anthsci192/anthsci192.1064/handouts/calculating%20percentiles.pdf
     values.sort( function(a,b) {return a - b;} );
     // get ordinal rank
-    var rank = Math.min(Math.floor(values.length*n/100), values.length-1);
-    return values[rank];
+    var index = values.length*p/100;
+    var k = Math.floor(index);
+    if (k == index) {
+        return values[k];
+    } else {
+        var f = index-k;
+        var x_int = (1-f)*values[k]+f*values[k+1];
+        return x_int;
+    }
 }
 
 function arrayMin(array) {
@@ -50,7 +58,7 @@
 function boxplotRow(array) {
     // Take an array of element values and return array of computed intervals
     var result = {
-        median : percentile(array,50),
+        median : arrayMean(array),
         pct25 : percentile(array,25),
         pct75 : percentile(array,75),
         IQR : null,