2

このJSON配列があるとしましょう

$json = '[["1258765200","12350"],["1259370000","13000"],["1259974800","11840"],["1260579600","16359"],["1261184400","14230"],["1261789200","07406"],["1262394000","12846"],["1262998800","11204"],["1263603600","10234"]]';

最初の値はタイムスタンプで、2 番目の値は値です。各値が PHP の中央値の 1 標準偏差 (95%) の外にあるかどうかを計算する方法

4

2 に答える 2

2

これがあなたが望むものかどうかわからない

$json = '[["1258765200","12350"],["1259370000","13000"],["1259974800","11840"],["1260579600","16359"],["1261184400","14230"],["1261789200","07406"],["1262394000","12846"],["1262998800","11204"],["1263603600","10234"]]';
$json = json_decode ( $json, true );
$values = array ();
foreach ( $json as $value ) {
    $values [] = $value [1]; // Get Values
}

$median = median ( $values );
$sd = stddev ( $values );
$percentage = ($sd / $median) * 100;
$benchmark = 95 / 100;

if($percentage > $benchmark)
{

    echo "outside 1 standard deviation (95%)";
}

出力

outside 1 standard deviation (95%)

機能

function stddev($array) {
    $n = 0;
    $mean = 0;
    $M2 = 0;
    foreach ( $array as $x ) {
        $n ++;
        $delta = $x - $mean;
        $mean = $mean + $delta / $n;
        $M2 = $M2 + $delta * ($x - $mean);
    }
    $variance = $M2 / ($n - 1);
    return sqrt ( $variance );
}

function median($arr) {
    sort($arr);
    $count = count($arr); //total numbers in array
    $middleval = floor(($count-1)/2); // find the middle value, or the lowest middle value
    if($count % 2) { // odd number, middle is the median
        $median = $arr[$middleval];
    } else { // even number, calculate avg of 2 medians
        $low = $arr[$middleval];
        $high = $arr[$middleval+1];
        $median = (($low+$high)/2);
    }
    return $median;
}
于 2012-04-24T23:53:26.187 に答える
0

ババは私を打ちのめしましたが、これは私が標準偏差を計算するために使用したアルゴリズムでした。当初、このStatisticsモジュールは有望に見えましたが、PHP の標準ではないようです。

function php_standard_dev($data)
{
    $n = 0;
    $sum = 0;
    $sum_squared = 0;

    foreach ($data as $x)
    {
        $n += 1;
        $sum += $x;
        $sum_squared += $x*$x;
    }

    $mean = $sum / $n;
    $variance = ($sum_squared - $sum * $mean)/($n - 1);
    return sqrt($variance);
}

95% を超えるしきい値を取得するには、中央値 + 標準偏差の 2 倍を取得します。しきい値を超える値は、サンプル サイズの 95% を超えています。

于 2012-04-24T23:57:26.527 に答える