Ok supponiamo che avete i vostri punti di dati in un array in questo modo:
<?php $dataset = array(20.50, 80.30, 70.95, 15.25, 99.97, 85.56, 69.77); ?>
Quindi è possibile utilizzare la seguente funzione (vedi commenti per ciò che sta accadendo) per rimuovere tutti i numeri che non rientrano della media +/- tempi deviazione standard di magnitudo si imposta (default 1):
<?php
function remove_outliers($dataset, $magnitude = 1) {
$count = count($dataset);
$mean = array_sum($dataset)/$count; // Calculate the mean
$deviation = sqrt(array_sum(array_map("sd_square", $dataset, array_fill(0, $count, $mean)))/$count) * $magnitude; // Calculate standard deviation and times by magnitude
return array_filter($dataset, function($x) use ($mean, $deviation) { return ($x <= $mean + $deviation && $x >= $mean - $deviation); }); // Return filtered array of values that lie within $mean +- $deviation.
}
function sd_square($x, $mean) {
return pow($x - $mean, 2);
}
?>
per esempio, questa funzione restituisce il seguente con una magnitudo di 1:
Array
(
[1] => 80.3
[2] => 70.95
[5] => 85.56
[6] => 69.77
)
fonte
2013-03-02 14:02:56
Valore anomalo in base a cosa? – dynamic
forse con estensione matematica: [http://www.php.net/manual/en/book.stats.php](http://www.php.net/manual/en/book.stats.php) – bitWorking
@ llnk basato sui numeri nel risultato dato. Da quello che ho capito, i valori anomali si baserebbero sui quartili interno ed esterno ... ma poi di nuovo ammetto che non sono bravo in matematica statistica. – eComEvo