PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPで配列内の値の標準偏差を求めるプログラムの書き方

配列に含まれる複数の数値から標準偏差を算出したい場面は、統計処理やデータ分析においてよくあります。PHPでは、自作関数を用意することで簡単に標準偏差を計算できます。以下に具体的な実装例を示します。

サンプルコード

<?php
function std_deviation($my_arr)
{
    $no_element = count($my_arr);
    $var = 0.0;
    $avg = array_sum($my_arr)/$no_element;
    foreach($my_arr as $i)
    {
        $var += pow(($i - $avg), 2);
    }
    return (float)sqrt($var/$no_element);
}
$my_arr = array(67, 89, 93, 102, 4);
echo "The standard deviation of elements in the array is ";
print_r(std_deviation($my_arr));
?>

出力結果

The standard deviation of elements in the array is 35.423156268181

コードの解説

まず、std_deviationという名前の関数を定義します。この関数内部では、count()関数を使って配列の要素数を取得し、分散(variance)を格納する変数を0.0で初期化しています。

次に、平均値を「配列の合計値 ÷ 要素数」という式で求めます。array_sum()関数を利用すれば、配列内の全要素の合計を一行で取得できるため、コードがすっきりします。

続いて、foreachループで配列の各要素を順番に取り出しながら、「(各要素 − 平均値)の2乗」を累積していくことで分散を計算します。この操作により、平均からのばらつきの大きさを数値化できます。

foreachループがすべての要素に対して完了した時点で、累積した値を要素数で割り、sqrt()関数で平方根を求めます。これが母標準偏差となり、戻り値は(float)でキャストされて浮動小数点数として返されます。

関数の外側では、5つの数値を含む配列を定義し、それを引数としてstd_deviation関数を呼び出します。最後にprint_r()によって計算結果がコンソールに出力されます。

補足:母標準偏差と標本標準偏差の違い

上記のコードは、分散を要素数 N で割る「母標準偏差」を実装したものです。一方、統計学の分野では、サンプルデータから全体の傾向を推定する際に、N − 1 で割る「標本標準偏差(不偏標準偏差)」が使われることが一般的です。用途に応じて割る数を調整してください。

また、PECLのstats拡張モジュールがインストールされている環境であれば、標準関数のstats_standard_deviation()を利用する方法もあります。サーバー環境に合わせて、自前実装と組み込み関数を使い分けると良いでしょう。

  1. C#で配列内の重複を検出する方法:Dictionaryを使った効率的なプログラム

    C#では、Dictionaryを活用することで、配列内に重複した要素が含まれているかどうかを効率的に確認できます。各要素の出現回数を記録し、2回以上登場する要素があれば重複が存在すると判断します。ここでは、その具体的な実装手順を解説します。 手順1:配列の設定 まず、確認対象となる配列を用意します。 int[] arr = {    89,    12,    56,    89, }; 手順2:Dictionaryの作成 次に、要素の出現回数を記録するための新しいDic

  2. C#プログラムで配列内のK番目に小さい要素を見つける方法

    はじめにC#では、配列を昇順に並べ替えてからインデックスを指定するだけで、K番目に小さい要素を簡単に求められます。本記事では、Array.Sort()メソッドを使った基本的な実装方法を、サンプルコード付きでわかりやすく解説します。ステップ1:配列を宣言するまず、対象となる整数型の配列を宣言します。int[] a = new int[] { 65, 45, 32, 97, 23, 75, 59 };ステップ2:配列をソートするここでは5番目に小さい整数を求めるものとします。まずArray.Sort()メソッドを使って配列を昇順に並べ替えます