我正在尝试使用第一个和第三个四分位数查找异常值。这是我目前拥有的:
$data = Data::select('created_at', 'value')
->get();
$median = collect($data)->median("value");
您可以像这样创建一个私有函数:
function Quartile($Array, $Quartile) {
sort($Array);
$pos = (count($Array) - 1) * $Quartile;
$base = floor($pos);
$rest = $pos - $base;
if( isset($Array[$base+1]) ) {
return $Array[$base] + $rest * ($Array[$base+1] - $Array[$base]);
} else {
return $Array[$base];
}
}
function Average($Array) {
return array_sum($Array) / count($Array);
}
function StdDev($Array) {
if( count($Array) < 2 ) {
return;
}
$avg = Average($Array);
$sum = 0;
foreach($Array as $value) {
$sum += pow($value - $avg, 2);
}
return sqrt((1 / (count($Array) - 1)) * $sum);
}
然后,你可以调用Quartile()
方法取决于你想要哪个四分位数,如果你想要第一个四分位数,那么把0.25
as$Quartile
的参数值,对于第三个四分位数,它的0.75
。