# HG changeset patch # User Nicholas Jillings # Date 1458824512 0 # Node ID a4c0d5025208ac3a6f5141c1a3a8eacd8655d9d0 # Parent 828d6b96af573925dc5efcc3f6cde404c88f3f7a Analysis: Percentile calculation interpolates. Use mean, not 50th percentile for box plot. diff -r 828d6b96af57 -r a4c0d5025208 analysis/analysis.js --- 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,