public static function kdeMode(array $population, $space = 512, $bandwidth = null)
{
if (count($population) === 1) {
return current($population);
}
if (count($population) === 0) {
return 0;
}
if (min($population) == max($population)) {
return min($population);
}
$kde = new Kde($population, $bandwidth);
$space = self::linspace(min($population), max($population), $space, true);
$dist = $kde->evaluate($space);
$maxKeys = array_keys($dist, max($dist));
$modes = [];
foreach ($maxKeys as $maxKey) {
$modes[] = $space[$maxKey];
}
$mode = array_sum($modes) / count($modes);
return $mode;
}