comparison analysis/analysis.js @ 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 227ca4d00ab1
children 6c819878ac85
comparison
equal deleted inserted replaced
1274:f22a6240fb51 1275:b4a0244bf5ed
16 } 16 }
17 mean /= values.length; 17 mean /= values.length;
18 return mean; 18 return mean;
19 } 19 }
20 20
21 function percentile(values, n) { 21 function percentile(values, p) {
22 //http://web.stanford.edu/class/archive/anthsci/anthsci192/anthsci192.1064/handouts/calculating%20percentiles.pdf
22 values.sort( function(a,b) {return a - b;} ); 23 values.sort( function(a,b) {return a - b;} );
23 // get ordinal rank 24 // get ordinal rank
24 var rank = Math.min(Math.floor(values.length*n/100), values.length-1); 25 var index = values.length*p/100;
25 return values[rank]; 26 var k = Math.floor(index);
27 if (k == index) {
28 return values[k];
29 } else {
30 var f = index-k;
31 var x_int = (1-f)*values[k]+f*values[k+1];
32 return x_int;
33 }
26 } 34 }
27 35
28 function arrayMin(array) { 36 function arrayMin(array) {
29 // Return the minimum value of an array 37 // Return the minimum value of an array
30 var min = array[0]; 38 var min = array[0];
48 } 56 }
49 57
50 function boxplotRow(array) { 58 function boxplotRow(array) {
51 // Take an array of element values and return array of computed intervals 59 // Take an array of element values and return array of computed intervals
52 var result = { 60 var result = {
53 median : percentile(array,50), 61 median : arrayMean(array),
54 pct25 : percentile(array,25), 62 pct25 : percentile(array,25),
55 pct75 : percentile(array,75), 63 pct75 : percentile(array,75),
56 IQR : null, 64 IQR : null,
57 min: null, 65 min: null,
58 max: null, 66 max: null,