Name: Anonymous 2010-01-17 23:46
:3
<?php
$input = '151, 145, 130, 152, 150, 158, 155, 172, 172, 156, 160, 134, 157';
$dataset = preg_split('/[^0-9-.]/', $input, -1, PREG_SPLIT_NO_EMPTY);
sort($dataset);
$v['ordered_list'] = implode($dataset, ' ');
$v['count'] = count($dataset);
$v['mean'] = array_sum($dataset) / $v['count'];
$mid_key = $v['count'] / 2;
if($v['count'] & 1)
{
$v['median'] = ($dataset[$mid_key] + $dataset[$mid_key + 1]) / 2;
}
else
{
$v['median'] = $dataset[$mid_key];
}
$v['third_quartile'] = $dataset[(3 * $v['count'] + 3) / 4];
$v['first_quartile'] = $dataset[($v['count'] + 1) / 4];
$v['iqr'] = $v['third_quartile'] - $v['first_quartile'];
$v['outlier_min'] = $v['first_quartile'] - ($v['iqr'] * 1.5);
$v['outlier_max'] = $v['third_quartile'] + ($v['iqr'] * 1.5);
$v['num_outliers'] = 0;
$sd_sum = 0;
foreach($dataset as $value)
{
if($value < $v['outlier_min'] || $value > $v['outlier_max'])
{
$v['num_outliers']++;
}
$sd_sum += pow($value - $v['mean'], 2);
}
$v['variance'] = $sd_sum / $v['count'];
$v['standard_deviation'] = sqrt($v['variance']);
foreach($v as $name => $value)
{
echo '<div><strong>' . $name . '</strong>: ' . $value . '</div>';
}
?>