/** * Calculate the kth q-quantile of a set of numbers in an array. * As per http://en.wikipedia.org/wiki/Quantile#Quantiles_of_a_population * Ex: Median is 1st 2-quantile * Ex: Upper quartile is 3rd 4-quantile * * @param array $array set of values. * @param number $k index of quantile. * @param number $q number of quantiles. * @return number kth q-quantile of values. */ public static function quantile($array, $k, $q) { if ($k == 0) { return Basic::min($array); } if ($k == $q) { return Basic::max($array); } sort($array); $index = count($array) * $k / $q; if (fmod($index, 1) == 0) { return 0.5 * $array[$index - 1] + 0.5 * $array[$index]; } return $array[floor($index)]; }