19

PHPを使用してZスコアを計算しようとしています。基本的に、私はデータセット(PHP配列)の平均と標準偏差を計算するための最も効率的な方法を探しています。PHPでこれを行う方法に関する提案はありますか?

私はこれを最小のステップ数で実行しようとしています。

4

5 に答える 5

34

あなたができる平均を計算するには:

$mean = array_sum($array)/count($array)

標準偏差は次のようになります。

// Function to calculate square of value - mean
function sd_square($x, $mean) { return pow($x - $mean,2); }

// Function to calculate standard deviation (uses sd_square)    
function sd($array) {
    // square root of sum of squares devided by N-1
    return sqrt(array_sum(array_map("sd_square", $array, array_fill(0,count($array), (array_sum($array) / count($array)) ) ) ) / (count($array)-1) );
}

このページからすぐに

于 2011-03-25T15:37:09.637 に答える
14

stats_standard_deviationstats_harmonic_meanのような組み込みの統計パッケージを使用するのはどうですか。標準的な手段の関数は見つかりませんが、統計について何か知っていれば、組み込みの関数を使って何かを理解できると思います。

于 2011-03-25T15:41:46.950 に答える
5
   function standard_deviation($aValues)
{
    $fMean = array_sum($aValues) / count($aValues);
    //print_r($fMean);
    $fVariance = 0.0;
    foreach ($aValues as $i)
    {
        $fVariance += pow($i - $fMean, 2);

    }       
    $size = count($aValues) - 1;
    return (float) sqrt($fVariance)/sqrt($size);
}
于 2013-03-18T12:47:28.523 に答える
0

これは、トップアンサーで言及されているphpページのstd devコードと同じですが、1行の配列マジックと個別のヘルパー関数を使用せずに少し近代化されています。

/**
 * Calculates the standard deviation of an array of numbers.
 * @param   array   $array  The array of numbers to calculate the standard deviation of.
 * @return  float   The standard deviation of the numbers in the given array.
 */
function calculateStdDev(array $array): float
{
    $size = count($array);
    $mean = array_sum($array) / $size;
    $squares = array_map(function ($x) use ($mean) {
        return pow($x - $mean, 2);
    }, $array);

    return sqrt(array_sum($squares) / ($size - 1));
}
于 2019-08-28T13:57:14.337 に答える
-1

トピックはかなり古いですが、実際には、次のような関数を使用して、ExcelからSTDEV.P関数の代替を簡単に取得できると思います。

function stdev_p($arr) {
    $arr2 = array();
    $mean = array_sum($arr)/count($arr);
    for ($x = 0; $x <count($arr); $x++) {
        $arr2[$x] = pow($arr[$x] - $mean,2);
    }
    return sqrt(array_sum($arr2)/count($arr));
}
于 2020-10-07T12:40:23.327 に答える